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,562 @@
1
+ /**
2
+ * Session Marks Service
3
+ *
4
+ * Handles user-flagged marks on session content for post-session analysis.
5
+ * Marks can be of different types (friction, skill) and capture full turn context
6
+ * for richer analysis.
7
+ *
8
+ * Key concepts:
9
+ * - Mark: A user flag on a specific message or tool use
10
+ * - Mark type: The intent behind the mark (friction = "this was painful", skill = "this could be automated")
11
+ * - Turn context: Full snapshot of the turn containing the marked content
12
+ */
13
+ import { createLogger } from '../infrastructure/logger.js';
14
+ import { SessionInfoService } from '../sessions/session-info-service.js';
15
+ import { ClaudeHistoryReader } from '../sessions/claude-history-reader.js';
16
+ import { TurnCaptureService } from '../sessions/turn-capture-service.js';
17
+ const logger = createLogger('SessionMarksService');
18
+ export const MARK_TYPES = {
19
+ friction: {
20
+ label: 'Friction',
21
+ icon: '⚠️',
22
+ description: 'Something about this was frustrating or could be improved',
23
+ promptFraming: (turn) => {
24
+ // Check if user marked their own message (correction/complaint about preceding response)
25
+ if (turn.isUserMessageMarked && turn.precedingAssistantBlocks) {
26
+ return `### Turn ${turn.turnNumber}. [User Correction] — Friction
27
+ **What Claude did in the preceding turn:**
28
+ ${formatAssistantBlocks(turn.precedingAssistantBlocks, { fullContent: true })}
29
+
30
+ **User's correction/complaint:** ← MARKED AS FRICTION
31
+ "${turn.userMessage}"`;
32
+ }
33
+ // Standard case: user marked Claude's response or tool use
34
+ const markedBlock = turn.assistantBlocks.find(b => b.isMarked);
35
+ const markedLabel = markedBlock?.toolName
36
+ ? `[Tool: ${markedBlock.toolName}]`
37
+ : '[Response]';
38
+ return `### Turn ${turn.turnNumber}. ${markedLabel} — Friction
39
+ **User asked:** ${turn.userMessage}
40
+
41
+ **What happened:**
42
+ ${formatAssistantBlocks(turn.assistantBlocks, { showMarkers: true, markerText: 'MARKED AS FRICTION' })}`;
43
+ },
44
+ analysisGoal: `Identify what went wrong or felt awkward. The friction might be Claude's behavior, a workflow issue, missing tooling, or unclear context. Suggest how to prevent this in future sessions.`,
45
+ },
46
+ skill: {
47
+ label: 'Skill candidate',
48
+ icon: '🔧',
49
+ description: 'This pattern could become a reusable skill',
50
+ promptFraming: (turn) => {
51
+ // Check if user marked their own message (the user action that could be a skill)
52
+ if (turn.isUserMessageMarked && turn.precedingAssistantBlocks) {
53
+ return `### Turn ${turn.turnNumber}. [User Action] — Skill Candidate
54
+ **What Claude did in the preceding turn:**
55
+ ${formatAssistantBlocks(turn.precedingAssistantBlocks, { fullContent: true })}
56
+
57
+ **User's action/request:** ← MARKED AS SKILL CANDIDATE
58
+ "${turn.userMessage}"`;
59
+ }
60
+ // Standard case: user marked Claude's response or tool use
61
+ return `### Turn ${turn.turnNumber}. Skill Candidate
62
+ **User asked:** ${turn.userMessage}
63
+
64
+ **What Claude did:**
65
+ ${formatAssistantBlocks(turn.assistantBlocks, { showMarkers: true, markerText: 'SKILL CANDIDATE' })}`;
66
+ },
67
+ analysisGoal: `Analyze what reusable pattern this represents. What would a Claude Code skill look like that handles this? Consider: What's the trigger? What context does it need? What should the skill do?`,
68
+ },
69
+ };
70
+ // =============================================================================
71
+ // Service
72
+ // =============================================================================
73
+ export class SessionMarksService {
74
+ static instance;
75
+ sessionInfoService;
76
+ historyReader;
77
+ turnCaptureService;
78
+ constructor() {
79
+ this.sessionInfoService = SessionInfoService.getInstance();
80
+ this.historyReader = new ClaudeHistoryReader();
81
+ this.turnCaptureService = TurnCaptureService.getInstance();
82
+ }
83
+ static getInstance() {
84
+ if (!SessionMarksService.instance) {
85
+ SessionMarksService.instance = new SessionMarksService();
86
+ }
87
+ return SessionMarksService.instance;
88
+ }
89
+ /**
90
+ * Create a new session mark.
91
+ * If the turn is complete, captures turn context immediately.
92
+ * If the turn is in progress, turn context will be backfilled on turn completion.
93
+ */
94
+ async createMark(params) {
95
+ const startTime = Date.now();
96
+ logger.info('Creating session mark', {
97
+ sessionId: params.sessionId.slice(0, 8),
98
+ markType: params.markType,
99
+ contentType: params.contentType,
100
+ messageId: params.messageId,
101
+ });
102
+ // Determine if turn is complete and capture context if so
103
+ const { turnNumber, turnContext, isTurnComplete } = await this.resolveTurnContext(params.sessionId, params.messageId, params.contentType);
104
+ logger.debug('Turn context resolution', {
105
+ sessionId: params.sessionId.slice(0, 8),
106
+ messageId: params.messageId,
107
+ turnNumber,
108
+ isTurnComplete,
109
+ hasTurnContext: !!turnContext,
110
+ });
111
+ // Create the mark
112
+ const id = await this.sessionInfoService.addSessionMark({
113
+ sessionId: params.sessionId,
114
+ messageId: params.messageId,
115
+ markType: params.markType,
116
+ contentType: params.contentType,
117
+ toolName: params.toolName,
118
+ contentPreview: params.contentPreview,
119
+ turnNumber,
120
+ turnContext: turnContext ? JSON.stringify(turnContext) : null,
121
+ });
122
+ const elapsed = Date.now() - startTime;
123
+ logger.info('Session mark created', {
124
+ id,
125
+ sessionId: params.sessionId.slice(0, 8),
126
+ markType: params.markType,
127
+ turnNumber,
128
+ hasTurnContext: !!turnContext,
129
+ elapsedMs: elapsed,
130
+ });
131
+ return id;
132
+ }
133
+ /**
134
+ * Delete a session mark.
135
+ */
136
+ async deleteMark(id) {
137
+ logger.info('Deleting session mark', { id });
138
+ await this.sessionInfoService.deleteSessionMark(id);
139
+ logger.debug('Session mark deleted', { id });
140
+ }
141
+ /**
142
+ * Get all marks for a session.
143
+ */
144
+ async getMarksForSession(sessionId) {
145
+ logger.debug('Getting marks for session', { sessionId: sessionId.slice(0, 8) });
146
+ const rawMarks = await this.sessionInfoService.getSessionMarks(sessionId);
147
+ logger.debug('Marks retrieved', {
148
+ sessionId: sessionId.slice(0, 8),
149
+ count: rawMarks.length,
150
+ });
151
+ // Cast markType from string to MarkType and turnContext from unknown to TurnContext
152
+ return rawMarks.map(mark => ({
153
+ ...mark,
154
+ markType: mark.markType,
155
+ turnContext: mark.turnContext,
156
+ }));
157
+ }
158
+ /**
159
+ * Check if a message is marked and return the mark ID if so.
160
+ */
161
+ async isMarked(sessionId, messageId) {
162
+ return this.sessionInfoService.isSessionMarked(sessionId, messageId);
163
+ }
164
+ /**
165
+ * Backfill turn context for marks that were created during an in-progress turn.
166
+ * Called by TurnCaptureService when a turn completes.
167
+ */
168
+ async backfillTurnContext(sessionId, turnNumber) {
169
+ const startTime = Date.now();
170
+ logger.debug('Checking for marks needing turn context backfill', {
171
+ sessionId: sessionId.slice(0, 8),
172
+ turnNumber,
173
+ });
174
+ // Get marks without turn context for this session
175
+ const pendingMarks = await this.sessionInfoService.getMarksWithoutTurnContext(sessionId);
176
+ if (pendingMarks.length === 0) {
177
+ logger.debug('No pending marks to backfill', { sessionId: sessionId.slice(0, 8) });
178
+ return;
179
+ }
180
+ logger.info('Backfilling turn context for marks', {
181
+ sessionId: sessionId.slice(0, 8),
182
+ turnNumber,
183
+ pendingMarkCount: pendingMarks.length,
184
+ });
185
+ // Get the turn context from JSONL
186
+ const turnContext = await this.extractTurnContext(sessionId, turnNumber, null, null);
187
+ if (!turnContext) {
188
+ logger.warn('Could not extract turn context for backfill', {
189
+ sessionId: sessionId.slice(0, 8),
190
+ turnNumber,
191
+ });
192
+ return;
193
+ }
194
+ // Update each pending mark
195
+ for (const mark of pendingMarks) {
196
+ // Check if this mark's messageId is in the turn
197
+ const isInTurn = this.isMessageInTurn(mark.messageId, mark.contentType, turnContext);
198
+ if (isInTurn) {
199
+ // Mark the relevant block
200
+ const turnContextWithMark = this.markBlockInContext(turnContext, mark.messageId, mark.contentType);
201
+ await this.sessionInfoService.updateMarkTurnContext(mark.id, turnNumber, JSON.stringify(turnContextWithMark));
202
+ logger.debug('Backfilled turn context for mark', {
203
+ markId: mark.id,
204
+ sessionId: sessionId.slice(0, 8),
205
+ turnNumber,
206
+ });
207
+ }
208
+ }
209
+ const elapsed = Date.now() - startTime;
210
+ logger.info('Turn context backfill complete', {
211
+ sessionId: sessionId.slice(0, 8),
212
+ turnNumber,
213
+ elapsedMs: elapsed,
214
+ });
215
+ }
216
+ /**
217
+ * Format marks for post-session analysis using the mark type registry.
218
+ */
219
+ formatMarksForAnalysis(marks) {
220
+ if (marks.length === 0) {
221
+ return '';
222
+ }
223
+ const sections = [];
224
+ // Group marks by type
225
+ const marksByType = new Map();
226
+ for (const mark of marks) {
227
+ const existing = marksByType.get(mark.markType) || [];
228
+ existing.push(mark);
229
+ marksByType.set(mark.markType, existing);
230
+ }
231
+ // Format each type section
232
+ for (const [markType, typeMarks] of marksByType) {
233
+ const typeDef = MARK_TYPES[markType];
234
+ const typeHeader = `## ${typeDef.icon} User-Flagged: ${typeDef.label} (${typeMarks.length})`;
235
+ const typeGoal = `**Analysis goal:** ${typeDef.analysisGoal}`;
236
+ const markItems = typeMarks.map(mark => {
237
+ if (mark.turnContext) {
238
+ return typeDef.promptFraming(mark.turnContext);
239
+ }
240
+ else {
241
+ // Fallback if no turn context (shouldn't happen normally)
242
+ return `### Turn ? — ${typeDef.label}
243
+ **Marked content:** ${mark.contentPreview}
244
+ (Full turn context unavailable)`;
245
+ }
246
+ });
247
+ sections.push(`${typeHeader}\n\n${typeGoal}\n\n${markItems.join('\n\n')}`);
248
+ }
249
+ return sections.join('\n\n---\n\n');
250
+ }
251
+ /**
252
+ * Get available mark types for the UI.
253
+ */
254
+ getAvailableMarkTypes() {
255
+ return Object.entries(MARK_TYPES).map(([type, def]) => ({
256
+ type: type,
257
+ label: def.label,
258
+ icon: def.icon,
259
+ description: def.description,
260
+ }));
261
+ }
262
+ // ===========================================================================
263
+ // Private helpers
264
+ // ===========================================================================
265
+ /**
266
+ * Resolve turn context for a mark.
267
+ * Returns turn number and context if the turn is complete, or just turn number if in progress.
268
+ */
269
+ async resolveTurnContext(sessionId, messageId, contentType) {
270
+ // Get existing turns for this session
271
+ const existingTurns = await this.turnCaptureService.getTurnsForSession(sessionId);
272
+ const currentTurnNumber = existingTurns.length + 1;
273
+ // Try to find which turn contains this message
274
+ // First check if message is in a completed turn
275
+ const { messages } = await this.historyReader.fetchConversationDirect(sessionId);
276
+ if (messages.length === 0) {
277
+ logger.debug('No messages in conversation', { sessionId: sessionId.slice(0, 8) });
278
+ return { turnNumber: null, turnContext: null, isTurnComplete: false };
279
+ }
280
+ // Find the turn containing this message/tool
281
+ const turnInfo = this.findTurnForMessage(messages, messageId, contentType);
282
+ if (!turnInfo) {
283
+ // Message not found - might be in currently streaming turn
284
+ logger.debug('Message not found in existing turns, assuming current turn', {
285
+ sessionId: sessionId.slice(0, 8),
286
+ messageId,
287
+ });
288
+ return { turnNumber: currentTurnNumber, turnContext: null, isTurnComplete: false };
289
+ }
290
+ // Check if this is the last turn (might still be in progress)
291
+ const isLastTurn = turnInfo.turnNumber === currentTurnNumber;
292
+ // For now, assume turns captured in session_turns are complete
293
+ // A turn is "in progress" only if it's beyond the last captured turn
294
+ const isTurnComplete = !isLastTurn || existingTurns.length > 0;
295
+ if (isTurnComplete) {
296
+ // Extract full turn context, including preceding turn if user message is marked
297
+ const turnContext = await this.extractTurnContext(sessionId, turnInfo.turnNumber, messageId, contentType, turnInfo.isUserMessage);
298
+ return { turnNumber: turnInfo.turnNumber, turnContext, isTurnComplete: true };
299
+ }
300
+ return { turnNumber: turnInfo.turnNumber, turnContext: null, isTurnComplete: false };
301
+ }
302
+ /**
303
+ * Find which turn number contains a given message or tool.
304
+ * Also returns whether the marked message is a user message (for capturing preceding context).
305
+ */
306
+ findTurnForMessage(messages, messageId, contentType) {
307
+ let turnNumber = 0;
308
+ for (const msg of messages) {
309
+ // New turn starts with a human message
310
+ if (msg.type === 'user' && this.hasHumanText(msg)) {
311
+ turnNumber++;
312
+ }
313
+ // Check if this message contains what we're looking for
314
+ if (contentType === 'tool_use' && messageId.startsWith('tool-')) {
315
+ const toolId = messageId.replace('tool-', '');
316
+ if (this.messageContainsTool(msg, toolId)) {
317
+ return { turnNumber, isUserMessage: false };
318
+ }
319
+ }
320
+ else if (contentType === 'response') {
321
+ // Check both user and assistant message IDs
322
+ if (msg.uuid === messageId) {
323
+ return { turnNumber, isUserMessage: msg.type === 'user' };
324
+ }
325
+ }
326
+ }
327
+ return null;
328
+ }
329
+ /**
330
+ * Check if a message contains a specific tool use.
331
+ */
332
+ messageContainsTool(msg, toolId) {
333
+ const content = msg.message?.content;
334
+ if (!Array.isArray(content))
335
+ return false;
336
+ return content.some(block => typeof block === 'object' &&
337
+ block !== null &&
338
+ block.type === 'tool_use' &&
339
+ 'id' in block &&
340
+ block.id === toolId);
341
+ }
342
+ /**
343
+ * Check if a user message contains actual human text (not just tool results).
344
+ */
345
+ hasHumanText(msg) {
346
+ const content = msg.message?.content;
347
+ if (typeof content === 'string' && content.trim()) {
348
+ return true;
349
+ }
350
+ if (Array.isArray(content)) {
351
+ return content.some(block => typeof block === 'object' && block !== null && block.type === 'text' && 'text' in block);
352
+ }
353
+ return false;
354
+ }
355
+ /**
356
+ * Extract full turn context from JSONL.
357
+ * If isUserMessageMarked is true, also captures the preceding assistant response.
358
+ */
359
+ async extractTurnContext(sessionId, turnNumber, markedMessageId, markedContentType, isUserMessageMarked = false) {
360
+ const { messages } = await this.historyReader.fetchConversationDirect(sessionId);
361
+ if (messages.length === 0) {
362
+ return null;
363
+ }
364
+ // Find the nth human message (turn start) and track turn boundaries
365
+ let currentTurn = 0;
366
+ let turnStartIdx = -1;
367
+ let turnEndIdx = messages.length;
368
+ let prevTurnStartIdx = -1;
369
+ for (let i = 0; i < messages.length; i++) {
370
+ if (messages[i].type === 'user' && this.hasHumanText(messages[i])) {
371
+ currentTurn++;
372
+ if (currentTurn === turnNumber - 1) {
373
+ prevTurnStartIdx = i; // Start of preceding turn
374
+ }
375
+ else if (currentTurn === turnNumber) {
376
+ turnStartIdx = i;
377
+ }
378
+ else if (currentTurn === turnNumber + 1) {
379
+ turnEndIdx = i;
380
+ break;
381
+ }
382
+ }
383
+ }
384
+ if (turnStartIdx === -1) {
385
+ logger.debug('Turn not found', { sessionId: sessionId.slice(0, 8), turnNumber });
386
+ return null;
387
+ }
388
+ // Extract user message
389
+ const userMsg = messages[turnStartIdx];
390
+ let userMessage = '';
391
+ const userContent = userMsg.message?.content;
392
+ if (typeof userContent === 'string') {
393
+ userMessage = userContent;
394
+ }
395
+ else if (Array.isArray(userContent)) {
396
+ userMessage = userContent
397
+ .filter((block) => typeof block === 'object' && block !== null && block.type === 'text')
398
+ .map(block => block.text)
399
+ .join('\n');
400
+ }
401
+ // Extract assistant blocks for this turn
402
+ const assistantBlocks = [];
403
+ const pendingTools = new Map();
404
+ for (let i = turnStartIdx + 1; i < turnEndIdx; i++) {
405
+ const msg = messages[i];
406
+ const content = msg.message?.content;
407
+ if (!Array.isArray(content))
408
+ continue;
409
+ for (const block of content) {
410
+ if (typeof block !== 'object' || block === null)
411
+ continue;
412
+ if (msg.type === 'assistant') {
413
+ if (block.type === 'text' && 'text' in block) {
414
+ const textBlock = block;
415
+ const isMarked = markedContentType === 'response' && msg.uuid === markedMessageId;
416
+ assistantBlocks.push({
417
+ type: 'text',
418
+ content: textBlock.text,
419
+ isMarked,
420
+ });
421
+ }
422
+ else if (block.type === 'tool_use' && 'id' in block && 'name' in block) {
423
+ const toolBlock = block;
424
+ const isMarked = markedContentType === 'tool_use' && markedMessageId === `tool-${toolBlock.id}`;
425
+ const idx = assistantBlocks.length;
426
+ assistantBlocks.push({
427
+ type: 'tool_use',
428
+ toolName: toolBlock.name,
429
+ toolInput: toolBlock.input,
430
+ isMarked,
431
+ });
432
+ pendingTools.set(toolBlock.id, { name: toolBlock.name, input: toolBlock.input, idx });
433
+ }
434
+ }
435
+ else if (msg.type === 'user' && block.type === 'tool_result' && 'tool_use_id' in block) {
436
+ const resultBlock = block;
437
+ const tool = pendingTools.get(resultBlock.tool_use_id);
438
+ if (tool && assistantBlocks[tool.idx]) {
439
+ const resultStr = typeof resultBlock.content === 'string'
440
+ ? resultBlock.content
441
+ : JSON.stringify(resultBlock.content);
442
+ assistantBlocks[tool.idx].toolResult = truncate(resultStr, 500);
443
+ }
444
+ }
445
+ }
446
+ }
447
+ // If user message was marked, extract the preceding assistant response
448
+ let precedingAssistantBlocks;
449
+ if (isUserMessageMarked && prevTurnStartIdx >= 0) {
450
+ precedingAssistantBlocks = [];
451
+ const prevPendingTools = new Map();
452
+ // Extract from after prev turn's user message up to this turn's user message
453
+ for (let i = prevTurnStartIdx + 1; i < turnStartIdx; i++) {
454
+ const msg = messages[i];
455
+ const content = msg.message?.content;
456
+ if (!Array.isArray(content))
457
+ continue;
458
+ for (const block of content) {
459
+ if (typeof block !== 'object' || block === null)
460
+ continue;
461
+ if (msg.type === 'assistant') {
462
+ if (block.type === 'text' && 'text' in block) {
463
+ const textBlock = block;
464
+ precedingAssistantBlocks.push({
465
+ type: 'text',
466
+ content: textBlock.text,
467
+ });
468
+ }
469
+ else if (block.type === 'tool_use' && 'id' in block && 'name' in block) {
470
+ const toolBlock = block;
471
+ const idx = precedingAssistantBlocks.length;
472
+ precedingAssistantBlocks.push({
473
+ type: 'tool_use',
474
+ toolName: toolBlock.name,
475
+ toolInput: toolBlock.input,
476
+ });
477
+ prevPendingTools.set(toolBlock.id, { name: toolBlock.name, input: toolBlock.input, idx });
478
+ }
479
+ }
480
+ else if (msg.type === 'user' && block.type === 'tool_result' && 'tool_use_id' in block) {
481
+ const resultBlock = block;
482
+ const tool = prevPendingTools.get(resultBlock.tool_use_id);
483
+ if (tool && precedingAssistantBlocks[tool.idx]) {
484
+ const resultStr = typeof resultBlock.content === 'string'
485
+ ? resultBlock.content
486
+ : JSON.stringify(resultBlock.content);
487
+ precedingAssistantBlocks[tool.idx].toolResult = truncate(resultStr, 500);
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+ return {
494
+ turnNumber,
495
+ userMessage: truncate(userMessage, 2000),
496
+ isUserMessageMarked,
497
+ assistantBlocks,
498
+ precedingAssistantBlocks,
499
+ timestamp: userMsg.timestamp || new Date().toISOString(),
500
+ };
501
+ }
502
+ /**
503
+ * Check if a message ID is present in a turn context.
504
+ */
505
+ isMessageInTurn(_messageId, _contentType, _turnContext) {
506
+ // For now, we can't easily verify without re-fetching messages
507
+ // This is called during backfill when we're processing a just-completed turn
508
+ // So any pending marks for this session are likely in this turn
509
+ // A more robust check would store the turn number estimate at mark creation time
510
+ return true;
511
+ }
512
+ /**
513
+ * Mark a specific block in the turn context as the marked item.
514
+ */
515
+ markBlockInContext(turnContext, messageId, contentType) {
516
+ // Clear any existing marks and mark the right one
517
+ const updatedBlocks = turnContext.assistantBlocks.map(block => {
518
+ let isMarked = false;
519
+ if (contentType === 'tool_use' && messageId.startsWith('tool-')) {
520
+ // For tool uses, we'd need the tool ID to match
521
+ // Since we don't have direct access here, mark all tool uses with matching name
522
+ // This is imperfect but better than nothing
523
+ isMarked = block.type === 'tool_use';
524
+ }
525
+ else if (contentType === 'response') {
526
+ isMarked = block.type === 'text';
527
+ }
528
+ return { ...block, isMarked };
529
+ });
530
+ return { ...turnContext, assistantBlocks: updatedBlocks };
531
+ }
532
+ }
533
+ // =============================================================================
534
+ // Utility
535
+ // =============================================================================
536
+ function truncate(str, maxLen) {
537
+ if (str.length <= maxLen)
538
+ return str;
539
+ return str.slice(0, maxLen - 3) + '...';
540
+ }
541
+ /**
542
+ * Format assistant blocks for analysis prompts.
543
+ * When fullContent is true, uses much larger limits for complete context.
544
+ */
545
+ function formatAssistantBlocks(blocks, options = {}) {
546
+ const { fullContent = false, showMarkers = false, markerText = 'MARKED' } = options;
547
+ // Use larger limits when we need full context (e.g., for preceding turn analysis)
548
+ const textLimit = fullContent ? 2000 : 200;
549
+ const inputLimit = fullContent ? 500 : 80;
550
+ const resultLimit = fullContent ? 1000 : 100;
551
+ return blocks.map(b => {
552
+ const marker = showMarkers && b.isMarked ? ` ← ${markerText}` : '';
553
+ if (b.type === 'text') {
554
+ return `- Claude responded: "${truncate(b.content || '', textLimit)}"${marker}`;
555
+ }
556
+ else {
557
+ const result = b.toolResult ? `\n Result: ${truncate(b.toolResult, resultLimit)}` : '';
558
+ return `- ${b.toolName}(${truncate(JSON.stringify(b.toolInput), inputLimit)})${result}${marker}`;
559
+ }
560
+ }).join('\n');
561
+ }
562
+ //# sourceMappingURL=session-marks-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-marks-service.js","sourceRoot":"","sources":["../../../src/services/sessions/session-marks-service.ts"],"names":[],"mappings":"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"}