Files
codex/codex-rs/state/migrations/0049_projects.sql
Anton Panasenko 3b4569a920 Add experimental app-server project APIs (#38940)
## What changed

- Add SQLite-backed `project/list`, `project/read`, `project/create`,
  `project/import`, `project/update`, `project/move`, and `project/delete`
  endpoints with ordered roots, metadata, manual positioning, pagination, and
  idempotent creation.
- Add project assignment to thread start, metadata updates, list filtering,
  and fork inheritance. Project deletion clears assignments without deleting
  threads.
- Emit `project/changed` and `thread/project/updated` notifications after
  committed changes, and export the new protocol schemas and TypeScript types.

## Testing

- Cover project lifecycle and ordering, idempotency, atomic imports, cursor and
  filter validation, thread assignment, deletion, and fork inheritance.

GitOrigin-RevId: 47ae621be01ab8ef70a74a629fb29a5c5709ea33
2026-08-17 04:01:37 +00:00

31 lines
860 B
SQL

CREATE TABLE projects (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
metadata TEXT NOT NULL DEFAULT '{}',
position INTEGER NOT NULL,
created_at_ms INTEGER NOT NULL,
updated_at_ms INTEGER NOT NULL
);
CREATE TABLE project_roots (
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
position INTEGER NOT NULL,
path TEXT NOT NULL,
PRIMARY KEY (project_id, position)
);
CREATE TABLE project_idempotency_keys (
key TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
created_at_ms INTEGER NOT NULL
);
ALTER TABLE threads ADD COLUMN project_id TEXT
REFERENCES projects(id) ON DELETE SET NULL;
CREATE INDEX idx_projects_position
ON projects(position ASC, id ASC);
CREATE INDEX idx_threads_project_id
ON threads(project_id, archived, created_at_ms DESC, id DESC)
WHERE project_id IS NOT NULL;