codepiper 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +28 -0
- package/CHANGELOG.md +10 -0
- package/LEGAL_NOTICE.md +39 -0
- package/LICENSE +21 -0
- package/README.md +524 -0
- package/package.json +90 -0
- package/packages/cli/package.json +13 -0
- package/packages/cli/src/commands/analytics.ts +157 -0
- package/packages/cli/src/commands/attach.ts +299 -0
- package/packages/cli/src/commands/audit.ts +50 -0
- package/packages/cli/src/commands/auth.ts +261 -0
- package/packages/cli/src/commands/daemon.ts +162 -0
- package/packages/cli/src/commands/doctor.ts +303 -0
- package/packages/cli/src/commands/env-set.ts +162 -0
- package/packages/cli/src/commands/hook-forward.ts +268 -0
- package/packages/cli/src/commands/keys.ts +77 -0
- package/packages/cli/src/commands/kill.ts +19 -0
- package/packages/cli/src/commands/logs.ts +419 -0
- package/packages/cli/src/commands/model.ts +172 -0
- package/packages/cli/src/commands/policy-set.ts +185 -0
- package/packages/cli/src/commands/policy.ts +227 -0
- package/packages/cli/src/commands/providers.ts +114 -0
- package/packages/cli/src/commands/resize.ts +34 -0
- package/packages/cli/src/commands/send.ts +184 -0
- package/packages/cli/src/commands/sessions.ts +202 -0
- package/packages/cli/src/commands/slash.ts +92 -0
- package/packages/cli/src/commands/start.ts +243 -0
- package/packages/cli/src/commands/stop.ts +19 -0
- package/packages/cli/src/commands/tail.ts +137 -0
- package/packages/cli/src/commands/workflow.ts +786 -0
- package/packages/cli/src/commands/workspace.ts +127 -0
- package/packages/cli/src/lib/api.ts +78 -0
- package/packages/cli/src/lib/args.ts +72 -0
- package/packages/cli/src/lib/format.ts +93 -0
- package/packages/cli/src/main.ts +563 -0
- package/packages/core/package.json +7 -0
- package/packages/core/src/config.ts +30 -0
- package/packages/core/src/errors.ts +38 -0
- package/packages/core/src/eventBus.ts +56 -0
- package/packages/core/src/eventBusAdapter.ts +143 -0
- package/packages/core/src/index.ts +10 -0
- package/packages/core/src/sqliteEventBus.ts +336 -0
- package/packages/core/src/types.ts +63 -0
- package/packages/daemon/package.json +11 -0
- package/packages/daemon/src/api/analyticsRoutes.ts +343 -0
- package/packages/daemon/src/api/authRoutes.ts +344 -0
- package/packages/daemon/src/api/bodyLimit.ts +133 -0
- package/packages/daemon/src/api/envSetRoutes.ts +170 -0
- package/packages/daemon/src/api/gitRoutes.ts +409 -0
- package/packages/daemon/src/api/hooks.ts +588 -0
- package/packages/daemon/src/api/inputPolicy.ts +249 -0
- package/packages/daemon/src/api/notificationRoutes.ts +532 -0
- package/packages/daemon/src/api/policyRoutes.ts +234 -0
- package/packages/daemon/src/api/policySetRoutes.ts +445 -0
- package/packages/daemon/src/api/routeUtils.ts +28 -0
- package/packages/daemon/src/api/routes.ts +1004 -0
- package/packages/daemon/src/api/server.ts +1388 -0
- package/packages/daemon/src/api/settingsRoutes.ts +367 -0
- package/packages/daemon/src/api/sqliteErrors.ts +47 -0
- package/packages/daemon/src/api/stt.ts +143 -0
- package/packages/daemon/src/api/terminalRoutes.ts +200 -0
- package/packages/daemon/src/api/validation.ts +287 -0
- package/packages/daemon/src/api/validationRoutes.ts +174 -0
- package/packages/daemon/src/api/workflowRoutes.ts +567 -0
- package/packages/daemon/src/api/workspaceRoutes.ts +151 -0
- package/packages/daemon/src/api/ws.ts +1588 -0
- package/packages/daemon/src/auth/apiRateLimiter.ts +73 -0
- package/packages/daemon/src/auth/authMiddleware.ts +305 -0
- package/packages/daemon/src/auth/authService.ts +496 -0
- package/packages/daemon/src/auth/rateLimiter.ts +137 -0
- package/packages/daemon/src/config/pricing.ts +79 -0
- package/packages/daemon/src/crypto/encryption.ts +196 -0
- package/packages/daemon/src/db/db.ts +2745 -0
- package/packages/daemon/src/db/index.ts +16 -0
- package/packages/daemon/src/db/migrations.ts +182 -0
- package/packages/daemon/src/db/policyDb.ts +349 -0
- package/packages/daemon/src/db/schema.sql +408 -0
- package/packages/daemon/src/db/workflowDb.ts +464 -0
- package/packages/daemon/src/git/gitUtils.ts +544 -0
- package/packages/daemon/src/index.ts +6 -0
- package/packages/daemon/src/main.ts +525 -0
- package/packages/daemon/src/notifications/pushNotifier.ts +369 -0
- package/packages/daemon/src/providers/codexAppServerScaffold.ts +49 -0
- package/packages/daemon/src/providers/registry.ts +111 -0
- package/packages/daemon/src/providers/types.ts +82 -0
- package/packages/daemon/src/sessions/auditLogger.ts +103 -0
- package/packages/daemon/src/sessions/policyEngine.ts +165 -0
- package/packages/daemon/src/sessions/policyMatcher.ts +114 -0
- package/packages/daemon/src/sessions/policyTypes.ts +94 -0
- package/packages/daemon/src/sessions/ptyProcess.ts +141 -0
- package/packages/daemon/src/sessions/sessionManager.ts +1770 -0
- package/packages/daemon/src/sessions/tmuxSession.ts +1073 -0
- package/packages/daemon/src/sessions/transcriptManager.ts +110 -0
- package/packages/daemon/src/sessions/transcriptParser.ts +149 -0
- package/packages/daemon/src/sessions/transcriptTailer.ts +214 -0
- package/packages/daemon/src/tracking/tokenTracker.ts +168 -0
- package/packages/daemon/src/workflows/contextManager.ts +83 -0
- package/packages/daemon/src/workflows/index.ts +31 -0
- package/packages/daemon/src/workflows/resultExtractor.ts +118 -0
- package/packages/daemon/src/workflows/waitConditionPoller.ts +131 -0
- package/packages/daemon/src/workflows/workflowParser.ts +217 -0
- package/packages/daemon/src/workflows/workflowRunner.ts +969 -0
- package/packages/daemon/src/workflows/workflowTypes.ts +188 -0
- package/packages/daemon/src/workflows/workflowValidator.ts +533 -0
- package/packages/providers/claude-code/package.json +11 -0
- package/packages/providers/claude-code/src/index.ts +7 -0
- package/packages/providers/claude-code/src/overlaySettings.ts +198 -0
- package/packages/providers/claude-code/src/provider.ts +311 -0
- package/packages/web/dist/android-chrome-192x192.png +0 -0
- package/packages/web/dist/android-chrome-512x512.png +0 -0
- package/packages/web/dist/apple-touch-icon.png +0 -0
- package/packages/web/dist/assets/AnalyticsPage-BIopKWRf.js +17 -0
- package/packages/web/dist/assets/PoliciesPage-CjdLN3dl.js +11 -0
- package/packages/web/dist/assets/SessionDetailPage-BtSA0V0M.js +179 -0
- package/packages/web/dist/assets/SettingsPage-Dbbz4Ca5.js +37 -0
- package/packages/web/dist/assets/WorkflowsPage-Dv6f3GgU.js +1 -0
- package/packages/web/dist/assets/chart-vendor-DlOHLaCG.js +49 -0
- package/packages/web/dist/assets/codicon-ngg6Pgfi.ttf +0 -0
- package/packages/web/dist/assets/css.worker-BvV5MPou.js +93 -0
- package/packages/web/dist/assets/editor.worker-CKy7Pnvo.js +26 -0
- package/packages/web/dist/assets/html.worker-BLJhxQJQ.js +470 -0
- package/packages/web/dist/assets/index-BbdhRfr2.css +1 -0
- package/packages/web/dist/assets/index-hgphORiw.js +204 -0
- package/packages/web/dist/assets/json.worker-usMZ-FED.js +58 -0
- package/packages/web/dist/assets/monaco-core-B_19GPAS.css +1 -0
- package/packages/web/dist/assets/monaco-core-DQ5Mk8AK.js +1234 -0
- package/packages/web/dist/assets/monaco-react-DfZNWvtW.js +11 -0
- package/packages/web/dist/assets/monacoSetup-DvBj52bT.js +1 -0
- package/packages/web/dist/assets/pencil-Dbczxz59.js +11 -0
- package/packages/web/dist/assets/react-vendor-B5MgMUHH.js +136 -0
- package/packages/web/dist/assets/refresh-cw-B0MGsYPL.js +6 -0
- package/packages/web/dist/assets/tabs-C8LsWiR5.js +1 -0
- package/packages/web/dist/assets/terminal-vendor-Cs8KPbV3.js +9 -0
- package/packages/web/dist/assets/terminal-vendor-LcAfv9l9.css +32 -0
- package/packages/web/dist/assets/trash-2-Btlg0d4l.js +6 -0
- package/packages/web/dist/assets/ts.worker-DGHjMaqB.js +67731 -0
- package/packages/web/dist/favicon.ico +0 -0
- package/packages/web/dist/icon.svg +1 -0
- package/packages/web/dist/index.html +29 -0
- package/packages/web/dist/manifest.json +29 -0
- package/packages/web/dist/og-image.png +0 -0
- package/packages/web/dist/originals/android-chrome-192x192.png +0 -0
- package/packages/web/dist/originals/android-chrome-512x512.png +0 -0
- package/packages/web/dist/originals/apple-touch-icon.png +0 -0
- package/packages/web/dist/originals/favicon.ico +0 -0
- package/packages/web/dist/piper.svg +1 -0
- package/packages/web/dist/sounds/codepiper-soft-chime.wav +0 -0
- package/packages/web/dist/sw.js +257 -0
- package/scripts/postinstall-link-workspaces.mjs +58 -0
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
-- sessions table
|
|
2
|
+
-- Stores session metadata and state
|
|
3
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
4
|
+
id TEXT PRIMARY KEY,
|
|
5
|
+
provider TEXT NOT NULL,
|
|
6
|
+
cwd TEXT NOT NULL,
|
|
7
|
+
status TEXT NOT NULL,
|
|
8
|
+
created_at INTEGER NOT NULL,
|
|
9
|
+
updated_at INTEGER NOT NULL,
|
|
10
|
+
pid INTEGER,
|
|
11
|
+
pty_cols INTEGER,
|
|
12
|
+
pty_rows INTEGER,
|
|
13
|
+
transcript_path TEXT,
|
|
14
|
+
metadata_json TEXT
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
-- Index for filtering sessions by status
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status);
|
|
19
|
+
|
|
20
|
+
-- Index for filtering sessions by provider
|
|
21
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_provider ON sessions(provider);
|
|
22
|
+
|
|
23
|
+
-- events table
|
|
24
|
+
-- Stores all events from various sources (PTY, hooks, transcript, statusline)
|
|
25
|
+
CREATE TABLE IF NOT EXISTS events (
|
|
26
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
27
|
+
session_id TEXT NOT NULL,
|
|
28
|
+
ts INTEGER NOT NULL,
|
|
29
|
+
source TEXT NOT NULL,
|
|
30
|
+
type TEXT NOT NULL,
|
|
31
|
+
payload_json TEXT NOT NULL,
|
|
32
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
-- Index for querying events by session
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_id ON events(session_id);
|
|
37
|
+
|
|
38
|
+
-- Index for querying events by session and id (for "since" queries)
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_events_session_id_id ON events(session_id, id);
|
|
40
|
+
|
|
41
|
+
-- Index for filtering events by type
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
|
|
43
|
+
|
|
44
|
+
-- Index for filtering events by source
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_events_source ON events(source);
|
|
46
|
+
|
|
47
|
+
-- session_notifications table
|
|
48
|
+
-- Durable user-facing notifications derived from provider events
|
|
49
|
+
CREATE TABLE IF NOT EXISTS session_notifications (
|
|
50
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
51
|
+
session_id TEXT NOT NULL,
|
|
52
|
+
provider TEXT NOT NULL,
|
|
53
|
+
event_type TEXT NOT NULL,
|
|
54
|
+
source_event_id INTEGER,
|
|
55
|
+
title TEXT NOT NULL,
|
|
56
|
+
body TEXT,
|
|
57
|
+
payload_json TEXT NOT NULL,
|
|
58
|
+
created_at INTEGER NOT NULL,
|
|
59
|
+
read_at INTEGER,
|
|
60
|
+
read_source TEXT,
|
|
61
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
|
62
|
+
FOREIGN KEY (source_event_id) REFERENCES events(id) ON DELETE SET NULL
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
-- Index for unread-per-session queries
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_session_read
|
|
67
|
+
ON session_notifications(session_id, read_at);
|
|
68
|
+
|
|
69
|
+
-- Index for newest-first inbox queries
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_created_desc
|
|
71
|
+
ON session_notifications(created_at DESC);
|
|
72
|
+
|
|
73
|
+
-- Index for event-type filters
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_event_created
|
|
75
|
+
ON session_notifications(event_type, created_at DESC);
|
|
76
|
+
|
|
77
|
+
-- Index for notification dedupe lookup by source event
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_session_notifications_source_event_type
|
|
79
|
+
ON session_notifications(source_event_id, event_type);
|
|
80
|
+
|
|
81
|
+
-- session_notification_prefs table
|
|
82
|
+
-- Per-session notification preference overrides
|
|
83
|
+
CREATE TABLE IF NOT EXISTS session_notification_prefs (
|
|
84
|
+
session_id TEXT PRIMARY KEY,
|
|
85
|
+
enabled INTEGER,
|
|
86
|
+
updated_at INTEGER NOT NULL,
|
|
87
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
-- push_subscriptions table
|
|
91
|
+
-- Web Push subscriptions for background notifications
|
|
92
|
+
CREATE TABLE IF NOT EXISTS push_subscriptions (
|
|
93
|
+
endpoint TEXT PRIMARY KEY,
|
|
94
|
+
p256dh TEXT NOT NULL,
|
|
95
|
+
auth TEXT NOT NULL,
|
|
96
|
+
expiration_time INTEGER,
|
|
97
|
+
created_at INTEGER NOT NULL,
|
|
98
|
+
updated_at INTEGER NOT NULL
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
CREATE INDEX IF NOT EXISTS idx_push_subscriptions_updated_at
|
|
102
|
+
ON push_subscriptions(updated_at DESC);
|
|
103
|
+
|
|
104
|
+
-- transcript_offsets table
|
|
105
|
+
-- Stores byte offsets for crash-safe transcript tailing
|
|
106
|
+
CREATE TABLE IF NOT EXISTS transcript_offsets (
|
|
107
|
+
session_id TEXT NOT NULL,
|
|
108
|
+
path TEXT NOT NULL,
|
|
109
|
+
byte_offset INTEGER NOT NULL DEFAULT 0,
|
|
110
|
+
last_line_hash TEXT,
|
|
111
|
+
PRIMARY KEY (session_id, path),
|
|
112
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
-- policies table
|
|
116
|
+
-- Stores permission policies for programmatic control
|
|
117
|
+
CREATE TABLE IF NOT EXISTS policies (
|
|
118
|
+
id TEXT PRIMARY KEY,
|
|
119
|
+
name TEXT NOT NULL,
|
|
120
|
+
description TEXT,
|
|
121
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
122
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
123
|
+
session_id TEXT,
|
|
124
|
+
rules_json TEXT NOT NULL,
|
|
125
|
+
created_at INTEGER NOT NULL,
|
|
126
|
+
updated_at INTEGER NOT NULL,
|
|
127
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
-- Index for filtering policies by session
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_policies_session ON policies(session_id);
|
|
132
|
+
|
|
133
|
+
-- Index for ordering policies by priority
|
|
134
|
+
CREATE INDEX IF NOT EXISTS idx_policies_priority ON policies(priority DESC);
|
|
135
|
+
|
|
136
|
+
-- policy_decisions table
|
|
137
|
+
-- Audit log for all policy decisions
|
|
138
|
+
CREATE TABLE IF NOT EXISTS policy_decisions (
|
|
139
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
140
|
+
session_id TEXT NOT NULL,
|
|
141
|
+
event_id INTEGER,
|
|
142
|
+
policy_id TEXT,
|
|
143
|
+
tool_name TEXT NOT NULL,
|
|
144
|
+
args_json TEXT,
|
|
145
|
+
decision TEXT NOT NULL,
|
|
146
|
+
reason TEXT,
|
|
147
|
+
timestamp INTEGER NOT NULL,
|
|
148
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
|
149
|
+
FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE SET NULL,
|
|
150
|
+
FOREIGN KEY (policy_id) REFERENCES policies(id) ON DELETE SET NULL
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
-- Index for querying decisions by session
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_policy_decisions_session ON policy_decisions(session_id);
|
|
155
|
+
|
|
156
|
+
-- Index for querying decisions by timestamp
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_policy_decisions_timestamp ON policy_decisions(timestamp);
|
|
158
|
+
|
|
159
|
+
-- workflows table
|
|
160
|
+
-- Stores workflow definitions
|
|
161
|
+
CREATE TABLE IF NOT EXISTS workflows (
|
|
162
|
+
id TEXT PRIMARY KEY,
|
|
163
|
+
name TEXT NOT NULL,
|
|
164
|
+
description TEXT,
|
|
165
|
+
definition_json TEXT NOT NULL,
|
|
166
|
+
created_at INTEGER NOT NULL,
|
|
167
|
+
updated_at INTEGER NOT NULL
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
-- workflow_executions table
|
|
171
|
+
-- Stores workflow execution state and history
|
|
172
|
+
CREATE TABLE IF NOT EXISTS workflow_executions (
|
|
173
|
+
id TEXT PRIMARY KEY,
|
|
174
|
+
workflow_id TEXT NOT NULL,
|
|
175
|
+
status TEXT NOT NULL,
|
|
176
|
+
started_at INTEGER NOT NULL,
|
|
177
|
+
completed_at INTEGER,
|
|
178
|
+
error_message TEXT,
|
|
179
|
+
context_json TEXT,
|
|
180
|
+
FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
-- Index for querying executions by workflow
|
|
184
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_executions_workflow ON workflow_executions(workflow_id);
|
|
185
|
+
|
|
186
|
+
-- Index for filtering executions by status
|
|
187
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_executions_status ON workflow_executions(status);
|
|
188
|
+
|
|
189
|
+
-- workflow_steps table
|
|
190
|
+
-- Stores individual workflow step execution state
|
|
191
|
+
CREATE TABLE IF NOT EXISTS workflow_steps (
|
|
192
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
193
|
+
execution_id TEXT NOT NULL,
|
|
194
|
+
step_name TEXT NOT NULL,
|
|
195
|
+
session_id TEXT,
|
|
196
|
+
status TEXT NOT NULL,
|
|
197
|
+
started_at INTEGER,
|
|
198
|
+
completed_at INTEGER,
|
|
199
|
+
result_json TEXT,
|
|
200
|
+
error_message TEXT,
|
|
201
|
+
FOREIGN KEY (execution_id) REFERENCES workflow_executions(id) ON DELETE CASCADE,
|
|
202
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE SET NULL
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
-- Index for querying steps by execution
|
|
206
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_steps_execution ON workflow_steps(execution_id);
|
|
207
|
+
|
|
208
|
+
-- Index for querying steps by session
|
|
209
|
+
CREATE INDEX IF NOT EXISTS idx_workflow_steps_session ON workflow_steps(session_id);
|
|
210
|
+
|
|
211
|
+
-- token_usage table
|
|
212
|
+
-- Stores token usage data with cache metrics for cost tracking
|
|
213
|
+
-- Separating from events table provides 85% storage savings and 10-300x query speedup
|
|
214
|
+
CREATE TABLE IF NOT EXISTS token_usage (
|
|
215
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
216
|
+
session_id TEXT NOT NULL,
|
|
217
|
+
event_id INTEGER,
|
|
218
|
+
timestamp INTEGER NOT NULL,
|
|
219
|
+
model TEXT NOT NULL,
|
|
220
|
+
prompt_tokens INTEGER NOT NULL DEFAULT 0,
|
|
221
|
+
completion_tokens INTEGER NOT NULL DEFAULT 0,
|
|
222
|
+
cache_creation_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
223
|
+
cache_read_input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
224
|
+
total_tokens INTEGER NOT NULL DEFAULT 0,
|
|
225
|
+
estimated_cost_usd REAL,
|
|
226
|
+
actual_cost_usd REAL,
|
|
227
|
+
cost_difference_usd REAL,
|
|
228
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
|
229
|
+
FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE SET NULL
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
-- Index for querying token usage by session
|
|
233
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_session ON token_usage(session_id);
|
|
234
|
+
|
|
235
|
+
-- Index for querying token usage by timestamp
|
|
236
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_timestamp ON token_usage(timestamp);
|
|
237
|
+
|
|
238
|
+
-- Index for querying token usage by model
|
|
239
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_model ON token_usage(model);
|
|
240
|
+
|
|
241
|
+
-- Index for aggregate queries (session + timestamp)
|
|
242
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_session_timestamp ON token_usage(session_id, timestamp);
|
|
243
|
+
|
|
244
|
+
-- model_switches table
|
|
245
|
+
-- Tracks model changes for monitoring and debugging
|
|
246
|
+
CREATE TABLE IF NOT EXISTS model_switches (
|
|
247
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
248
|
+
session_id TEXT NOT NULL,
|
|
249
|
+
timestamp INTEGER NOT NULL,
|
|
250
|
+
from_model TEXT,
|
|
251
|
+
to_model TEXT NOT NULL,
|
|
252
|
+
reason TEXT,
|
|
253
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
-- Index for querying model switches by session
|
|
257
|
+
CREATE INDEX IF NOT EXISTS idx_model_switches_session ON model_switches(session_id);
|
|
258
|
+
|
|
259
|
+
-- Index for querying model switches by timestamp
|
|
260
|
+
CREATE INDEX IF NOT EXISTS idx_model_switches_timestamp ON model_switches(timestamp);
|
|
261
|
+
|
|
262
|
+
-- transcript_content table
|
|
263
|
+
-- Stores full transcript text separately from events for efficient storage
|
|
264
|
+
-- Optional table for full-text search and content analysis
|
|
265
|
+
CREATE TABLE IF NOT EXISTS transcript_content (
|
|
266
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
267
|
+
session_id TEXT NOT NULL,
|
|
268
|
+
event_id INTEGER,
|
|
269
|
+
role TEXT NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
|
|
270
|
+
content TEXT NOT NULL,
|
|
271
|
+
timestamp INTEGER NOT NULL,
|
|
272
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
|
273
|
+
FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE SET NULL
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
-- Index for querying transcript content by session
|
|
277
|
+
CREATE INDEX IF NOT EXISTS idx_transcript_content_session ON transcript_content(session_id);
|
|
278
|
+
|
|
279
|
+
-- Index for querying transcript content by timestamp
|
|
280
|
+
CREATE INDEX IF NOT EXISTS idx_transcript_content_timestamp ON transcript_content(timestamp);
|
|
281
|
+
|
|
282
|
+
-- Index for querying transcript content by role
|
|
283
|
+
CREATE INDEX IF NOT EXISTS idx_transcript_content_role ON transcript_content(role);
|
|
284
|
+
|
|
285
|
+
-- policy_sets table
|
|
286
|
+
-- Named groups of policies that can be applied as a unit to sessions
|
|
287
|
+
CREATE TABLE IF NOT EXISTS policy_sets (
|
|
288
|
+
id TEXT PRIMARY KEY,
|
|
289
|
+
name TEXT NOT NULL UNIQUE,
|
|
290
|
+
description TEXT,
|
|
291
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
292
|
+
created_at INTEGER NOT NULL,
|
|
293
|
+
updated_at INTEGER NOT NULL
|
|
294
|
+
);
|
|
295
|
+
|
|
296
|
+
-- Ensure at most one default policy set
|
|
297
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_policy_sets_default
|
|
298
|
+
ON policy_sets(is_default) WHERE is_default = 1;
|
|
299
|
+
|
|
300
|
+
-- policy_set_members table (M:N: policy_sets <-> policies)
|
|
301
|
+
-- Links policies into sets
|
|
302
|
+
CREATE TABLE IF NOT EXISTS policy_set_members (
|
|
303
|
+
policy_set_id TEXT NOT NULL,
|
|
304
|
+
policy_id TEXT NOT NULL,
|
|
305
|
+
added_at INTEGER NOT NULL,
|
|
306
|
+
PRIMARY KEY (policy_set_id, policy_id),
|
|
307
|
+
FOREIGN KEY (policy_set_id) REFERENCES policy_sets(id) ON DELETE CASCADE,
|
|
308
|
+
FOREIGN KEY (policy_id) REFERENCES policies(id) ON DELETE CASCADE
|
|
309
|
+
);
|
|
310
|
+
|
|
311
|
+
-- Index for reverse lookup: which sets contain a given policy
|
|
312
|
+
CREATE INDEX IF NOT EXISTS idx_psm_policy ON policy_set_members(policy_id);
|
|
313
|
+
|
|
314
|
+
-- session_policy_sets table (M:N: sessions <-> policy_sets)
|
|
315
|
+
-- Binds policy sets to sessions
|
|
316
|
+
CREATE TABLE IF NOT EXISTS session_policy_sets (
|
|
317
|
+
session_id TEXT NOT NULL,
|
|
318
|
+
policy_set_id TEXT NOT NULL,
|
|
319
|
+
applied_at INTEGER NOT NULL,
|
|
320
|
+
PRIMARY KEY (session_id, policy_set_id),
|
|
321
|
+
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
|
322
|
+
FOREIGN KEY (policy_set_id) REFERENCES policy_sets(id) ON DELETE CASCADE
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
-- Index for reverse lookup: which sessions use a given set
|
|
326
|
+
CREATE INDEX IF NOT EXISTS idx_sps_set ON session_policy_sets(policy_set_id);
|
|
327
|
+
|
|
328
|
+
-- workspaces table
|
|
329
|
+
-- Saved directories for quick session creation
|
|
330
|
+
CREATE TABLE IF NOT EXISTS workspaces (
|
|
331
|
+
id TEXT PRIMARY KEY,
|
|
332
|
+
name TEXT NOT NULL,
|
|
333
|
+
path TEXT NOT NULL,
|
|
334
|
+
created_at INTEGER NOT NULL,
|
|
335
|
+
updated_at INTEGER NOT NULL
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
-- Ensure workspace names are unique
|
|
339
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_workspaces_name ON workspaces(name);
|
|
340
|
+
|
|
341
|
+
-- Index for path lookups
|
|
342
|
+
CREATE INDEX IF NOT EXISTS idx_workspaces_path ON workspaces(path);
|
|
343
|
+
|
|
344
|
+
-- env_sets table
|
|
345
|
+
-- Named collections of encrypted environment variables
|
|
346
|
+
CREATE TABLE IF NOT EXISTS env_sets (
|
|
347
|
+
id TEXT PRIMARY KEY,
|
|
348
|
+
name TEXT NOT NULL,
|
|
349
|
+
description TEXT,
|
|
350
|
+
encrypted_vars_json TEXT NOT NULL,
|
|
351
|
+
created_at INTEGER NOT NULL,
|
|
352
|
+
updated_at INTEGER NOT NULL
|
|
353
|
+
);
|
|
354
|
+
|
|
355
|
+
-- Ensure env set names are unique
|
|
356
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_env_sets_name ON env_sets(name);
|
|
357
|
+
|
|
358
|
+
-- auth_config table
|
|
359
|
+
-- Single-user authentication configuration (at most one row)
|
|
360
|
+
CREATE TABLE IF NOT EXISTS auth_config (
|
|
361
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
362
|
+
password_hash TEXT NOT NULL,
|
|
363
|
+
totp_secret_encrypted TEXT,
|
|
364
|
+
totp_enabled INTEGER NOT NULL DEFAULT 0,
|
|
365
|
+
mfa_setup_pending INTEGER NOT NULL DEFAULT 0,
|
|
366
|
+
onboarding_token_hash TEXT,
|
|
367
|
+
onboarding_token_expires_at INTEGER,
|
|
368
|
+
recovery_codes_encrypted TEXT,
|
|
369
|
+
created_at INTEGER NOT NULL,
|
|
370
|
+
updated_at INTEGER NOT NULL
|
|
371
|
+
);
|
|
372
|
+
|
|
373
|
+
-- auth_sessions table
|
|
374
|
+
-- Active login sessions (bearer tokens, hashed)
|
|
375
|
+
CREATE TABLE IF NOT EXISTS auth_sessions (
|
|
376
|
+
token_hash TEXT PRIMARY KEY,
|
|
377
|
+
created_at INTEGER NOT NULL,
|
|
378
|
+
expires_at INTEGER NOT NULL,
|
|
379
|
+
last_used_at INTEGER NOT NULL,
|
|
380
|
+
ip_address TEXT,
|
|
381
|
+
user_agent TEXT
|
|
382
|
+
);
|
|
383
|
+
|
|
384
|
+
-- Index for expiry cleanup
|
|
385
|
+
CREATE INDEX IF NOT EXISTS idx_auth_sessions_expires ON auth_sessions(expires_at);
|
|
386
|
+
|
|
387
|
+
-- daemon_settings table
|
|
388
|
+
-- Single-row table for daemon-level configuration (like auth_config)
|
|
389
|
+
CREATE TABLE IF NOT EXISTS daemon_settings (
|
|
390
|
+
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
391
|
+
preserve_sessions INTEGER NOT NULL DEFAULT 0,
|
|
392
|
+
default_policy_action TEXT NOT NULL DEFAULT 'ask',
|
|
393
|
+
forward_ssh_auth_sock INTEGER NOT NULL DEFAULT 1,
|
|
394
|
+
codex_host_access_profile_enabled INTEGER NOT NULL DEFAULT 0,
|
|
395
|
+
terminal_ws_pty_paste_enabled INTEGER NOT NULL DEFAULT 1,
|
|
396
|
+
terminal_latency_probes_enabled INTEGER NOT NULL DEFAULT 1,
|
|
397
|
+
terminal_diagnostics_panel_enabled INTEGER NOT NULL DEFAULT 0,
|
|
398
|
+
terminal_codex_app_server_spike_enabled INTEGER NOT NULL DEFAULT 0,
|
|
399
|
+
terminal_ws_pty_paste_canary_percent INTEGER NOT NULL DEFAULT 100,
|
|
400
|
+
terminal_latency_probes_canary_percent INTEGER NOT NULL DEFAULT 100,
|
|
401
|
+
terminal_diagnostics_panel_canary_percent INTEGER NOT NULL DEFAULT 0,
|
|
402
|
+
notifications_enabled INTEGER NOT NULL DEFAULT 0,
|
|
403
|
+
system_notifications_enabled INTEGER NOT NULL DEFAULT 0,
|
|
404
|
+
notification_sounds_enabled INTEGER NOT NULL DEFAULT 1,
|
|
405
|
+
notification_event_defaults_json TEXT NOT NULL DEFAULT '{}',
|
|
406
|
+
notification_sound_map_json TEXT NOT NULL DEFAULT '{}',
|
|
407
|
+
updated_at INTEGER NOT NULL
|
|
408
|
+
);
|