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,230 @@
1
+ import { EventEmitter } from 'events';
2
+ import { createLogger } from './logger.js';
3
+ import { diffLines } from 'diff';
4
+ /**
5
+ * Service for tracking tool usage metrics from Claude CLI conversations
6
+ * Listens to 'claude-message' events and calculates line diff statistics
7
+ */
8
+ export class ToolMetricsService extends EventEmitter {
9
+ metrics = new Map();
10
+ logger;
11
+ constructor() {
12
+ super();
13
+ this.logger = createLogger('ToolMetricsService');
14
+ }
15
+ /**
16
+ * Start listening to messages from ClaudeProcessManager
17
+ */
18
+ listenToClaudeMessages(processManager) {
19
+ processManager.on('claude-message', ({ streamingId, message }) => {
20
+ this.logger.debug('Received claude-message in ToolMetricsService', {
21
+ streamingId,
22
+ messageType: message?.type,
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ sessionId: message?.session_id
25
+ });
26
+ this.handleClaudeMessage(streamingId, message);
27
+ });
28
+ this.logger.debug('Started listening to claude-message events');
29
+ }
30
+ /**
31
+ * Get metrics for a specific session
32
+ */
33
+ getMetrics(sessionId) {
34
+ const metrics = this.metrics.get(sessionId);
35
+ return metrics;
36
+ }
37
+ /**
38
+ * Handle Claude messages to extract tool use data
39
+ */
40
+ handleClaudeMessage(streamingId, message) {
41
+ // We're interested in assistant messages that contain tool use
42
+ if (message.type === 'assistant') {
43
+ const assistantMessage = message;
44
+ this.processAssistantMessage(streamingId, assistantMessage);
45
+ }
46
+ }
47
+ /**
48
+ * Process assistant messages to find tool use blocks
49
+ */
50
+ processAssistantMessage(streamingId, message) {
51
+ this.logger.debug('Processing assistant message', {
52
+ streamingId,
53
+ sessionId: message.session_id,
54
+ hasMessage: !!message.message,
55
+ hasContent: !!message.message?.content,
56
+ contentType: Array.isArray(message.message?.content) ? 'array' : typeof message.message?.content
57
+ });
58
+ if (!message.message || !message.message.content) {
59
+ return;
60
+ }
61
+ const content = message.message.content;
62
+ // Content can be a string or an array of content blocks
63
+ if (Array.isArray(content)) {
64
+ this.logger.debug('Processing content blocks', {
65
+ sessionId: message.session_id,
66
+ blockCount: content.length,
67
+ blockTypes: content.map(b => b.type)
68
+ });
69
+ content.forEach(block => {
70
+ if (block.type === 'tool_use') {
71
+ this.processToolUse(message.session_id, block);
72
+ }
73
+ });
74
+ }
75
+ }
76
+ /**
77
+ * Process a tool use block to calculate line diffs
78
+ */
79
+ processToolUse(sessionId, toolUse) {
80
+ const toolName = toolUse.name;
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ const input = toolUse.input;
83
+ this.logger.debug('Processing tool use', {
84
+ sessionId,
85
+ toolName,
86
+ toolId: toolUse.id,
87
+ inputKeys: Object.keys(input || {})
88
+ });
89
+ // Get or create metrics for this session
90
+ const metrics = this.metrics.get(sessionId) || {
91
+ linesAdded: 0,
92
+ linesRemoved: 0,
93
+ editCount: 0,
94
+ writeCount: 0
95
+ };
96
+ // Handle Edit and MultiEdit tools
97
+ if (toolName === 'Edit' || toolName === 'MultiEdit') {
98
+ if (toolName === 'Edit') {
99
+ metrics.editCount++;
100
+ this.calculateEditLineDiff(input, metrics);
101
+ }
102
+ else {
103
+ // MultiEdit has an array of edits
104
+ const edits = input.edits;
105
+ if (Array.isArray(edits)) {
106
+ metrics.editCount += edits.length;
107
+ edits.forEach(edit => this.calculateEditLineDiff(edit, metrics));
108
+ }
109
+ }
110
+ }
111
+ // Handle Write tool
112
+ else if (toolName === 'Write') {
113
+ metrics.writeCount++;
114
+ const content = input.content;
115
+ if (typeof content === 'string') {
116
+ const lines = this.countLines(content);
117
+ metrics.linesAdded += lines;
118
+ this.logger.debug('Write tool processed', {
119
+ sessionId,
120
+ linesAdded: lines,
121
+ contentLength: content.length
122
+ });
123
+ }
124
+ }
125
+ // Update metrics
126
+ this.metrics.set(sessionId, metrics);
127
+ this.logger.debug('Updated metrics', {
128
+ sessionId,
129
+ metrics
130
+ });
131
+ }
132
+ /**
133
+ * Calculate line diff for an edit operation using proper diff algorithm
134
+ */
135
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
136
+ calculateEditLineDiff(input, metrics) {
137
+ const oldString = input.old_string;
138
+ const newString = input.new_string;
139
+ // Handle edge cases
140
+ if (typeof oldString !== 'string' || typeof newString !== 'string') {
141
+ return;
142
+ }
143
+ // Use jsdiff to get accurate line-by-line changes
144
+ const changes = diffLines(oldString, newString, {
145
+ ignoreWhitespace: false,
146
+ newlineIsToken: false
147
+ });
148
+ let linesAdded = 0;
149
+ let linesRemoved = 0;
150
+ changes.forEach(change => {
151
+ if (change.added) {
152
+ linesAdded += change.count || 0;
153
+ }
154
+ else if (change.removed) {
155
+ linesRemoved += change.count || 0;
156
+ }
157
+ });
158
+ metrics.linesAdded += linesAdded;
159
+ metrics.linesRemoved += linesRemoved;
160
+ }
161
+ /**
162
+ * Count lines in a string
163
+ */
164
+ countLines(text) {
165
+ if (!text || text.length === 0) {
166
+ return 0;
167
+ }
168
+ // Split by newline and filter out empty trailing line if it exists
169
+ const lines = text.split('\n');
170
+ // If the text ends with a newline, we don't count that as an extra line
171
+ if (lines[lines.length - 1] === '') {
172
+ return lines.length - 1;
173
+ }
174
+ return lines.length;
175
+ }
176
+ /**
177
+ * Calculate metrics from historical conversation messages
178
+ * This is used by ClaudeHistoryReader for past conversations
179
+ */
180
+ calculateMetricsFromMessages(messages) {
181
+ const metrics = {
182
+ linesAdded: 0,
183
+ linesRemoved: 0,
184
+ editCount: 0,
185
+ writeCount: 0
186
+ };
187
+ messages.forEach(msg => {
188
+ if (msg.type === 'assistant' && msg.message) {
189
+ const message = msg.message;
190
+ if (message.content && Array.isArray(message.content)) {
191
+ message.content.forEach(block => {
192
+ if (block.type === 'tool_use') {
193
+ this.processToolUseForMetrics(block, metrics);
194
+ }
195
+ });
196
+ }
197
+ }
198
+ });
199
+ return metrics;
200
+ }
201
+ /**
202
+ * Process tool use for direct metrics calculation (used for historical data)
203
+ */
204
+ processToolUseForMetrics(toolUse, metrics) {
205
+ const toolName = toolUse.name;
206
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
207
+ const input = toolUse.input;
208
+ if (toolName === 'Edit' || toolName === 'MultiEdit') {
209
+ if (toolName === 'Edit') {
210
+ metrics.editCount++;
211
+ this.calculateEditLineDiff(input, metrics);
212
+ }
213
+ else {
214
+ const edits = input.edits;
215
+ if (Array.isArray(edits)) {
216
+ metrics.editCount += edits.length;
217
+ edits.forEach(edit => this.calculateEditLineDiff(edit, metrics));
218
+ }
219
+ }
220
+ }
221
+ else if (toolName === 'Write') {
222
+ metrics.writeCount++;
223
+ const content = input.content;
224
+ if (typeof content === 'string') {
225
+ metrics.linesAdded += this.countLines(content);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ //# sourceMappingURL=ToolMetricsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolMetricsService.js","sourceRoot":"","sources":["../../src/services/ToolMetricsService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,186 @@
1
+ import { type ExtractedSessionInsights } from '../types/index.js';
2
+ export interface AnthropicHealthResponse {
3
+ status: 'healthy' | 'unhealthy';
4
+ message: string;
5
+ apiKeyValid: boolean;
6
+ }
7
+ export type { SessionPanel, ExtractedSessionInsights } from '../types/index.js';
8
+ export declare class AnthropicService {
9
+ private logger;
10
+ private client;
11
+ private models;
12
+ constructor();
13
+ initialize(): Promise<void>;
14
+ /**
15
+ * Execute a function with exponential backoff retry on transient errors.
16
+ */
17
+ private withRetry;
18
+ checkHealth(): Promise<AnthropicHealthResponse>;
19
+ /**
20
+ * Log cost for an LLM API call.
21
+ * Call this after each API call to track costs.
22
+ */
23
+ private logCost;
24
+ /**
25
+ * Extract rich, structured session insights using Opus 4.5
26
+ */
27
+ extractSessionInsights(conversationText: string): Promise<ExtractedSessionInsights>;
28
+ /**
29
+ * Generate a session name (simpler extraction for naming)
30
+ */
31
+ generateSessionName(conversationText: string): Promise<{
32
+ name: string;
33
+ }>;
34
+ isConfigured(): boolean;
35
+ /**
36
+ * Quick check using Haiku to determine if insights need patching.
37
+ *
38
+ * This is a fast, cheap call that just answers "has anything meaningful changed?"
39
+ * based on recent actions. If yes, we'll follow up with Sonnet for actual patching.
40
+ */
41
+ quickCheckInsightsStale(currentInsights: {
42
+ mission: string;
43
+ milestones: Array<{
44
+ label: string;
45
+ status: 'done' | 'current' | 'pending';
46
+ }>;
47
+ panels: Array<{
48
+ title: string;
49
+ }>;
50
+ }, recentActions: string[]): Promise<{
51
+ needsPatch: boolean;
52
+ reason: string;
53
+ }>;
54
+ /**
55
+ * Decompose recent activity into exhaustive propositional facts.
56
+ * Separates "what happened" (facts) from "what does this mean" (interpretation).
57
+ * Returns structured bullet points of all tool uses, user messages, and Claude messages.
58
+ */
59
+ private decomposeActivityIntoPropositions;
60
+ /**
61
+ * Fast currentState-only update using Haiku.
62
+ * Bypasses full patch generation when only currentState needs updating.
63
+ * Much faster (~3-4s) than full patch pipeline (~12s).
64
+ */
65
+ generateCurrentStateOnly(currentState: {
66
+ icon: string;
67
+ color: string;
68
+ content: string;
69
+ } | null, propositions: string[]): Promise<{
70
+ icon: string;
71
+ color: string;
72
+ content: string;
73
+ } | null>;
74
+ /**
75
+ * Generate a fast patch using Haiku that updates:
76
+ * - currentState
77
+ * - milestones (status updates + new ones)
78
+ * - recentActions
79
+ *
80
+ * This is the new "Haiku-heavy" patch strategy from Architecture V2.
81
+ * Much faster (~1-2s) than full Sonnet patch (~12s).
82
+ * Panels, notable, and context are handled by REFRESH (Opus).
83
+ */
84
+ generateFastPatch(currentInsights: {
85
+ currentState: {
86
+ icon: string;
87
+ color: string;
88
+ content: string;
89
+ } | null;
90
+ milestones: Array<{
91
+ label: string;
92
+ status: 'done' | 'current' | 'pending';
93
+ }>;
94
+ recentActions: string[];
95
+ }, propositions: string[]): Promise<{
96
+ currentState: {
97
+ icon: string;
98
+ color: string;
99
+ content: string;
100
+ } | null;
101
+ milestones: Array<{
102
+ action: 'update' | 'add';
103
+ label: string;
104
+ status?: 'done' | 'current' | 'pending';
105
+ }>;
106
+ recentActions: string[];
107
+ } | null>;
108
+ /**
109
+ * Generate targeted patches to insights using Sonnet.
110
+ *
111
+ * Called when quickCheckInsightsStale returns needsPatch=true.
112
+ * Returns specific patches to apply rather than regenerating everything.
113
+ *
114
+ * @param useFastPath - If true, only generate currentState using fast Haiku-only pipeline (~5s vs ~12s)
115
+ */
116
+ generateInsightsPatch(currentInsights: {
117
+ mission: string;
118
+ description: string;
119
+ theme: string;
120
+ currentState: {
121
+ icon: string;
122
+ color: string;
123
+ content: string;
124
+ } | null;
125
+ milestones: Array<{
126
+ label: string;
127
+ status: 'done' | 'current' | 'pending';
128
+ }>;
129
+ panels: Array<{
130
+ label?: string;
131
+ value?: string;
132
+ title?: string;
133
+ items?: Array<string | {
134
+ text: string;
135
+ icon?: string;
136
+ }>;
137
+ icon?: string;
138
+ color?: string;
139
+ }>;
140
+ notable: Array<{
141
+ text: string;
142
+ icon?: string;
143
+ }>;
144
+ recentActions: string[];
145
+ tags: string[];
146
+ previousPropositions?: string[];
147
+ }, recentActivity: Array<{
148
+ type: string;
149
+ content: string;
150
+ }>, useFastPath?: boolean): Promise<{
151
+ patches: {
152
+ mission?: string;
153
+ description?: string;
154
+ theme?: string;
155
+ currentState?: {
156
+ icon: string;
157
+ color: string;
158
+ content: string;
159
+ };
160
+ milestones?: Array<{
161
+ action: 'update' | 'add';
162
+ label: string;
163
+ status?: 'done' | 'current' | 'pending';
164
+ }>;
165
+ panels?: Array<{
166
+ action: 'add' | 'update' | 'remove';
167
+ label: string;
168
+ icon?: string;
169
+ color?: string;
170
+ value?: string;
171
+ }>;
172
+ notable?: Array<{
173
+ action: 'add';
174
+ text: string;
175
+ icon?: string;
176
+ type?: string;
177
+ }>;
178
+ recentActions?: string[];
179
+ tags?: string[];
180
+ };
181
+ reason: string;
182
+ propositions: string[];
183
+ }>;
184
+ }
185
+ export declare const anthropicService: AnthropicService;
186
+ //# sourceMappingURL=anthropic-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic-service.d.ts","sourceRoot":"","sources":["../../src/services/anthropic-service.ts"],"names":[],"mappings":"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"}