diff --git a/migrations/000001_init_schema.down.sql b/migrations/000001_init_schema.down.sql index bbbded26..48f3dfda 100644 --- a/migrations/000001_init_schema.down.sql +++ b/migrations/000001_init_schema.down.sql @@ -1,6 +1,9 @@ -- Reverse of 000001_init_schema.up.sql -- Drop in reverse dependency order +-- 14. Group File Writers +DROP TABLE IF EXISTS group_file_writers CASCADE; + -- 13. Config Secrets DROP TABLE IF EXISTS config_secrets CASCADE; diff --git a/migrations/000001_init_schema.up.sql b/migrations/000001_init_schema.up.sql index ddccd55b..849a64f4 100644 --- a/migrations/000001_init_schema.up.sql +++ b/migrations/000001_init_schema.up.sql @@ -89,6 +89,7 @@ CREATE TABLE agent_context_files ( agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE, file_name VARCHAR(255) NOT NULL, content TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(agent_id, file_name) ); @@ -99,6 +100,7 @@ CREATE TABLE user_context_files ( user_id VARCHAR(255) NOT NULL, file_name VARCHAR(255) NOT NULL, content TEXT NOT NULL DEFAULT '', + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(agent_id, user_id, file_name) ); @@ -119,6 +121,8 @@ CREATE TABLE user_agent_overrides ( provider VARCHAR(50), model VARCHAR(200), settings JSONB NOT NULL DEFAULT '{}', + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW(), UNIQUE(agent_id, user_id) ); @@ -163,6 +167,7 @@ CREATE TABLE memory_documents ( path VARCHAR(500) NOT NULL, content TEXT NOT NULL DEFAULT '', hash VARCHAR(64) NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); @@ -182,6 +187,7 @@ CREATE TABLE memory_chunks ( embedding vector(1536), tsv tsvector GENERATED ALWAYS AS (to_tsvector('simple', text)) STORED, -- NOTE: 'simple' config (no stemming) works correctly for Vietnamese and other non-English languages + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); @@ -197,6 +203,7 @@ CREATE TABLE embedding_cache ( model VARCHAR(200) NOT NULL, embedding vector(1536), dims INT NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW(), PRIMARY KEY (hash, provider, model) ); @@ -260,10 +267,12 @@ CREATE INDEX idx_skill_user_grants_user ON skill_user_grants(user_id); CREATE TABLE cron_jobs ( id UUID PRIMARY KEY DEFAULT uuid_generate_v7(), agent_id UUID REFERENCES agents(id), + user_id TEXT, name VARCHAR(255) NOT NULL, enabled BOOLEAN NOT NULL DEFAULT true, schedule_kind VARCHAR(10) NOT NULL, cron_expression VARCHAR(100), + interval_ms BIGINT, run_at TIMESTAMPTZ, timezone VARCHAR(50), payload JSONB NOT NULL, @@ -276,6 +285,9 @@ CREATE TABLE cron_jobs ( updated_at TIMESTAMPTZ DEFAULT NOW() ); +CREATE INDEX idx_cron_jobs_user_id ON cron_jobs(user_id); +CREATE INDEX idx_cron_jobs_agent_user ON cron_jobs(agent_id, user_id); + CREATE TABLE cron_run_logs ( id UUID PRIMARY KEY DEFAULT uuid_generate_v7(), job_id UUID NOT NULL REFERENCES cron_jobs(id) ON DELETE CASCADE, @@ -286,7 +298,8 @@ CREATE TABLE cron_run_logs ( duration_ms INT, input_tokens INT DEFAULT 0, output_tokens INT DEFAULT 0, - ran_at TIMESTAMPTZ DEFAULT NOW() + ran_at TIMESTAMPTZ DEFAULT NOW(), + created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX idx_cron_run_logs_job ON cron_run_logs(job_id, ran_at DESC); @@ -513,5 +526,20 @@ CREATE INDEX idx_channel_instances_agent ON channel_instances(agent_id); CREATE TABLE config_secrets ( key VARCHAR(100) PRIMARY KEY, value BYTEA NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), updated_at TIMESTAMPTZ DEFAULT NOW() ); + +-- ============================================================ +-- 14. Group File Writers (Telegram group write permissions) +-- ============================================================ + +CREATE TABLE group_file_writers ( + agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE, + group_id VARCHAR(255) NOT NULL, + user_id VARCHAR(255) NOT NULL, + display_name VARCHAR(255), + username VARCHAR(255), + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + PRIMARY KEY (agent_id, group_id, user_id) +); diff --git a/migrations/000002_group_file_writers.down.sql b/migrations/000002_group_file_writers.down.sql deleted file mode 100644 index 2c01092a..00000000 --- a/migrations/000002_group_file_writers.down.sql +++ /dev/null @@ -1 +0,0 @@ -DROP TABLE IF EXISTS group_file_writers; diff --git a/migrations/000002_group_file_writers.up.sql b/migrations/000002_group_file_writers.up.sql deleted file mode 100644 index 468dcec6..00000000 --- a/migrations/000002_group_file_writers.up.sql +++ /dev/null @@ -1,9 +0,0 @@ -CREATE TABLE group_file_writers ( - agent_id UUID NOT NULL REFERENCES agents(id) ON DELETE CASCADE, - group_id VARCHAR(255) NOT NULL, - user_id VARCHAR(255) NOT NULL, - display_name VARCHAR(255), - username VARCHAR(255), - created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - PRIMARY KEY (agent_id, group_id, user_id) -); diff --git a/migrations/000003_cron_jobs_user_id.down.sql b/migrations/000003_cron_jobs_user_id.down.sql deleted file mode 100644 index 1845efbe..00000000 --- a/migrations/000003_cron_jobs_user_id.down.sql +++ /dev/null @@ -1,4 +0,0 @@ -DROP INDEX IF EXISTS idx_cron_jobs_agent_user; -DROP INDEX IF EXISTS idx_cron_jobs_user_id; -ALTER TABLE cron_jobs DROP COLUMN IF EXISTS interval_ms; -ALTER TABLE cron_jobs DROP COLUMN IF EXISTS user_id; diff --git a/migrations/000003_cron_jobs_user_id.up.sql b/migrations/000003_cron_jobs_user_id.up.sql deleted file mode 100644 index e454ec74..00000000 --- a/migrations/000003_cron_jobs_user_id.up.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE cron_jobs ADD COLUMN IF NOT EXISTS user_id TEXT; -ALTER TABLE cron_jobs ADD COLUMN IF NOT EXISTS interval_ms BIGINT; -CREATE INDEX IF NOT EXISTS idx_cron_jobs_user_id ON cron_jobs (user_id); -CREATE INDEX IF NOT EXISTS idx_cron_jobs_agent_user ON cron_jobs (agent_id, user_id); diff --git a/migrations/000004_add_created_at.down.sql b/migrations/000004_add_created_at.down.sql deleted file mode 100644 index 46616267..00000000 --- a/migrations/000004_add_created_at.down.sql +++ /dev/null @@ -1,9 +0,0 @@ -ALTER TABLE agent_context_files DROP COLUMN IF EXISTS created_at; -ALTER TABLE config_secrets DROP COLUMN IF EXISTS created_at; -ALTER TABLE cron_run_logs DROP COLUMN IF EXISTS created_at; -ALTER TABLE embedding_cache DROP COLUMN IF EXISTS created_at; -ALTER TABLE memory_chunks DROP COLUMN IF EXISTS created_at; -ALTER TABLE memory_documents DROP COLUMN IF EXISTS created_at; -ALTER TABLE user_context_files DROP COLUMN IF EXISTS created_at; -ALTER TABLE user_agent_overrides DROP COLUMN IF EXISTS created_at; -ALTER TABLE user_agent_overrides DROP COLUMN IF EXISTS updated_at; diff --git a/migrations/000004_add_created_at.up.sql b/migrations/000004_add_created_at.up.sql deleted file mode 100644 index 6074cb5b..00000000 --- a/migrations/000004_add_created_at.up.sql +++ /dev/null @@ -1,12 +0,0 @@ --- Add created_at to tables that only have updated_at (or no timestamp at all). --- Existing rows get NOW() as default (close enough for backfill). - -ALTER TABLE agent_context_files ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE config_secrets ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE cron_run_logs ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE embedding_cache ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE memory_chunks ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE memory_documents ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE user_context_files ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE user_agent_overrides ADD COLUMN created_at TIMESTAMPTZ DEFAULT NOW(); -ALTER TABLE user_agent_overrides ADD COLUMN updated_at TIMESTAMPTZ DEFAULT NOW();