-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
139 lines (122 loc) · 4.24 KB
/
schema.sql
File metadata and controls
139 lines (122 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
-- CLEAN_ROOM_SPEC.md §4.3 (canonical DDL)
PRAGMA journal_mode = WAL;
CREATE TABLE IF NOT EXISTS schema_meta (
key TEXT PRIMARY KEY,
value TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS conversations (
id TEXT PRIMARY KEY,
project_dir TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
last_active TEXT NOT NULL DEFAULT (datetime('now')),
phase TEXT NOT NULL DEFAULT 'idle'
);
CREATE TABLE IF NOT EXISTS sessions (
session_id TEXT PRIMARY KEY,
conversation_id TEXT NOT NULL REFERENCES conversations(id),
started_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS state (
conversation_id TEXT NOT NULL,
key TEXT NOT NULL,
value TEXT,
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
PRIMARY KEY (conversation_id, key)
);
CREATE TABLE IF NOT EXISTS plans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
conversation_id TEXT NOT NULL,
file_path TEXT,
content TEXT NOT NULL,
hash TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'draft',
created_at TEXT NOT NULL DEFAULT (datetime('now')),
approved_at TEXT,
completed_at TEXT
);
CREATE TABLE IF NOT EXISTS summaries (
conversation_id TEXT PRIMARY KEY REFERENCES conversations(id),
content TEXT NOT NULL,
word_count INTEGER NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
conversation_id TEXT NOT NULL,
session_id TEXT,
timestamp TEXT NOT NULL DEFAULT (datetime('now')),
event_type TEXT NOT NULL,
detail TEXT
);
CREATE TABLE IF NOT EXISTS task_ratings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
conversation_id TEXT NOT NULL,
rating INTEGER NOT NULL,
objective TEXT,
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS memories (
id TEXT PRIMARY KEY,
type TEXT NOT NULL,
title TEXT NOT NULL,
content TEXT,
keywords TEXT,
anticipated_queries TEXT,
concept_tags TEXT,
project_scope TEXT,
correction_count INTEGER DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
last_accessed INTEGER,
access_count INTEGER DEFAULT 0,
attention_score REAL DEFAULT 0.5
);
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
title, content, keywords, anticipated_queries,
tokenize='porter unicode61'
);
CREATE TABLE IF NOT EXISTS transcript_entries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL REFERENCES sessions(session_id),
sequence INTEGER NOT NULL,
parent_entry_id INTEGER REFERENCES transcript_entries(id),
entry_type TEXT NOT NULL,
payload_json TEXT NOT NULL,
tool_use_id TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
UNIQUE(session_id, sequence)
);
CREATE INDEX IF NOT EXISTS idx_transcript_session ON transcript_entries(session_id, sequence);
CREATE TABLE IF NOT EXISTS hook_invocations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
conversation_id TEXT NOT NULL,
hook_event TEXT NOT NULL,
hook_ordinal INTEGER NOT NULL,
matcher TEXT NOT NULL,
command TEXT NOT NULL,
tool_use_id TEXT,
tool_name TEXT,
input_json TEXT NOT NULL,
exit_code INTEGER,
stdout_text TEXT,
stderr_text TEXT,
started_at TEXT NOT NULL,
completed_at TEXT,
skipped_reason TEXT
);
CREATE INDEX IF NOT EXISTS idx_hook_inv_session ON hook_invocations(session_id, hook_ordinal);
CREATE TABLE IF NOT EXISTS tool_permission_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL,
tool_use_id TEXT NOT NULL,
tool_name TEXT NOT NULL,
decision TEXT NOT NULL,
reason_json TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS settings_snapshot (
scope TEXT PRIMARY KEY,
json TEXT NOT NULL,
updated_at TEXT NOT NULL
);