@claudecam/server 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/dist/db/index.js +68 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/queries.js +658 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.sql +259 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/agents.js +68 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/correlation-audit.js +31 -0
- package/dist/routes/correlation-audit.js.map +1 -0
- package/dist/routes/events.js +81 -0
- package/dist/routes/events.js.map +1 -0
- package/dist/routes/files.js +24 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/parse-prd.js +38 -0
- package/dist/routes/parse-prd.js.map +1 -0
- package/dist/routes/projects.js +96 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/registry.js +88 -0
- package/dist/routes/registry.js.map +1 -0
- package/dist/routes/session-groups.js +182 -0
- package/dist/routes/session-groups.js.map +1 -0
- package/dist/routes/sessions.js +109 -0
- package/dist/routes/sessions.js.map +1 -0
- package/dist/routes/sprints.js +58 -0
- package/dist/routes/sprints.js.map +1 -0
- package/dist/routes/stats.js +63 -0
- package/dist/routes/stats.js.map +1 -0
- package/dist/routes/stream.js +21 -0
- package/dist/routes/stream.js.map +1 -0
- package/dist/routes/tasks.js +198 -0
- package/dist/routes/tasks.js.map +1 -0
- package/dist/services/correlation-engine.js +577 -0
- package/dist/services/correlation-engine.js.map +1 -0
- package/dist/services/event-processor.js +857 -0
- package/dist/services/event-processor.js.map +1 -0
- package/dist/services/prd-parser.js +142 -0
- package/dist/services/prd-parser.js.map +1 -0
- package/dist/services/project-manager.js +351 -0
- package/dist/services/project-manager.js.map +1 -0
- package/dist/services/project-router.js +56 -0
- package/dist/services/project-router.js.map +1 -0
- package/dist/services/session-manager.js +76 -0
- package/dist/services/session-manager.js.map +1 -0
- package/dist/services/sse-manager.js +115 -0
- package/dist/services/sse-manager.js.map +1 -0
- package/dist/services/string-similarity.js +256 -0
- package/dist/services/string-similarity.js.map +1 -0
- package/dist/services/task-completion.js +251 -0
- package/dist/services/task-completion.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,658 @@
|
|
|
1
|
+
import { getDb } from "./index.js";
|
|
2
|
+
function db() {
|
|
3
|
+
return getDb();
|
|
4
|
+
}
|
|
5
|
+
// === Sessions ===
|
|
6
|
+
export const sessionQueries = {
|
|
7
|
+
insert() {
|
|
8
|
+
return db().prepare(`
|
|
9
|
+
INSERT INTO sessions (id, started_at, working_directory, status, agent_count, event_count, metadata)
|
|
10
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
11
|
+
`);
|
|
12
|
+
},
|
|
13
|
+
getById() {
|
|
14
|
+
return db().prepare(`SELECT * FROM sessions WHERE id = ?`);
|
|
15
|
+
},
|
|
16
|
+
getAll() {
|
|
17
|
+
return db().prepare(`
|
|
18
|
+
SELECT * FROM sessions
|
|
19
|
+
ORDER BY started_at DESC
|
|
20
|
+
LIMIT ? OFFSET ?
|
|
21
|
+
`);
|
|
22
|
+
},
|
|
23
|
+
getByStatus() {
|
|
24
|
+
return db().prepare(`
|
|
25
|
+
SELECT * FROM sessions
|
|
26
|
+
WHERE status = ?
|
|
27
|
+
ORDER BY started_at DESC
|
|
28
|
+
LIMIT ? OFFSET ?
|
|
29
|
+
`);
|
|
30
|
+
},
|
|
31
|
+
updateStatus() {
|
|
32
|
+
return db().prepare(`UPDATE sessions SET status = ?, ended_at = ? WHERE id = ?`);
|
|
33
|
+
},
|
|
34
|
+
incrementEventCount() {
|
|
35
|
+
return db().prepare(`UPDATE sessions SET event_count = event_count + 1 WHERE id = ?`);
|
|
36
|
+
},
|
|
37
|
+
updateAgentCount() {
|
|
38
|
+
return db().prepare(`UPDATE sessions SET agent_count = ? WHERE id = ?`);
|
|
39
|
+
},
|
|
40
|
+
updateMetadata() {
|
|
41
|
+
return db().prepare(`UPDATE sessions SET metadata = ? WHERE id = ?`);
|
|
42
|
+
},
|
|
43
|
+
getActiveStaleSessions() {
|
|
44
|
+
return db().prepare(`
|
|
45
|
+
SELECT s.id,
|
|
46
|
+
(SELECT MAX(e.timestamp) FROM events e WHERE e.session_id = s.id) as last_event_at
|
|
47
|
+
FROM sessions s
|
|
48
|
+
WHERE s.status = 'active'
|
|
49
|
+
AND NOT EXISTS (
|
|
50
|
+
SELECT 1 FROM events e
|
|
51
|
+
WHERE e.session_id = s.id AND e.timestamp > ?
|
|
52
|
+
)
|
|
53
|
+
AND s.started_at < ?
|
|
54
|
+
`);
|
|
55
|
+
},
|
|
56
|
+
getByProject() {
|
|
57
|
+
return db().prepare(`
|
|
58
|
+
SELECT s.* FROM sessions s
|
|
59
|
+
JOIN session_project_bindings spb ON s.id = spb.session_id
|
|
60
|
+
WHERE spb.project_id = ?
|
|
61
|
+
ORDER BY s.started_at DESC
|
|
62
|
+
LIMIT ? OFFSET ?
|
|
63
|
+
`);
|
|
64
|
+
},
|
|
65
|
+
deleteById() {
|
|
66
|
+
return db().prepare(`DELETE FROM sessions WHERE id = ?`);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
// === Agents ===
|
|
70
|
+
export const agentQueries = {
|
|
71
|
+
upsert() {
|
|
72
|
+
return db().prepare(`
|
|
73
|
+
INSERT INTO agents (id, session_id, name, type, status, first_seen_at, last_activity_at, tool_call_count, error_count)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 0, 0)
|
|
75
|
+
ON CONFLICT(id, session_id) DO UPDATE SET
|
|
76
|
+
last_activity_at = excluded.last_activity_at,
|
|
77
|
+
status = excluded.status
|
|
78
|
+
`);
|
|
79
|
+
},
|
|
80
|
+
getBySession() {
|
|
81
|
+
return db().prepare(`SELECT * FROM agents WHERE session_id = ? ORDER BY first_seen_at ASC`);
|
|
82
|
+
},
|
|
83
|
+
getActiveBySession() {
|
|
84
|
+
return db().prepare(`
|
|
85
|
+
SELECT * FROM agents
|
|
86
|
+
WHERE session_id = ?
|
|
87
|
+
AND (status = 'active' OR last_activity_at > ?)
|
|
88
|
+
ORDER BY
|
|
89
|
+
CASE WHEN status = 'active' THEN 0 ELSE 1 END,
|
|
90
|
+
last_activity_at DESC
|
|
91
|
+
`);
|
|
92
|
+
},
|
|
93
|
+
getById() {
|
|
94
|
+
return db().prepare(`SELECT * FROM agents WHERE id = ? AND session_id = ?`);
|
|
95
|
+
},
|
|
96
|
+
updateStatus() {
|
|
97
|
+
return db().prepare(`UPDATE agents SET status = ?, last_activity_at = ? WHERE id = ? AND session_id = ?`);
|
|
98
|
+
},
|
|
99
|
+
incrementToolCalls() {
|
|
100
|
+
return db().prepare(`
|
|
101
|
+
UPDATE agents SET tool_call_count = tool_call_count + 1, last_activity_at = ?
|
|
102
|
+
WHERE id = ? AND session_id = ?
|
|
103
|
+
`);
|
|
104
|
+
},
|
|
105
|
+
incrementErrors() {
|
|
106
|
+
return db().prepare(`
|
|
107
|
+
UPDATE agents SET error_count = error_count + 1, last_activity_at = ?
|
|
108
|
+
WHERE id = ? AND session_id = ?
|
|
109
|
+
`);
|
|
110
|
+
},
|
|
111
|
+
updateAgentName() {
|
|
112
|
+
return db().prepare(`UPDATE agents SET name = ? WHERE id = ? AND session_id = ?`);
|
|
113
|
+
},
|
|
114
|
+
updateCurrentTask() {
|
|
115
|
+
return db().prepare(`UPDATE agents SET current_task = ? WHERE id = ? AND session_id = ?`);
|
|
116
|
+
},
|
|
117
|
+
getActiveStale() {
|
|
118
|
+
return db().prepare(`
|
|
119
|
+
SELECT a.*, s.id as sess_id FROM agents a
|
|
120
|
+
JOIN sessions s ON a.session_id = s.id
|
|
121
|
+
WHERE a.status = 'active'
|
|
122
|
+
AND s.status = 'active'
|
|
123
|
+
AND a.last_activity_at < ?
|
|
124
|
+
`);
|
|
125
|
+
},
|
|
126
|
+
/** Find agents created recently whose name equals their ID, looks like a UUID, or has a placeholder name. */
|
|
127
|
+
getRecentUnnamed() {
|
|
128
|
+
return db().prepare(`
|
|
129
|
+
SELECT * FROM agents
|
|
130
|
+
WHERE (name = id
|
|
131
|
+
OR name GLOB '[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]-*'
|
|
132
|
+
OR name GLOB 'agent-[0-9]*'
|
|
133
|
+
OR name = 'Subagent'
|
|
134
|
+
OR name GLOB 'Subagent #[0-9]*'
|
|
135
|
+
OR name = 'subagent')
|
|
136
|
+
AND first_seen_at > ?
|
|
137
|
+
ORDER BY first_seen_at DESC
|
|
138
|
+
`);
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
// === Events ===
|
|
142
|
+
export const eventQueries = {
|
|
143
|
+
insert() {
|
|
144
|
+
return db().prepare(`
|
|
145
|
+
INSERT INTO events (id, session_id, agent_id, timestamp, hook_type, category, tool, file_path, input, output, error, duration, metadata)
|
|
146
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
147
|
+
`);
|
|
148
|
+
},
|
|
149
|
+
getBySession() {
|
|
150
|
+
return db().prepare(`
|
|
151
|
+
SELECT * FROM events
|
|
152
|
+
WHERE session_id = ?
|
|
153
|
+
ORDER BY timestamp DESC
|
|
154
|
+
LIMIT ? OFFSET ?
|
|
155
|
+
`);
|
|
156
|
+
},
|
|
157
|
+
getBySessionAndCategory() {
|
|
158
|
+
return db().prepare(`
|
|
159
|
+
SELECT * FROM events
|
|
160
|
+
WHERE session_id = ? AND category = ?
|
|
161
|
+
ORDER BY timestamp DESC
|
|
162
|
+
LIMIT ? OFFSET ?
|
|
163
|
+
`);
|
|
164
|
+
},
|
|
165
|
+
getBySessionAndAgent() {
|
|
166
|
+
return db().prepare(`
|
|
167
|
+
SELECT * FROM events
|
|
168
|
+
WHERE session_id = ? AND agent_id = ?
|
|
169
|
+
ORDER BY timestamp DESC
|
|
170
|
+
LIMIT ? OFFSET ?
|
|
171
|
+
`);
|
|
172
|
+
},
|
|
173
|
+
getBySessionAndTool() {
|
|
174
|
+
return db().prepare(`
|
|
175
|
+
SELECT * FROM events
|
|
176
|
+
WHERE session_id = ? AND tool = ?
|
|
177
|
+
ORDER BY timestamp DESC
|
|
178
|
+
LIMIT ? OFFSET ?
|
|
179
|
+
`);
|
|
180
|
+
},
|
|
181
|
+
getBySessionSince() {
|
|
182
|
+
return db().prepare(`
|
|
183
|
+
SELECT * FROM events
|
|
184
|
+
WHERE session_id = ? AND timestamp > ?
|
|
185
|
+
ORDER BY timestamp DESC
|
|
186
|
+
LIMIT ? OFFSET ?
|
|
187
|
+
`);
|
|
188
|
+
},
|
|
189
|
+
getByAgentAndCategory() {
|
|
190
|
+
return db().prepare(`
|
|
191
|
+
SELECT * FROM events
|
|
192
|
+
WHERE session_id = ? AND agent_id = ? AND category = ?
|
|
193
|
+
ORDER BY timestamp DESC
|
|
194
|
+
LIMIT ? OFFSET ?
|
|
195
|
+
`);
|
|
196
|
+
},
|
|
197
|
+
countBySession() {
|
|
198
|
+
return db().prepare(`SELECT COUNT(*) as count FROM events WHERE session_id = ?`);
|
|
199
|
+
},
|
|
200
|
+
getToolBreakdown() {
|
|
201
|
+
return db().prepare(`
|
|
202
|
+
SELECT tool, COUNT(*) as count
|
|
203
|
+
FROM events
|
|
204
|
+
WHERE session_id = ? AND tool IS NOT NULL
|
|
205
|
+
GROUP BY tool
|
|
206
|
+
ORDER BY count DESC
|
|
207
|
+
`);
|
|
208
|
+
},
|
|
209
|
+
getAgentBreakdown() {
|
|
210
|
+
return db().prepare(`
|
|
211
|
+
SELECT agent_id, COUNT(*) as events, SUM(CASE WHEN category = 'error' THEN 1 ELSE 0 END) as errors
|
|
212
|
+
FROM events
|
|
213
|
+
WHERE session_id = ?
|
|
214
|
+
GROUP BY agent_id
|
|
215
|
+
`);
|
|
216
|
+
},
|
|
217
|
+
getTimeline() {
|
|
218
|
+
return db().prepare(`
|
|
219
|
+
SELECT strftime('%H:%M', timestamp) as minute, COUNT(*) as events
|
|
220
|
+
FROM events
|
|
221
|
+
WHERE session_id = ?
|
|
222
|
+
GROUP BY minute
|
|
223
|
+
ORDER BY minute ASC
|
|
224
|
+
`);
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
// === File Changes ===
|
|
228
|
+
export const fileChangeQueries = {
|
|
229
|
+
upsert() {
|
|
230
|
+
return db().prepare(`
|
|
231
|
+
INSERT INTO file_changes (file_path, session_id, agent_id, change_type, first_touched_at, last_touched_at, touch_count)
|
|
232
|
+
VALUES (?, ?, ?, ?, ?, ?, 1)
|
|
233
|
+
ON CONFLICT(file_path, session_id, agent_id) DO UPDATE SET
|
|
234
|
+
change_type = CASE
|
|
235
|
+
WHEN excluded.change_type IN ('created', 'modified') THEN excluded.change_type
|
|
236
|
+
ELSE file_changes.change_type
|
|
237
|
+
END,
|
|
238
|
+
last_touched_at = excluded.last_touched_at,
|
|
239
|
+
touch_count = file_changes.touch_count + 1
|
|
240
|
+
`);
|
|
241
|
+
},
|
|
242
|
+
getBySession() {
|
|
243
|
+
return db().prepare(`
|
|
244
|
+
SELECT * FROM file_changes
|
|
245
|
+
WHERE session_id = ?
|
|
246
|
+
ORDER BY last_touched_at DESC
|
|
247
|
+
`);
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
// === Task Items ===
|
|
251
|
+
export const taskItemQueries = {
|
|
252
|
+
upsert() {
|
|
253
|
+
return db().prepare(`
|
|
254
|
+
INSERT INTO task_items (id, session_id, subject, status, owner, created_at, updated_at)
|
|
255
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
256
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
257
|
+
status = excluded.status,
|
|
258
|
+
owner = excluded.owner,
|
|
259
|
+
updated_at = excluded.updated_at
|
|
260
|
+
`);
|
|
261
|
+
},
|
|
262
|
+
getBySession() {
|
|
263
|
+
return db().prepare(`SELECT * FROM task_items WHERE session_id = ? ORDER BY created_at ASC`);
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
// === Project Registry (Sprint 8) ===
|
|
267
|
+
export const projectRegistryQueries = {
|
|
268
|
+
register() {
|
|
269
|
+
return db().prepare(`
|
|
270
|
+
INSERT OR REPLACE INTO project_registry (working_directory, project_id, registered_at, prd_path, hooks_installed)
|
|
271
|
+
VALUES (?, ?, datetime('now'), ?, ?)
|
|
272
|
+
`);
|
|
273
|
+
},
|
|
274
|
+
getByWorkingDir() {
|
|
275
|
+
return db().prepare(`
|
|
276
|
+
SELECT working_directory, project_id, registered_at, prd_path, hooks_installed
|
|
277
|
+
FROM project_registry WHERE working_directory = ?
|
|
278
|
+
`);
|
|
279
|
+
},
|
|
280
|
+
getByWorkingDirPrefix() {
|
|
281
|
+
return db().prepare(`
|
|
282
|
+
SELECT working_directory, project_id, registered_at, prd_path, hooks_installed
|
|
283
|
+
FROM project_registry WHERE ? LIKE working_directory || '%'
|
|
284
|
+
ORDER BY length(working_directory) DESC
|
|
285
|
+
LIMIT 1
|
|
286
|
+
`);
|
|
287
|
+
},
|
|
288
|
+
getByProject() {
|
|
289
|
+
return db().prepare(`
|
|
290
|
+
SELECT working_directory, project_id, registered_at, prd_path, hooks_installed
|
|
291
|
+
FROM project_registry WHERE project_id = ?
|
|
292
|
+
`);
|
|
293
|
+
},
|
|
294
|
+
getAll() {
|
|
295
|
+
return db().prepare(`
|
|
296
|
+
SELECT pr.working_directory, pr.project_id, pr.registered_at, pr.prd_path, pr.hooks_installed,
|
|
297
|
+
p.name as project_name, p.status as project_status
|
|
298
|
+
FROM project_registry pr
|
|
299
|
+
JOIN projects p ON pr.project_id = p.id
|
|
300
|
+
ORDER BY pr.registered_at DESC
|
|
301
|
+
`);
|
|
302
|
+
},
|
|
303
|
+
updateHooksInstalled() {
|
|
304
|
+
return db().prepare(`
|
|
305
|
+
UPDATE project_registry SET hooks_installed = ? WHERE working_directory = ?
|
|
306
|
+
`);
|
|
307
|
+
},
|
|
308
|
+
updatePrdPath() {
|
|
309
|
+
return db().prepare(`
|
|
310
|
+
UPDATE project_registry SET prd_path = ? WHERE working_directory = ?
|
|
311
|
+
`);
|
|
312
|
+
},
|
|
313
|
+
delete() {
|
|
314
|
+
return db().prepare(`
|
|
315
|
+
DELETE FROM project_registry WHERE working_directory = ?
|
|
316
|
+
`);
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
// === Projects ===
|
|
320
|
+
export const projectQueries = {
|
|
321
|
+
insert() {
|
|
322
|
+
return db().prepare(`
|
|
323
|
+
INSERT INTO projects (id, name, description, prd_source, prd_content, created_at, updated_at, status, total_tasks, completed_tasks, current_sprint_id, metadata)
|
|
324
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
325
|
+
`);
|
|
326
|
+
},
|
|
327
|
+
getById() {
|
|
328
|
+
return db().prepare(`SELECT * FROM projects WHERE id = ?`);
|
|
329
|
+
},
|
|
330
|
+
getAll() {
|
|
331
|
+
return db().prepare(`SELECT * FROM projects ORDER BY updated_at DESC`);
|
|
332
|
+
},
|
|
333
|
+
update() {
|
|
334
|
+
return db().prepare(`
|
|
335
|
+
UPDATE projects SET
|
|
336
|
+
name = COALESCE(?, name),
|
|
337
|
+
description = COALESCE(?, description),
|
|
338
|
+
status = COALESCE(?, status),
|
|
339
|
+
total_tasks = COALESCE(?, total_tasks),
|
|
340
|
+
completed_tasks = COALESCE(?, completed_tasks),
|
|
341
|
+
current_sprint_id = COALESCE(?, current_sprint_id),
|
|
342
|
+
updated_at = ?
|
|
343
|
+
WHERE id = ?
|
|
344
|
+
`);
|
|
345
|
+
},
|
|
346
|
+
updateTaskCounts() {
|
|
347
|
+
return db().prepare(`
|
|
348
|
+
UPDATE projects SET
|
|
349
|
+
total_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE project_id = ?),
|
|
350
|
+
completed_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE project_id = ? AND status = 'completed'),
|
|
351
|
+
updated_at = ?
|
|
352
|
+
WHERE id = ?
|
|
353
|
+
`);
|
|
354
|
+
},
|
|
355
|
+
deleteById() {
|
|
356
|
+
return db().prepare(`DELETE FROM projects WHERE id = ?`);
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
// === Sprints ===
|
|
360
|
+
export const sprintQueries = {
|
|
361
|
+
insert() {
|
|
362
|
+
return db().prepare(`
|
|
363
|
+
INSERT INTO sprints (id, project_id, name, description, "order", status, started_at, completed_at, total_tasks, completed_tasks, metadata)
|
|
364
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
365
|
+
`);
|
|
366
|
+
},
|
|
367
|
+
getByProject() {
|
|
368
|
+
return db().prepare(`SELECT * FROM sprints WHERE project_id = ? ORDER BY "order" ASC`);
|
|
369
|
+
},
|
|
370
|
+
getById() {
|
|
371
|
+
return db().prepare(`SELECT * FROM sprints WHERE id = ?`);
|
|
372
|
+
},
|
|
373
|
+
update() {
|
|
374
|
+
return db().prepare(`
|
|
375
|
+
UPDATE sprints SET
|
|
376
|
+
name = COALESCE(?, name),
|
|
377
|
+
description = COALESCE(?, description),
|
|
378
|
+
status = COALESCE(?, status),
|
|
379
|
+
started_at = COALESCE(?, started_at),
|
|
380
|
+
completed_at = COALESCE(?, completed_at),
|
|
381
|
+
total_tasks = COALESCE(?, total_tasks),
|
|
382
|
+
completed_tasks = COALESCE(?, completed_tasks)
|
|
383
|
+
WHERE id = ?
|
|
384
|
+
`);
|
|
385
|
+
},
|
|
386
|
+
updateTaskCounts() {
|
|
387
|
+
return db().prepare(`
|
|
388
|
+
UPDATE sprints SET
|
|
389
|
+
total_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE sprint_id = ?),
|
|
390
|
+
completed_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE sprint_id = ? AND status = 'completed')
|
|
391
|
+
WHERE id = ?
|
|
392
|
+
`);
|
|
393
|
+
},
|
|
394
|
+
getNextOrder() {
|
|
395
|
+
return db().prepare(`SELECT COALESCE(MAX("order"), 0) + 1 as next_order FROM sprints WHERE project_id = ?`);
|
|
396
|
+
},
|
|
397
|
+
deleteById() {
|
|
398
|
+
return db().prepare(`DELETE FROM sprints WHERE id = ?`);
|
|
399
|
+
},
|
|
400
|
+
};
|
|
401
|
+
// === PRD Tasks ===
|
|
402
|
+
export const prdTaskQueries = {
|
|
403
|
+
insert() {
|
|
404
|
+
return db().prepare(`
|
|
405
|
+
INSERT INTO prd_tasks (id, project_id, sprint_id, external_id, title, description, acceptance_criteria, status, priority, complexity, tags, depends_on, blocked_by, assigned_agent, started_at, completed_at, session_id, prd_section, prd_subsection, prd_line_start, prd_line_end, created_at, updated_at)
|
|
406
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
407
|
+
`);
|
|
408
|
+
},
|
|
409
|
+
getByProject() {
|
|
410
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE project_id = ? ORDER BY created_at ASC`);
|
|
411
|
+
},
|
|
412
|
+
getBySprint() {
|
|
413
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE sprint_id = ? ORDER BY created_at ASC`);
|
|
414
|
+
},
|
|
415
|
+
getByProjectAndStatus() {
|
|
416
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE project_id = ? AND status = ? ORDER BY created_at ASC`);
|
|
417
|
+
},
|
|
418
|
+
getByProjectAndAgent() {
|
|
419
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE project_id = ? AND assigned_agent = ? ORDER BY created_at ASC`);
|
|
420
|
+
},
|
|
421
|
+
getByProjectAndPriority() {
|
|
422
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE project_id = ? AND priority = ? ORDER BY created_at ASC`);
|
|
423
|
+
},
|
|
424
|
+
getById() {
|
|
425
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE id = ?`);
|
|
426
|
+
},
|
|
427
|
+
update() {
|
|
428
|
+
return db().prepare(`
|
|
429
|
+
UPDATE prd_tasks SET
|
|
430
|
+
status = COALESCE(?, status),
|
|
431
|
+
priority = COALESCE(?, priority),
|
|
432
|
+
assigned_agent = COALESCE(?, assigned_agent),
|
|
433
|
+
sprint_id = COALESCE(?, sprint_id),
|
|
434
|
+
external_id = COALESCE(?, external_id),
|
|
435
|
+
started_at = COALESCE(?, started_at),
|
|
436
|
+
completed_at = COALESCE(?, completed_at),
|
|
437
|
+
session_id = COALESCE(?, session_id),
|
|
438
|
+
updated_at = ?
|
|
439
|
+
WHERE id = ?
|
|
440
|
+
`);
|
|
441
|
+
},
|
|
442
|
+
getStatusSummary() {
|
|
443
|
+
return db().prepare(`
|
|
444
|
+
SELECT status, COUNT(*) as count
|
|
445
|
+
FROM prd_tasks
|
|
446
|
+
WHERE project_id = ?
|
|
447
|
+
GROUP BY status
|
|
448
|
+
`);
|
|
449
|
+
},
|
|
450
|
+
findByTitle() {
|
|
451
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE project_id = ? AND title LIKE ?`);
|
|
452
|
+
},
|
|
453
|
+
deleteById() {
|
|
454
|
+
return db().prepare(`DELETE FROM prd_tasks WHERE id = ?`);
|
|
455
|
+
},
|
|
456
|
+
};
|
|
457
|
+
// === Task Activities ===
|
|
458
|
+
export const taskActivityQueries = {
|
|
459
|
+
insert() {
|
|
460
|
+
return db().prepare(`
|
|
461
|
+
INSERT INTO task_activities (id, prd_task_id, event_id, session_id, agent_id, activity_type, timestamp, details)
|
|
462
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
463
|
+
`);
|
|
464
|
+
},
|
|
465
|
+
getByTask() {
|
|
466
|
+
return db().prepare(`
|
|
467
|
+
SELECT * FROM task_activities
|
|
468
|
+
WHERE prd_task_id = ?
|
|
469
|
+
ORDER BY timestamp DESC
|
|
470
|
+
`);
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
// === PRD Documents ===
|
|
474
|
+
export const prdDocumentQueries = {
|
|
475
|
+
insert() {
|
|
476
|
+
return db().prepare(`
|
|
477
|
+
INSERT INTO prd_documents (id, project_id, version, raw_content, sections, parsed_at, parse_method)
|
|
478
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
479
|
+
`);
|
|
480
|
+
},
|
|
481
|
+
getByProject() {
|
|
482
|
+
return db().prepare(`
|
|
483
|
+
SELECT * FROM prd_documents
|
|
484
|
+
WHERE project_id = ?
|
|
485
|
+
ORDER BY version DESC
|
|
486
|
+
LIMIT 1
|
|
487
|
+
`);
|
|
488
|
+
},
|
|
489
|
+
getLatestVersion() {
|
|
490
|
+
return db().prepare(`
|
|
491
|
+
SELECT COALESCE(MAX(version), 0) + 1 as next_version
|
|
492
|
+
FROM prd_documents WHERE project_id = ?
|
|
493
|
+
`);
|
|
494
|
+
},
|
|
495
|
+
};
|
|
496
|
+
// === Correlation Audit Log ===
|
|
497
|
+
export const correlationAuditQueries = {
|
|
498
|
+
insert() {
|
|
499
|
+
return db().prepare(`
|
|
500
|
+
INSERT INTO correlation_audit_log (id, event_id, prd_task_id, session_id, agent_id, layer, score, matched, reason, timestamp)
|
|
501
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
502
|
+
`);
|
|
503
|
+
},
|
|
504
|
+
getRecent() {
|
|
505
|
+
return db().prepare(`
|
|
506
|
+
SELECT cal.*, pt.title as task_title
|
|
507
|
+
FROM correlation_audit_log cal
|
|
508
|
+
LEFT JOIN prd_tasks pt ON cal.prd_task_id = pt.id
|
|
509
|
+
ORDER BY cal.timestamp DESC
|
|
510
|
+
LIMIT ? OFFSET ?
|
|
511
|
+
`);
|
|
512
|
+
},
|
|
513
|
+
getByEvent() {
|
|
514
|
+
return db().prepare(`
|
|
515
|
+
SELECT * FROM correlation_audit_log WHERE event_id = ? ORDER BY score DESC
|
|
516
|
+
`);
|
|
517
|
+
},
|
|
518
|
+
getByTask() {
|
|
519
|
+
return db().prepare(`
|
|
520
|
+
SELECT * FROM correlation_audit_log WHERE prd_task_id = ? ORDER BY timestamp DESC LIMIT ? OFFSET ?
|
|
521
|
+
`);
|
|
522
|
+
},
|
|
523
|
+
};
|
|
524
|
+
// === Session-Project Bindings ===
|
|
525
|
+
export const sessionProjectBindingQueries = {
|
|
526
|
+
bind() {
|
|
527
|
+
return db().prepare(`
|
|
528
|
+
INSERT INTO session_project_bindings (session_id, project_id, bound_at)
|
|
529
|
+
VALUES (?, ?, ?)
|
|
530
|
+
ON CONFLICT(session_id) DO UPDATE SET project_id = excluded.project_id, bound_at = excluded.bound_at
|
|
531
|
+
`);
|
|
532
|
+
},
|
|
533
|
+
getBySession() {
|
|
534
|
+
return db().prepare(`SELECT * FROM session_project_bindings WHERE session_id = ?`);
|
|
535
|
+
},
|
|
536
|
+
getByProject() {
|
|
537
|
+
return db().prepare(`SELECT * FROM session_project_bindings WHERE project_id = ?`);
|
|
538
|
+
},
|
|
539
|
+
};
|
|
540
|
+
// === Task Completion Queries ===
|
|
541
|
+
export const taskCompletionQueries = {
|
|
542
|
+
getHighConfidenceBindings() {
|
|
543
|
+
return db().prepare(`
|
|
544
|
+
SELECT atb.*, pt.title as task_title, pt.status as task_status, pt.sprint_id, pt.project_id
|
|
545
|
+
FROM agent_task_bindings atb
|
|
546
|
+
JOIN prd_tasks pt ON atb.prd_task_id = pt.id
|
|
547
|
+
LEFT JOIN sprints s ON pt.sprint_id = s.id
|
|
548
|
+
WHERE atb.session_id = ? AND atb.confidence >= ? AND atb.expired_at IS NULL
|
|
549
|
+
AND pt.status != 'completed' AND pt.status != 'deferred' AND pt.status != 'backlog'
|
|
550
|
+
AND (s."order" = 1 OR s.id IS NULL)
|
|
551
|
+
ORDER BY atb.confidence DESC
|
|
552
|
+
`);
|
|
553
|
+
},
|
|
554
|
+
getHighConfidenceBindingsForAgent() {
|
|
555
|
+
return db().prepare(`
|
|
556
|
+
SELECT atb.*, pt.title as task_title, pt.status as task_status, pt.sprint_id, pt.project_id
|
|
557
|
+
FROM agent_task_bindings atb
|
|
558
|
+
JOIN prd_tasks pt ON atb.prd_task_id = pt.id
|
|
559
|
+
LEFT JOIN sprints s ON pt.sprint_id = s.id
|
|
560
|
+
WHERE atb.agent_id = ? AND atb.session_id = ? AND atb.confidence >= ? AND atb.expired_at IS NULL
|
|
561
|
+
AND pt.status != 'completed' AND pt.status != 'deferred' AND pt.status != 'backlog'
|
|
562
|
+
AND (s."order" = 1 OR s.id IS NULL)
|
|
563
|
+
ORDER BY atb.confidence DESC
|
|
564
|
+
`);
|
|
565
|
+
},
|
|
566
|
+
completePrdTask() {
|
|
567
|
+
return db().prepare(`
|
|
568
|
+
UPDATE prd_tasks SET status = 'completed', completed_at = ?, updated_at = ?
|
|
569
|
+
WHERE id = ? AND status != 'completed'
|
|
570
|
+
`);
|
|
571
|
+
},
|
|
572
|
+
recalculateSprintTotals() {
|
|
573
|
+
return db().prepare(`
|
|
574
|
+
UPDATE sprints SET
|
|
575
|
+
total_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE sprint_id = ?),
|
|
576
|
+
completed_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE sprint_id = ? AND status = 'completed')
|
|
577
|
+
WHERE id = ?
|
|
578
|
+
`);
|
|
579
|
+
},
|
|
580
|
+
recalculateProjectTotals() {
|
|
581
|
+
return db().prepare(`
|
|
582
|
+
UPDATE projects SET
|
|
583
|
+
total_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE project_id = ?),
|
|
584
|
+
completed_tasks = (SELECT COUNT(*) FROM prd_tasks WHERE project_id = ? AND status = 'completed'),
|
|
585
|
+
updated_at = ?
|
|
586
|
+
WHERE id = ?
|
|
587
|
+
`);
|
|
588
|
+
},
|
|
589
|
+
getPendingHighConfidenceTasks() {
|
|
590
|
+
return db().prepare(`
|
|
591
|
+
SELECT DISTINCT pt.*, MAX(atb.confidence) as max_confidence, atb.agent_id as binding_agent_id
|
|
592
|
+
FROM prd_tasks pt
|
|
593
|
+
JOIN agent_task_bindings atb ON pt.id = atb.prd_task_id
|
|
594
|
+
WHERE atb.confidence >= ? AND atb.expired_at IS NULL
|
|
595
|
+
AND pt.status != 'completed' AND pt.status != 'deferred'
|
|
596
|
+
GROUP BY pt.id
|
|
597
|
+
ORDER BY max_confidence DESC
|
|
598
|
+
`);
|
|
599
|
+
},
|
|
600
|
+
getCompletionStats() {
|
|
601
|
+
return db().prepare(`
|
|
602
|
+
SELECT
|
|
603
|
+
(SELECT COUNT(*) FROM prd_tasks WHERE project_id = ?) as total,
|
|
604
|
+
(SELECT COUNT(*) FROM prd_tasks WHERE project_id = ? AND status = 'completed') as completed
|
|
605
|
+
`);
|
|
606
|
+
},
|
|
607
|
+
getAutoCompletedCount() {
|
|
608
|
+
return db().prepare(`
|
|
609
|
+
SELECT COUNT(DISTINCT cal.prd_task_id) as count
|
|
610
|
+
FROM correlation_audit_log cal
|
|
611
|
+
WHERE cal.layer = 'auto_complete' AND cal.matched = 1
|
|
612
|
+
AND cal.prd_task_id IN (SELECT id FROM prd_tasks WHERE project_id = ?)
|
|
613
|
+
`);
|
|
614
|
+
},
|
|
615
|
+
getTasksBySection() {
|
|
616
|
+
return db().prepare(`
|
|
617
|
+
SELECT * FROM prd_tasks WHERE prd_section LIKE ('%' || ? || '%') AND status != 'completed' AND status != 'deferred'
|
|
618
|
+
`);
|
|
619
|
+
},
|
|
620
|
+
getTasksByIds() {
|
|
621
|
+
// Note: caller must build the IN clause dynamically
|
|
622
|
+
return db().prepare(`SELECT * FROM prd_tasks WHERE id = ? AND status != 'completed'`);
|
|
623
|
+
},
|
|
624
|
+
};
|
|
625
|
+
// === Agent-Task Bindings ===
|
|
626
|
+
export const agentTaskBindingQueries = {
|
|
627
|
+
bind() {
|
|
628
|
+
return db().prepare(`
|
|
629
|
+
INSERT INTO agent_task_bindings (id, agent_id, session_id, prd_task_id, confidence, bound_at)
|
|
630
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
631
|
+
`);
|
|
632
|
+
},
|
|
633
|
+
getActiveByAgent() {
|
|
634
|
+
return db().prepare(`
|
|
635
|
+
SELECT * FROM agent_task_bindings
|
|
636
|
+
WHERE agent_id = ? AND session_id = ? AND expired_at IS NULL
|
|
637
|
+
ORDER BY bound_at DESC LIMIT 1
|
|
638
|
+
`);
|
|
639
|
+
},
|
|
640
|
+
getActiveByTask() {
|
|
641
|
+
return db().prepare(`
|
|
642
|
+
SELECT * FROM agent_task_bindings
|
|
643
|
+
WHERE prd_task_id = ? AND expired_at IS NULL
|
|
644
|
+
`);
|
|
645
|
+
},
|
|
646
|
+
expire() {
|
|
647
|
+
return db().prepare(`
|
|
648
|
+
UPDATE agent_task_bindings SET expired_at = ?
|
|
649
|
+
WHERE agent_id = ? AND session_id = ? AND expired_at IS NULL
|
|
650
|
+
`);
|
|
651
|
+
},
|
|
652
|
+
expireByTask() {
|
|
653
|
+
return db().prepare(`
|
|
654
|
+
UPDATE agent_task_bindings SET expired_at = ? WHERE prd_task_id = ? AND expired_at IS NULL
|
|
655
|
+
`);
|
|
656
|
+
},
|
|
657
|
+
};
|
|
658
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
|