91 lines
3.1 KiB
SQL
91 lines
3.1 KiB
SQL
-- ClaudeDo SQLite schema (single source of truth, 3NF)
|
|
-- Applied by Worker on first startup. WAL mode is set via PRAGMA after open.
|
|
|
|
PRAGMA foreign_keys = ON;
|
|
|
|
CREATE TABLE IF NOT EXISTS lists (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
created_at TIMESTAMP NOT NULL,
|
|
working_dir TEXT NULL,
|
|
default_commit_type TEXT NOT NULL DEFAULT 'chore'
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
id TEXT PRIMARY KEY,
|
|
list_id TEXT NOT NULL REFERENCES lists(id) ON DELETE CASCADE,
|
|
title TEXT NOT NULL,
|
|
description TEXT NULL,
|
|
status TEXT NOT NULL CHECK (status IN ('manual','queued','running','done','failed')),
|
|
scheduled_for TIMESTAMP NULL,
|
|
result TEXT NULL,
|
|
log_path TEXT NULL,
|
|
created_at TIMESTAMP NOT NULL,
|
|
started_at TIMESTAMP NULL,
|
|
finished_at TIMESTAMP NULL,
|
|
commit_type TEXT NOT NULL DEFAULT 'chore'
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_list_id ON tasks(list_id);
|
|
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
|
|
CREATE TABLE IF NOT EXISTS tags (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL UNIQUE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS list_tags (
|
|
list_id TEXT NOT NULL REFERENCES lists(id) ON DELETE CASCADE,
|
|
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (list_id, tag_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS task_tags (
|
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
tag_id INTEGER NOT NULL REFERENCES tags(id) ON DELETE CASCADE,
|
|
PRIMARY KEY (task_id, tag_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS list_config (
|
|
list_id TEXT PRIMARY KEY REFERENCES lists(id) ON DELETE CASCADE,
|
|
model TEXT NULL,
|
|
system_prompt TEXT NULL,
|
|
agent_path TEXT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS worktrees (
|
|
task_id TEXT PRIMARY KEY REFERENCES tasks(id) ON DELETE CASCADE,
|
|
path TEXT NOT NULL,
|
|
branch_name TEXT NOT NULL,
|
|
base_commit TEXT NOT NULL,
|
|
head_commit TEXT NULL,
|
|
diff_stat TEXT NULL,
|
|
state TEXT NOT NULL DEFAULT 'active' CHECK (state IN ('active','merged','discarded','kept')),
|
|
created_at TIMESTAMP NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS task_runs (
|
|
id TEXT PRIMARY KEY,
|
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
run_number INTEGER NOT NULL,
|
|
session_id TEXT NULL,
|
|
is_retry INTEGER NOT NULL DEFAULT 0,
|
|
prompt TEXT NOT NULL,
|
|
result_markdown TEXT NULL,
|
|
structured_output TEXT NULL,
|
|
error_markdown TEXT NULL,
|
|
exit_code INTEGER NULL,
|
|
turn_count INTEGER NULL,
|
|
tokens_in INTEGER NULL,
|
|
tokens_out INTEGER NULL,
|
|
log_path TEXT NULL,
|
|
started_at TIMESTAMP NULL,
|
|
finished_at TIMESTAMP NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_task_runs_task_id ON task_runs(task_id);
|
|
|
|
-- Seed: minimal tag set (ignored if already present)
|
|
INSERT OR IGNORE INTO tags (name) VALUES ('agent');
|
|
INSERT OR IGNORE INTO tags (name) VALUES ('manual');
|