Spaces:
Running
Running
| -- S359 — Agent task persistence across backend restarts | |
| -- Run once in the Supabase SQL editor (Dashboard → SQL Editor → New query). | |
| -- All statements are idempotent (IF NOT EXISTS / OR IGNORE). | |
| -- ── agent_tasks ─────────────────────────────────────────────────────────────── | |
| -- Stores metadata for every agent task. Survives HuggingFace Space sleep/restart. | |
| CREATE TABLE IF NOT EXISTS agent_tasks ( | |
| task_id TEXT PRIMARY KEY, | |
| goal TEXT NOT NULL, | |
| status TEXT NOT NULL DEFAULT 'QUEUED', | |
| max_steps INTEGER NOT NULL DEFAULT 8, | |
| context TEXT NOT NULL DEFAULT '[]', -- JSON array, truncated to 8 KB | |
| created_at BIGINT NOT NULL DEFAULT 0, | |
| updated_at BIGINT NOT NULL DEFAULT 0 | |
| ); | |
| -- ── agent_task_events ───────────────────────────────────────────────────────── | |
| -- Stores the SSE event buffer per task (max 500 events, see persistence.py). | |
| -- On reconnect after restart the backend replays these to the client. | |
| CREATE TABLE IF NOT EXISTS agent_task_events ( | |
| id BIGSERIAL PRIMARY KEY, | |
| task_id TEXT NOT NULL REFERENCES agent_tasks(task_id) ON DELETE CASCADE, | |
| event_index INTEGER NOT NULL, | |
| event_data TEXT NOT NULL, | |
| created_at BIGINT NOT NULL DEFAULT 0, | |
| UNIQUE (task_id, event_index) | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_agent_task_events_lookup | |
| ON agent_task_events (task_id, event_index ASC); | |
| -- ── Row-Level Security (optional but recommended) ───────────────────────────── | |
| -- If your project uses RLS, enable it and add policies as needed. | |
| -- ALTER TABLE agent_tasks ENABLE ROW LEVEL SECURITY; | |
| -- ALTER TABLE agent_task_events ENABLE ROW LEVEL SECURITY; | |
| -- Example (service-role only): | |
| -- CREATE POLICY "service only" ON agent_tasks FOR ALL USING (auth.role() = 'service_role'); | |
| -- CREATE POLICY "service only" ON agent_task_events FOR ALL USING (auth.role() = 'service_role'); | |
| -- ── Cleanup function (optional) ─────────────────────────────────────────────── | |
| -- Deletes tasks + events older than 7 days. Schedule via pg_cron or call manually. | |
| CREATE OR REPLACE FUNCTION purge_old_agent_tasks() RETURNS void | |
| LANGUAGE plpgsql AS $$ | |
| DECLARE | |
| cutoff BIGINT := (EXTRACT(EPOCH FROM NOW()) * 1000 - 7 * 86400000)::BIGINT; | |
| BEGIN | |
| DELETE FROM agent_tasks WHERE updated_at < cutoff; | |
| END; | |
| $$; | |