@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.
Files changed (52) hide show
  1. package/dist/db/index.js +68 -0
  2. package/dist/db/index.js.map +1 -0
  3. package/dist/db/queries.js +658 -0
  4. package/dist/db/queries.js.map +1 -0
  5. package/dist/db/schema.sql +259 -0
  6. package/dist/index.js +128 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/routes/agents.js +68 -0
  9. package/dist/routes/agents.js.map +1 -0
  10. package/dist/routes/correlation-audit.js +31 -0
  11. package/dist/routes/correlation-audit.js.map +1 -0
  12. package/dist/routes/events.js +81 -0
  13. package/dist/routes/events.js.map +1 -0
  14. package/dist/routes/files.js +24 -0
  15. package/dist/routes/files.js.map +1 -0
  16. package/dist/routes/parse-prd.js +38 -0
  17. package/dist/routes/parse-prd.js.map +1 -0
  18. package/dist/routes/projects.js +96 -0
  19. package/dist/routes/projects.js.map +1 -0
  20. package/dist/routes/registry.js +88 -0
  21. package/dist/routes/registry.js.map +1 -0
  22. package/dist/routes/session-groups.js +182 -0
  23. package/dist/routes/session-groups.js.map +1 -0
  24. package/dist/routes/sessions.js +109 -0
  25. package/dist/routes/sessions.js.map +1 -0
  26. package/dist/routes/sprints.js +58 -0
  27. package/dist/routes/sprints.js.map +1 -0
  28. package/dist/routes/stats.js +63 -0
  29. package/dist/routes/stats.js.map +1 -0
  30. package/dist/routes/stream.js +21 -0
  31. package/dist/routes/stream.js.map +1 -0
  32. package/dist/routes/tasks.js +198 -0
  33. package/dist/routes/tasks.js.map +1 -0
  34. package/dist/services/correlation-engine.js +577 -0
  35. package/dist/services/correlation-engine.js.map +1 -0
  36. package/dist/services/event-processor.js +857 -0
  37. package/dist/services/event-processor.js.map +1 -0
  38. package/dist/services/prd-parser.js +142 -0
  39. package/dist/services/prd-parser.js.map +1 -0
  40. package/dist/services/project-manager.js +351 -0
  41. package/dist/services/project-manager.js.map +1 -0
  42. package/dist/services/project-router.js +56 -0
  43. package/dist/services/project-router.js.map +1 -0
  44. package/dist/services/session-manager.js +76 -0
  45. package/dist/services/session-manager.js.map +1 -0
  46. package/dist/services/sse-manager.js +115 -0
  47. package/dist/services/sse-manager.js.map +1 -0
  48. package/dist/services/string-similarity.js +256 -0
  49. package/dist/services/string-similarity.js.map +1 -0
  50. package/dist/services/task-completion.js +251 -0
  51. package/dist/services/task-completion.js.map +1 -0
  52. package/package.json +59 -0
