claudia-orchestrator 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 (296) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +109 -0
  3. package/dist/cli-parser.d.ts +11 -0
  4. package/dist/cli-parser.d.ts.map +1 -0
  5. package/dist/cli-parser.js +57 -0
  6. package/dist/cli-parser.js.map +1 -0
  7. package/dist/cui-server.d.ts +69 -0
  8. package/dist/cui-server.d.ts.map +1 -0
  9. package/dist/cui-server.js +705 -0
  10. package/dist/cui-server.js.map +1 -0
  11. package/dist/mcp-server/claudia-tools.d.ts +15 -0
  12. package/dist/mcp-server/claudia-tools.d.ts.map +1 -0
  13. package/dist/mcp-server/claudia-tools.js +366 -0
  14. package/dist/mcp-server/claudia-tools.js.map +1 -0
  15. package/dist/mcp-server/index.d.ts +3 -0
  16. package/dist/mcp-server/index.d.ts.map +1 -0
  17. package/dist/mcp-server/index.js +176 -0
  18. package/dist/mcp-server/index.js.map +1 -0
  19. package/dist/middleware/auth.d.ts +18 -0
  20. package/dist/middleware/auth.d.ts.map +1 -0
  21. package/dist/middleware/auth.js +136 -0
  22. package/dist/middleware/auth.js.map +1 -0
  23. package/dist/middleware/cors-setup.d.ts +7 -0
  24. package/dist/middleware/cors-setup.d.ts.map +1 -0
  25. package/dist/middleware/cors-setup.js +8 -0
  26. package/dist/middleware/cors-setup.js.map +1 -0
  27. package/dist/middleware/error-handler.d.ts +4 -0
  28. package/dist/middleware/error-handler.d.ts.map +1 -0
  29. package/dist/middleware/error-handler.js +27 -0
  30. package/dist/middleware/error-handler.js.map +1 -0
  31. package/dist/middleware/query-parser.d.ts +11 -0
  32. package/dist/middleware/query-parser.d.ts.map +1 -0
  33. package/dist/middleware/query-parser.js +68 -0
  34. package/dist/middleware/query-parser.js.map +1 -0
  35. package/dist/middleware/request-logger.d.ts +4 -0
  36. package/dist/middleware/request-logger.d.ts.map +1 -0
  37. package/dist/middleware/request-logger.js +29 -0
  38. package/dist/middleware/request-logger.js.map +1 -0
  39. package/dist/process-daemon/index.d.ts +14 -0
  40. package/dist/process-daemon/index.d.ts.map +1 -0
  41. package/dist/process-daemon/index.js +51 -0
  42. package/dist/process-daemon/index.js.map +1 -0
  43. package/dist/process-daemon/process-daemon.d.ts +78 -0
  44. package/dist/process-daemon/process-daemon.d.ts.map +1 -0
  45. package/dist/process-daemon/process-daemon.js +568 -0
  46. package/dist/process-daemon/process-daemon.js.map +1 -0
  47. package/dist/process-daemon/process-manager-client.d.ts +108 -0
  48. package/dist/process-daemon/process-manager-client.d.ts.map +1 -0
  49. package/dist/process-daemon/process-manager-client.js +314 -0
  50. package/dist/process-daemon/process-manager-client.js.map +1 -0
  51. package/dist/process-daemon/process-manager-interface.d.ts +47 -0
  52. package/dist/process-daemon/process-manager-interface.d.ts.map +1 -0
  53. package/dist/process-daemon/process-manager-interface.js +8 -0
  54. package/dist/process-daemon/process-manager-interface.js.map +1 -0
  55. package/dist/process-daemon/test-daemon.d.ts +12 -0
  56. package/dist/process-daemon/test-daemon.d.ts.map +1 -0
  57. package/dist/process-daemon/test-daemon.js +81 -0
  58. package/dist/process-daemon/test-daemon.js.map +1 -0
  59. package/dist/process-daemon/types.d.ts +85 -0
  60. package/dist/process-daemon/types.d.ts.map +1 -0
  61. package/dist/process-daemon/types.js +8 -0
  62. package/dist/process-daemon/types.js.map +1 -0
  63. package/dist/routes/claudia.routes.d.ts +10 -0
  64. package/dist/routes/claudia.routes.d.ts.map +1 -0
  65. package/dist/routes/claudia.routes.js +123 -0
  66. package/dist/routes/claudia.routes.js.map +1 -0
  67. package/dist/routes/config.routes.d.ts +4 -0
  68. package/dist/routes/config.routes.d.ts.map +1 -0
  69. package/dist/routes/config.routes.js +27 -0
  70. package/dist/routes/config.routes.js.map +1 -0
  71. package/dist/routes/conversation.routes.d.ts +8 -0
  72. package/dist/routes/conversation.routes.d.ts.map +1 -0
  73. package/dist/routes/conversation.routes.js +870 -0
  74. package/dist/routes/conversation.routes.js.map +1 -0
  75. package/dist/routes/filesystem.routes.d.ts +4 -0
  76. package/dist/routes/filesystem.routes.d.ts.map +1 -0
  77. package/dist/routes/filesystem.routes.js +86 -0
  78. package/dist/routes/filesystem.routes.js.map +1 -0
  79. package/dist/routes/gemini.routes.d.ts +4 -0
  80. package/dist/routes/gemini.routes.d.ts.map +1 -0
  81. package/dist/routes/gemini.routes.js +93 -0
  82. package/dist/routes/gemini.routes.js.map +1 -0
  83. package/dist/routes/insights.routes.d.ts +17 -0
  84. package/dist/routes/insights.routes.d.ts.map +1 -0
  85. package/dist/routes/insights.routes.js +417 -0
  86. package/dist/routes/insights.routes.js.map +1 -0
  87. package/dist/routes/license.routes.d.ts +3 -0
  88. package/dist/routes/license.routes.d.ts.map +1 -0
  89. package/dist/routes/license.routes.js +111 -0
  90. package/dist/routes/license.routes.js.map +1 -0
  91. package/dist/routes/log.routes.d.ts +3 -0
  92. package/dist/routes/log.routes.d.ts.map +1 -0
  93. package/dist/routes/log.routes.js +65 -0
  94. package/dist/routes/log.routes.js.map +1 -0
  95. package/dist/routes/notifications.routes.d.ts +4 -0
  96. package/dist/routes/notifications.routes.d.ts.map +1 -0
  97. package/dist/routes/notifications.routes.js +71 -0
  98. package/dist/routes/notifications.routes.js.map +1 -0
  99. package/dist/routes/permission.routes.d.ts +4 -0
  100. package/dist/routes/permission.routes.d.ts.map +1 -0
  101. package/dist/routes/permission.routes.js +116 -0
  102. package/dist/routes/permission.routes.js.map +1 -0
  103. package/dist/routes/question.routes.d.ts +8 -0
  104. package/dist/routes/question.routes.d.ts.map +1 -0
  105. package/dist/routes/question.routes.js +82 -0
  106. package/dist/routes/question.routes.js.map +1 -0
  107. package/dist/routes/streaming.routes.d.ts +4 -0
  108. package/dist/routes/streaming.routes.d.ts.map +1 -0
  109. package/dist/routes/streaming.routes.js +28 -0
  110. package/dist/routes/streaming.routes.js.map +1 -0
  111. package/dist/routes/system.routes.d.ts +5 -0
  112. package/dist/routes/system.routes.d.ts.map +1 -0
  113. package/dist/routes/system.routes.js +103 -0
  114. package/dist/routes/system.routes.js.map +1 -0
  115. package/dist/routes/working-directories.routes.d.ts +4 -0
  116. package/dist/routes/working-directories.routes.d.ts.map +1 -0
  117. package/dist/routes/working-directories.routes.js +25 -0
  118. package/dist/routes/working-directories.routes.js.map +1 -0
  119. package/dist/server.d.ts +3 -0
  120. package/dist/server.d.ts.map +1 -0
  121. package/dist/server.js +34 -0
  122. package/dist/server.js.map +1 -0
  123. package/dist/services/ToolMetricsService.d.ts +53 -0
  124. package/dist/services/ToolMetricsService.d.ts.map +1 -0
  125. package/dist/services/ToolMetricsService.js +230 -0
  126. package/dist/services/ToolMetricsService.js.map +1 -0
  127. package/dist/services/anthropic-service.d.ts +186 -0
  128. package/dist/services/anthropic-service.d.ts.map +1 -0
  129. package/dist/services/anthropic-service.js +1132 -0
  130. package/dist/services/anthropic-service.js.map +1 -0
  131. package/dist/services/claude-history-reader.d.ts +126 -0
  132. package/dist/services/claude-history-reader.d.ts.map +1 -0
  133. package/dist/services/claude-history-reader.js +717 -0
  134. package/dist/services/claude-history-reader.js.map +1 -0
  135. package/dist/services/claude-process-manager.d.ts +108 -0
  136. package/dist/services/claude-process-manager.d.ts.map +1 -0
  137. package/dist/services/claude-process-manager.js +909 -0
  138. package/dist/services/claude-process-manager.js.map +1 -0
  139. package/dist/services/claude-router-service.d.ts +19 -0
  140. package/dist/services/claude-router-service.d.ts.map +1 -0
  141. package/dist/services/claude-router-service.js +160 -0
  142. package/dist/services/claude-router-service.js.map +1 -0
  143. package/dist/services/claudia-service.d.ts +77 -0
  144. package/dist/services/claudia-service.d.ts.map +1 -0
  145. package/dist/services/claudia-service.js +194 -0
  146. package/dist/services/claudia-service.js.map +1 -0
  147. package/dist/services/commands-service.d.ts +18 -0
  148. package/dist/services/commands-service.d.ts.map +1 -0
  149. package/dist/services/commands-service.js +76 -0
  150. package/dist/services/commands-service.js.map +1 -0
  151. package/dist/services/config-service.d.ts +68 -0
  152. package/dist/services/config-service.d.ts.map +1 -0
  153. package/dist/services/config-service.js +429 -0
  154. package/dist/services/config-service.js.map +1 -0
  155. package/dist/services/conversation-cache.d.ts +86 -0
  156. package/dist/services/conversation-cache.d.ts.map +1 -0
  157. package/dist/services/conversation-cache.js +235 -0
  158. package/dist/services/conversation-cache.js.map +1 -0
  159. package/dist/services/conversation-status-manager.d.ts +98 -0
  160. package/dist/services/conversation-status-manager.d.ts.map +1 -0
  161. package/dist/services/conversation-status-manager.js +295 -0
  162. package/dist/services/conversation-status-manager.js.map +1 -0
  163. package/dist/services/cost-tracker.d.ts +87 -0
  164. package/dist/services/cost-tracker.d.ts.map +1 -0
  165. package/dist/services/cost-tracker.js +335 -0
  166. package/dist/services/cost-tracker.js.map +1 -0
  167. package/dist/services/file-system-service.d.ts +61 -0
  168. package/dist/services/file-system-service.d.ts.map +1 -0
  169. package/dist/services/file-system-service.js +348 -0
  170. package/dist/services/file-system-service.js.map +1 -0
  171. package/dist/services/gemini-service.d.ts +72 -0
  172. package/dist/services/gemini-service.d.ts.map +1 -0
  173. package/dist/services/gemini-service.js +431 -0
  174. package/dist/services/gemini-service.js.map +1 -0
  175. package/dist/services/insight-queue.d.ts +99 -0
  176. package/dist/services/insight-queue.d.ts.map +1 -0
  177. package/dist/services/insight-queue.js +277 -0
  178. package/dist/services/insight-queue.js.map +1 -0
  179. package/dist/services/insights-service.d.ts +102 -0
  180. package/dist/services/insights-service.d.ts.map +1 -0
  181. package/dist/services/insights-service.js +1152 -0
  182. package/dist/services/insights-service.js.map +1 -0
  183. package/dist/services/json-lines-parser.d.ts +19 -0
  184. package/dist/services/json-lines-parser.d.ts.map +1 -0
  185. package/dist/services/json-lines-parser.js +56 -0
  186. package/dist/services/json-lines-parser.js.map +1 -0
  187. package/dist/services/license-service.d.ts +69 -0
  188. package/dist/services/license-service.d.ts.map +1 -0
  189. package/dist/services/license-service.js +330 -0
  190. package/dist/services/license-service.js.map +1 -0
  191. package/dist/services/log-formatter.d.ts +5 -0
  192. package/dist/services/log-formatter.d.ts.map +1 -0
  193. package/dist/services/log-formatter.js +77 -0
  194. package/dist/services/log-formatter.js.map +1 -0
  195. package/dist/services/log-stream-buffer.d.ts +11 -0
  196. package/dist/services/log-stream-buffer.d.ts.map +1 -0
  197. package/dist/services/log-stream-buffer.js +36 -0
  198. package/dist/services/log-stream-buffer.js.map +1 -0
  199. package/dist/services/logger.d.ts +71 -0
  200. package/dist/services/logger.d.ts.map +1 -0
  201. package/dist/services/logger.js +215 -0
  202. package/dist/services/logger.js.map +1 -0
  203. package/dist/services/mcp-config-generator.d.ts +32 -0
  204. package/dist/services/mcp-config-generator.d.ts.map +1 -0
  205. package/dist/services/mcp-config-generator.js +126 -0
  206. package/dist/services/mcp-config-generator.js.map +1 -0
  207. package/dist/services/message-filter.d.ts +22 -0
  208. package/dist/services/message-filter.d.ts.map +1 -0
  209. package/dist/services/message-filter.js +57 -0
  210. package/dist/services/message-filter.js.map +1 -0
  211. package/dist/services/notification-service.d.ts +45 -0
  212. package/dist/services/notification-service.d.ts.map +1 -0
  213. package/dist/services/notification-service.js +184 -0
  214. package/dist/services/notification-service.js.map +1 -0
  215. package/dist/services/permission-tracker.d.ts +67 -0
  216. package/dist/services/permission-tracker.d.ts.map +1 -0
  217. package/dist/services/permission-tracker.js +161 -0
  218. package/dist/services/permission-tracker.js.map +1 -0
  219. package/dist/services/process-manager-factory.d.ts +81 -0
  220. package/dist/services/process-manager-factory.d.ts.map +1 -0
  221. package/dist/services/process-manager-factory.js +211 -0
  222. package/dist/services/process-manager-factory.js.map +1 -0
  223. package/dist/services/question-tracker.d.ts +47 -0
  224. package/dist/services/question-tracker.d.ts.map +1 -0
  225. package/dist/services/question-tracker.js +105 -0
  226. package/dist/services/question-tracker.js.map +1 -0
  227. package/dist/services/session-activity-watcher.d.ts +33 -0
  228. package/dist/services/session-activity-watcher.d.ts.map +1 -0
  229. package/dist/services/session-activity-watcher.js +194 -0
  230. package/dist/services/session-activity-watcher.js.map +1 -0
  231. package/dist/services/session-info-service.d.ts +228 -0
  232. package/dist/services/session-info-service.d.ts.map +1 -0
  233. package/dist/services/session-info-service.js +920 -0
  234. package/dist/services/session-info-service.js.map +1 -0
  235. package/dist/services/session-insights-service.d.ts +119 -0
  236. package/dist/services/session-insights-service.d.ts.map +1 -0
  237. package/dist/services/session-insights-service.js +889 -0
  238. package/dist/services/session-insights-service.js.map +1 -0
  239. package/dist/services/stream-manager.d.ts +62 -0
  240. package/dist/services/stream-manager.d.ts.map +1 -0
  241. package/dist/services/stream-manager.js +239 -0
  242. package/dist/services/stream-manager.js.map +1 -0
  243. package/dist/services/web-push-service.d.ts +48 -0
  244. package/dist/services/web-push-service.d.ts.map +1 -0
  245. package/dist/services/web-push-service.js +186 -0
  246. package/dist/services/web-push-service.js.map +1 -0
  247. package/dist/services/working-directories-service.d.ts +19 -0
  248. package/dist/services/working-directories-service.d.ts.map +1 -0
  249. package/dist/services/working-directories-service.js +103 -0
  250. package/dist/services/working-directories-service.js.map +1 -0
  251. package/dist/types/config.d.ts +111 -0
  252. package/dist/types/config.d.ts.map +1 -0
  253. package/dist/types/config.js +14 -0
  254. package/dist/types/config.js.map +1 -0
  255. package/dist/types/express.d.ts +5 -0
  256. package/dist/types/express.d.ts.map +1 -0
  257. package/dist/types/express.js +2 -0
  258. package/dist/types/express.js.map +1 -0
  259. package/dist/types/index.d.ts +325 -0
  260. package/dist/types/index.d.ts.map +1 -0
  261. package/dist/types/index.js +18 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/types/insights.d.ts +99 -0
  264. package/dist/types/insights.d.ts.map +1 -0
  265. package/dist/types/insights.js +7 -0
  266. package/dist/types/insights.js.map +1 -0
  267. package/dist/types/license.d.ts +70 -0
  268. package/dist/types/license.d.ts.map +1 -0
  269. package/dist/types/license.js +5 -0
  270. package/dist/types/license.js.map +1 -0
  271. package/dist/types/router-config.d.ts +13 -0
  272. package/dist/types/router-config.d.ts.map +1 -0
  273. package/dist/types/router-config.js +2 -0
  274. package/dist/types/router-config.js.map +1 -0
  275. package/dist/utils/constants.d.ts +26 -0
  276. package/dist/utils/constants.d.ts.map +1 -0
  277. package/dist/utils/constants.js +28 -0
  278. package/dist/utils/constants.js.map +1 -0
  279. package/dist/utils/machine-id.d.ts +7 -0
  280. package/dist/utils/machine-id.d.ts.map +1 -0
  281. package/dist/utils/machine-id.js +76 -0
  282. package/dist/utils/machine-id.js.map +1 -0
  283. package/dist/utils/server-startup.d.ts +13 -0
  284. package/dist/utils/server-startup.d.ts.map +1 -0
  285. package/dist/utils/server-startup.js +20 -0
  286. package/dist/utils/server-startup.js.map +1 -0
  287. package/dist/web/assets/main-DAc2rjJ2.css +1 -0
  288. package/dist/web/assets/main-DvlZ02mT.js +137 -0
  289. package/dist/web/favicon.png +0 -0
  290. package/dist/web/favicon.svg +22 -0
  291. package/dist/web/icon-192x192.png +0 -0
  292. package/dist/web/icon-512x512.png +0 -0
  293. package/dist/web/index.html +36 -0
  294. package/dist/web/manifest.json +61 -0
  295. package/package.json +174 -0
  296. package/scripts/postinstall.js +30 -0
