claudia-orchestrator 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +109 -0
  3. package/dist/cli-parser.d.ts +11 -0
  4. package/dist/cli-parser.d.ts.map +1 -0
  5. package/dist/cli-parser.js +57 -0
  6. package/dist/cli-parser.js.map +1 -0
  7. package/dist/cui-server.d.ts +69 -0
  8. package/dist/cui-server.d.ts.map +1 -0
  9. package/dist/cui-server.js +705 -0
  10. package/dist/cui-server.js.map +1 -0
  11. package/dist/mcp-server/claudia-tools.d.ts +15 -0
  12. package/dist/mcp-server/claudia-tools.d.ts.map +1 -0
  13. package/dist/mcp-server/claudia-tools.js +366 -0
  14. package/dist/mcp-server/claudia-tools.js.map +1 -0
  15. package/dist/mcp-server/index.d.ts +3 -0
  16. package/dist/mcp-server/index.d.ts.map +1 -0
  17. package/dist/mcp-server/index.js +176 -0
  18. package/dist/mcp-server/index.js.map +1 -0
  19. package/dist/middleware/auth.d.ts +18 -0
  20. package/dist/middleware/auth.d.ts.map +1 -0
  21. package/dist/middleware/auth.js +136 -0
  22. package/dist/middleware/auth.js.map +1 -0
  23. package/dist/middleware/cors-setup.d.ts +7 -0
  24. package/dist/middleware/cors-setup.d.ts.map +1 -0
  25. package/dist/middleware/cors-setup.js +8 -0
  26. package/dist/middleware/cors-setup.js.map +1 -0
  27. package/dist/middleware/error-handler.d.ts +4 -0
  28. package/dist/middleware/error-handler.d.ts.map +1 -0
  29. package/dist/middleware/error-handler.js +27 -0
  30. package/dist/middleware/error-handler.js.map +1 -0
  31. package/dist/middleware/query-parser.d.ts +11 -0
  32. package/dist/middleware/query-parser.d.ts.map +1 -0
  33. package/dist/middleware/query-parser.js +68 -0
  34. package/dist/middleware/query-parser.js.map +1 -0
  35. package/dist/middleware/request-logger.d.ts +4 -0
  36. package/dist/middleware/request-logger.d.ts.map +1 -0
  37. package/dist/middleware/request-logger.js +29 -0
  38. package/dist/middleware/request-logger.js.map +1 -0
  39. package/dist/process-daemon/index.d.ts +14 -0
  40. package/dist/process-daemon/index.d.ts.map +1 -0
  41. package/dist/process-daemon/index.js +51 -0
  42. package/dist/process-daemon/index.js.map +1 -0
  43. package/dist/process-daemon/process-daemon.d.ts +78 -0
  44. package/dist/process-daemon/process-daemon.d.ts.map +1 -0
  45. package/dist/process-daemon/process-daemon.js +568 -0
  46. package/dist/process-daemon/process-daemon.js.map +1 -0
  47. package/dist/process-daemon/process-manager-client.d.ts +108 -0
  48. package/dist/process-daemon/process-manager-client.d.ts.map +1 -0
  49. package/dist/process-daemon/process-manager-client.js +314 -0
  50. package/dist/process-daemon/process-manager-client.js.map +1 -0
  51. package/dist/process-daemon/process-manager-interface.d.ts +47 -0
  52. package/dist/process-daemon/process-manager-interface.d.ts.map +1 -0
  53. package/dist/process-daemon/process-manager-interface.js +8 -0
  54. package/dist/process-daemon/process-manager-interface.js.map +1 -0
  55. package/dist/process-daemon/test-daemon.d.ts +12 -0
  56. package/dist/process-daemon/test-daemon.d.ts.map +1 -0
  57. package/dist/process-daemon/test-daemon.js +81 -0
  58. package/dist/process-daemon/test-daemon.js.map +1 -0
  59. package/dist/process-daemon/types.d.ts +85 -0
  60. package/dist/process-daemon/types.d.ts.map +1 -0
  61. package/dist/process-daemon/types.js +8 -0
  62. package/dist/process-daemon/types.js.map +1 -0
  63. package/dist/routes/claudia.routes.d.ts +10 -0
  64. package/dist/routes/claudia.routes.d.ts.map +1 -0
  65. package/dist/routes/claudia.routes.js +123 -0
  66. package/dist/routes/claudia.routes.js.map +1 -0
  67. package/dist/routes/config.routes.d.ts +4 -0
  68. package/dist/routes/config.routes.d.ts.map +1 -0
  69. package/dist/routes/config.routes.js +27 -0
  70. package/dist/routes/config.routes.js.map +1 -0
  71. package/dist/routes/conversation.routes.d.ts +8 -0
  72. package/dist/routes/conversation.routes.d.ts.map +1 -0
  73. package/dist/routes/conversation.routes.js +870 -0
  74. package/dist/routes/conversation.routes.js.map +1 -0
  75. package/dist/routes/filesystem.routes.d.ts +4 -0
  76. package/dist/routes/filesystem.routes.d.ts.map +1 -0
  77. package/dist/routes/filesystem.routes.js +86 -0
  78. package/dist/routes/filesystem.routes.js.map +1 -0
  79. package/dist/routes/gemini.routes.d.ts +4 -0
  80. package/dist/routes/gemini.routes.d.ts.map +1 -0
  81. package/dist/routes/gemini.routes.js +93 -0
  82. package/dist/routes/gemini.routes.js.map +1 -0
  83. package/dist/routes/insights.routes.d.ts +17 -0
  84. package/dist/routes/insights.routes.d.ts.map +1 -0
  85. package/dist/routes/insights.routes.js +417 -0
  86. package/dist/routes/insights.routes.js.map +1 -0
  87. package/dist/routes/license.routes.d.ts +3 -0
  88. package/dist/routes/license.routes.d.ts.map +1 -0
  89. package/dist/routes/license.routes.js +111 -0
  90. package/dist/routes/license.routes.js.map +1 -0
  91. package/dist/routes/log.routes.d.ts +3 -0
  92. package/dist/routes/log.routes.d.ts.map +1 -0
  93. package/dist/routes/log.routes.js +65 -0
  94. package/dist/routes/log.routes.js.map +1 -0
  95. package/dist/routes/notifications.routes.d.ts +4 -0
  96. package/dist/routes/notifications.routes.d.ts.map +1 -0
  97. package/dist/routes/notifications.routes.js +71 -0
  98. package/dist/routes/notifications.routes.js.map +1 -0
  99. package/dist/routes/permission.routes.d.ts +4 -0
  100. package/dist/routes/permission.routes.d.ts.map +1 -0
  101. package/dist/routes/permission.routes.js +116 -0
  102. package/dist/routes/permission.routes.js.map +1 -0
  103. package/dist/routes/question.routes.d.ts +8 -0
  104. package/dist/routes/question.routes.d.ts.map +1 -0
  105. package/dist/routes/question.routes.js +82 -0
  106. package/dist/routes/question.routes.js.map +1 -0
  107. package/dist/routes/streaming.routes.d.ts +4 -0
  108. package/dist/routes/streaming.routes.d.ts.map +1 -0
  109. package/dist/routes/streaming.routes.js +28 -0
  110. package/dist/routes/streaming.routes.js.map +1 -0
  111. package/dist/routes/system.routes.d.ts +5 -0
  112. package/dist/routes/system.routes.d.ts.map +1 -0
  113. package/dist/routes/system.routes.js +103 -0
  114. package/dist/routes/system.routes.js.map +1 -0
  115. package/dist/routes/working-directories.routes.d.ts +4 -0
  116. package/dist/routes/working-directories.routes.d.ts.map +1 -0
  117. package/dist/routes/working-directories.routes.js +25 -0
  118. package/dist/routes/working-directories.routes.js.map +1 -0
  119. package/dist/server.d.ts +3 -0
  120. package/dist/server.d.ts.map +1 -0
  121. package/dist/server.js +34 -0
  122. package/dist/server.js.map +1 -0
  123. package/dist/services/ToolMetricsService.d.ts +53 -0
  124. package/dist/services/ToolMetricsService.d.ts.map +1 -0
  125. package/dist/services/ToolMetricsService.js +230 -0
  126. package/dist/services/ToolMetricsService.js.map +1 -0
  127. package/dist/services/anthropic-service.d.ts +186 -0
  128. package/dist/services/anthropic-service.d.ts.map +1 -0
  129. package/dist/services/anthropic-service.js +1132 -0
  130. package/dist/services/anthropic-service.js.map +1 -0
  131. package/dist/services/claude-history-reader.d.ts +126 -0
  132. package/dist/services/claude-history-reader.d.ts.map +1 -0
  133. package/dist/services/claude-history-reader.js +717 -0
  134. package/dist/services/claude-history-reader.js.map +1 -0
  135. package/dist/services/claude-process-manager.d.ts +108 -0
  136. package/dist/services/claude-process-manager.d.ts.map +1 -0
  137. package/dist/services/claude-process-manager.js +909 -0
  138. package/dist/services/claude-process-manager.js.map +1 -0
  139. package/dist/services/claude-router-service.d.ts +19 -0
  140. package/dist/services/claude-router-service.d.ts.map +1 -0
  141. package/dist/services/claude-router-service.js +160 -0
  142. package/dist/services/claude-router-service.js.map +1 -0
  143. package/dist/services/claudia-service.d.ts +77 -0
  144. package/dist/services/claudia-service.d.ts.map +1 -0
  145. package/dist/services/claudia-service.js +194 -0
  146. package/dist/services/claudia-service.js.map +1 -0
  147. package/dist/services/commands-service.d.ts +18 -0
  148. package/dist/services/commands-service.d.ts.map +1 -0
  149. package/dist/services/commands-service.js +76 -0
  150. package/dist/services/commands-service.js.map +1 -0
  151. package/dist/services/config-service.d.ts +68 -0
  152. package/dist/services/config-service.d.ts.map +1 -0
  153. package/dist/services/config-service.js +429 -0
  154. package/dist/services/config-service.js.map +1 -0
  155. package/dist/services/conversation-cache.d.ts +86 -0
  156. package/dist/services/conversation-cache.d.ts.map +1 -0
  157. package/dist/services/conversation-cache.js +235 -0
  158. package/dist/services/conversation-cache.js.map +1 -0
  159. package/dist/services/conversation-status-manager.d.ts +98 -0
  160. package/dist/services/conversation-status-manager.d.ts.map +1 -0
  161. package/dist/services/conversation-status-manager.js +295 -0
  162. package/dist/services/conversation-status-manager.js.map +1 -0
  163. package/dist/services/cost-tracker.d.ts +87 -0
  164. package/dist/services/cost-tracker.d.ts.map +1 -0
  165. package/dist/services/cost-tracker.js +335 -0
  166. package/dist/services/cost-tracker.js.map +1 -0
  167. package/dist/services/file-system-service.d.ts +61 -0
  168. package/dist/services/file-system-service.d.ts.map +1 -0
  169. package/dist/services/file-system-service.js +348 -0
  170. package/dist/services/file-system-service.js.map +1 -0
  171. package/dist/services/gemini-service.d.ts +72 -0
  172. package/dist/services/gemini-service.d.ts.map +1 -0
  173. package/dist/services/gemini-service.js +431 -0
  174. package/dist/services/gemini-service.js.map +1 -0
  175. package/dist/services/insight-queue.d.ts +99 -0
  176. package/dist/services/insight-queue.d.ts.map +1 -0
  177. package/dist/services/insight-queue.js +277 -0
  178. package/dist/services/insight-queue.js.map +1 -0
  179. package/dist/services/insights-service.d.ts +102 -0
  180. package/dist/services/insights-service.d.ts.map +1 -0
  181. package/dist/services/insights-service.js +1152 -0
  182. package/dist/services/insights-service.js.map +1 -0
  183. package/dist/services/json-lines-parser.d.ts +19 -0
  184. package/dist/services/json-lines-parser.d.ts.map +1 -0
  185. package/dist/services/json-lines-parser.js +56 -0
  186. package/dist/services/json-lines-parser.js.map +1 -0
  187. package/dist/services/license-service.d.ts +69 -0
  188. package/dist/services/license-service.d.ts.map +1 -0
  189. package/dist/services/license-service.js +330 -0
  190. package/dist/services/license-service.js.map +1 -0
  191. package/dist/services/log-formatter.d.ts +5 -0
  192. package/dist/services/log-formatter.d.ts.map +1 -0
  193. package/dist/services/log-formatter.js +77 -0
  194. package/dist/services/log-formatter.js.map +1 -0
  195. package/dist/services/log-stream-buffer.d.ts +11 -0
  196. package/dist/services/log-stream-buffer.d.ts.map +1 -0
  197. package/dist/services/log-stream-buffer.js +36 -0
  198. package/dist/services/log-stream-buffer.js.map +1 -0
  199. package/dist/services/logger.d.ts +71 -0
  200. package/dist/services/logger.d.ts.map +1 -0
  201. package/dist/services/logger.js +215 -0
  202. package/dist/services/logger.js.map +1 -0
  203. package/dist/services/mcp-config-generator.d.ts +32 -0
  204. package/dist/services/mcp-config-generator.d.ts.map +1 -0
  205. package/dist/services/mcp-config-generator.js +126 -0
  206. package/dist/services/mcp-config-generator.js.map +1 -0
  207. package/dist/services/message-filter.d.ts +22 -0
  208. package/dist/services/message-filter.d.ts.map +1 -0
  209. package/dist/services/message-filter.js +57 -0
  210. package/dist/services/message-filter.js.map +1 -0
  211. package/dist/services/notification-service.d.ts +45 -0
  212. package/dist/services/notification-service.d.ts.map +1 -0
  213. package/dist/services/notification-service.js +184 -0
  214. package/dist/services/notification-service.js.map +1 -0
  215. package/dist/services/permission-tracker.d.ts +67 -0
  216. package/dist/services/permission-tracker.d.ts.map +1 -0
  217. package/dist/services/permission-tracker.js +161 -0
  218. package/dist/services/permission-tracker.js.map +1 -0
  219. package/dist/services/process-manager-factory.d.ts +81 -0
  220. package/dist/services/process-manager-factory.d.ts.map +1 -0
  221. package/dist/services/process-manager-factory.js +211 -0
  222. package/dist/services/process-manager-factory.js.map +1 -0
  223. package/dist/services/question-tracker.d.ts +47 -0
  224. package/dist/services/question-tracker.d.ts.map +1 -0
  225. package/dist/services/question-tracker.js +105 -0
  226. package/dist/services/question-tracker.js.map +1 -0
  227. package/dist/services/session-activity-watcher.d.ts +33 -0
  228. package/dist/services/session-activity-watcher.d.ts.map +1 -0
  229. package/dist/services/session-activity-watcher.js +194 -0
  230. package/dist/services/session-activity-watcher.js.map +1 -0
  231. package/dist/services/session-info-service.d.ts +228 -0
  232. package/dist/services/session-info-service.d.ts.map +1 -0
  233. package/dist/services/session-info-service.js +920 -0
  234. package/dist/services/session-info-service.js.map +1 -0
  235. package/dist/services/session-insights-service.d.ts +119 -0
  236. package/dist/services/session-insights-service.d.ts.map +1 -0
  237. package/dist/services/session-insights-service.js +889 -0
  238. package/dist/services/session-insights-service.js.map +1 -0
  239. package/dist/services/stream-manager.d.ts +62 -0
  240. package/dist/services/stream-manager.d.ts.map +1 -0
  241. package/dist/services/stream-manager.js +239 -0
  242. package/dist/services/stream-manager.js.map +1 -0
  243. package/dist/services/web-push-service.d.ts +48 -0
  244. package/dist/services/web-push-service.d.ts.map +1 -0
  245. package/dist/services/web-push-service.js +186 -0
  246. package/dist/services/web-push-service.js.map +1 -0
  247. package/dist/services/working-directories-service.d.ts +19 -0
  248. package/dist/services/working-directories-service.d.ts.map +1 -0
  249. package/dist/services/working-directories-service.js +103 -0
  250. package/dist/services/working-directories-service.js.map +1 -0
  251. package/dist/types/config.d.ts +111 -0
  252. package/dist/types/config.d.ts.map +1 -0
  253. package/dist/types/config.js +14 -0
  254. package/dist/types/config.js.map +1 -0
  255. package/dist/types/express.d.ts +5 -0
  256. package/dist/types/express.d.ts.map +1 -0
  257. package/dist/types/express.js +2 -0
  258. package/dist/types/express.js.map +1 -0
  259. package/dist/types/index.d.ts +325 -0
  260. package/dist/types/index.d.ts.map +1 -0
  261. package/dist/types/index.js +18 -0
  262. package/dist/types/index.js.map +1 -0
  263. package/dist/types/insights.d.ts +99 -0
  264. package/dist/types/insights.d.ts.map +1 -0
  265. package/dist/types/insights.js +7 -0
  266. package/dist/types/insights.js.map +1 -0
  267. package/dist/types/license.d.ts +70 -0
  268. package/dist/types/license.d.ts.map +1 -0
  269. package/dist/types/license.js +5 -0
  270. package/dist/types/license.js.map +1 -0
  271. package/dist/types/router-config.d.ts +13 -0
  272. package/dist/types/router-config.d.ts.map +1 -0
  273. package/dist/types/router-config.js +2 -0
  274. package/dist/types/router-config.js.map +1 -0
  275. package/dist/utils/constants.d.ts +26 -0
  276. package/dist/utils/constants.d.ts.map +1 -0
  277. package/dist/utils/constants.js +28 -0
  278. package/dist/utils/constants.js.map +1 -0
  279. package/dist/utils/machine-id.d.ts +7 -0
  280. package/dist/utils/machine-id.d.ts.map +1 -0
  281. package/dist/utils/machine-id.js +76 -0
  282. package/dist/utils/machine-id.js.map +1 -0
  283. package/dist/utils/server-startup.d.ts +13 -0
  284. package/dist/utils/server-startup.d.ts.map +1 -0
  285. package/dist/utils/server-startup.js +20 -0
  286. package/dist/utils/server-startup.js.map +1 -0
  287. package/dist/web/assets/main-DAc2rjJ2.css +1 -0
  288. package/dist/web/assets/main-DvlZ02mT.js +137 -0
  289. package/dist/web/favicon.png +0 -0
  290. package/dist/web/favicon.svg +22 -0
  291. package/dist/web/icon-192x192.png +0 -0
  292. package/dist/web/icon-512x512.png +0 -0
  293. package/dist/web/index.html +36 -0
  294. package/dist/web/manifest.json +61 -0
  295. package/package.json +174 -0
  296. package/scripts/postinstall.js +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands-service.js","sourceRoot":"","sources":["../../src/services/commands-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { CUIConfig } from '../types/config.js';
