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,330 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { createLogger } from './infrastructure/logger.js';
5
+ import { CONFIG_DIR } from '../utils/constants.js';
6
+ /**
7
+ * Public key for verifying license tokens.
8
+ * The private key is kept secure and used only for token generation.
9
+ */
10
+ const PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
11
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyzl8WsyTy3C4IO7YIMM3
12
+ PXfmn0y3C3Z4oc6d2Hqw1MhdLJJLWzb5YBymBJ+6pCb//9YLQsksELh/ilaoWl/3
13
+ nqNNoRkix4Xd5TvBy0hOtnXkFDfjdJXQJrhFYE6sCSguE2yHJTmiG8hzvujlU4Rj
14
+ ryc+2ZL5ZhIHGwrRxSaCn4CVQ/x0r/6BR8/uSVKNmoMzQbb3FWVULR7ln73X2cUf
15
+ JZgWwGHzFLAgEeVank66SrXdnHOH+tcshzmTPHTWBWmljXybf3ouanl8TIQHpxAj
16
+ jUCqvkhBOKqq1f3tnlibRZt0ArfSuMLseMWpbIoqxsPfH5Okef4Tdxvlkn6vYRYC
17
+ kQIDAQAB
18
+ -----END PUBLIC KEY-----`;
19
+ /**
20
+ * BETA MODE FLAG
21
+ * When true, all users get Pro features regardless of license status.
22
+ * Set to false when ready to enforce licensing.
23
+ */
24
+ const BETA_MODE = true;
25
+ /**
26
+ * LicenseService manages Claudia licensing via RSA-signed JWT tokens.
27
+ *
28
+ * License file: ~/.cui/license.json
29
+ * Format: { "token": "<JWT>", "activatedAt": "<ISO date>" }
30
+ *
31
+ * Tiers:
32
+ * - free: Basic orchestration, no AI insights
33
+ * - beta: Full features during beta period
34
+ * - pro: Full features (paid)
35
+ */
36
+ export class LicenseService {
37
+ static instance = null;
38
+ logger;
39
+ licensePath;
40
+ cachedValidation = null;
41
+ lastValidationTime = 0;
42
+ CACHE_TTL_MS = 60000; // Cache validation for 1 minute
43
+ constructor() {
44
+ this.logger = createLogger('LicenseService');
45
+ this.licensePath = path.join(CONFIG_DIR, 'license.json');
46
+ }
47
+ /**
48
+ * Get singleton instance
49
+ */
50
+ static getInstance() {
51
+ if (!LicenseService.instance) {
52
+ LicenseService.instance = new LicenseService();
53
+ }
54
+ return LicenseService.instance;
55
+ }
56
+ /**
57
+ * Check if beta mode is enabled
58
+ */
59
+ isBetaMode() {
60
+ return BETA_MODE;
61
+ }
62
+ /**
63
+ * Validate the current license
64
+ * Returns validation result with tier and limits
65
+ */
66
+ async validate() {
67
+ // In beta mode, everyone gets pro features
68
+ if (BETA_MODE) {
69
+ const result = {
70
+ valid: true,
71
+ tier: 'beta',
72
+ license: null,
73
+ };
74
+ return result;
75
+ }
76
+ // Return cached result if still valid
77
+ const now = Date.now();
78
+ if (this.cachedValidation && (now - this.lastValidationTime) < this.CACHE_TTL_MS) {
79
+ return this.cachedValidation;
80
+ }
81
+ try {
82
+ // Check if license file exists
83
+ if (!fs.existsSync(this.licensePath)) {
84
+ this.logger.debug('No license file found, using free tier');
85
+ const result = {
86
+ valid: true,
87
+ tier: 'free',
88
+ license: null,
89
+ };
90
+ this.cacheValidation(result);
91
+ return result;
92
+ }
93
+ // Read and parse license file
94
+ const licenseData = fs.readFileSync(this.licensePath, 'utf-8');
95
+ const stored = JSON.parse(licenseData);
96
+ if (!stored.token) {
97
+ this.logger.warn('License file missing token');
98
+ const result = {
99
+ valid: false,
100
+ tier: 'free',
101
+ license: null,
102
+ error: 'Invalid license file format',
103
+ };
104
+ this.cacheValidation(result);
105
+ return result;
106
+ }
107
+ // Verify and decode the JWT token
108
+ const payload = this.verifyToken(stored.token);
109
+ if (!payload) {
110
+ this.logger.warn('License token verification failed');
111
+ const result = {
112
+ valid: false,
113
+ tier: 'free',
114
+ license: null,
115
+ error: 'Invalid license token',
116
+ };
117
+ this.cacheValidation(result);
118
+ return result;
119
+ }
120
+ // Check expiration
121
+ if (payload.exp && payload.exp < Math.floor(Date.now() / 1000)) {
122
+ this.logger.warn('License expired', { exp: new Date(payload.exp * 1000).toISOString() });
123
+ const result = {
124
+ valid: false,
125
+ tier: 'free',
126
+ license: null,
127
+ error: 'License expired',
128
+ };
129
+ this.cacheValidation(result);
130
+ return result;
131
+ }
132
+ // Valid license
133
+ const license = {
134
+ token: stored.token,
135
+ email: payload.email,
136
+ tier: payload.tier,
137
+ expiresAt: payload.exp ? new Date(payload.exp * 1000).toISOString() : null,
138
+ activatedAt: stored.activatedAt,
139
+ };
140
+ this.logger.info('Valid license found', { tier: license.tier, email: license.email });
141
+ const result = {
142
+ valid: true,
143
+ tier: license.tier,
144
+ license,
145
+ };
146
+ this.cacheValidation(result);
147
+ return result;
148
+ }
149
+ catch (error) {
150
+ this.logger.error('Failed to validate license', { error });
151
+ const result = {
152
+ valid: false,
153
+ tier: 'free',
154
+ license: null,
155
+ error: error instanceof Error ? error.message : 'Unknown error',
156
+ };
157
+ this.cacheValidation(result);
158
+ return result;
159
+ }
160
+ }
161
+ /**
162
+ * Verify a JWT token using RSA public key
163
+ * Returns decoded payload or null if invalid
164
+ */
165
+ verifyToken(token) {
166
+ try {
167
+ const parts = token.split('.');
168
+ if (parts.length !== 3) {
169
+ this.logger.debug('Invalid token format: wrong number of parts');
170
+ return null;
171
+ }
172
+ const [headerB64, payloadB64, signatureB64] = parts;
173
+ // Verify signature
174
+ const signatureInput = `${headerB64}.${payloadB64}`;
175
+ const signature = Buffer.from(signatureB64, 'base64url');
176
+ const verifier = crypto.createVerify('RSA-SHA256');
177
+ verifier.update(signatureInput);
178
+ const isValid = verifier.verify(PUBLIC_KEY, signature);
179
+ if (!isValid) {
180
+ this.logger.debug('Token signature verification failed');
181
+ return null;
182
+ }
183
+ // Decode payload
184
+ const payloadJson = Buffer.from(payloadB64, 'base64url').toString('utf-8');
185
+ const payload = JSON.parse(payloadJson);
186
+ // Validate payload structure
187
+ if (!payload.email || !payload.tier || !payload.iat) {
188
+ this.logger.debug('Token payload missing required fields');
189
+ return null;
190
+ }
191
+ // Validate tier
192
+ if (!['free', 'beta', 'pro'].includes(payload.tier)) {
193
+ this.logger.debug('Token has invalid tier', { tier: payload.tier });
194
+ return null;
195
+ }
196
+ return payload;
197
+ }
198
+ catch (error) {
199
+ this.logger.debug('Token verification error', { error });
200
+ return null;
201
+ }
202
+ }
203
+ /**
204
+ * Get limits for the current license tier
205
+ */
206
+ async getLimits() {
207
+ const validation = await this.validate();
208
+ // Beta and Pro tiers get full features
209
+ if (validation.tier === 'pro' || validation.tier === 'beta') {
210
+ return {
211
+ maxSessions: null, // Unlimited
212
+ insightsEnabled: true,
213
+ };
214
+ }
215
+ // Free tier - no insights
216
+ return {
217
+ maxSessions: null, // Unlimited sessions (insight is the gate, not sessions)
218
+ insightsEnabled: false,
219
+ };
220
+ }
221
+ /**
222
+ * Activate a license by saving the token
223
+ */
224
+ async activate(token) {
225
+ try {
226
+ // Verify the token first
227
+ const payload = this.verifyToken(token);
228
+ if (!payload) {
229
+ return {
230
+ valid: false,
231
+ tier: 'free',
232
+ license: null,
233
+ error: 'Invalid license token',
234
+ };
235
+ }
236
+ // Check expiration
237
+ if (payload.exp && payload.exp < Math.floor(Date.now() / 1000)) {
238
+ return {
239
+ valid: false,
240
+ tier: 'free',
241
+ license: null,
242
+ error: 'License token has expired',
243
+ };
244
+ }
245
+ // Ensure config directory exists
246
+ const configDir = path.dirname(this.licensePath);
247
+ if (!fs.existsSync(configDir)) {
248
+ fs.mkdirSync(configDir, { recursive: true });
249
+ }
250
+ // Save license file
251
+ const stored = {
252
+ token,
253
+ activatedAt: new Date().toISOString(),
254
+ };
255
+ fs.writeFileSync(this.licensePath, JSON.stringify(stored, null, 2), 'utf-8');
256
+ this.logger.info('License activated', { email: payload.email, tier: payload.tier });
257
+ // Clear cache
258
+ this.cachedValidation = null;
259
+ // Build license object
260
+ const license = {
261
+ token,
262
+ email: payload.email,
263
+ tier: payload.tier,
264
+ expiresAt: payload.exp ? new Date(payload.exp * 1000).toISOString() : null,
265
+ activatedAt: stored.activatedAt,
266
+ };
267
+ return {
268
+ valid: true,
269
+ tier: payload.tier,
270
+ license,
271
+ };
272
+ }
273
+ catch (error) {
274
+ this.logger.error('Failed to activate license', { error });
275
+ return {
276
+ valid: false,
277
+ tier: 'free',
278
+ license: null,
279
+ error: error instanceof Error ? error.message : 'Unknown error',
280
+ };
281
+ }
282
+ }
283
+ /**
284
+ * Deactivate the current license (remove license file)
285
+ */
286
+ async deactivate() {
287
+ try {
288
+ if (fs.existsSync(this.licensePath)) {
289
+ fs.unlinkSync(this.licensePath);
290
+ this.logger.info('License deactivated');
291
+ }
292
+ this.cachedValidation = null;
293
+ }
294
+ catch (error) {
295
+ this.logger.error('Failed to deactivate license', { error });
296
+ throw error;
297
+ }
298
+ }
299
+ /**
300
+ * Get current license information
301
+ */
302
+ async getLicense() {
303
+ const validation = await this.validate();
304
+ return validation.license;
305
+ }
306
+ /**
307
+ * Check if insights are enabled for current tier
308
+ */
309
+ async hasInsights() {
310
+ const limits = await this.getLimits();
311
+ return limits.insightsEnabled;
312
+ }
313
+ /**
314
+ * Cache validation result
315
+ */
316
+ cacheValidation(result) {
317
+ this.cachedValidation = result;
318
+ this.lastValidationTime = Date.now();
319
+ }
320
+ /**
321
+ * Clear validation cache (useful for testing)
322
+ */
323
+ clearCache() {
324
+ this.cachedValidation = null;
325
+ this.lastValidationTime = 0;
326
+ }
327
+ }
328
+ // Export singleton instance
329
+ export const licenseService = LicenseService.getInstance();
330
+ //# sourceMappingURL=license-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license-service.js","sourceRoot":"","sources":["../../src/services/license-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { FileSystemService } from '../services/infrastructure/file-system-service.js';
2
+ export interface MCPConfig {
3
+ mcpServers: {
4
+ [key: string]: {
5
+ command: string;
6
+ args: string[];
7
+ env?: Record<string, string>;
8
+ };
9
+ };
10
+ }
11
+ /**
12
+ * Generates and writes MCP configuration file
13
+ */
14
+ export declare class MCPConfigGenerator {
15
+ private configPath;
16
+ private fileSystemService?;
17
+ private logger;
18
+ constructor(fileSystemService?: FileSystemService);
19
+ /**
20
+ * Generate MCP config with the permission server
21
+ */
22
+ generateConfig(port: number): Promise<string>;
23
+ /**
24
+ * Get the path to the generated config file
25
+ */
26
+ getConfigPath(): string;
27
+ /**
28
+ * Clean up the config file (for shutdown)
29
+ */
30
+ cleanup(): void;
31
+ }
32
+ //# sourceMappingURL=mcp-config-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-generator.d.ts","sourceRoot":"","sources":["../../src/services/mcp-config-generator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAMrF,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE;QACV,CAAC,GAAG,EAAE,MAAM,GAAG;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAS;gBAEX,iBAAiB,CAAC,EAAE,iBAAiB;IASjD;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqFnD;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAWhB"}
@@ -0,0 +1,126 @@
1
+ import { writeFileSync, mkdirSync, unlinkSync, existsSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { tmpdir } from 'os';
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ import { fileURLToPath } from 'url';
6
+ import { createLogger } from '../services/infrastructure/logger.js';
7
+ // Get the directory of this module
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ /**
11
+ * Generates and writes MCP configuration file
12
+ */
13
+ export class MCPConfigGenerator {
14
+ configPath;
15
+ fileSystemService;
16
+ logger;
17
+ constructor(fileSystemService) {
18
+ this.logger = createLogger('MCPConfigGenerator');
19
+ // Generate unique config file in temp directory
20
+ const tempDir = tmpdir();
21
+ const configFileName = `lattice-mcp-config-${uuidv4()}.json`;
22
+ this.configPath = join(tempDir, configFileName);
23
+ this.fileSystemService = fileSystemService;
24
+ }
25
+ /**
26
+ * Generate MCP config with the permission server
27
+ */
28
+ async generateConfig(port) {
29
+ // Find MCP server relative to this module
30
+ // In production: __dirname is /path/to/node_modules/cui-server/dist/services
31
+ // In development: __dirname is /path/to/cui-server/src/services
32
+ // MCP server is always in dist/mcp-server/index.js
33
+ let mcpServerPath;
34
+ let latticeToolsPath;
35
+ if (__dirname.includes('/dist/') || __dirname.includes('\\dist\\')) {
36
+ // Production: we're in dist/services, go up to dist then to mcp-server
37
+ mcpServerPath = join(__dirname, '..', 'mcp-server', 'index.js');
38
+ latticeToolsPath = join(__dirname, '..', 'mcp-server', 'lattice-tools.js');
39
+ }
40
+ else {
41
+ // Development: we're in src/services, go up to root then to dist/mcp-server
42
+ mcpServerPath = join(__dirname, '..', '..', 'dist', 'mcp-server', 'index.js');
43
+ latticeToolsPath = join(__dirname, '..', '..', 'dist', 'mcp-server', 'lattice-tools.js');
44
+ }
45
+ // Validate that the MCP server file and Node.js executable exist
46
+ if (this.fileSystemService) {
47
+ // Check if MCP server JS file exists
48
+ if (!existsSync(mcpServerPath)) {
49
+ const error = new Error(`MCP server file not found: ${mcpServerPath}`);
50
+ this.logger.warn('MCP server file not found, skipping MCP config generation', {
51
+ mcpServerPath,
52
+ error: error.message
53
+ });
54
+ throw error;
55
+ }
56
+ // Validate that the MCP server file is executable
57
+ try {
58
+ await this.fileSystemService.validateExecutable(mcpServerPath);
59
+ this.logger.debug('MCP server file validated as executable successfully');
60
+ }
61
+ catch (error) {
62
+ this.logger.warn('MCP server file is not executable, skipping MCP config generation', {
63
+ mcpServerPath,
64
+ error: error instanceof Error ? error.message : String(error)
65
+ });
66
+ throw error;
67
+ }
68
+ this.logger.debug('MCP server file and Node.js validated successfully', { mcpServerPath });
69
+ }
70
+ const config = {
71
+ mcpServers: {
72
+ 'lattice-permissions': {
73
+ command: 'node',
74
+ args: [mcpServerPath],
75
+ env: {
76
+ LATTICE_SERVER_URL: `http://localhost:${port}`,
77
+ LATTICE_SERVER_PORT: String(port),
78
+ LOG_LEVEL: process.env.LOG_LEVEL || 'info'
79
+ }
80
+ },
81
+ 'lattice-orchestrator': {
82
+ command: 'node',
83
+ args: [latticeToolsPath],
84
+ env: {
85
+ LATTICE_SERVER_URL: `http://localhost:${port}`,
86
+ LATTICE_SERVER_PORT: String(port),
87
+ LOG_LEVEL: process.env.LOG_LEVEL || 'info'
88
+ }
89
+ }
90
+ }
91
+ };
92
+ // Ensure directory exists
93
+ mkdirSync(dirname(this.configPath), { recursive: true });
94
+ // Write config file
95
+ writeFileSync(this.configPath, JSON.stringify(config, null, 2));
96
+ this.logger.info('MCP config file generated', {
97
+ path: this.configPath,
98
+ port,
99
+ mcpServerPath
100
+ });
101
+ this.logger.debug('MCP config file', { config });
102
+ return this.configPath;
103
+ }
104
+ /**
105
+ * Get the path to the generated config file
106
+ */
107
+ getConfigPath() {
108
+ return this.configPath;
109
+ }
110
+ /**
111
+ * Clean up the config file (for shutdown)
112
+ */
113
+ cleanup() {
114
+ try {
115
+ unlinkSync(this.configPath);
116
+ this.logger.debug('MCP config file cleaned up', { path: this.configPath });
117
+ }
118
+ catch (error) {
119
+ this.logger.warn('Failed to clean up MCP config file', {
120
+ path: this.configPath,
121
+ error: error instanceof Error ? error.message : String(error)
122
+ });
123
+ }
124
+ }
125
+ }
126
+ //# sourceMappingURL=mcp-config-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-generator.js","sourceRoot":"","sources":["../../src/services/mcp-config-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ConversationMessage } from '../types/index.js';
2
+ /**
3
+ * Filters out local command messages from conversation history
4
+ */
5
+ export declare class MessageFilter {
6
+ private logger;
7
+ private filteredPrefixes;
8
+ constructor();
9
+ /**
10
+ * Filter an array of conversation messages
11
+ */
12
+ filterMessages(messages: ConversationMessage[]): ConversationMessage[];
13
+ /**
14
+ * Determine if a message should be kept (not filtered out)
15
+ */
16
+ private shouldKeepMessage;
17
+ /**
18
+ * Extract text content from Anthropic message object
19
+ */
20
+ private extractTextContent;
21
+ }
22
+ //# sourceMappingURL=message-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-filter.d.ts","sourceRoot":"","sources":["../../src/services/message-filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAItB;;IAMF;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE;IAItE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
@@ -0,0 +1,57 @@
1
+ import { createLogger } from './infrastructure/logger.js';
2
+ /**
3
+ * Filters out local command messages from conversation history
4
+ */
5
+ export class MessageFilter {
6
+ logger;
7
+ filteredPrefixes = [
8
+ 'Caveat: ',
9
+ '<command-name>',
10
+ '<local-command-stdout>'
11
+ ];
12
+ constructor() {
13
+ this.logger = createLogger('MessageFilter');
14
+ }
15
+ /**
16
+ * Filter an array of conversation messages
17
+ */
18
+ filterMessages(messages) {
19
+ return messages.filter(message => this.shouldKeepMessage(message));
20
+ }
21
+ /**
22
+ * Determine if a message should be kept (not filtered out)
23
+ */
24
+ shouldKeepMessage(message) {
25
+ // Only filter user messages with text content
26
+ if (message.type !== 'user') {
27
+ return true;
28
+ }
29
+ const textContent = this.extractTextContent(message.message);
30
+ if (!textContent) {
31
+ return true; // Keep messages without text content
32
+ }
33
+ // Check if the text starts with any filtered prefix
34
+ const shouldFilter = this.filteredPrefixes.some(prefix => textContent.trim().startsWith(prefix));
35
+ return !shouldFilter;
36
+ }
37
+ /**
38
+ * Extract text content from Anthropic message object
39
+ */
40
+ extractTextContent(message) {
41
+ if (typeof message === 'string') {
42
+ return message;
43
+ }
44
+ if (message.content) {
45
+ if (typeof message.content === 'string') {
46
+ return message.content;
47
+ }
48
+ if (Array.isArray(message.content)) {
49
+ // Find first text content block
50
+ const textBlock = message.content.find((block) => block.type === 'text');
51
+ return textBlock && 'text' in textBlock ? textBlock.text : null;
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ }
57
+ //# sourceMappingURL=message-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-filter.js","sourceRoot":"","sources":["../../src/services/message-filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAe,MAAM,4BAA4B,CAAC;AAEvE;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAS;IACf,gBAAgB,GAAa;QACnC,UAAU;QACV,gBAAgB;QAChB,wBAAwB;KACzB,CAAC;IAEF;QACE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAA+B;QAC5C,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAA4B;QACpD,8CAA8C;QAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,CAAC,qCAAqC;QACpD,CAAC;QAED,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACvD,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CACtC,CAAC;QAEF,OAAO,CAAC,YAAY,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAA4D;QACrF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxC,OAAO,OAAO,CAAC,OAAO,CAAC;YACzB,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,gCAAgC;gBAChC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBACzE,OAAO,SAAS,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { PermissionRequest } from '../types/index.js';
2
+ export interface Notification {
3
+ title: string;
4
+ message: string;
5
+ priority: 'min' | 'low' | 'default' | 'high' | 'urgent';
6
+ tags: string[];
7
+ sessionId: string;
8
+ streamingId: string;
9
+ permissionRequestId?: string;
10
+ }
11
+ /**
12
+ * Service for sending push notifications via ntfy.sh
13
+ */
14
+ export declare class NotificationService {
15
+ private logger;
16
+ private configService;
17
+ private machineId;
18
+ private webPushService;
19
+ constructor();
20
+ /**
21
+ * Get machine ID from config
22
+ */
23
+ private getMachineId;
24
+ /**
25
+ * Check if notifications are enabled
26
+ */
27
+ private isEnabled;
28
+ /**
29
+ * Get the ntfy URL from preferences
30
+ */
31
+ private getNtfyUrl;
32
+ /**
33
+ * Send a notification for a permission request
34
+ */
35
+ sendPermissionNotification(request: PermissionRequest, sessionId?: string, summary?: string): Promise<void>;
36
+ /**
37
+ * Send a notification when a conversation ends
38
+ */
39
+ sendConversationEndNotification(streamingId: string, sessionId: string, summary?: string): Promise<void>;
40
+ /**
41
+ * Send a notification to ntfy
42
+ */
43
+ private sendNotification;
44
+ }
45
+ //# sourceMappingURL=notification-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-service.d.ts","sourceRoot":"","sources":["../../src/services/notification-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAKrD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,cAAc,CAAiB;;IAQvC;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;YACW,SAAS;IAKvB;;OAEG;YACW,UAAU;IAKxB;;OAEG;IACG,0BAA0B,CAC9B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IA0DhB;;OAEG;IACG,+BAA+B,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAuDhB;;OAEG;YACW,gBAAgB;CA8B/B"}