-- muse.db 初版:运行、事件、人审、卡片与向量 blob。 PRAGMA foreign_keys=ON; CREATE TABLE IF NOT EXISTS schema_migrations ( version TEXT PRIMARY KEY, applied_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS runs ( id TEXT PRIMARY KEY, created_at TEXT NOT NULL, kind TEXT NOT NULL, input_json TEXT NOT NULL, output_text TEXT NOT NULL, meta_json TEXT NOT NULL, skill_set_hash TEXT NOT NULL, baseline_hash TEXT ); CREATE TABLE IF NOT EXISTS events ( run_id TEXT NOT NULL, seq INTEGER NOT NULL, kind TEXT NOT NULL, role TEXT, tool_name TEXT, payload_json TEXT NOT NULL, created_at TEXT NOT NULL, PRIMARY KEY (run_id, seq), FOREIGN KEY (run_id) REFERENCES runs(id) ); CREATE TABLE IF NOT EXISTS reviews ( id INTEGER PRIMARY KEY AUTOINCREMENT, run_id TEXT NOT NULL, target TEXT NOT NULL, action TEXT NOT NULL, reviewer TEXT NOT NULL, reason TEXT, created_at TEXT NOT NULL, FOREIGN KEY (run_id) REFERENCES runs(id), CHECK (action IN ('adopt', 'reject', 'revise')), CHECK (target IN ('candidate', 'lesson', 'chapter')), CHECK (length(reviewer) > 0) ); CREATE TABLE IF NOT EXISTS revisions ( id INTEGER PRIMARY KEY AUTOINCREMENT, review_id INTEGER NOT NULL, kind TEXT NOT NULL, before_text TEXT NOT NULL, after_text TEXT NOT NULL, created_at TEXT NOT NULL, FOREIGN KEY (review_id) REFERENCES reviews(id) ); CREATE TABLE IF NOT EXISTS cards ( id TEXT PRIMARY KEY, kind TEXT NOT NULL, title TEXT, payload_json TEXT NOT NULL, embedding BLOB, work_id INTEGER, source_path TEXT, content_hash TEXT, created_at TEXT NOT NULL ); CREATE INDEX IF NOT EXISTS idx_cards_kind ON cards(kind); CREATE INDEX IF NOT EXISTS idx_events_run ON events(run_id);