@@ -0,0 +1,277 @@
1
+ /**
2
+ * InsightQueue - Serializes insight operations per session to eliminate race conditions.
3
+ *
4
+ * The Problem This Solves:
5
+ * Previously, background regenerations could race with patches:
6
+ * T+0s: Patch starts (Haiku)
7
+ * T+1s: Background regen starts (Opus)
8
+ * T+5s: Patch completes, writes to cache
9
+ * T+8s: Regen completes, merge decision uses stale snapshot, overwrites patch
10
+ *
11
+ * The Solution:
12
+ * All insight operations go through this queue. Operations for the same session
13
+ * are serialized - a REFRESH can't start until the PATCH completes.
14
+ *
15
+ * Key Design Decisions:
16
+ * - One queue per session (different sessions can run in parallel)
17
+ * - Operations coalesce (if PATCH is queued and another PATCH comes in, skip the new one)
18
+ * - Priority ordering: PATCH > GENERATE > REFRESH
19
+ * - In-memory only (operations are idempotent, no need for persistence)
20
+ */
21
+ import { EventEmitter } from 'events';
22
+ import { createLogger } from './logger.js';
23
+ // Priority ordering: lower number = higher priority
24
+ const PRIORITY_ORDER = {
25
+ high: 0,
26
+ normal: 1,
27
+ low: 2,
28
+ };
29
+ // Type ordering within same priority: PATCH > GENERATE > REFRESH
30
+ const TYPE_ORDER = {
31
+ PATCH: 0,
32
+ GENERATE: 1,
33
+ REFRESH: 2,
34
+ };
35
+ /**
36
+ * Compare two operations for queue ordering.
37
+ * Returns negative if a should come before b.
38
+ */
39
+ function compareOperations(a, b) {
40
+ // First by priority
41
+ const priorityDiff = PRIORITY_ORDER[a.priority] - PRIORITY_ORDER[b.priority];
42
+ if (priorityDiff !== 0)
43
+ return priorityDiff;
44
+ // Then by type
45
+ const typeDiff = TYPE_ORDER[a.type] - TYPE_ORDER[b.type];
46
+ if (typeDiff !== 0)
47
+ return typeDiff;
48
+ // Finally by enqueue time (FIFO within same priority+type)
49
+ return a.enqueuedAt - b.enqueuedAt;
50
+ }
51
+ export class InsightQueue extends EventEmitter {
52
+ logger;
53
+ queues = new Map();
54
+ processing = new Set();
55
+ // Track what operation type is currently being processed per session
56
+ processingType = new Map();
57
+ stats = {
58
+ totalEnqueued: 0,
59
+ totalProcessed: 0,
60
+ totalSkipped: 0,
61
+ byType: { GENERATE: 0, PATCH: 0, REFRESH: 0 },
62
+ byTrigger: {},
63
+ };
64
+ // Executor function - injected to avoid circular dependencies
65
+ executor = null;
66
+ constructor() {
67
+ super();
68
+ this.logger = createLogger('InsightQueue');
69
+ }
70
+ /**
71
+ * Set the executor function that processes operations.
72
+ * This is injected to break the circular dependency between queue and handler.
73
+ */
74
+ setExecutor(executor) {
75
+ this.executor = executor;
76
+ this.logger.info('Executor set');
77
+ }
78
+ /**
79
+ * Enqueue an insight operation.
80
+ * Operations are coalesced (duplicate type+session skipped) and prioritized.
81
+ */
82
+ enqueue(op) {
83
+ const operation = {
84
+ ...op,
85
+ enqueuedAt: Date.now(),
86
+ };
87
+ const queue = this.queues.get(op.sessionId) || [];
88
+ // Coalesce: skip if same operation type is already queued OR currently processing
89
+ const isQueued = queue.some(q => q.type === op.type);
90
+ const isProcessing = this.processingType.get(op.sessionId) === op.type;
91
+ if (isQueued || isProcessing) {
92
+ this.stats.totalSkipped++;
93
+ this.logger.debug('Operation coalesced', {
94
+ sessionId: op.sessionId.slice(0, 8),
95
+ type: op.type,
96
+ trigger: op.trigger,
97
+ reason: isProcessing ? 'already_processing' : 'already_queued',
98
+ queueLength: queue.length,
99
+ });
100
+ return false;
101
+ }
102
+ // Add to queue and sort by priority
103
+ queue.push(operation);
104
+ queue.sort(compareOperations);
105
+ this.queues.set(op.sessionId, queue);
106
+ // Update stats
107
+ this.stats.totalEnqueued++;
108
+ this.stats.byType[op.type]++;
109
+ this.stats.byTrigger[op.trigger] = (this.stats.byTrigger[op.trigger] || 0) + 1;
110
+ this.logger.info('Operation enqueued', {
111
+ sessionId: op.sessionId.slice(0, 8),
112
+ type: op.type,
113
+ priority: op.priority,
114
+ trigger: op.trigger,
115
+ queueLength: queue.length,
116
+ traceId: op.traceId,
117
+ });
118
+ // Emit event for monitoring
119
+ this.emit('enqueued', operation);
120
+ // Start processing if not already running
121
+ this.processNext(op.sessionId);
122
+ return true;
123
+ }
124
+ /**
125
+ * Process the next operation in a session's queue.
126
+ * This is the serialization point - only one operation per session at a time.
127
+ */
128
+ async processNext(sessionId) {
129
+ // Already processing this session - wait for current operation to complete
130
+ if (this.processing.has(sessionId)) {
131
+ return;
132
+ }
133
+ const queue = this.queues.get(sessionId);
134
+ if (!queue || queue.length === 0) {
135
+ return;
136
+ }
137
+ if (!this.executor) {
138
+ this.logger.error('No executor set - cannot process operations');
139
+ return;
140
+ }
141
+ // Mark as processing
142
+ this.processing.add(sessionId);
143
+ const op = queue.shift();
144
+ this.processingType.set(sessionId, op.type);
145
+ const startTime = Date.now();
146
+ this.logger.info('Processing operation', {
147
+ sessionId: sessionId.slice(0, 8),
148
+ type: op.type,
149
+ trigger: op.trigger,
150
+ waitTimeMs: startTime - op.enqueuedAt,
151
+ traceId: op.traceId,
152
+ });
153
+ // Emit event for monitoring
154
+ this.emit('processing', op);
155
+ try {
156
+ await this.executor(op);
157
+ const durationMs = Date.now() - startTime;
158
+ this.stats.totalProcessed++;
159
+ this.logger.info('Operation completed', {
160
+ sessionId: sessionId.slice(0, 8),
161
+ type: op.type,
162
+ trigger: op.trigger,
163
+ durationMs,
164
+ traceId: op.traceId,
165
+ });
166
+ // Emit event for monitoring
167
+ this.emit('completed', { ...op, durationMs });
168
+ }
169
+ catch (error) {
170
+ const durationMs = Date.now() - startTime;
171
+ this.logger.error('Operation failed', {
172
+ sessionId: sessionId.slice(0, 8),
173
+ type: op.type,
174
+ trigger: op.trigger,
175
+ durationMs,
176
+ error: error instanceof Error ? error.message : String(error),
177
+ traceId: op.traceId,
178
+ });
179
+ // Emit event for monitoring
180
+ this.emit('failed', { ...op, durationMs, error });
181
+ }
182
+ finally {
183
+ // Mark as no longer processing
184
+ this.processing.delete(sessionId);
185
+ this.processingType.delete(sessionId);
186
+ // Process next in queue (if any)
187
+ this.processNext(sessionId);
188
+ }
189
+ }
190
+ /**
191
+ * Get the current queue for a session (for debugging/UI).
192
+ */
193
+ getQueue(sessionId) {
194
+ return [...(this.queues.get(sessionId) || [])];
195
+ }
196
+ /**
197
+ * Check if a session is currently being processed.
198
+ */
199
+ isProcessing(sessionId) {
200
+ return this.processing.has(sessionId);
201
+ }
202
+ /**
203
+ * Get the operation type currently being processed for a session.
204
+ */
205
+ getProcessingType(sessionId) {
206
+ return this.processingType.get(sessionId);
207
+ }
208
+ /**
209
+ * Get the number of pending operations for a session.
210
+ */
211
+ getPendingCount(sessionId) {
212
+ return this.queues.get(sessionId)?.length || 0;
213
+ }
214
+ /**
215
+ * Get all sessions with pending operations.
216
+ */
217
+ getActiveSessionIds() {
218
+ return Array.from(this.queues.keys()).filter(sessionId => (this.queues.get(sessionId)?.length || 0) > 0 || this.processing.has(sessionId));
219
+ }
220
+ /**
221
+ * Get queue statistics.
222
+ */
223
+ getStats() {
224
+ return { ...this.stats };
225
+ }
226
+ /**
227
+ * Clear the queue for a session (e.g., when session is archived).
228
+ */
229
+ clearSession(sessionId) {
230
+ const queue = this.queues.get(sessionId);
231
+ if (queue && queue.length > 0) {
232
+ this.logger.info('Clearing session queue', {
233
+ sessionId: sessionId.slice(0, 8),
234
+ droppedOperations: queue.length,
235
+ });
236
+ }
237
+ this.queues.delete(sessionId);
238
+ }
239
+ /**
240
+ * Shutdown the queue (for graceful server shutdown).
241
+ * Waits for in-flight operations to complete but doesn't process new ones.
242
+ */
243
+ async shutdown(timeoutMs = 30000) {
244
+ this.logger.info('Shutting down insight queue', {
245
+ processingCount: this.processing.size,
246
+ pendingCount: Array.from(this.queues.values()).reduce((sum, q) => sum + q.length, 0),
247
+ });
248
+ // Clear all pending queues
249
+ this.queues.clear();
250
+ // Wait for in-flight operations to complete
251
+ const startTime = Date.now();
252
+ while (this.processing.size > 0 && Date.now() - startTime < timeoutMs) {
253
+ await new Promise(resolve => setTimeout(resolve, 100));
254
+ }
255
+ if (this.processing.size > 0) {
256
+ this.logger.warn('Shutdown timed out with operations still processing', {
257
+ remainingCount: this.processing.size,
258
+ });
259
+ }
260
+ else {
261
+ this.logger.info('Insight queue shutdown complete');
262
+ }
263
+ }
264
+ }
265
+ // Singleton instance
266
+ let instance = null;
267
+ export function getInsightQueue() {
268
+ if (!instance) {
269
+ instance = new InsightQueue();
270
+ }
271
+ return instance;
272
+ }
273
+ // For testing - allows resetting the singleton
274
+ export function resetInsightQueue() {
275
+ instance = null;
276
+ }
277
+ //# sourceMappingURL=insight-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-queue.js","sourceRoot":"","sources":["../../src/services/insight-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * InsightsService - Unified event-driven insights system.
3
+ *
4
+ * This consolidates InsightsEventCoordinator + InsightsEventHandler into a single service.
5
+ * It handles:
6
+ * 1. Watching for session activity (file changes in ~/.claude/projects)
7
+ * 2. Tracking session state (action counts, timing, etc.)
8
+ * 3. Triggering insight generation and patching via InsightQueue
9
+ * 4. Executing LLM operations (generation, quick check, patch)
10
+ *
11
+ * Architecture V2 Features:
12
+ * - InsightQueue for serialization (eliminates race conditions)
13
+ * - Haiku-heavy patches (cheap quick checks, targeted updates)
14
+ * - Ownership model for REFRESH (deterministic field ownership)
15
+ */
16
+ import { EventEmitter } from 'events';
17
+ interface SessionState {
18
+ actionCount: number;
19
+ lastActionAt: number;
20
+ lastCheckAt: number;
21
+ insightsGeneratedAt?: number;
22
+ insightsPatchedAt?: number;
23
+ regenTimerId?: NodeJS.Timeout;
24
+ completionCheckTimer?: NodeJS.Timeout;
25
+ quickCheckDebounceTimer?: NodeJS.Timeout;
26
+ lastResponseTimestamp?: number;
27
+ }
28
+ export declare class InsightsService extends EventEmitter {
29
+ private logger;
30
+ private historyReader;
31
+ private sessionInfoService;
32
+ private insightsComputeService;
33
+ private projectsDir;
34
+ private watchers;
35
+ private debounceTimers;
36
+ private isWatching;
37
+ private sessionStates;
38
+ private lastKnownMessageCounts;
39
+ private pendingGenerations;
40
+ private pendingQuickChecks;
41
+ private pendingActionEvents;
42
+ private pendingGenerateEvents;
43
+ constructor();
44
+ /**
45
+ * Initialize the insights service. Call once at startup.
46
+ */
47
+ initialize(): void;
48
+ /**
49
+ * Stop the insights service. Call at shutdown.
50
+ */
51
+ stop(): void;
52
+ private startWatching;
53
+ private watchDirectory;
54
+ private watchProjectDirectory;
55
+ private handleFileChange;
56
+ private processSessionUpdate;
57
+ /**
58
+ * Handle action event - determine if/how to trigger patch checking
59
+ */
60
+ private handleSessionAction;
61
+ private extractActions;
62
+ private extractFilename;
63
+ private enqueueGenerate;
64
+ private enqueueAction;
65
+ private mapReasonToTrigger;
66
+ private executeQueueOperation;
67
+ private executeGenerate;
68
+ /**
69
+ * Apply deterministic ownership model for REFRESH operations.
70
+ * - Haiku owns (keep cached): currentState, milestones, recentActions
71
+ * - Opus owns (use fresh): context, panels, tags, theme
72
+ * - Notable: accumulates (merge, don't replace)
73
+ */
74
+ private applyOwnershipModel;
75
+ private mergeNotableEvents;
76
+ private executeAction;
77
+ private doQuickCheck;
78
+ private doPatch;
79
+ private applyPatches;
80
+ /**
81
+ * Called when insights have been generated for a session
82
+ */
83
+ private markInsightsGenerated;
84
+ private markInsightsPatched;
85
+ private markQuickCheckPerformed;
86
+ private startRegenTimer;
87
+ /**
88
+ * Clean up tracking for a session (call when archived or idle)
89
+ */
90
+ cleanupSession(sessionId: string): void;
91
+ /**
92
+ * Get the current state for a session (for debugging/UI)
93
+ */
94
+ getSessionState(sessionId: string): SessionState | undefined;
95
+ }
96
+ export declare function getInsightsService(): InsightsService;
97
+ /**
98
+ * Initialize the insights service. Call once at server startup.
99
+ */
100
+ export declare function initializeInsightsService(): void;
101
+ export {};
102
+ //# sourceMappingURL=insights-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights-service.d.ts","sourceRoot":"","sources":["../../src/services/insights-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAkBtC,UAAU,YAAY;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC;IACzC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AA6ED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,UAAU,CAAS;IAG3B,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,sBAAsB,CAAkC;IAGhE,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,kBAAkB,CAA0B;IAGpD,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,qBAAqB,CAAyC;;IAkBtE;;OAEG;IACH,UAAU,IAAI,IAAI;IAWlB;;OAEG;IACH,IAAI,IAAI,IAAI;IA8BZ,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,gBAAgB;YAmBV,oBAAoB;IA8JlC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyF3B,OAAO,CAAC,cAAc;IAwGtB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,kBAAkB;YAWZ,qBAAqB;YA4CrB,eAAe;IAmE7B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,kBAAkB;YA8BZ,aAAa;YAoIb,YAAY;YAeZ,OAAO;YAoFP,YAAY;IA0J1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAsCvC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAG7D;AAQD,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAGhD"}