CREATE TABLE IF NOT EXISTS threads ( thread_id TEXT PRIMARY KEY, run_id TEXT NOT NULL, task_id TEXT NOT NULL, subject TEXT NOT NULL, created_by TEXT NOT NULL, assigned_to TEXT NOT NULL, status TEXT NOT NULL, priority TEXT NOT NULL DEFAULT 'normal', latest_message_id TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS messages ( message_id TEXT PRIMARY KEY, thread_id TEXT NOT NULL, from_agent TEXT NOT NULL, to_agent TEXT NOT NULL, kind TEXT NOT NULL, summary TEXT NOT NULL, body TEXT NOT NULL DEFAULT '', payload_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL, FOREIGN KEY(thread_id) REFERENCES threads(thread_id) ); CREATE TABLE IF NOT EXISTS leases ( thread_id TEXT PRIMARY KEY, agent_id TEXT NOT NULL, lease_token TEXT NOT NULL, claimed_at TEXT NOT NULL, expires_at TEXT NOT NULL, released_at TEXT ); CREATE TABLE IF NOT EXISTS artifacts ( artifact_id TEXT PRIMARY KEY, message_id TEXT NOT NULL, path TEXT NOT NULL, kind TEXT NOT NULL, metadata_json TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL, FOREIGN KEY(message_id) REFERENCES messages(message_id) ); CREATE INDEX IF NOT EXISTS idx_threads_status_assigned ON threads(status, assigned_to, updated_at); CREATE INDEX IF NOT EXISTS idx_messages_thread_created ON messages(thread_id, created_at);