Files
codex/codex-rs/state/migrations/0010_memory_workflow_v2.sql
jif-oai 1d5eba0090 feat: align memory phase 1 and make it stronger (#11300)
## Align with the new phase-1 design

Basically we know run phase 1 in parallel by considering:
* Max 64 rollouts
* Max 1 month old
* Consider the most recent first

This PR also adds stronger parallelization capabilities by detecting
stale jobs, retry policies, ownership of computation to prevent double
computations etc etc
2026-02-10 13:42:09 +00:00

86 lines
2.6 KiB
SQL

DROP TABLE IF EXISTS thread_memory;
DROP TABLE IF EXISTS memory_consolidation_locks;
DROP TABLE IF EXISTS memory_phase1_jobs;
DROP TABLE IF EXISTS memory_scope_dirty;
DROP TABLE IF EXISTS memory_phase2_jobs;
CREATE TABLE thread_memory (
thread_id TEXT NOT NULL,
scope_kind TEXT NOT NULL,
scope_key TEXT NOT NULL,
raw_memory TEXT NOT NULL,
memory_summary TEXT NOT NULL,
updated_at INTEGER NOT NULL,
last_used_at INTEGER,
used_count INTEGER NOT NULL DEFAULT 0,
invalidated_at INTEGER,
invalid_reason TEXT,
PRIMARY KEY (thread_id, scope_kind, scope_key),
FOREIGN KEY(thread_id) REFERENCES threads(id) ON DELETE CASCADE
);
CREATE INDEX idx_thread_memory_scope_last_used_at
ON thread_memory(scope_kind, scope_key, last_used_at DESC, thread_id DESC);
CREATE INDEX idx_thread_memory_scope_updated_at
ON thread_memory(scope_kind, scope_key, updated_at DESC, thread_id DESC);
CREATE TABLE memory_phase1_jobs (
thread_id TEXT NOT NULL,
scope_kind TEXT NOT NULL,
scope_key TEXT NOT NULL,
status TEXT NOT NULL,
owner_session_id TEXT,
started_at INTEGER,
finished_at INTEGER,
failure_reason TEXT,
source_updated_at INTEGER NOT NULL,
raw_memory_path TEXT,
summary_hash TEXT,
ownership_token TEXT,
PRIMARY KEY (thread_id, scope_kind, scope_key),
FOREIGN KEY(thread_id) REFERENCES threads(id) ON DELETE CASCADE
);
CREATE INDEX idx_memory_phase1_jobs_status_started_at
ON memory_phase1_jobs(status, started_at DESC);
CREATE INDEX idx_memory_phase1_jobs_scope
ON memory_phase1_jobs(scope_kind, scope_key);
CREATE TABLE memory_scope_dirty (
scope_kind TEXT NOT NULL,
scope_key TEXT NOT NULL,
dirty INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
PRIMARY KEY (scope_kind, scope_key)
);
CREATE INDEX idx_memory_scope_dirty_dirty
ON memory_scope_dirty(dirty, updated_at DESC);
CREATE TABLE memory_phase2_jobs (
scope_kind TEXT NOT NULL,
scope_key TEXT NOT NULL,
status TEXT NOT NULL,
owner_session_id TEXT,
agent_thread_id TEXT,
started_at INTEGER,
last_heartbeat_at INTEGER,
finished_at INTEGER,
attempt INTEGER NOT NULL DEFAULT 0,
failure_reason TEXT,
ownership_token TEXT,
PRIMARY KEY (scope_kind, scope_key)
);
CREATE INDEX idx_memory_phase2_jobs_status_heartbeat
ON memory_phase2_jobs(status, last_heartbeat_at DESC);
CREATE TABLE memory_consolidation_locks (
cwd TEXT PRIMARY KEY,
working_thread_id TEXT NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX idx_memory_consolidation_locks_updated_at
ON memory_consolidation_locks(updated_at DESC);