Menu
popagent
publicLatest change 7f6c1d0ed24ffc264e50e9966eaf45024245ba71 - feat: add per-task agent communication by AkurAI Build
CREATE TABLE IF NOT EXISTS popagent_channel_settings (
singleton BOOLEAN PRIMARY KEY CHECK (singleton),
enabled BOOLEAN NOT NULL,
dispatch_mode TEXT NOT NULL CHECK (dispatch_mode IN ('every-message', 'mentions')),
context_messages INTEGER NOT NULL CHECK (context_messages BETWEEN 0 AND 100),
streaming BOOLEAN NOT NULL,
tool_display TEXT NOT NULL CHECK (tool_display IN ('compact', 'timeline')),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS popagent_channels (
id TEXT PRIMARY KEY,
name TEXT NOT NULL CHECK (name ~ '^#[a-z0-9][a-z0-9_-]{0,63}$'),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS popagent_channel_messages (
id TEXT PRIMARY KEY,
channel_id TEXT NOT NULL REFERENCES popagent_channels(id) ON DELETE CASCADE,
workspace_id TEXT NOT NULL,
author_id TEXT NOT NULL,
author_name TEXT NOT NULL,
content TEXT NOT NULL CHECK (char_length(content) BETWEEN 1 AND 8000),
task_id TEXT UNIQUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS popagent_channel_messages_channel_created_idx
ON popagent_channel_messages (channel_id, created_at DESC, id DESC);
CREATE TABLE IF NOT EXISTS popagent_data_migrations (
id TEXT PRIMARY KEY,
applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
DO $migration$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM popagent_data_migrations
WHERE id = '2026-08-14-native-channels-v1'
) THEN
INSERT INTO popagent_channel_settings
(singleton, enabled, dispatch_mode, context_messages, streaming, tool_display)
VALUES (TRUE, TRUE, 'every-message', 20, TRUE, 'timeline')
ON CONFLICT (singleton) DO NOTHING;
INSERT INTO popagent_channels (id, name)
VALUES ('general', '#general')
ON CONFLICT (id) DO NOTHING;
INSERT INTO popagent_data_migrations (id)
VALUES ('2026-08-14-native-channels-v1')
ON CONFLICT DO NOTHING;
END IF;
END
$migration$;
DO $migration$
BEGIN
PERFORM pg_advisory_xact_lock(hashtext('2026-08-16-task-agent-communication-v1'));
IF NOT EXISTS (
SELECT 1 FROM popagent_data_migrations
WHERE id = '2026-08-16-task-agent-communication-v1'
) THEN
ALTER TABLE popagent_channel_messages
ADD COLUMN communication_task_id TEXT,
ADD COLUMN communication_to_agent_id TEXT,
ADD COLUMN communication_to_agent_name TEXT,
ADD COLUMN reply_to_message_id TEXT;
ALTER TABLE popagent_channel_messages
ADD CONSTRAINT popagent_channel_messages_communication_shape
CHECK (
(communication_task_id IS NULL
AND communication_to_agent_id IS NULL
AND communication_to_agent_name IS NULL
AND reply_to_message_id IS NULL)
OR
(communication_task_id IS NOT NULL
AND communication_to_agent_id IS NOT NULL
AND communication_to_agent_name IS NOT NULL)
);
CREATE INDEX popagent_channel_messages_communication_task_idx
ON popagent_channel_messages (communication_task_id, created_at, id)
WHERE communication_task_id IS NOT NULL;
INSERT INTO popagent_data_migrations (id)
VALUES ('2026-08-16-task-agent-communication-v1');
END IF;
END
$migration$;
ALTER TABLE popagent_channel_settings ALTER COLUMN enabled DROP DEFAULT;
ALTER TABLE popagent_channel_settings ALTER COLUMN dispatch_mode DROP DEFAULT;
ALTER TABLE popagent_channel_settings ALTER COLUMN context_messages DROP DEFAULT;
ALTER TABLE popagent_channel_settings ALTER COLUMN streaming DROP DEFAULT;
ALTER TABLE popagent_channel_settings ALTER COLUMN tool_display DROP DEFAULT;