@@ -0,0 +1,251 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { taskCompletionQueries, correlationAuditQueries, agentTaskBindingQueries, prdTaskQueries, projectQueries, sprintQueries, } from '../db/queries.js';
3
+ import { sseManager } from './sse-manager.js';
4
+ // ---------------------------------------------------------------------------
5
+ // Configuration
6
+ // ---------------------------------------------------------------------------
7
+ /** Minimum confidence score for auto-completion */
8
+ export const CONFIDENCE_THRESHOLD = 0.75;
9
+ /** Feature flag for auto-completion */
10
+ export const AUTO_COMPLETE_ENABLED = true;
11
+ // ---------------------------------------------------------------------------
12
+ // Core: Mark a single PRD task as completed
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * Mark a PRD task as completed with audit logging.
16
+ * Returns false if the task was already completed, not found, or in a backlog sprint.
17
+ * Tasks in backlog sprints (order > 1) are protected from auto-completion.
18
+ * Use `force: true` to override backlog protection (for manual batch operations).
19
+ */
20
+ export function markPrdTaskCompleted(taskId, reason, force = false) {
21
+ const now = new Date().toISOString();
22
+ const task = prdTaskQueries.getById().get(taskId);
23
+ if (!task)
24
+ return false;
25
+ if (task.status === 'completed')
26
+ return false;
27
+ if (task.status === 'deferred' || task.status === 'backlog')
28
+ return false;
29
+ // Protect backlog sprint tasks from auto-completion
30
+ if (!force && task.sprint_id) {
31
+ const sprint = sprintQueries.getById().get(task.sprint_id);
32
+ if (sprint && sprint.order > 1) {
33
+ console.log(`[task-completion] Skipping backlog task "${task.title}" (sprint order=${sprint.order})`);
34
+ return false;
35
+ }
36
+ }
37
+ // Update the task status
38
+ const result = taskCompletionQueries.completePrdTask().run(now, now, taskId);
39
+ if (result.changes === 0)
40
+ return false;
41
+ // Update sprint and project totals
42
+ if (task.sprint_id) {
43
+ updateSprintTotals(task.sprint_id);
44
+ }
45
+ updateProjectTotals(task.project_id);
46
+ // Log to correlation audit
47
+ try {
48
+ correlationAuditQueries.insert().run(randomUUID(), 'system', // event_id - system-generated
49
+ taskId, // prd_task_id
50
+ 'system', // session_id
51
+ 'system', // agent_id
52
+ 'auto_complete', // layer
53
+ 1.0, // score
54
+ 1, // matched
55
+ reason, // reason
56
+ now);
57
+ }
58
+ catch {
59
+ // Audit must never break the completion
60
+ }
61
+ // Broadcast SSE events
62
+ sseManager.broadcast('task_status_changed', {
63
+ taskId,
64
+ oldStatus: task.status,
65
+ newStatus: 'completed',
66
+ reason,
67
+ source: 'auto_complete',
68
+ });
69
+ const project = projectQueries.getById().get(task.project_id);
70
+ if (project) {
71
+ sseManager.broadcast('project_progress', {
72
+ projectId: project.id,
73
+ completedTasks: project.completed_tasks,
74
+ totalTasks: project.total_tasks,
75
+ percent: project.total_tasks > 0
76
+ ? Math.round((project.completed_tasks / project.total_tasks) * 1000) / 10
77
+ : 0,
78
+ });
79
+ }
80
+ console.log(`[task-completion] Auto-completed task "${task.title}" (${taskId}) - ${reason}`);
81
+ return true;
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Auto-complete tasks for a session (called on SessionEnd)
85
+ // ---------------------------------------------------------------------------
86
+ /**
87
+ * Check all agent_task_bindings for this session and auto-complete
88
+ * tasks with confidence >= CONFIDENCE_THRESHOLD.
89
+ */
90
+ export function autoCompleteTasksForSession(sessionId) {
91
+ if (!AUTO_COMPLETE_ENABLED)
92
+ return [];
93
+ const results = [];
94
+ try {
95
+ const bindings = taskCompletionQueries.getHighConfidenceBindings().all(sessionId, CONFIDENCE_THRESHOLD);
96
+ // Deduplicate by task ID (pick highest confidence binding per task)
97
+ const taskBindingMap = new Map();
98
+ for (const binding of bindings) {
99
+ const existing = taskBindingMap.get(binding.prd_task_id);
100
+ if (!existing || binding.confidence > existing.confidence) {
101
+ taskBindingMap.set(binding.prd_task_id, binding);
102
+ }
103
+ }
104
+ for (const [, binding] of taskBindingMap) {
105
+ const reason = `Auto-completed on SessionEnd (session: ${sessionId}, agent: ${binding.agent_id}, confidence: ${(binding.confidence * 100).toFixed(0)}%)`;
106
+ const completed = markPrdTaskCompleted(binding.prd_task_id, reason);
107
+ // Expire the binding after completion attempt
108
+ const now = new Date().toISOString();
109
+ agentTaskBindingQueries.expireByTask().run(now, binding.prd_task_id);
110
+ results.push({
111
+ taskId: binding.prd_task_id,
112
+ taskTitle: binding.task_title,
113
+ confidence: binding.confidence,
114
+ agentId: binding.agent_id,
115
+ autoCompleted: completed,
116
+ reason,
117
+ });
118
+ }
119
+ if (results.length > 0) {
120
+ const completedCount = results.filter(r => r.autoCompleted).length;
121
+ console.log(`[task-completion] SessionEnd ${sessionId}: auto-completed ${completedCount}/${results.length} tasks`);
122
+ }
123
+ }
124
+ catch (err) {
125
+ console.error(`[task-completion] Error in autoCompleteTasksForSession:`, err);
126
+ }
127
+ return results;
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Auto-complete tasks for a specific agent (called on agent shutdown)
131
+ // ---------------------------------------------------------------------------
132
+ /**
133
+ * Check agent_task_bindings for a specific agent and auto-complete
134
+ * tasks with confidence >= CONFIDENCE_THRESHOLD.
135
+ */
136
+ export function autoCompleteTasksForAgent(agentId, sessionId) {
137
+ if (!AUTO_COMPLETE_ENABLED)
138
+ return [];
139
+ const results = [];
140
+ try {
141
+ const bindings = taskCompletionQueries.getHighConfidenceBindingsForAgent().all(agentId, sessionId, CONFIDENCE_THRESHOLD);
142
+ for (const binding of bindings) {
143
+ const reason = `Auto-completed on agent shutdown (agent: ${agentId}, session: ${sessionId}, confidence: ${(binding.confidence * 100).toFixed(0)}%)`;
144
+ const completed = markPrdTaskCompleted(binding.prd_task_id, reason);
145
+ // Expire the binding
146
+ const now = new Date().toISOString();
147
+ agentTaskBindingQueries.expireByTask().run(now, binding.prd_task_id);
148
+ results.push({
149
+ taskId: binding.prd_task_id,
150
+ taskTitle: binding.task_title,
151
+ confidence: binding.confidence,
152
+ agentId: binding.agent_id,
153
+ autoCompleted: completed,
154
+ reason,
155
+ });
156
+ }
157
+ if (results.length > 0) {
158
+ const completedCount = results.filter(r => r.autoCompleted).length;
159
+ console.log(`[task-completion] Agent ${agentId} shutdown: auto-completed ${completedCount}/${results.length} tasks`);
160
+ }
161
+ }
162
+ catch (err) {
163
+ console.error(`[task-completion] Error in autoCompleteTasksForAgent:`, err);
164
+ }
165
+ return results;
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // Totals recalculation
169
+ // ---------------------------------------------------------------------------
170
+ /** Recalculate completed_tasks count for a sprint from actual prd_tasks data */
171
+ export function updateSprintTotals(sprintId) {
172
+ try {
173
+ taskCompletionQueries.recalculateSprintTotals().run(sprintId, sprintId, sprintId);
174
+ }
175
+ catch (err) {
176
+ console.error(`[task-completion] Error recalculating sprint totals for ${sprintId}:`, err);
177
+ }
178
+ }
179
+ /** Recalculate completed_tasks and total_tasks for a project */
180
+ export function updateProjectTotals(projectId) {
181
+ try {
182
+ const now = new Date().toISOString();
183
+ taskCompletionQueries.recalculateProjectTotals().run(projectId, projectId, now, projectId);
184
+ }
185
+ catch (err) {
186
+ console.error(`[task-completion] Error recalculating project totals for ${projectId}:`, err);
187
+ }
188
+ }
189
+ // ---------------------------------------------------------------------------
190
+ // Batch completion
191
+ // ---------------------------------------------------------------------------
192
+ /**
193
+ * Batch-complete all tasks in a PRD section (e.g., "Sprint 8 - Project-First Architecture").
194
+ * Returns the count of tasks that were actually updated.
195
+ */
196
+ export function batchCompleteBySection(prdSection, status) {
197
+ const tasks = taskCompletionQueries.getTasksBySection().all(prdSection);
198
+ let completedCount = 0;
199
+ for (const task of tasks) {
200
+ if (status && task.status !== status)
201
+ continue;
202
+ const reason = `Batch-completed by section: "${prdSection}"`;
203
+ if (markPrdTaskCompleted(task.id, reason, true)) {
204
+ completedCount++;
205
+ }
206
+ }
207
+ if (completedCount > 0) {
208
+ console.log(`[task-completion] Batch-completed ${completedCount} tasks in section "${prdSection}"`);
209
+ }
210
+ return completedCount;
211
+ }
212
+ /**
213
+ * Batch-complete tasks by IDs.
214
+ * Returns list of task IDs that were actually completed.
215
+ */
216
+ export function batchCompleteByIds(taskIds, reason) {
217
+ const completed = [];
218
+ for (const taskId of taskIds) {
219
+ const completionReason = reason ?? `Batch-completed by ID`;
220
+ if (markPrdTaskCompleted(taskId, completionReason, true)) {
221
+ completed.push(taskId);
222
+ }
223
+ }
224
+ if (completed.length > 0) {
225
+ console.log(`[task-completion] Batch-completed ${completed.length}/${taskIds.length} tasks by IDs`);
226
+ }
227
+ return completed;
228
+ }
229
+ /**
230
+ * Get completion status summary for a project.
231
+ */
232
+ export function getCompletionStatus(projectId) {
233
+ const stats = taskCompletionQueries.getCompletionStats().get(projectId, projectId);
234
+ const autoCompletedRow = taskCompletionQueries.getAutoCompletedCount().get(projectId);
235
+ const pendingRows = taskCompletionQueries.getPendingHighConfidenceTasks().all(CONFIDENCE_THRESHOLD);
236
+ // Filter to this project
237
+ const projectPending = pendingRows.filter(r => r.project_id === projectId);
238
+ return {
239
+ total: stats?.total ?? 0,
240
+ completed: stats?.completed ?? 0,
241
+ autoCompleted: autoCompletedRow?.count ?? 0,
242
+ pendingWithHighConfidence: projectPending.map(r => ({
243
+ taskId: r.id,
244
+ title: r.title,
245
+ status: r.status,
246
+ maxConfidence: r.max_confidence,
247
+ agentId: r.binding_agent_id,
248
+ })),
249
+ };
250
+ }
251
+ //# sourceMappingURL=task-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-completion.js","sourceRoot":"","sources":["../../src/services/task-completion.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@claudecam/server",
3
+ "version": "0.1.0",
4
+ "description": "Backend server for Claude Agent Monitor - Express + SQLite + REST API + SSE",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "better-sqlite3": "11.6.0",
20
+ "cors": "^2.8.5",
21
+ "express": "^4.21.0",
22
+ "uuid": "^11.0.0",
23
+ "@claudecam/shared": "0.1.0"
24
+ },
25
+ "devDependencies": {
26
+ "@types/better-sqlite3": "^7.6.13",
27
+ "@types/cors": "^2.8.17",
28
+ "@types/express": "^5.0.0",
29
+ "@types/express-serve-static-core": "^5.0.0",
30
+ "@types/uuid": "^10.0.0",
31
+ "tsx": "^4.19.0",
32
+ "typescript": "^5.7.0"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/pedropauloai/claude-agent-monitor.git",
37
+ "directory": "packages/server"
38
+ },
39
+ "homepage": "https://github.com/pedropauloai/claude-agent-monitor",
40
+ "bugs": "https://github.com/pedropauloai/claude-agent-monitor/issues",
41
+ "keywords": [
42
+ "claude",
43
+ "agent",
44
+ "monitor",
45
+ "observability",
46
+ "claude-code"
47
+ ],
48
+ "author": "CAM Contributors",
49
+ "publishConfig": {
50
+ "access": "public"
51
+ },
52
+ "scripts": {
53
+ "build": "tsc && node -e \"const fs=require('fs');const p=require('path');fs.mkdirSync(p.join('dist','db'),{recursive:true});fs.copyFileSync(p.join('src','db','schema.sql'),p.join('dist','db','schema.sql'));\"",
54
+ "dev": "tsx watch src/index.ts",
55
+ "start": "node dist/index.js",
56
+ "typecheck": "tsc --noEmit",
57
+ "clean": "rm -rf dist"
58
+ }
59
+ }