lattice-orchestrator 0.7.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 (440) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +58 -0
  3. package/config/logrotate.conf +15 -0
  4. package/dist/cli-parser.d.ts +11 -0
  5. package/dist/cli-parser.d.ts.map +1 -0
  6. package/dist/cli-parser.js +48 -0
  7. package/dist/cli-parser.js.map +1 -0
  8. package/dist/lattice-server.d.ts +70 -0
  9. package/dist/lattice-server.d.ts.map +1 -0
  10. package/dist/lattice-server.js +969 -0
  11. package/dist/lattice-server.js.map +1 -0
  12. package/dist/mcp-server/index.d.ts +3 -0
  13. package/dist/mcp-server/index.d.ts.map +1 -0
  14. package/dist/mcp-server/index.js +190 -0
  15. package/dist/mcp-server/index.js.map +1 -0
  16. package/dist/mcp-server/lattice-tools.d.ts +15 -0
  17. package/dist/mcp-server/lattice-tools.d.ts.map +1 -0
  18. package/dist/mcp-server/lattice-tools.js +366 -0
  19. package/dist/mcp-server/lattice-tools.js.map +1 -0
  20. package/dist/middleware/cors-setup.d.ts +7 -0
  21. package/dist/middleware/cors-setup.d.ts.map +1 -0
  22. package/dist/middleware/cors-setup.js +8 -0
  23. package/dist/middleware/cors-setup.js.map +1 -0
  24. package/dist/middleware/error-handler.d.ts +4 -0
  25. package/dist/middleware/error-handler.d.ts.map +1 -0
  26. package/dist/middleware/error-handler.js +27 -0
  27. package/dist/middleware/error-handler.js.map +1 -0
  28. package/dist/middleware/query-parser.d.ts +11 -0
  29. package/dist/middleware/query-parser.d.ts.map +1 -0
  30. package/dist/middleware/query-parser.js +68 -0
  31. package/dist/middleware/query-parser.js.map +1 -0
  32. package/dist/middleware/request-logger.d.ts +4 -0
  33. package/dist/middleware/request-logger.d.ts.map +1 -0
  34. package/dist/middleware/request-logger.js +6 -0
  35. package/dist/middleware/request-logger.js.map +1 -0
  36. package/dist/process-daemon/index.d.ts +14 -0
  37. package/dist/process-daemon/index.d.ts.map +1 -0
  38. package/dist/process-daemon/index.js +51 -0
  39. package/dist/process-daemon/index.js.map +1 -0
  40. package/dist/process-daemon/process-daemon.d.ts +101 -0
  41. package/dist/process-daemon/process-daemon.d.ts.map +1 -0
  42. package/dist/process-daemon/process-daemon.js +846 -0
  43. package/dist/process-daemon/process-daemon.js.map +1 -0
  44. package/dist/process-daemon/process-manager-client.d.ts +123 -0
  45. package/dist/process-daemon/process-manager-client.d.ts.map +1 -0
  46. package/dist/process-daemon/process-manager-client.js +329 -0
  47. package/dist/process-daemon/process-manager-client.js.map +1 -0
  48. package/dist/process-daemon/process-manager-interface.d.ts +61 -0
  49. package/dist/process-daemon/process-manager-interface.d.ts.map +1 -0
  50. package/dist/process-daemon/process-manager-interface.js +8 -0
  51. package/dist/process-daemon/process-manager-interface.js.map +1 -0
  52. package/dist/process-daemon/test-daemon.d.ts +12 -0
  53. package/dist/process-daemon/test-daemon.d.ts.map +1 -0
  54. package/dist/process-daemon/test-daemon.js +81 -0
  55. package/dist/process-daemon/test-daemon.js.map +1 -0
  56. package/dist/process-daemon/types.d.ts +97 -0
  57. package/dist/process-daemon/types.d.ts.map +1 -0
  58. package/dist/process-daemon/types.js +8 -0
  59. package/dist/process-daemon/types.js.map +1 -0
  60. package/dist/routes/analysis.routes.d.ts +13 -0
  61. package/dist/routes/analysis.routes.d.ts.map +1 -0
  62. package/dist/routes/analysis.routes.js +520 -0
  63. package/dist/routes/analysis.routes.js.map +1 -0
  64. package/dist/routes/config.routes.d.ts +4 -0
  65. package/dist/routes/config.routes.d.ts.map +1 -0
  66. package/dist/routes/config.routes.js +27 -0
  67. package/dist/routes/config.routes.js.map +1 -0
  68. package/dist/routes/conversation.routes.d.ts +43 -0
  69. package/dist/routes/conversation.routes.d.ts.map +1 -0
  70. package/dist/routes/conversation.routes.js +79 -0
  71. package/dist/routes/conversation.routes.js.map +1 -0
  72. package/dist/routes/filesystem.routes.d.ts +4 -0
  73. package/dist/routes/filesystem.routes.d.ts.map +1 -0
  74. package/dist/routes/filesystem.routes.js +86 -0
  75. package/dist/routes/filesystem.routes.js.map +1 -0
  76. package/dist/routes/insights.routes.d.ts +17 -0
  77. package/dist/routes/insights.routes.d.ts.map +1 -0
  78. package/dist/routes/insights.routes.js +633 -0
  79. package/dist/routes/insights.routes.js.map +1 -0
  80. package/dist/routes/lattice.routes.d.ts +10 -0
  81. package/dist/routes/lattice.routes.d.ts.map +1 -0
  82. package/dist/routes/lattice.routes.js +123 -0
  83. package/dist/routes/lattice.routes.js.map +1 -0
  84. package/dist/routes/license.routes.d.ts +3 -0
  85. package/dist/routes/license.routes.d.ts.map +1 -0
  86. package/dist/routes/license.routes.js +95 -0
  87. package/dist/routes/license.routes.js.map +1 -0
  88. package/dist/routes/log.routes.d.ts +3 -0
  89. package/dist/routes/log.routes.d.ts.map +1 -0
  90. package/dist/routes/log.routes.js +184 -0
  91. package/dist/routes/log.routes.js.map +1 -0
  92. package/dist/routes/pending-question.routes.d.ts +9 -0
  93. package/dist/routes/pending-question.routes.d.ts.map +1 -0
  94. package/dist/routes/pending-question.routes.js +162 -0
  95. package/dist/routes/pending-question.routes.js.map +1 -0
  96. package/dist/routes/permission.routes.d.ts +18 -0
  97. package/dist/routes/permission.routes.d.ts.map +1 -0
  98. package/dist/routes/permission.routes.js +370 -0
  99. package/dist/routes/permission.routes.js.map +1 -0
  100. package/dist/routes/process-events.routes.d.ts +9 -0
  101. package/dist/routes/process-events.routes.d.ts.map +1 -0
  102. package/dist/routes/process-events.routes.js +141 -0
  103. package/dist/routes/process-events.routes.js.map +1 -0
  104. package/dist/routes/prototype.routes.d.ts +9 -0
  105. package/dist/routes/prototype.routes.d.ts.map +1 -0
  106. package/dist/routes/prototype.routes.js +757 -0
  107. package/dist/routes/prototype.routes.js.map +1 -0
  108. package/dist/routes/question.routes.d.ts +8 -0
  109. package/dist/routes/question.routes.d.ts.map +1 -0
  110. package/dist/routes/question.routes.js +83 -0
  111. package/dist/routes/question.routes.js.map +1 -0
  112. package/dist/routes/session-control.routes.d.ts +29 -0
  113. package/dist/routes/session-control.routes.d.ts.map +1 -0
  114. package/dist/routes/session-control.routes.js +455 -0
  115. package/dist/routes/session-control.routes.js.map +1 -0
  116. package/dist/routes/session-lifecycle.routes.d.ts +21 -0
  117. package/dist/routes/session-lifecycle.routes.d.ts.map +1 -0
  118. package/dist/routes/session-lifecycle.routes.js +256 -0
  119. package/dist/routes/session-lifecycle.routes.js.map +1 -0
  120. package/dist/routes/session-query.routes.d.ts +25 -0
  121. package/dist/routes/session-query.routes.d.ts.map +1 -0
  122. package/dist/routes/session-query.routes.js +363 -0
  123. package/dist/routes/session-query.routes.js.map +1 -0
  124. package/dist/routes/session-stream.routes.d.ts +21 -0
  125. package/dist/routes/session-stream.routes.d.ts.map +1 -0
  126. package/dist/routes/session-stream.routes.js +235 -0
  127. package/dist/routes/session-stream.routes.js.map +1 -0
  128. package/dist/routes/streaming.routes.d.ts +4 -0
  129. package/dist/routes/streaming.routes.d.ts.map +1 -0
  130. package/dist/routes/streaming.routes.js +33 -0
  131. package/dist/routes/streaming.routes.js.map +1 -0
  132. package/dist/routes/system.routes.d.ts +7 -0
  133. package/dist/routes/system.routes.d.ts.map +1 -0
  134. package/dist/routes/system.routes.js +214 -0
  135. package/dist/routes/system.routes.js.map +1 -0
  136. package/dist/routes/walkthrough.routes.d.ts +19 -0
  137. package/dist/routes/walkthrough.routes.d.ts.map +1 -0
  138. package/dist/routes/walkthrough.routes.js +688 -0
  139. package/dist/routes/walkthrough.routes.js.map +1 -0
  140. package/dist/routes/working-directories.routes.d.ts +4 -0
  141. package/dist/routes/working-directories.routes.d.ts.map +1 -0
  142. package/dist/routes/working-directories.routes.js +25 -0
  143. package/dist/routes/working-directories.routes.js.map +1 -0
  144. package/dist/server.d.ts +3 -0
  145. package/dist/server.d.ts.map +1 -0
  146. package/dist/server.js +34 -0
  147. package/dist/server.js.map +1 -0
  148. package/dist/services/ToolMetricsService.d.ts +53 -0
  149. package/dist/services/ToolMetricsService.d.ts.map +1 -0
  150. package/dist/services/ToolMetricsService.js +230 -0
  151. package/dist/services/ToolMetricsService.js.map +1 -0
  152. package/dist/services/claude-router-service.d.ts +19 -0
  153. package/dist/services/claude-router-service.d.ts.map +1 -0
  154. package/dist/services/claude-router-service.js +160 -0
  155. package/dist/services/claude-router-service.js.map +1 -0
  156. package/dist/services/commands-service.d.ts +20 -0
  157. package/dist/services/commands-service.d.ts.map +1 -0
  158. package/dist/services/commands-service.js +115 -0
  159. package/dist/services/commands-service.js.map +1 -0
  160. package/dist/services/connection-debug-logger.d.ts +85 -0
  161. package/dist/services/connection-debug-logger.d.ts.map +1 -0
  162. package/dist/services/connection-debug-logger.js +221 -0
  163. package/dist/services/connection-debug-logger.js.map +1 -0
  164. package/dist/services/debug-log.d.ts +6 -0
  165. package/dist/services/debug-log.d.ts.map +1 -0
  166. package/dist/services/debug-log.js +27 -0
  167. package/dist/services/debug-log.js.map +1 -0
  168. package/dist/services/gemini-service.d.ts +35 -0
  169. package/dist/services/gemini-service.d.ts.map +1 -0
  170. package/dist/services/gemini-service.js +256 -0
  171. package/dist/services/gemini-service.js.map +1 -0
  172. package/dist/services/infrastructure/config-service.d.ts +79 -0
  173. package/dist/services/infrastructure/config-service.d.ts.map +1 -0
  174. package/dist/services/infrastructure/config-service.js +431 -0
  175. package/dist/services/infrastructure/config-service.js.map +1 -0
  176. package/dist/services/infrastructure/cost-tracker.d.ts +112 -0
  177. package/dist/services/infrastructure/cost-tracker.d.ts.map +1 -0
  178. package/dist/services/infrastructure/cost-tracker.js +423 -0
  179. package/dist/services/infrastructure/cost-tracker.js.map +1 -0
  180. package/dist/services/infrastructure/file-system-service.d.ts +61 -0
  181. package/dist/services/infrastructure/file-system-service.d.ts.map +1 -0
  182. package/dist/services/infrastructure/file-system-service.js +348 -0
  183. package/dist/services/infrastructure/file-system-service.js.map +1 -0
  184. package/dist/services/infrastructure/log-formatter.d.ts +5 -0
  185. package/dist/services/infrastructure/log-formatter.d.ts.map +1 -0
  186. package/dist/services/infrastructure/log-formatter.js +77 -0
  187. package/dist/services/infrastructure/log-formatter.js.map +1 -0
  188. package/dist/services/infrastructure/log-stream-buffer.d.ts +11 -0
  189. package/dist/services/infrastructure/log-stream-buffer.d.ts.map +1 -0
  190. package/dist/services/infrastructure/log-stream-buffer.js +36 -0
  191. package/dist/services/infrastructure/log-stream-buffer.js.map +1 -0
  192. package/dist/services/infrastructure/logger.d.ts +71 -0
  193. package/dist/services/infrastructure/logger.d.ts.map +1 -0
  194. package/dist/services/infrastructure/logger.js +215 -0
  195. package/dist/services/infrastructure/logger.js.map +1 -0
  196. package/dist/services/infrastructure/service-registry.d.ts +86 -0
  197. package/dist/services/infrastructure/service-registry.d.ts.map +1 -0
  198. package/dist/services/infrastructure/service-registry.js +162 -0
  199. package/dist/services/infrastructure/service-registry.js.map +1 -0
  200. package/dist/services/infrastructure/stream-manager.d.ts +87 -0
  201. package/dist/services/infrastructure/stream-manager.d.ts.map +1 -0
  202. package/dist/services/infrastructure/stream-manager.js +436 -0
  203. package/dist/services/infrastructure/stream-manager.js.map +1 -0
  204. package/dist/services/infrastructure/timing.d.ts +72 -0
  205. package/dist/services/infrastructure/timing.d.ts.map +1 -0
  206. package/dist/services/infrastructure/timing.js +115 -0
  207. package/dist/services/infrastructure/timing.js.map +1 -0
  208. package/dist/services/insights/anthropic-service.d.ts +224 -0
  209. package/dist/services/insights/anthropic-service.d.ts.map +1 -0
  210. package/dist/services/insights/anthropic-service.js +1062 -0
  211. package/dist/services/insights/anthropic-service.js.map +1 -0
  212. package/dist/services/insights/insight-audit-repository.d.ts +119 -0
  213. package/dist/services/insights/insight-audit-repository.d.ts.map +1 -0
  214. package/dist/services/insights/insight-audit-repository.js +242 -0
  215. package/dist/services/insights/insight-audit-repository.js.map +1 -0
  216. package/dist/services/insights/insight-queue.d.ts +99 -0
  217. package/dist/services/insights/insight-queue.d.ts.map +1 -0
  218. package/dist/services/insights/insight-queue.js +277 -0
  219. package/dist/services/insights/insight-queue.js.map +1 -0
  220. package/dist/services/insights/insights-computer.d.ts +132 -0
  221. package/dist/services/insights/insights-computer.d.ts.map +1 -0
  222. package/dist/services/insights/insights-computer.js +936 -0
  223. package/dist/services/insights/insights-computer.js.map +1 -0
  224. package/dist/services/insights/insights-coordinator.d.ts +165 -0
  225. package/dist/services/insights/insights-coordinator.d.ts.map +1 -0
  226. package/dist/services/insights/insights-coordinator.js +1678 -0
  227. package/dist/services/insights/insights-coordinator.js.map +1 -0
  228. package/dist/services/insights/insights-event-log.d.ts +196 -0
  229. package/dist/services/insights/insights-event-log.d.ts.map +1 -0
  230. package/dist/services/insights/insights-event-log.js +319 -0
  231. package/dist/services/insights/insights-event-log.js.map +1 -0
  232. package/dist/services/lattice-service.d.ts +77 -0
  233. package/dist/services/lattice-service.d.ts.map +1 -0
  234. package/dist/services/lattice-service.js +195 -0
  235. package/dist/services/lattice-service.js.map +1 -0
  236. package/dist/services/license-service.d.ts +69 -0
  237. package/dist/services/license-service.d.ts.map +1 -0
  238. package/dist/services/license-service.js +330 -0
  239. package/dist/services/license-service.js.map +1 -0
  240. package/dist/services/mcp-config-generator.d.ts +32 -0
  241. package/dist/services/mcp-config-generator.d.ts.map +1 -0
  242. package/dist/services/mcp-config-generator.js +126 -0
  243. package/dist/services/mcp-config-generator.js.map +1 -0
  244. package/dist/services/message-filter.d.ts +22 -0
  245. package/dist/services/message-filter.d.ts.map +1 -0
  246. package/dist/services/message-filter.js +57 -0
  247. package/dist/services/message-filter.js.map +1 -0
  248. package/dist/services/notification-service.d.ts +45 -0
  249. package/dist/services/notification-service.d.ts.map +1 -0
  250. package/dist/services/notification-service.js +184 -0
  251. package/dist/services/notification-service.js.map +1 -0
  252. package/dist/services/pending-question-service.d.ts +97 -0
  253. package/dist/services/pending-question-service.d.ts.map +1 -0
  254. package/dist/services/pending-question-service.js +223 -0
  255. package/dist/services/pending-question-service.js.map +1 -0
  256. package/dist/services/permission-event-log.d.ts +136 -0
  257. package/dist/services/permission-event-log.d.ts.map +1 -0
  258. package/dist/services/permission-event-log.js +252 -0
  259. package/dist/services/permission-event-log.js.map +1 -0
  260. package/dist/services/permission-pattern-matcher.d.ts +82 -0
  261. package/dist/services/permission-pattern-matcher.d.ts.map +1 -0
  262. package/dist/services/permission-pattern-matcher.js +294 -0
  263. package/dist/services/permission-pattern-matcher.js.map +1 -0
  264. package/dist/services/permission-tracker.d.ts +67 -0
  265. package/dist/services/permission-tracker.d.ts.map +1 -0
  266. package/dist/services/permission-tracker.js +162 -0
  267. package/dist/services/permission-tracker.js.map +1 -0
  268. package/dist/services/process/claude-process-manager.d.ts +142 -0
  269. package/dist/services/process/claude-process-manager.d.ts.map +1 -0
  270. package/dist/services/process/claude-process-manager.js +1218 -0
  271. package/dist/services/process/claude-process-manager.js.map +1 -0
  272. package/dist/services/process/conversation-status-manager.d.ts +110 -0
  273. package/dist/services/process/conversation-status-manager.d.ts.map +1 -0
  274. package/dist/services/process/conversation-status-manager.js +349 -0
  275. package/dist/services/process/conversation-status-manager.js.map +1 -0
  276. package/dist/services/process/json-lines-parser.d.ts +19 -0
  277. package/dist/services/process/json-lines-parser.d.ts.map +1 -0
  278. package/dist/services/process/json-lines-parser.js +59 -0
  279. package/dist/services/process/json-lines-parser.js.map +1 -0
  280. package/dist/services/process/process-event-log.d.ts +263 -0
  281. package/dist/services/process/process-event-log.d.ts.map +1 -0
  282. package/dist/services/process/process-event-log.js +509 -0
  283. package/dist/services/process/process-event-log.js.map +1 -0
  284. package/dist/services/process/process-manager-factory.d.ts +109 -0
  285. package/dist/services/process/process-manager-factory.d.ts.map +1 -0
  286. package/dist/services/process/process-manager-factory.js +338 -0
  287. package/dist/services/process/process-manager-factory.js.map +1 -0
  288. package/dist/services/question-tracker.d.ts +51 -0
  289. package/dist/services/question-tracker.d.ts.map +1 -0
  290. package/dist/services/question-tracker.js +111 -0
  291. package/dist/services/question-tracker.js.map +1 -0
  292. package/dist/services/sessions/claude-history-reader.d.ts +139 -0
  293. package/dist/services/sessions/claude-history-reader.d.ts.map +1 -0
  294. package/dist/services/sessions/claude-history-reader.js +864 -0
  295. package/dist/services/sessions/claude-history-reader.js.map +1 -0
  296. package/dist/services/sessions/conversation-cache.d.ts +98 -0
  297. package/dist/services/sessions/conversation-cache.d.ts.map +1 -0
  298. package/dist/services/sessions/conversation-cache.js +329 -0
  299. package/dist/services/sessions/conversation-cache.js.map +1 -0
  300. package/dist/services/sessions/session-activity-watcher.d.ts +67 -0
  301. package/dist/services/sessions/session-activity-watcher.d.ts.map +1 -0
  302. package/dist/services/sessions/session-activity-watcher.js +236 -0
  303. package/dist/services/sessions/session-activity-watcher.js.map +1 -0
  304. package/dist/services/sessions/session-analysis-service.d.ts +72 -0
  305. package/dist/services/sessions/session-analysis-service.d.ts.map +1 -0
  306. package/dist/services/sessions/session-analysis-service.js +373 -0
  307. package/dist/services/sessions/session-analysis-service.js.map +1 -0
  308. package/dist/services/sessions/session-branch-service.d.ts +76 -0
  309. package/dist/services/sessions/session-branch-service.d.ts.map +1 -0
  310. package/dist/services/sessions/session-branch-service.js +355 -0
  311. package/dist/services/sessions/session-branch-service.js.map +1 -0
  312. package/dist/services/sessions/session-info-service.d.ts +455 -0
  313. package/dist/services/sessions/session-info-service.d.ts.map +1 -0
  314. package/dist/services/sessions/session-info-service.js +1640 -0
  315. package/dist/services/sessions/session-info-service.js.map +1 -0
  316. package/dist/services/sessions/session-marks-repository.d.ts +78 -0
  317. package/dist/services/sessions/session-marks-repository.d.ts.map +1 -0
  318. package/dist/services/sessions/session-marks-repository.js +263 -0
  319. package/dist/services/sessions/session-marks-repository.js.map +1 -0
  320. package/dist/services/sessions/session-marks-service.d.ts +137 -0
  321. package/dist/services/sessions/session-marks-service.d.ts.map +1 -0
  322. package/dist/services/sessions/session-marks-service.js +562 -0
  323. package/dist/services/sessions/session-marks-service.js.map +1 -0
  324. package/dist/services/sessions/session-review-service.d.ts +98 -0
  325. package/dist/services/sessions/session-review-service.d.ts.map +1 -0
  326. package/dist/services/sessions/session-review-service.js +629 -0
  327. package/dist/services/sessions/session-review-service.js.map +1 -0
  328. package/dist/services/sessions/turn-capture-service.d.ts +83 -0
  329. package/dist/services/sessions/turn-capture-service.d.ts.map +1 -0
  330. package/dist/services/sessions/turn-capture-service.js +477 -0
  331. package/dist/services/sessions/turn-capture-service.js.map +1 -0
  332. package/dist/services/sessions/turn-repository.d.ts +48 -0
  333. package/dist/services/sessions/turn-repository.d.ts.map +1 -0
  334. package/dist/services/sessions/turn-repository.js +103 -0
  335. package/dist/services/sessions/turn-repository.js.map +1 -0
  336. package/dist/services/walkthrough-service.d.ts +226 -0
  337. package/dist/services/walkthrough-service.d.ts.map +1 -0
  338. package/dist/services/walkthrough-service.js +1112 -0
  339. package/dist/services/walkthrough-service.js.map +1 -0
  340. package/dist/services/walkthrough-skill-prompt.d.ts +34 -0
  341. package/dist/services/walkthrough-skill-prompt.d.ts.map +1 -0
  342. package/dist/services/walkthrough-skill-prompt.js +313 -0
  343. package/dist/services/walkthrough-skill-prompt.js.map +1 -0
  344. package/dist/services/web-push-service.d.ts +48 -0
  345. package/dist/services/web-push-service.d.ts.map +1 -0
  346. package/dist/services/web-push-service.js +186 -0
  347. package/dist/services/web-push-service.js.map +1 -0
  348. package/dist/services/working-directories-service.d.ts +19 -0
  349. package/dist/services/working-directories-service.d.ts.map +1 -0
  350. package/dist/services/working-directories-service.js +103 -0
  351. package/dist/services/working-directories-service.js.map +1 -0
  352. package/dist/types/config.d.ts +122 -0
  353. package/dist/types/config.d.ts.map +1 -0
  354. package/dist/types/config.js +21 -0
  355. package/dist/types/config.js.map +1 -0
  356. package/dist/types/express.d.ts +5 -0
  357. package/dist/types/express.d.ts.map +1 -0
  358. package/dist/types/express.js +2 -0
  359. package/dist/types/express.js.map +1 -0
  360. package/dist/types/index.d.ts +400 -0
  361. package/dist/types/index.d.ts.map +1 -0
  362. package/dist/types/index.js +41 -0
  363. package/dist/types/index.js.map +1 -0
  364. package/dist/types/insights.d.ts +176 -0
  365. package/dist/types/insights.d.ts.map +1 -0
  366. package/dist/types/insights.js +23 -0
  367. package/dist/types/insights.js.map +1 -0
  368. package/dist/types/license.d.ts +70 -0
  369. package/dist/types/license.d.ts.map +1 -0
  370. package/dist/types/license.js +5 -0
  371. package/dist/types/license.js.map +1 -0
  372. package/dist/types/router-config.d.ts +13 -0
  373. package/dist/types/router-config.d.ts.map +1 -0
  374. package/dist/types/router-config.js +2 -0
  375. package/dist/types/router-config.js.map +1 -0
  376. package/dist/utils/constants.d.ts +26 -0
  377. package/dist/utils/constants.d.ts.map +1 -0
  378. package/dist/utils/constants.js +28 -0
  379. package/dist/utils/constants.js.map +1 -0
  380. package/dist/utils/machine-id.d.ts +7 -0
  381. package/dist/utils/machine-id.d.ts.map +1 -0
  382. package/dist/utils/machine-id.js +76 -0
  383. package/dist/utils/machine-id.js.map +1 -0
  384. package/dist/utils/server-startup.d.ts +11 -0
  385. package/dist/utils/server-startup.d.ts.map +1 -0
  386. package/dist/utils/server-startup.js +9 -0
  387. package/dist/utils/server-startup.js.map +1 -0
  388. package/dist/utils/update-check.d.ts +13 -0
  389. package/dist/utils/update-check.d.ts.map +1 -0
  390. package/dist/utils/update-check.js +90 -0
  391. package/dist/utils/update-check.js.map +1 -0
  392. package/dist/web/assets/ArchivedCardPrototype-S9ifiasa.js +5 -0
  393. package/dist/web/assets/BannerGallery-B__rJV6F.js +1 -0
  394. package/dist/web/assets/BannerPrototype-DBKP9Uiu.js +52 -0
  395. package/dist/web/assets/CodeHikeExperiment-B8jjWAFy.js +15 -0
  396. package/dist/web/assets/ContextTooltipVariations-DzklAFam.js +1 -0
  397. package/dist/web/assets/FontShowcasePrototype-KIMEWeP2.js +13 -0
  398. package/dist/web/assets/GeometricGallery-DddlWhHK.js +1 -0
  399. package/dist/web/assets/HistoryWalkthroughPrototype-DeniRRdw.js +18 -0
  400. package/dist/web/assets/InlineWalkthroughPrototype-Csd5r_Hk.js +1 -0
  401. package/dist/web/assets/MarkButtonPrototype-CxhxE0RP.js +1 -0
  402. package/dist/web/assets/MenuStylesPrototype-D7neA6YM.js +1 -0
  403. package/dist/web/assets/MomentCardVariations-2GT7GyFn.js +1 -0
  404. package/dist/web/assets/MomentHeaderVariations-DhGEw4XC.js +1 -0
  405. package/dist/web/assets/NarrativeWalkthroughDemo-B5C566fu.js +389 -0
  406. package/dist/web/assets/OutcomeVariations-BrZfsVcs.js +1 -0
  407. package/dist/web/assets/PermissionPatternPickerPrototype-CBOhe2Me.js +1 -0
  408. package/dist/web/assets/PermissionPrototype-BcF-a5an.js +1 -0
  409. package/dist/web/assets/PipelineGallery-BJhyM0rx.js +1 -0
  410. package/dist/web/assets/ScopeHeaderPrototype-GD1HNfaO.js +1 -0
  411. package/dist/web/assets/ScopeHeaderStylesPrototype-aa4uNJJ1.js +1 -0
  412. package/dist/web/assets/ScrollycodingPrototype-CKW1bf72.js +70 -0
  413. package/dist/web/assets/SectionHeaderVariations-DM8vUwfj.js +1 -0
  414. package/dist/web/assets/SemanticGallery-CtQEo7St.js +1 -0
  415. package/dist/web/assets/SessionCardPrototype-CgHCIMHe.js +1 -0
  416. package/dist/web/assets/SessionSidebarVariations-DMQL3Azj.js +3 -0
  417. package/dist/web/assets/SessionStartPrototype-Cwsv01Rr.js +1 -0
  418. package/dist/web/assets/SmartMenuPrototype-Br37Qbs_.js +1 -0
  419. package/dist/web/assets/StyleGallery-rZgrploB.js +1 -0
  420. package/dist/web/assets/TimelineCardPrototype-lzPc5mhe.js +19 -0
  421. package/dist/web/assets/ToolbarPrototype-Dm4BNZra.js +1 -0
  422. package/dist/web/assets/TooltipExperiment-Dy8QzTIP.js +13 -0
  423. package/dist/web/assets/WalkthroughCTAPrototype-uHoovujd.js +1 -0
  424. package/dist/web/assets/WalkthroughHeaderVariations-Do7Di1g1.js +1 -0
  425. package/dist/web/assets/WalkthroughShowcase-sGmRoPoM.js +112 -0
  426. package/dist/web/assets/arrow-right-D46Nx1mC.js +1 -0
  427. package/dist/web/assets/brain-BXIZKtOZ.js +1 -0
  428. package/dist/web/assets/grid-3x3-Cb81B62m.js +1 -0
  429. package/dist/web/assets/main-B1fyog77.js +321 -0
  430. package/dist/web/assets/main-C2PK2Klg.css +1 -0
  431. package/dist/web/assets/semantic-variations-Bd-W7ea2.js +1 -0
  432. package/dist/web/assets/target-Cf92wDTW.js +1 -0
  433. package/dist/web/favicon.png +0 -0
  434. package/dist/web/favicon.svg +22 -0
  435. package/dist/web/icon-192x192.png +0 -0
  436. package/dist/web/icon-512x512.png +0 -0
  437. package/dist/web/index.html +45 -0
  438. package/dist/web/manifest.json +61 -0
  439. package/package.json +192 -0
  440. package/scripts/postinstall.js +60 -0
