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,431 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { DEFAULT_CONFIG } from '../../types/config.js';
4
+ import { generateMachineId } from '../../utils/machine-id.js';
5
+ import { CONFIG_DIR } from '../../utils/constants.js';
6
+ import { createLogger } from '../infrastructure/logger.js';
7
+ import { EventEmitter } from 'events';
8
+ /**
9
+ * ConfigService manages Claudia configuration
10
+ * Loads from ~/.claudia/config.json
11
+ * Creates default config on first run
12
+ */
13
+ export class ConfigService {
14
+ static instance;
15
+ config = null;
16
+ logger;
17
+ configPath;
18
+ configDir;
19
+ emitter = new EventEmitter();
20
+ watcher;
21
+ debounceTimer;
22
+ lastLoadedRaw;
23
+ pollInterval;
24
+ /** Runtime-only overrides (not persisted to config file) */
25
+ runtimeOverrides = {};
26
+ constructor() {
27
+ this.logger = createLogger('ConfigService');
28
+ this.configDir = CONFIG_DIR;
29
+ this.configPath = path.join(this.configDir, 'config.json');
30
+ }
31
+ /**
32
+ * Get singleton instance
33
+ */
34
+ static getInstance() {
35
+ if (!ConfigService.instance) {
36
+ ConfigService.instance = new ConfigService();
37
+ }
38
+ return ConfigService.instance;
39
+ }
40
+ /**
41
+ * Initialize configuration
42
+ * Creates config file if it doesn't exist
43
+ * Throws error if initialization fails
44
+ */
45
+ async initialize() {
46
+ this.logger.info('Initializing configuration', { configPath: this.configPath });
47
+ try {
48
+ // Check if config exists
49
+ if (!fs.existsSync(this.configPath)) {
50
+ await this.createDefaultConfig();
51
+ }
52
+ // Load and validate config
53
+ await this.loadConfig();
54
+ // Start watching for external changes
55
+ this.startWatching();
56
+ }
57
+ catch (error) {
58
+ this.logger.error('Failed to initialize configuration', error);
59
+ throw new Error(`Configuration initialization failed: ${error instanceof Error ? error.message : String(error)}`);
60
+ }
61
+ }
62
+ /**
63
+ * Get current configuration
64
+ * Throws if not initialized
65
+ */
66
+ getConfig() {
67
+ if (!this.config) {
68
+ throw new Error('Configuration not initialized. Call initialize() first.');
69
+ }
70
+ // Merge runtime overrides (cwd) into the server config
71
+ return {
72
+ ...this.config,
73
+ server: {
74
+ ...this.config.server,
75
+ ...(this.runtimeOverrides.cwd && { cwd: this.runtimeOverrides.cwd })
76
+ }
77
+ };
78
+ }
79
+ /**
80
+ * Set the working directory where claudia was invoked from
81
+ * This is a runtime-only value, not persisted to config file
82
+ */
83
+ setInvocationCwd(cwd) {
84
+ this.runtimeOverrides.cwd = cwd;
85
+ this.logger.debug('Set invocation cwd', { cwd });
86
+ }
87
+ /**
88
+ * Create default configuration
89
+ */
90
+ async createDefaultConfig() {
91
+ this.logger.info('Creating default configuration');
92
+ try {
93
+ // Ensure config directory exists
94
+ if (!fs.existsSync(this.configDir)) {
95
+ fs.mkdirSync(this.configDir, { recursive: true });
96
+ this.logger.debug('Created config directory', { dir: this.configDir });
97
+ }
98
+ // Generate machine ID
99
+ const machineId = await generateMachineId();
100
+ this.logger.debug('Generated machine ID', { machineId });
101
+ // Create default config
102
+ const config = {
103
+ machine_id: machineId,
104
+ ...DEFAULT_CONFIG
105
+ };
106
+ // Write config file
107
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
108
+ this.logger.info('Default configuration created', {
109
+ path: this.configPath,
110
+ machineId: config.machine_id
111
+ });
112
+ }
113
+ catch (error) {
114
+ throw new Error(`Failed to create default config: ${error instanceof Error ? error.message : String(error)}`);
115
+ }
116
+ }
117
+ /**
118
+ * Load configuration from file
119
+ */
120
+ async loadConfig() {
121
+ try {
122
+ const configData = fs.readFileSync(this.configPath, 'utf-8');
123
+ let fileConfig;
124
+ try {
125
+ fileConfig = JSON.parse(configData);
126
+ }
127
+ catch (_parseError) {
128
+ // Corrupted JSON should fail startup
129
+ throw new Error('Invalid JSON in configuration file');
130
+ }
131
+ // Validate provided fields (strict for provided keys, allow missing)
132
+ this.validateProvidedFields(fileConfig);
133
+ // Merge with defaults for missing sections while preserving all existing fields (e.g., router)
134
+ let updated = false;
135
+ const merged = {
136
+ // Start with defaults
137
+ ...DEFAULT_CONFIG,
138
+ // Bring over everything from file (including optional fields like router, gemini)
139
+ ...fileConfig,
140
+ // Ensure required identifiers are set from file
141
+ machine_id: fileConfig.machine_id || (await generateMachineId()),
142
+ // Deep-merge known nested sections to ensure defaults are filled without dropping user values
143
+ server: { ...DEFAULT_CONFIG.server, ...(fileConfig.server || {}) },
144
+ interface: { ...DEFAULT_CONFIG.interface, ...(fileConfig.interface || {}) }
145
+ };
146
+ // Determine if we added any defaults and need to persist back to disk
147
+ if (!fileConfig.server || JSON.stringify(merged.server) !== JSON.stringify(fileConfig.server))
148
+ updated = true;
149
+ if (!fileConfig.interface || JSON.stringify(merged.interface) !== JSON.stringify(fileConfig.interface))
150
+ updated = true;
151
+ if (!fileConfig.machine_id)
152
+ updated = true;
153
+ // Final validation on fully merged config
154
+ this.validateCompleteConfig(merged);
155
+ this.config = merged;
156
+ this.lastLoadedRaw = JSON.stringify(this.config, null, 2);
157
+ if (updated) {
158
+ fs.writeFileSync(this.configPath, this.lastLoadedRaw, 'utf-8');
159
+ this.logger.info('Configuration updated with defaults');
160
+ }
161
+ this.logger.debug('Configuration loaded successfully');
162
+ }
163
+ catch (error) {
164
+ throw new Error(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`);
165
+ }
166
+ }
167
+ /**
168
+ * Update configuration
169
+ */
170
+ async updateConfig(updates) {
171
+ if (!this.config) {
172
+ throw new Error('Configuration not initialized');
173
+ }
174
+ this.logger.info('Updating configuration', { updates });
175
+ // Create a new config via deep-merge semantics so unrelated options are preserved
176
+ const current = this.config;
177
+ const mergedServer = updates.server ? { ...current.server, ...updates.server } : current.server;
178
+ const mergedInterface = updates.interface
179
+ ? {
180
+ ...current.interface,
181
+ ...updates.interface,
182
+ // Deep-merge nested notifications object if provided
183
+ notifications: updates.interface.notifications !== undefined
184
+ ? { ...(current.interface.notifications || {}), ...updates.interface.notifications }
185
+ : current.interface.notifications
186
+ }
187
+ : current.interface;
188
+ const mergedRouter = updates.router
189
+ ? { ...(current.router || {}), ...updates.router }
190
+ : current.router;
191
+ const mergedGemini = updates.gemini
192
+ ? { ...(current.gemini || {}), ...updates.gemini }
193
+ : current.gemini;
194
+ const mergedAnthropic = updates.anthropic
195
+ ? { ...(current.anthropic || {}), ...updates.anthropic }
196
+ : current.anthropic;
197
+ // Preserve machine_id and authToken regardless of updates
198
+ const newConfig = {
199
+ ...current,
200
+ server: mergedServer,
201
+ interface: mergedInterface,
202
+ gemini: mergedGemini,
203
+ anthropic: mergedAnthropic,
204
+ router: mergedRouter
205
+ };
206
+ // Update in-memory config
207
+ const prev = this.config;
208
+ this.config = newConfig;
209
+ // Write to file
210
+ try {
211
+ this.lastLoadedRaw = JSON.stringify(this.config, null, 2);
212
+ fs.writeFileSync(this.configPath, this.lastLoadedRaw, 'utf-8');
213
+ this.logger.info('Configuration updated successfully');
214
+ // Emit change event for internal updates
215
+ this.emitter.emit('config-changed', this.config, prev, 'internal');
216
+ }
217
+ catch (error) {
218
+ this.logger.error('Failed to update configuration', error);
219
+ throw new Error(`Failed to update config: ${error instanceof Error ? error.message : String(error)}`);
220
+ }
221
+ }
222
+ /**
223
+ * Subscribe to configuration changes
224
+ */
225
+ onChange(listener) {
226
+ this.emitter.on('config-changed', listener);
227
+ }
228
+ /**
229
+ * Validate provided fields in a partial config. Throws on incompatible values.
230
+ */
231
+ validateProvidedFields(partial) {
232
+ // server
233
+ if (partial.server) {
234
+ this.assertServerConfig(partial.server);
235
+ }
236
+ // interface
237
+ if (partial.interface) {
238
+ this.assertInterfaceConfig(partial.interface);
239
+ }
240
+ // router
241
+ if (partial.router) {
242
+ this.assertRouterConfig(partial.router);
243
+ }
244
+ // gemini (optional)
245
+ if (partial.gemini) {
246
+ if (partial.gemini.apiKey !== undefined && typeof partial.gemini.apiKey !== 'string') {
247
+ throw new Error('Invalid config: gemini.apiKey must be a string');
248
+ }
249
+ if (partial.gemini.model !== undefined && typeof partial.gemini.model !== 'string') {
250
+ throw new Error('Invalid config: gemini.model must be a string');
251
+ }
252
+ }
253
+ // anthropic (optional)
254
+ if (partial.anthropic) {
255
+ if (partial.anthropic.apiKey !== undefined && typeof partial.anthropic.apiKey !== 'string') {
256
+ throw new Error('Invalid config: anthropic.apiKey must be a string');
257
+ }
258
+ if (partial.anthropic.model !== undefined && typeof partial.anthropic.model !== 'string') {
259
+ throw new Error('Invalid config: anthropic.model must be a string');
260
+ }
261
+ }
262
+ // machine_id if present must be a string
263
+ if (partial.machine_id !== undefined && typeof partial.machine_id !== 'string') {
264
+ throw new Error('Invalid config: machine_id must be a string');
265
+ }
266
+ }
267
+ /**
268
+ * Validate a complete merged config before using it. Throws on error.
269
+ */
270
+ validateCompleteConfig(config) {
271
+ // Required top-level values
272
+ if (!config.machine_id || typeof config.machine_id !== 'string') {
273
+ throw new Error('Invalid config: missing machine_id');
274
+ }
275
+ this.assertServerConfig(config.server);
276
+ if (config.interface) {
277
+ this.assertInterfaceConfig(config.interface);
278
+ }
279
+ if (config.router) {
280
+ this.assertRouterConfig(config.router);
281
+ }
282
+ }
283
+ assertServerConfig(server) {
284
+ if (server.host !== undefined && typeof server.host !== 'string') {
285
+ throw new Error('Invalid config: server.host must be a string');
286
+ }
287
+ if (server.port !== undefined && typeof server.port !== 'number') {
288
+ throw new Error('Invalid config: server.port must be a number');
289
+ }
290
+ }
291
+ assertInterfaceConfig(iface) {
292
+ if (iface.colorScheme !== undefined && !['light', 'dark', 'system'].includes(iface.colorScheme)) {
293
+ throw new Error("Invalid config: interface.colorScheme must be 'light' | 'dark' | 'system'");
294
+ }
295
+ if (iface.language !== undefined && typeof iface.language !== 'string') {
296
+ throw new Error('Invalid config: interface.language must be a string');
297
+ }
298
+ if (iface.notifications !== undefined) {
299
+ const n = iface.notifications;
300
+ if (n && typeof n.enabled !== 'boolean') {
301
+ throw new Error('Invalid config: interface.notifications.enabled must be a boolean');
302
+ }
303
+ if (n && n.ntfyUrl !== undefined && typeof n.ntfyUrl !== 'string') {
304
+ throw new Error('Invalid config: interface.notifications.ntfyUrl must be a string');
305
+ }
306
+ }
307
+ }
308
+ assertRouterConfig(router) {
309
+ if (router.enabled !== undefined && typeof router.enabled !== 'boolean') {
310
+ throw new Error('Invalid config: router.enabled must be a boolean');
311
+ }
312
+ if (router.providers !== undefined) {
313
+ if (!Array.isArray(router.providers)) {
314
+ throw new Error('Invalid config: router.providers must be an array');
315
+ }
316
+ for (const p of router.providers) {
317
+ if (p.name !== undefined && typeof p.name !== 'string')
318
+ throw new Error('Invalid config: router.providers[].name must be a string');
319
+ if (p.api_base_url !== undefined && typeof p.api_base_url !== 'string')
320
+ throw new Error('Invalid config: router.providers[].api_base_url must be a string');
321
+ if (p.api_key !== undefined && typeof p.api_key !== 'string')
322
+ throw new Error('Invalid config: router.providers[].api_key must be a string');
323
+ if (p.models !== undefined && !Array.isArray(p.models))
324
+ throw new Error('Invalid config: router.providers[].models must be an array of strings');
325
+ if (Array.isArray(p.models)) {
326
+ for (const m of p.models) {
327
+ if (typeof m !== 'string')
328
+ throw new Error('Invalid config: router.providers[].models must contain strings');
329
+ }
330
+ }
331
+ }
332
+ }
333
+ if (router.rules !== undefined) {
334
+ if (typeof router.rules !== 'object' || router.rules === null || Array.isArray(router.rules)) {
335
+ throw new Error('Invalid config: router.rules must be an object of string values');
336
+ }
337
+ for (const [k, v] of Object.entries(router.rules)) {
338
+ if (typeof v !== 'string')
339
+ throw new Error(`Invalid config: router.rules['${k}'] must be a string`);
340
+ }
341
+ }
342
+ }
343
+ startWatching() {
344
+ // Avoid multiple watchers in tests
345
+ if (this.watcher)
346
+ return;
347
+ try {
348
+ // Increase listeners to avoid noisy warnings in tests with many server instances
349
+ this.emitter.setMaxListeners(0);
350
+ if (process.env.NODE_ENV === 'test') {
351
+ // Use active polling in tests to avoid fs watcher flakiness with fake timers
352
+ this.pollInterval = setInterval(() => {
353
+ try {
354
+ const raw = fs.readFileSync(this.configPath, 'utf-8');
355
+ if (!this.lastLoadedRaw || raw !== this.lastLoadedRaw) {
356
+ // Debounce within polling
357
+ if (this.debounceTimer)
358
+ clearTimeout(this.debounceTimer);
359
+ this.debounceTimer = setTimeout(() => this.handleExternalChange(), 10);
360
+ }
361
+ }
362
+ catch {
363
+ // ignore
364
+ }
365
+ }, 50);
366
+ this.logger.debug('Started interval polling for configuration changes (test mode)');
367
+ }
368
+ else {
369
+ this.watcher = fs.watch(this.configPath, { persistent: false }, (eventType) => {
370
+ if (eventType !== 'change' && eventType !== 'rename')
371
+ return;
372
+ if (this.debounceTimer)
373
+ clearTimeout(this.debounceTimer);
374
+ this.debounceTimer = setTimeout(() => this.handleExternalChange(), 250);
375
+ });
376
+ this.logger.debug('Started watching configuration file for changes');
377
+ }
378
+ }
379
+ catch (error) {
380
+ this.logger.warn('Failed to start file watcher for configuration', error);
381
+ }
382
+ }
383
+ handleExternalChange() {
384
+ try {
385
+ const newRaw = fs.readFileSync(this.configPath, 'utf-8');
386
+ if (this.lastLoadedRaw && newRaw === this.lastLoadedRaw) {
387
+ return; // No effective change
388
+ }
389
+ let parsed;
390
+ try {
391
+ parsed = JSON.parse(newRaw);
392
+ }
393
+ catch (_e) {
394
+ this.logger.error('Ignoring external config change due to invalid JSON');
395
+ return;
396
+ }
397
+ // Validate provided fields strictly
398
+ this.validateProvidedFields(parsed);
399
+ // Merge and validate complete
400
+ const current = this.config || { ...DEFAULT_CONFIG, machine_id: '' };
401
+ const merged = {
402
+ ...DEFAULT_CONFIG,
403
+ ...current,
404
+ ...parsed,
405
+ server: { ...DEFAULT_CONFIG.server, ...(current.server || {}), ...(parsed.server || {}) },
406
+ interface: { ...DEFAULT_CONFIG.interface, ...(current.interface || {}), ...(parsed.interface || {}) },
407
+ router: parsed.router !== undefined ? parsed.router : current.router,
408
+ gemini: parsed.gemini !== undefined ? parsed.gemini : current.gemini,
409
+ anthropic: parsed.anthropic !== undefined ? parsed.anthropic : current.anthropic,
410
+ machine_id: parsed.machine_id || current.machine_id
411
+ };
412
+ this.validateCompleteConfig(merged);
413
+ const prev = this.config;
414
+ this.config = merged;
415
+ this.lastLoadedRaw = JSON.stringify(merged, null, 2);
416
+ this.logger.info('Configuration reloaded from external change');
417
+ this.emitter.emit('config-changed', this.config, prev || null, 'external');
418
+ }
419
+ catch (error) {
420
+ this.logger.error('Failed to handle external configuration change', error);
421
+ }
422
+ }
423
+ /**
424
+ * Reset singleton instance (for testing)
425
+ */
426
+ static resetInstance() {
427
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
428
+ ConfigService.instance = null;
429
+ }
430
+ }
431
+ //# sourceMappingURL=config-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../../src/services/infrastructure/config-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * CostTracker - Tracks LLM API costs for insights generation.
3
+ *
4
+ * Provides:
5
+ * - Per-call cost logging with session, operation, model, tokens
6
+ * - Summary queries (today, this week, by operation, by model)
7
+ * - Cost estimation using current Anthropic pricing
8
+ *
9
+ * Design decisions:
10
+ * - Separate table from session insights for clean separation
11
+ * - Uses same database file for simplicity
12
+ * - Costs stored in USD for consistency
13
+ */
14
+ export type InsightOperationType = 'GENERATE' | 'PATCH' | 'REFRESH' | 'QUICK_CHECK' | 'MERGE_DECISION' | 'PROPOSITIONS' | 'FAST_PATCH' | 'METADATA_EVAL' | 'CURRENT_WORK';
15
+ export interface LLMCallRecord {
16
+ sessionId: string;
17
+ operation: InsightOperationType;
18
+ model: string;
19
+ inputTokens: number;
20
+ outputTokens: number;
21
+ durationMs: number;
22
+ traceId?: string;
23
+ }
24
+ export interface CostSummary {
25
+ calls: number;
26
+ inputTokens: number;
27
+ outputTokens: number;
28
+ totalTokens: number;
29
+ estimatedCostUsd: number;
30
+ }
31
+ export interface CostSummaryResponse {
32
+ today: CostSummary;
33
+ thisWeek: CostSummary;
34
+ thisMonth: CostSummary;
35
+ allTime: CostSummary;
36
+ byOperation: Record<string, CostSummary>;
37
+ byModel: Record<string, CostSummary>;
38
+ recentCalls: Array<{
39
+ sessionId: string;
40
+ operation: string;
41
+ model: string;
42
+ inputTokens: number;
43
+ outputTokens: number;
44
+ estimatedCostUsd: number;
45
+ durationMs: number;
46
+ createdAt: string;
47
+ }>;
48
+ }
49
+ export declare class CostTracker {
50
+ private logger;
51
+ private db;
52
+ private isInitialized;
53
+ private dbPath;
54
+ private configDir;
55
+ private insertStmt;
56
+ private summaryStmt;
57
+ constructor(testDbPath?: string);
58
+ initialize(): Promise<void>;
59
+ private prepareStatements;
60
+ /**
61
+ * Calculate cost in USD for a given model and token counts.
62
+ */
63
+ private calculateCost;
64
+ /**
65
+ * Log an LLM API call with its cost.
66
+ */
67
+ log(record: LLMCallRecord): void;
68
+ /**
69
+ * Get cost summary for different time periods.
70
+ */
71
+ getSummary(): CostSummaryResponse;
72
+ /**
73
+ * Get costs for a specific session.
74
+ */
75
+ getSessionCosts(sessionId: string): CostSummary & {
76
+ recentCalls: Array<{
77
+ operation: string;
78
+ model: string;
79
+ inputTokens: number;
80
+ outputTokens: number;
81
+ estimatedCostUsd: number;
82
+ durationMs: number;
83
+ createdAt: string;
84
+ }>;
85
+ };
86
+ /**
87
+ * Get time-series data for charts.
88
+ * Returns costs aggregated by time bucket (minute, hour, or day).
89
+ */
90
+ getTimeSeries(options?: {
91
+ bucket?: 'minute' | 'hour' | 'day';
92
+ startDate?: string;
93
+ endDate?: string;
94
+ sessionId?: string;
95
+ }): Array<{
96
+ timestamp: string;
97
+ calls: number;
98
+ inputTokens: number;
99
+ outputTokens: number;
100
+ estimatedCostUsd: number;
101
+ byOperation: Record<string, number>;
102
+ }>;
103
+ private emptySummary;
104
+ private emptySummaryResponse;
105
+ /**
106
+ * Close the database connection.
107
+ */
108
+ close(): void;
109
+ }
110
+ export declare function getCostTracker(): CostTracker;
111
+ export declare function resetCostTracker(): void;
112
+ //# sourceMappingURL=cost-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../../src/services/infrastructure/cost-tracker.ts"],"names":[],"mappings":"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"}