2
+ /**
3
+ * ConfigService manages Claudia configuration
4
+ * Loads from ~/.claudia/config.json
5
+ * Creates default config on first run
6
+ */
7
+ export declare class ConfigService {
8
+ private static instance;
9
+ private config;
10
+ private logger;
11
+ private configPath;
12
+ private configDir;
13
+ private emitter;
14
+ private watcher?;
15
+ private debounceTimer?;
16
+ private lastLoadedRaw?;
17
+ private pollInterval?;
18
+ private constructor();
19
+ /**
20
+ * Get singleton instance
21
+ */
22
+ static getInstance(): ConfigService;
23
+ /**
24
+ * Initialize configuration
25
+ * Creates config file if it doesn't exist
26
+ * Throws error if initialization fails
27
+ */
28
+ initialize(): Promise<void>;
29
+ /**
30
+ * Get current configuration
31
+ * Throws if not initialized
32
+ */
33
+ getConfig(): CUIConfig;
34
+ /**
35
+ * Create default configuration
36
+ */
37
+ private createDefaultConfig;
38
+ /**
39
+ * Load configuration from file
40
+ */
41
+ private loadConfig;
42
+ /**
43
+ * Update configuration
44
+ */
45
+ updateConfig(updates: Partial<CUIConfig>): Promise<void>;
46
+ /**
47
+ * Subscribe to configuration changes
48
+ */
49
+ onChange(listener: (newConfig: CUIConfig, previous: CUIConfig | null, source: 'internal' | 'external') => void): void;
50
+ /**
51
+ * Validate provided fields in a partial config. Throws on incompatible values.
52
+ */
53
+ private validateProvidedFields;
54
+ /**
55
+ * Validate a complete merged config before using it. Throws on error.
56
+ */
57
+ private validateCompleteConfig;
58
+ private assertServerConfig;
59
+ private assertInterfaceConfig;
60
+ private assertRouterConfig;
61
+ private startWatching;
62
+ private handleExternalChange;
63
+ /**
64
+ * Reset singleton instance (for testing)
65
+ */
66
+ static resetInstance(): void;
67
+ }
68
+ //# sourceMappingURL=config-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAiD,MAAM,mBAAmB,CAAC;AAO7F;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAiB;IAEtC,OAAO;IAMP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;;OAGG;IACH,SAAS,IAAI,SAAS;IAOtB;;OAEG;YACW,mBAAmB;IAyCjC;;OAEG;YACW,UAAU;IAmDxB;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D9D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,KAAK,IAAI,GAAG,IAAI;IAIrH;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,aAAa;IAmCrB,OAAO,CAAC,oBAAoB;IAwC5B;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;CAI7B"}
@@ -0,0 +1,429 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { DEFAULT_CONFIG } from '../types/config.js';
5
+ import { generateMachineId } from '../utils/machine-id.js';
6
+ import { CONFIG_DIR } from '../utils/constants.js';
7
+ import { createLogger } from './logger.js';
8
+ import { EventEmitter } from 'events';
9
+ /**
10
+ * ConfigService manages Claudia configuration
11
+ * Loads from ~/.claudia/config.json
12
+ * Creates default config on first run
13
+ */
14
+ export class ConfigService {
15
+ static instance;
16
+ config = null;
17
+ logger;
18
+ configPath;
19
+ configDir;
20
+ emitter = new EventEmitter();
21
+ watcher;
22
+ debounceTimer;
23
+ lastLoadedRaw;
24
+ pollInterval;
25
+ constructor() {
26
+ this.logger = createLogger('ConfigService');
27
+ this.configDir = CONFIG_DIR;
28
+ this.configPath = path.join(this.configDir, 'config.json');
29
+ }
30
+ /**
31
+ * Get singleton instance
32
+ */
33
+ static getInstance() {
34
+ if (!ConfigService.instance) {
35
+ ConfigService.instance = new ConfigService();
36
+ }
37
+ return ConfigService.instance;
38
+ }
39
+ /**
40
+ * Initialize configuration
41
+ * Creates config file if it doesn't exist
42
+ * Throws error if initialization fails
43
+ */
44
+ async initialize() {
45
+ this.logger.info('Initializing configuration', { configPath: this.configPath });
46
+ try {
47
+ // Check if config exists
48
+ if (!fs.existsSync(this.configPath)) {
49
+ await this.createDefaultConfig();
50
+ }
51
+ // Load and validate config
52
+ await this.loadConfig();
53
+ // Start watching for external changes
54
+ this.startWatching();
55
+ }
56
+ catch (error) {
57
+ this.logger.error('Failed to initialize configuration', error);
58
+ throw new Error(`Configuration initialization failed: ${error instanceof Error ? error.message : String(error)}`);
59
+ }
60
+ }
61
+ /**
62
+ * Get current configuration
63
+ * Throws if not initialized
64
+ */
65
+ getConfig() {
66
+ if (!this.config) {
67
+ throw new Error('Configuration not initialized. Call initialize() first.');
68
+ }
69
+ return this.config;
70
+ }
71
+ /**
72
+ * Create default configuration
73
+ */
74
+ async createDefaultConfig() {
75
+ this.logger.info('Creating default configuration');
76
+ try {
77
+ // Ensure config directory exists
78
+ if (!fs.existsSync(this.configDir)) {
79
+ fs.mkdirSync(this.configDir, { recursive: true });
80
+ this.logger.debug('Created config directory', { dir: this.configDir });
81
+ }
82
+ // Generate machine ID
83
+ const machineId = await generateMachineId();
84
+ this.logger.debug('Generated machine ID', { machineId });
85
+ // Generate crypto-secure auth token
86
+ const authToken = crypto.randomBytes(16).toString('hex'); // 32 character hex string
87
+ this.logger.debug('Generated auth token', { tokenLength: authToken.length });
88
+ // Create default config
89
+ const config = {
90
+ machine_id: machineId,
91
+ authToken,
92
+ ...DEFAULT_CONFIG
93
+ };
94
+ // Write config file
95
+ fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2), 'utf-8');
96
+ this.logger.info('Default configuration created', {
97
+ path: this.configPath,
98
+ machineId: config.machine_id
99
+ });
100
+ }
101
+ catch (error) {
102
+ throw new Error(`Failed to create default config: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ }
105
+ /**
106
+ * Load configuration from file
107
+ */
108
+ async loadConfig() {
109
+ try {
110
+ const configData = fs.readFileSync(this.configPath, 'utf-8');
111
+ let fileConfig;
112
+ try {
113
+ fileConfig = JSON.parse(configData);
114
+ }
115
+ catch (_parseError) {
116
+ // Corrupted JSON should fail startup
117
+ throw new Error('Invalid JSON in configuration file');
118
+ }
119
+ // Validate provided fields (strict for provided keys, allow missing)
120
+ this.validateProvidedFields(fileConfig);
121
+ // Merge with defaults for missing sections while preserving all existing fields (e.g., router)
122
+ let updated = false;
123
+ const merged = {
124
+ // Start with defaults
125
+ ...DEFAULT_CONFIG,
126
+ // Bring over everything from file (including optional fields like router, gemini)
127
+ ...fileConfig,
128
+ // Ensure required identifiers are set from file
129
+ machine_id: fileConfig.machine_id || (await generateMachineId()),
130
+ authToken: fileConfig.authToken || crypto.randomBytes(16).toString('hex'),
131
+ // Deep-merge known nested sections to ensure defaults are filled without dropping user values
132
+ server: { ...DEFAULT_CONFIG.server, ...(fileConfig.server || {}) },
133
+ interface: { ...DEFAULT_CONFIG.interface, ...(fileConfig.interface || {}) }
134
+ };
135
+ // Determine if we added any defaults and need to persist back to disk
136
+ if (!fileConfig.server || JSON.stringify(merged.server) !== JSON.stringify(fileConfig.server))
137
+ updated = true;
138
+ if (!fileConfig.interface || JSON.stringify(merged.interface) !== JSON.stringify(fileConfig.interface))
139
+ updated = true;
140
+ if (!fileConfig.machine_id)
141
+ updated = true;
142
+ if (!fileConfig.authToken)
143
+ updated = true;
144
+ // Final validation on fully merged config
145
+ this.validateCompleteConfig(merged);
146
+ this.config = merged;
147
+ this.lastLoadedRaw = JSON.stringify(this.config, null, 2);
148
+ if (updated) {
149
+ fs.writeFileSync(this.configPath, this.lastLoadedRaw, 'utf-8');
150
+ this.logger.info('Configuration updated with defaults');
151
+ }
152
+ this.logger.debug('Configuration loaded successfully');
153
+ }
154
+ catch (error) {
155
+ throw new Error(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`);
156
+ }
157
+ }
158
+ /**
159
+ * Update configuration
160
+ */
161
+ async updateConfig(updates) {
162
+ if (!this.config) {
163
+ throw new Error('Configuration not initialized');
164
+ }
165
+ this.logger.info('Updating configuration', { updates });
166
+ // Create a new config via deep-merge semantics so unrelated options are preserved
167
+ const current = this.config;
168
+ const mergedServer = updates.server ? { ...current.server, ...updates.server } : current.server;
169
+ const mergedInterface = updates.interface
170
+ ? {
171
+ ...current.interface,
172
+ ...updates.interface,
173
+ // Deep-merge nested notifications object if provided
174
+ notifications: updates.interface.notifications !== undefined
175
+ ? { ...(current.interface.notifications || {}), ...updates.interface.notifications }
176
+ : current.interface.notifications
177
+ }
178
+ : current.interface;
179
+ const mergedRouter = updates.router
180
+ ? { ...(current.router || {}), ...updates.router }
181
+ : current.router;
182
+ const mergedGemini = updates.gemini
183
+ ? { ...(current.gemini || {}), ...updates.gemini }
184
+ : current.gemini;
185
+ const mergedAnthropic = updates.anthropic
186
+ ? { ...(current.anthropic || {}), ...updates.anthropic }
187
+ : current.anthropic;
188
+ // Preserve machine_id and authToken regardless of updates
189
+ const newConfig = {
190
+ ...current,
191
+ server: mergedServer,
192
+ interface: mergedInterface,
193
+ gemini: mergedGemini,
194
+ anthropic: mergedAnthropic,
195
+ router: mergedRouter
196
+ };
197
+ // Update in-memory config
198
+ const prev = this.config;
199
+ this.config = newConfig;
200
+ // Write to file
201
+ try {
202
+ this.lastLoadedRaw = JSON.stringify(this.config, null, 2);
203
+ fs.writeFileSync(this.configPath, this.lastLoadedRaw, 'utf-8');
204
+ this.logger.info('Configuration updated successfully');
205
+ // Emit change event for internal updates
206
+ this.emitter.emit('config-changed', this.config, prev, 'internal');
207
+ }
208
+ catch (error) {
209
+ this.logger.error('Failed to update configuration', error);
210
+ throw new Error(`Failed to update config: ${error instanceof Error ? error.message : String(error)}`);
211
+ }
212
+ }
213
+ /**
214
+ * Subscribe to configuration changes
215
+ */
216
+ onChange(listener) {
217
+ this.emitter.on('config-changed', listener);
218
+ }
219
+ /**
220
+ * Validate provided fields in a partial config. Throws on incompatible values.
221
+ */
222
+ validateProvidedFields(partial) {
223
+ // server
224
+ if (partial.server) {
225
+ this.assertServerConfig(partial.server);
226
+ }
227
+ // interface
228
+ if (partial.interface) {
229
+ this.assertInterfaceConfig(partial.interface);
230
+ }
231
+ // router
232
+ if (partial.router) {
233
+ this.assertRouterConfig(partial.router);
234
+ }
235
+ // gemini (optional)
236
+ if (partial.gemini) {
237
+ if (partial.gemini.apiKey !== undefined && typeof partial.gemini.apiKey !== 'string') {
238
+ throw new Error('Invalid config: gemini.apiKey must be a string');
239
+ }
240
+ if (partial.gemini.model !== undefined && typeof partial.gemini.model !== 'string') {
241
+ throw new Error('Invalid config: gemini.model must be a string');
242
+ }
243
+ }
244
+ // anthropic (optional)
245
+ if (partial.anthropic) {
246
+ if (partial.anthropic.apiKey !== undefined && typeof partial.anthropic.apiKey !== 'string') {
247
+ throw new Error('Invalid config: anthropic.apiKey must be a string');
248
+ }
249
+ if (partial.anthropic.model !== undefined && typeof partial.anthropic.model !== 'string') {
250
+ throw new Error('Invalid config: anthropic.model must be a string');
251
+ }
252
+ }
253
+ // machine_id/authToken if present must be strings
254
+ if (partial.machine_id !== undefined && typeof partial.machine_id !== 'string') {
255
+ throw new Error('Invalid config: machine_id must be a string');
256
+ }
257
+ if (partial.authToken !== undefined && typeof partial.authToken !== 'string') {
258
+ throw new Error('Invalid config: authToken must be a string');
259
+ }
260
+ }
261
+ /**
262
+ * Validate a complete merged config before using it. Throws on error.
263
+ */
264
+ validateCompleteConfig(config) {
265
+ // Required top-level values
266
+ if (!config.machine_id || typeof config.machine_id !== 'string') {
267
+ throw new Error('Invalid config: missing machine_id');
268
+ }
269
+ this.assertServerConfig(config.server);
270
+ if (!config.authToken || typeof config.authToken !== 'string') {
271
+ throw new Error('Invalid config: missing authToken');
272
+ }
273
+ if (config.interface) {
274
+ this.assertInterfaceConfig(config.interface);
275
+ }
276
+ if (config.router) {
277
+ this.assertRouterConfig(config.router);
278
+ }
279
+ }
280
+ assertServerConfig(server) {
281
+ if (server.host !== undefined && typeof server.host !== 'string') {
282
+ throw new Error('Invalid config: server.host must be a string');
283
+ }
284
+ if (server.port !== undefined && typeof server.port !== 'number') {
285
+ throw new Error('Invalid config: server.port must be a number');
286
+ }
287
+ }
288
+ assertInterfaceConfig(iface) {
289
+ if (iface.colorScheme !== undefined && !['light', 'dark', 'system'].includes(iface.colorScheme)) {
290
+ throw new Error("Invalid config: interface.colorScheme must be 'light' | 'dark' | 'system'");
291
+ }
292
+ if (iface.language !== undefined && typeof iface.language !== 'string') {
293
+ throw new Error('Invalid config: interface.language must be a string');
294
+ }
295
+ if (iface.notifications !== undefined) {
296
+ const n = iface.notifications;
297
+ if (n && typeof n.enabled !== 'boolean') {
298
+ throw new Error('Invalid config: interface.notifications.enabled must be a boolean');
299
+ }
300
+ if (n && n.ntfyUrl !== undefined && typeof n.ntfyUrl !== 'string') {
301
+ throw new Error('Invalid config: interface.notifications.ntfyUrl must be a string');
302
+ }
303
+ }
304
+ }
305
+ assertRouterConfig(router) {
306
+ if (router.enabled !== undefined && typeof router.enabled !== 'boolean') {
307
+ throw new Error('Invalid config: router.enabled must be a boolean');
308
+ }
309
+ if (router.providers !== undefined) {
310
+ if (!Array.isArray(router.providers)) {
311
+ throw new Error('Invalid config: router.providers must be an array');
312
+ }
313
+ for (const p of router.providers) {
314
+ if (p.name !== undefined && typeof p.name !== 'string')
315
+ throw new Error('Invalid config: router.providers[].name must be a string');
316
+ if (p.api_base_url !== undefined && typeof p.api_base_url !== 'string')
317
+ throw new Error('Invalid config: router.providers[].api_base_url must be a string');
318
+ if (p.api_key !== undefined && typeof p.api_key !== 'string')
319
+ throw new Error('Invalid config: router.providers[].api_key must be a string');
320
+ if (p.models !== undefined && !Array.isArray(p.models))
321
+ throw new Error('Invalid config: router.providers[].models must be an array of strings');
322
+ if (Array.isArray(p.models)) {
323
+ for (const m of p.models) {
324
+ if (typeof m !== 'string')
325
+ throw new Error('Invalid config: router.providers[].models must contain strings');
326
+ }
327
+ }
328
+ }
329
+ }
330
+ if (router.rules !== undefined) {
331
+ if (typeof router.rules !== 'object' || router.rules === null || Array.isArray(router.rules)) {
332
+ throw new Error('Invalid config: router.rules must be an object of string values');
333
+ }
334
+ for (const [k, v] of Object.entries(router.rules)) {
335
+ if (typeof v !== 'string')
336
+ throw new Error(`Invalid config: router.rules['${k}'] must be a string`);
337
+ }
338
+ }
339
+ }
340
+ startWatching() {
341
+ // Avoid multiple watchers in tests
342
+ if (this.watcher)
343
+ return;
344
+ try {
345
+ // Increase listeners to avoid noisy warnings in tests with many server instances
346
+ this.emitter.setMaxListeners(0);
347
+ if (process.env.NODE_ENV === 'test') {
348
+ // Use active polling in tests to avoid fs watcher flakiness with fake timers
349
+ this.pollInterval = setInterval(() => {
350
+ try {
351
+ const raw = fs.readFileSync(this.configPath, 'utf-8');
352
+ if (!this.lastLoadedRaw || raw !== this.lastLoadedRaw) {
353
+ // Debounce within polling
354
+ if (this.debounceTimer)
355
+ clearTimeout(this.debounceTimer);
356
+ this.debounceTimer = setTimeout(() => this.handleExternalChange(), 10);
357
+ }
358
+ }
359
+ catch {
360
+ // ignore
361
+ }
362
+ }, 50);
363
+ this.logger.debug('Started interval polling for configuration changes (test mode)');
364
+ }
365
+ else {
366
+ this.watcher = fs.watch(this.configPath, { persistent: false }, (eventType) => {
367
+ if (eventType !== 'change' && eventType !== 'rename')
368
+ return;
369
+ if (this.debounceTimer)
370
+ clearTimeout(this.debounceTimer);
371
+ this.debounceTimer = setTimeout(() => this.handleExternalChange(), 250);
372
+ });
373
+ this.logger.debug('Started watching configuration file for changes');
374
+ }
375
+ }
376
+ catch (error) {
377
+ this.logger.warn('Failed to start file watcher for configuration', error);
378
+ }
379
+ }
380
+ handleExternalChange() {
381
+ try {
382
+ const newRaw = fs.readFileSync(this.configPath, 'utf-8');
383
+ if (this.lastLoadedRaw && newRaw === this.lastLoadedRaw) {
384
+ return; // No effective change
385
+ }
386
+ let parsed;
387
+ try {
388
+ parsed = JSON.parse(newRaw);
389
+ }
390
+ catch (_e) {
391
+ this.logger.error('Ignoring external config change due to invalid JSON');
392
+ return;
393
+ }
394
+ // Validate provided fields strictly
395
+ this.validateProvidedFields(parsed);
396
+ // Merge and validate complete
397
+ const current = this.config || { ...DEFAULT_CONFIG, machine_id: '', authToken: '' };
398
+ const merged = {
399
+ ...DEFAULT_CONFIG,
400
+ ...current,
401
+ ...parsed,
402
+ server: { ...DEFAULT_CONFIG.server, ...(current.server || {}), ...(parsed.server || {}) },
403
+ interface: { ...DEFAULT_CONFIG.interface, ...(current.interface || {}), ...(parsed.interface || {}) },
404
+ router: parsed.router !== undefined ? parsed.router : current.router,
405
+ gemini: parsed.gemini !== undefined ? parsed.gemini : current.gemini,
406
+ anthropic: parsed.anthropic !== undefined ? parsed.anthropic : current.anthropic,
407
+ machine_id: parsed.machine_id || current.machine_id,
408
+ authToken: parsed.authToken || current.authToken
409
+ };
410
+ this.validateCompleteConfig(merged);
411
+ const prev = this.config;
412
+ this.config = merged;
413
+ this.lastLoadedRaw = JSON.stringify(merged, null, 2);
414
+ this.logger.info('Configuration reloaded from external change');
415
+ this.emitter.emit('config-changed', this.config, prev || null, 'external');
416
+ }
417
+ catch (error) {
418
+ this.logger.error('Failed to handle external configuration change', error);
419
+ }
420
+ }
421
+ /**
422
+ * Reset singleton instance (for testing)
423
+ */
424
+ static resetInstance() {
425
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
426
+ ConfigService.instance = null;
427
+ }
428
+ }
429
+ //# sourceMappingURL=config-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-service.js","sourceRoot":"","sources":["../../src/services/config-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import { ConversationMessage } from '../types/index.js';
2
+ import Anthropic from '@anthropic-ai/sdk';
3
+ export interface ConversationChain {
4
+ sessionId: string;
5
+ messages: ConversationMessage[];
6
+ projectPath: string;
7
+ summary: string;
8
+ createdAt: string;
9
+ updatedAt: string;
10
+ totalDuration: number;
11
+ model: string;
12
+ }
13
+ interface RawJsonEntry {
14
+ type: string;
15
+ uuid?: string;
16
+ sessionId?: string;
17
+ parentUuid?: string;
18
+ timestamp?: string;
19
+ message?: Anthropic.Message | Anthropic.MessageParam;
20
+ cwd?: string;
21
+ durationMs?: number;
22
+ isSidechain?: boolean;
23
+ userType?: string;
24
+ version?: string;
25
+ summary?: string;
26
+ leafUuid?: string;
27
+ }
28
+ /**
29
+ * Service for managing conversation cache with file modification tracking
30
+ */
31
+ export declare class ConversationCache {
32
+ private cache;
33
+ private logger;
34
+ private parsingPromises;
35
+ constructor();
36
+ /**
37
+ * Clear the conversation cache to force a refresh on next read
38
+ */
39
+ clear(): void;
40
+ /**
41
+ * Get cached file entries, combining cached and newly parsed entries
42
+ */
43
+ getCachedFileEntries(currentFileModTimes: Map<string, number>, parseFileFunction: (filePath: string) => Promise<RawJsonEntry[]>, getSourceProject: (filePath: string) => string): Promise<(RawJsonEntry & {
44
+ sourceProject: string;
45
+ })[]>;
46
+ /**
47
+ * Update a specific file's cache entry
48
+ */
49
+ updateFileCache(filePath: string, entries: RawJsonEntry[], mtime: number, sourceProject: string): void;
50
+ /**
51
+ * Clear cache entry for a specific file
52
+ */
53
+ clearFileCache(filePath: string): void;
54
+ /**
55
+ * Check if a specific file's cache entry is valid
56
+ */
57
+ isFileCacheValid(filePath: string, currentMtime: number): boolean;
58
+ /**
59
+ * Get or parse conversations with file-level caching and concurrency protection
60
+ */
61
+ getOrParseConversations(currentFileModTimes: Map<string, number>, parseFileFunction: (filePath: string) => Promise<RawJsonEntry[]>, getSourceProject: (filePath: string) => string, processAllEntries: (allEntries: (RawJsonEntry & {
62
+ sourceProject: string;
63
+ })[]) => ConversationChain[]): Promise<ConversationChain[]>;
64
+ /**
65
+ * Execute file-based parsing with proper logging
66
+ */
67
+ private executeFileBasedParsing;
68
+ /**
69
+ * Get cache statistics for monitoring
70
+ */
71
+ getStats(): {
72
+ isLoaded: boolean;
73
+ cachedFileCount: number;
74
+ totalCachedEntries: number;
75
+ lastCacheTime: number | null;
76
+ cacheAge: number | null;
77
+ isCurrentlyParsing: boolean;
78
+ fileCacheDetails: {
79
+ filePath: string;
80
+ entryCount: number;
81
+ mtime: string;
82
+ }[];
83
+ };
84
+ }
85
+ export {};
86
+ //# sourceMappingURL=conversation-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-cache.d.ts","sourceRoot":"","sources":["../../src/services/conversation-cache.ts"],"names":[],"mappings":"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"}