@@ -0,0 +1,338 @@
1
+ /**
2
+ * Process Manager Factory
3
+ *
4
+ * Creates either a direct ClaudeProcessManager or a ProcessManagerClient
5
+ * depending on configuration. This allows cui-server to work with either mode.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import * as fs from 'fs';
9
+ import { ClaudeProcessManager } from './claude-process-manager.js';
10
+ import { ProcessManagerClient } from '../../process-daemon/process-manager-client.js';
11
+ import { DEFAULT_SOCKET_PATH } from '../../process-daemon/types.js';
12
+ import { createLogger } from '../infrastructure/logger.js';
13
+ import { getProcessEventLog } from './process-event-log.js';
14
+ import { asClaudeSessionId, asStreamingId } from '../../types/index.js';
15
+ const logger = createLogger('ProcessManagerFactory');
16
+ /**
17
+ * Unified process manager type - wraps either implementation
18
+ * and provides a consistent interface to cui-server.
19
+ */
20
+ export class UnifiedProcessManager extends EventEmitter {
21
+ _direct = null;
22
+ _client = null;
23
+ _mode;
24
+ _activeSessions = new Set();
25
+ _statusTracker = null;
26
+ constructor(mode) {
27
+ super();
28
+ this._mode = mode;
29
+ }
30
+ /**
31
+ * Set the status tracker for session registration
32
+ */
33
+ setStatusTracker(tracker) {
34
+ this._statusTracker = tracker;
35
+ }
36
+ get mode() {
37
+ return this._mode;
38
+ }
39
+ /**
40
+ * Initialize with direct process manager
41
+ */
42
+ initDirect(manager) {
43
+ this._direct = manager;
44
+ // Forward events
45
+ manager.on('claude-message', (data) => {
46
+ this._activeSessions.add(asStreamingId(data.streamingId));
47
+ this.emit('claude-message', data);
48
+ });
49
+ manager.on('process-closed', (data) => {
50
+ this._activeSessions.delete(asStreamingId(data.streamingId));
51
+ this.emit('process-closed', data);
52
+ });
53
+ manager.on('process-error', (data) => this.emit('process-error', data));
54
+ manager.on('process-spawned', (data) => this.emit('process-spawned', data));
55
+ }
56
+ /**
57
+ * Initialize with daemon client
58
+ */
59
+ async initClient(client) {
60
+ this._client = client;
61
+ await client.connect();
62
+ const processEventLog = getProcessEventLog();
63
+ // Forward events and populate ProcessEventLog
64
+ client.on('claude-message', (data) => {
65
+ this._activeSessions.add(asStreamingId(data.streamingId));
66
+ this.emit('claude-message', data);
67
+ });
68
+ client.on('process-closed', (data) => {
69
+ this._activeSessions.delete(asStreamingId(data.streamingId));
70
+ // Log process exit to ProcessEventLog
71
+ processEventLog.processExit({
72
+ traceId: data.streamingId,
73
+ streamingId: data.streamingId,
74
+ exitCode: data.code,
75
+ terminationReason: data.code === 0 ? 'normal_completion'
76
+ : data.code === 143 ? 'user_stop'
77
+ : data.code === 137 ? 'force_killed'
78
+ : 'process_crash',
79
+ });
80
+ this.emit('process-closed', data);
81
+ });
82
+ client.on('process-error', (data) => this.emit('process-error', data));
83
+ client.on('process-spawned', (data) => this.emit('process-spawned', data));
84
+ // Sync initial active sessions from daemon
85
+ try {
86
+ const sessions = await client.getActiveSessions();
87
+ for (const s of sessions) {
88
+ this._activeSessions.add(asStreamingId(s.streamingId));
89
+ // Also register with conversationStatusManager if available
90
+ if (this._statusTracker) {
91
+ this._statusTracker.registerActiveSession(asStreamingId(s.streamingId), asClaudeSessionId(s.sessionId));
92
+ }
93
+ }
94
+ logger.info('Synced active sessions from daemon', {
95
+ count: sessions.length,
96
+ sessions: sessions.map(s => ({ streamingId: s.streamingId.substring(0, 8), sessionId: s.sessionId.substring(0, 8) }))
97
+ });
98
+ }
99
+ catch (error) {
100
+ logger.warn('Failed to sync active sessions from daemon', { error });
101
+ }
102
+ }
103
+ // ============================================================================
104
+ // Unified Interface - matches ClaudeProcessManager signature
105
+ // ============================================================================
106
+ async startConversation(config) {
107
+ if (this._direct) {
108
+ return this._direct.startConversation(config);
109
+ }
110
+ if (this._client) {
111
+ const processEventLog = getProcessEventLog();
112
+ const isResume = 'sessionId' in config && !!config.sessionId;
113
+ // Log spawn start
114
+ const traceId = `daemon-${Date.now()}`;
115
+ processEventLog.spawnStart({
116
+ traceId,
117
+ streamingId: traceId, // Will be replaced with actual streamingId
118
+ isResume,
119
+ workingDirectory: config.workingDirectory,
120
+ model: config.model,
121
+ });
122
+ const result = await this._client.startConversation(config);
123
+ // Log spawn success and system init
124
+ processEventLog.spawnSuccess({
125
+ traceId: result.streamingId,
126
+ streamingId: result.streamingId,
127
+ pid: 0, // PID not available from daemon in spawn result
128
+ });
129
+ if (result.systemInit) {
130
+ processEventLog.systemInit({
131
+ traceId: result.streamingId,
132
+ streamingId: result.streamingId,
133
+ sessionId: result.systemInit.session_id,
134
+ model: result.systemInit.model,
135
+ workingDirectory: result.systemInit.cwd,
136
+ toolCount: result.systemInit.tools?.length || 0,
137
+ mcpServerCount: result.systemInit.mcp_servers?.length || 0,
138
+ });
139
+ }
140
+ // Register the session mapping immediately so it's available for AskUserQuestion
141
+ if (this._statusTracker && result.systemInit?.session_id) {
142
+ this._statusTracker.registerActiveSession(asStreamingId(result.streamingId), asClaudeSessionId(result.systemInit.session_id));
143
+ logger.debug('Registered session from daemon startConversation', {
144
+ streamingId: result.streamingId.substring(0, 8),
145
+ sessionId: result.systemInit.session_id.substring(0, 8)
146
+ });
147
+ }
148
+ return result;
149
+ }
150
+ throw new Error('Process manager not initialized');
151
+ }
152
+ async stopConversation(streamingId) {
153
+ if (this._direct) {
154
+ return this._direct.stopConversation(streamingId);
155
+ }
156
+ if (this._client) {
157
+ return this._client.stopConversation(streamingId);
158
+ }
159
+ throw new Error('Process manager not initialized');
160
+ }
161
+ forceKillConversation(streamingId) {
162
+ if (this._direct) {
163
+ return this._direct.forceKillConversation(streamingId);
164
+ }
165
+ if (this._client) {
166
+ return this._client.forceKillConversation(streamingId);
167
+ }
168
+ throw new Error('Process manager not initialized');
169
+ }
170
+ interruptConversation(streamingId) {
171
+ if (this._direct) {
172
+ return this._direct.interruptConversation(streamingId);
173
+ }
174
+ if (this._client) {
175
+ return this._client.interruptConversation(streamingId);
176
+ }
177
+ throw new Error('Process manager not initialized');
178
+ }
179
+ /**
180
+ * Get active sessions - SYNCHRONOUS for backwards compatibility
181
+ * Uses local cache that's kept in sync via events
182
+ */
183
+ getActiveSessions() {
184
+ return Array.from(this._activeSessions);
185
+ }
186
+ /**
187
+ * Check if session is active - SYNCHRONOUS for backwards compatibility
188
+ */
189
+ isSessionActive(streamingId) {
190
+ return this._activeSessions.has(streamingId);
191
+ }
192
+ /**
193
+ * Get all active session mappings (streamingId -> sessionId)
194
+ * Used to repopulate local caches after server restart
195
+ */
196
+ getActiveSessionMappings() {
197
+ const mappings = [];
198
+ for (const streamingId of this._activeSessions) {
199
+ const sessionId = this.getClaudeSessionId(streamingId);
200
+ if (sessionId) {
201
+ mappings.push({ streamingId, sessionId });
202
+ }
203
+ }
204
+ return mappings;
205
+ }
206
+ /**
207
+ * Get the Claude session ID for a streaming ID
208
+ * This mapping persists for the lifetime of the process
209
+ */
210
+ getClaudeSessionId(streamingId) {
211
+ if (this._direct) {
212
+ return this._direct.getClaudeSessionId(streamingId);
213
+ }
214
+ // For daemon mode, we rely on the status tracker since daemon doesn't expose this
215
+ if (this._statusTracker) {
216
+ return this._statusTracker.getSessionId(streamingId);
217
+ }
218
+ return undefined;
219
+ }
220
+ /**
221
+ * Send question answer
222
+ */
223
+ sendQuestionAnswer(streamingId, toolUseId, questions, answers) {
224
+ if (this._direct) {
225
+ return this._direct.sendQuestionAnswer(streamingId, toolUseId, questions, answers);
226
+ }
227
+ if (this._client) {
228
+ // Fire and forget for sync interface
229
+ this._client.sendQuestionAnswer(streamingId, toolUseId, questions, answers).catch((err) => {
230
+ logger.error('Failed to send question answer', err);
231
+ });
232
+ return true;
233
+ }
234
+ return false;
235
+ }
236
+ /**
237
+ * Send stdin message
238
+ */
239
+ sendStdinMessage(streamingId, message) {
240
+ if (this._direct) {
241
+ return this._direct.sendStdinMessage(streamingId, message);
242
+ }
243
+ if (this._client) {
244
+ // Fire and forget for sync interface
245
+ this._client.sendStdinMessage(streamingId, message).catch((err) => {
246
+ logger.error('Failed to send stdin message', err);
247
+ });
248
+ return true;
249
+ }
250
+ return false;
251
+ }
252
+ // ============================================================================
253
+ // Configuration Methods (delegated or no-op)
254
+ // ============================================================================
255
+ setMCPConfigPath(path) {
256
+ if (this._direct) {
257
+ this._direct.setMCPConfigPath(path);
258
+ }
259
+ // No-op in client mode - daemon handles this
260
+ }
261
+ setConversationStatusManager(service) {
262
+ if (this._direct) {
263
+ this._direct.setConversationStatusManager(service);
264
+ }
265
+ // No-op in client mode
266
+ }
267
+ setNotificationService(service) {
268
+ if (this._direct) {
269
+ this._direct.setNotificationService(service);
270
+ }
271
+ // No-op in client mode
272
+ }
273
+ setRouterService(service) {
274
+ if (this._direct) {
275
+ this._direct.setRouterService(service);
276
+ }
277
+ // No-op in client mode
278
+ }
279
+ /**
280
+ * Disconnect from daemon (daemon mode) or cleanup (direct mode)
281
+ * Must be called during server shutdown to prevent reconnection loops
282
+ */
283
+ disconnect() {
284
+ if (this._client) {
285
+ logger.info('Disconnecting from process daemon');
286
+ this._client.disconnect();
287
+ }
288
+ // Direct mode: nothing to disconnect, processes are managed directly
289
+ }
290
+ }
291
+ /**
292
+ * Create a process manager based on configuration
293
+ */
294
+ export async function createProcessManager(options) {
295
+ const socketPath = options.daemonSocketPath || process.env.CLAUDIA_DAEMON_SOCKET || process.env.CUI_DAEMON_SOCKET || DEFAULT_SOCKET_PATH;
296
+ // Auto-detect mode: use daemon if socket exists, otherwise direct
297
+ let mode = options.mode;
298
+ if (!mode) {
299
+ const daemonRunning = fs.existsSync(socketPath);
300
+ mode = daemonRunning ? 'daemon' : 'direct';
301
+ logger.info('Auto-detected process manager mode', { mode, socketPath, daemonRunning });
302
+ }
303
+ logger.info('Creating process manager', { mode, socketPath: mode === 'daemon' ? socketPath : undefined });
304
+ const unified = new UnifiedProcessManager(mode);
305
+ // Set status tracker if provided (needed for session sync in daemon mode)
306
+ if (options.statusTracker) {
307
+ unified.setStatusTracker(options.statusTracker);
308
+ }
309
+ if (mode === 'daemon') {
310
+ try {
311
+ const client = new ProcessManagerClient(socketPath);
312
+ await unified.initClient(client);
313
+ logger.info('Process manager initialized in daemon mode');
314
+ }
315
+ catch (err) {
316
+ // Daemon connection failed - fall back to direct mode
317
+ logger.warn('Daemon connection failed, falling back to direct mode', {
318
+ error: err instanceof Error ? err.message : String(err)
319
+ });
320
+ if (!options.historyReader || !options.statusTracker) {
321
+ throw new Error('Direct mode requires historyReader and statusTracker');
322
+ }
323
+ const direct = new ClaudeProcessManager(options.historyReader, options.statusTracker, undefined, undefined, options.toolMetricsService, options.sessionInfoService, options.fileSystemService);
324
+ unified.initDirect(direct);
325
+ logger.info('Process manager initialized in direct mode (fallback)');
326
+ }
327
+ }
328
+ else {
329
+ if (!options.historyReader || !options.statusTracker) {
330
+ throw new Error('Direct mode requires historyReader and statusTracker');
331
+ }
332
+ const direct = new ClaudeProcessManager(options.historyReader, options.statusTracker, undefined, undefined, options.toolMetricsService, options.sessionInfoService, options.fileSystemService);
333
+ unified.initDirect(direct);
334
+ logger.info('Process manager initialized in direct mode');
335
+ }
336
+ return unified;
337
+ }
338
+ //# sourceMappingURL=process-manager-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-manager-factory.js","sourceRoot":"","sources":["../../../src/services/process/process-manager-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { EventEmitter } from 'events';
2
+ import { QuestionRequest, QuestionDefinition } from '../types/index.js';
3
+ /**
4
+ * Service to track AskUserQuestion requests from Claude CLI.
5
+ * Unlike permissions (which use MCP polling), questions are answered via stdin.
6
+ */
7
+ export declare class QuestionTracker extends EventEmitter {
8
+ private questionRequests;
9
+ constructor();
10
+ /**
11
+ * Add a new question request from AskUserQuestion tool
12
+ */
13
+ addQuestionRequest(toolUseId: string, questions: QuestionDefinition[], streamingId: string): QuestionRequest;
14
+ /**
15
+ * Get all question requests
16
+ */
17
+ getAllQuestionRequests(): QuestionRequest[];
18
+ /**
19
+ * Get question requests filtered by criteria
20
+ */
21
+ getQuestionRequests(filter?: {
22
+ streamingId?: string;
23
+ status?: 'pending' | 'answered';
24
+ }): QuestionRequest[];
25
+ /**
26
+ * Get a specific question request by ID
27
+ */
28
+ getQuestionRequest(id: string): QuestionRequest | undefined;
29
+ /**
30
+ * Mark a question as answered
31
+ */
32
+ markAnswered(id: string, answers: Record<string, string>): boolean;
33
+ /**
34
+ * Clear all question requests (for testing)
35
+ */
36
+ clear(): void;
37
+ /**
38
+ * Get the number of question requests
39
+ */
40
+ size(): number;
41
+ /**
42
+ * Get all questions for a specific streaming ID
43
+ */
44
+ getQuestionsByStreamingId(streamingId: string): QuestionRequest[];
45
+ /**
46
+ * Remove all questions for a specific streaming ID
47
+ * Used for cleanup when a conversation ends
48
+ */
49
+ removeQuestionsByStreamingId(streamingId: string): number;
50
+ }
51
+ //# sourceMappingURL=question-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-tracker.d.ts","sourceRoot":"","sources":["../../src/services/question-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGvE;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,gBAAgB,CAA2C;;IAMnE;;OAEG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB,eAAe;IAoBlB;;OAEG;IACH,sBAAsB,IAAI,eAAe,EAAE;IAI3C;;OAEG;IACH,mBAAmB,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,GAAG,eAAe,EAAE;IAc1G;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI3D;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAgBlE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE;IAMjE;;;OAGG;IACH,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAoB1D"}
@@ -0,0 +1,111 @@
1
+ import { EventEmitter } from 'events';
2
+ import { v4 as uuidv4 } from 'uuid';
3
+ import { logger } from '../services/infrastructure/logger.js';
4
+ /**
5
+ * Service to track AskUserQuestion requests from Claude CLI.
6
+ * Unlike permissions (which use MCP polling), questions are answered via stdin.
7
+ */
8
+ export class QuestionTracker extends EventEmitter {
9
+ questionRequests = new Map();
10
+ constructor() {
11
+ super();
12
+ }
13
+ /**
14
+ * Add a new question request from AskUserQuestion tool
15
+ */
16
+ addQuestionRequest(toolUseId, questions, streamingId) {
17
+ const id = uuidv4();
18
+ const request = {
19
+ id,
20
+ streamingId,
21
+ toolUseId,
22
+ questions,
23
+ timestamp: new Date().toISOString(),
24
+ status: 'pending',
25
+ };
26
+ this.questionRequests.set(id, request);
27
+ logger.info('Question request added', { id, toolUseId, streamingId, questionCount: questions.length });
28
+ // Emit event for new question request
29
+ this.emit('question_request', request);
30
+ return request;
31
+ }
32
+ /**
33
+ * Get all question requests
34
+ */
35
+ getAllQuestionRequests() {
36
+ return Array.from(this.questionRequests.values());
37
+ }
38
+ /**
39
+ * Get question requests filtered by criteria
40
+ */
41
+ getQuestionRequests(filter) {
42
+ let requests = Array.from(this.questionRequests.values());
43
+ if (filter?.streamingId) {
44
+ requests = requests.filter(req => req.streamingId === filter.streamingId);
45
+ }
46
+ if (filter?.status) {
47
+ requests = requests.filter(req => req.status === filter.status);
48
+ }
49
+ return requests;
50
+ }
51
+ /**
52
+ * Get a specific question request by ID
53
+ */
54
+ getQuestionRequest(id) {
55
+ return this.questionRequests.get(id);
56
+ }
57
+ /**
58
+ * Mark a question as answered
59
+ */
60
+ markAnswered(id, answers) {
61
+ const request = this.questionRequests.get(id);
62
+ if (!request) {
63
+ logger.warn('Question request not found', { id });
64
+ return false;
65
+ }
66
+ request.status = 'answered';
67
+ request.answers = answers;
68
+ logger.info('Question request answered', { id, answers });
69
+ this.emit('question_answered', request);
70
+ return true;
71
+ }
72
+ /**
73
+ * Clear all question requests (for testing)
74
+ */
75
+ clear() {
76
+ this.questionRequests.clear();
77
+ }
78
+ /**
79
+ * Get the number of question requests
80
+ */
81
+ size() {
82
+ return this.questionRequests.size;
83
+ }
84
+ /**
85
+ * Get all questions for a specific streaming ID
86
+ */
87
+ getQuestionsByStreamingId(streamingId) {
88
+ return Array.from(this.questionRequests.values()).filter(req => req.streamingId === streamingId);
89
+ }
90
+ /**
91
+ * Remove all questions for a specific streaming ID
92
+ * Used for cleanup when a conversation ends
93
+ */
94
+ removeQuestionsByStreamingId(streamingId) {
95
+ const toRemove = [];
96
+ for (const [id, request] of this.questionRequests.entries()) {
97
+ if (request.streamingId === streamingId) {
98
+ toRemove.push(id);
99
+ }
100
+ }
101
+ toRemove.forEach(id => this.questionRequests.delete(id));
102
+ if (toRemove.length > 0) {
103
+ logger.info('Removed questions for streaming session', {
104
+ streamingId,
105
+ removedCount: toRemove.length
106
+ });
107
+ }
108
+ return toRemove.length;
109
+ }
110
+ }
111
+ //# sourceMappingURL=question-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-tracker.js","sourceRoot":"","sources":["../../src/services/question-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ import { ConversationSummary, ConversationMessage, ConversationListQuery } from '../../types/index.js';
2
+ import { SessionInfoService } from '../sessions/session-info-service.js';
3
+ /**
4
+ * Reads conversation history from Claude's local storage
5
+ */
6
+ export declare class ClaudeHistoryReader {
7
+ private claudeHomePath;
8
+ private logger;
9
+ private sessionInfoService;
10
+ private conversationCache;
11
+ private toolMetricsService;
12
+ private messageFilter;
13
+ constructor(sessionInfoService?: SessionInfoService);
14
+ get homePath(): string;
15
+ /**
16
+ * Clear the conversation cache to force a refresh on next read
17
+ */
18
+ clearCache(): void;
19
+ /**
20
+ * List all conversations with optional filtering
21
+ */
22
+ listConversations(filter?: ConversationListQuery): Promise<{
23
+ conversations: ConversationSummary[];
24
+ total: number;
25
+ }>;
26
+ /**
27
+ * Fast path for listing archived sessions - queries DB directly without parsing JSONL files.
28
+ * This is ~100x faster than the file-parsing path for large archives.
29
+ */
30
+ private listArchivedConversationsFast;
31
+ /**
32
+ * Get the file path for a session's JSONL file.
33
+ * Public wrapper around findSessionFile.
34
+ */
35
+ getSessionFilePath(sessionId: string): Promise<string | null>;
36
+ /**
37
+ * Find the JSONL file for a session by checking each project folder
38
+ * Returns the file path if found, null otherwise
39
+ */
40
+ private findSessionFile;
41
+ /**
42
+ * Get file modification times for multiple sessions
43
+ * Used for lightweight activity detection without reading file contents
44
+ */
45
+ getSessionFileMtimes(sessionIds: string[]): Promise<Map<string, number>>;
46
+ /**
47
+ * Get sessions that are "recently active" based on file modification time.
48
+ * A session is considered active if its JSONL file was modified within the threshold.
49
+ * This is more reliable than fuser since Claude writes frequently during activity.
50
+ *
51
+ * @param sessionIds - Session IDs to check
52
+ * @param thresholdMs - How recent the mtime must be (default: 60 seconds)
53
+ * @returns Set of session IDs that are recently active
54
+ */
55
+ getRecentlyActiveSessionsByMtime(sessionIds: string[], thresholdMs?: number): Promise<Set<string>>;
56
+ /**
57
+ * Fetch conversation with metadata in a single fast operation
58
+ * Uses direct file lookup instead of parsing all conversations
59
+ */
60
+ fetchConversationDirect(sessionId: string): Promise<{
61
+ messages: ConversationMessage[];
62
+ metadata: {
63
+ summary: string;
64
+ projectPath: string;
65
+ model: string;
66
+ totalDuration: number;
67
+ };
68
+ }>;
69
+ /**
70
+ * Get summary for a session from summaries.json
71
+ */
72
+ private getSummaryForSession;
73
+ /**
74
+ * Decode project folder name to actual path
75
+ */
76
+ private decodeProjectName;
77
+ /**
78
+ * Get the working directory for a specific conversation session
79
+ * Reads the cwd from the session's JSONL file to get the accurate path
80
+ * (folder name decoding is lossy for paths containing hyphens)
81
+ */
82
+ getConversationWorkingDirectory(sessionId: string): Promise<string | null>;
83
+ /**
84
+ * Get file modification times for JSONL files
85
+ * @param allowedSessionIds Optional filter - if provided, only stat files for these sessions
86
+ */
87
+ private getFileModificationTimes;
88
+ /**
89
+ * Extract source project name from file path
90
+ */
91
+ private extractSourceProject;
92
+ /**
93
+ * Process all entries into conversation chains (the cheap in-memory operations)
94
+ */
95
+ private processAllEntries;
96
+ /**
97
+ * Parse all conversations from all JSONL files with file-level caching and concurrency protection
98
+ * @param allowedSessionIds Optional set of session IDs to parse. If provided, only these sessions will be parsed.
99
+ */
100
+ private parseAllConversations;
101
+ /**
102
+ * Parse a single JSONL file and return all valid entries
103
+ */
104
+ private parseJsonlFile;
105
+ /**
106
+ * Group entries by sessionId
107
+ */
108
+ private groupEntriesBySession;
109
+ /**
110
+ * Process summary entries and create leafUuid mapping
111
+ */
112
+ private processSummaries;
113
+ private readDirectory;
114
+ /**
115
+ * Build a conversation chain from session entries
116
+ */
117
+ private buildConversationChain;
118
+ /**
119
+ * Build ordered message chain using parentUuid relationships
120
+ */
121
+ private buildMessageChain;
122
+ /**
123
+ * Determine conversation summary from messages and summary map
124
+ */
125
+ private determineConversationSummary;
126
+ /**
127
+ * Extract text content from message object
128
+ */
129
+ private extractMessageContent;
130
+ /**
131
+ * Extract model information from messages
132
+ */
133
+ private extractModel;
134
+ private parseMessage;
135
+ private applyFilters;
136
+ private applyPagination;
137
+ private decodeProjectPath;
138
+ }
139
+ //# sourceMappingURL=claude-history-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-history-reader.d.ts","sourceRoot":"","sources":["../../../src/services/sessions/claude-history-reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAA6B,MAAM,kBAAkB,CAAC;AAE9H,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAuBzE;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,kBAAkB,CAAC,EAAE,kBAAkB;IASnD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACG,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAC/D,aAAa,EAAE,mBAAmB,EAAE,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAyIF;;;OAGG;YACW,6BAA6B;IA4D3C;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInE;;;OAGG;YACW,eAAe;IA2B7B;;;OAGG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAoB9E;;;;;;;;OAQG;IACG,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,GAAE,MAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IA2D/G;;;OAGG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAChC,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1F,CAAC;IAuDF;;OAEG;YACW,oBAAoB;IAWlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+ChF;;;OAGG;YACW,wBAAwB;IAoDtC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;;OAGG;YACW,qBAAqB;IAkCnC;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAYV,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8F9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsBpC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;CAK1B"}