@stackmemoryai/stackmemory 0.3.1 → 0.3.5

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 (744) hide show
  1. package/README.md +69 -288
  2. package/dist/cli/commands/chromadb.js +267 -0
  3. package/dist/cli/commands/chromadb.js.map +7 -0
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/context.js +15 -5
  9. package/dist/cli/commands/context.js.map +2 -2
  10. package/dist/cli/commands/dashboard.js +178 -0
  11. package/dist/cli/commands/dashboard.js.map +7 -0
  12. package/dist/cli/commands/handoff.js +125 -8
  13. package/dist/cli/commands/handoff.js.map +2 -2
  14. package/dist/cli/commands/linear-create.js +132 -0
  15. package/dist/cli/commands/linear-create.js.map +7 -0
  16. package/dist/cli/commands/linear-list.js +69 -0
  17. package/dist/cli/commands/linear-list.js.map +7 -0
  18. package/dist/cli/commands/linear-migrate.js +40 -0
  19. package/dist/cli/commands/linear-migrate.js.map +7 -0
  20. package/dist/cli/commands/linear.js +185 -36
  21. package/dist/cli/commands/linear.js.map +2 -2
  22. package/dist/cli/commands/monitor.js +309 -0
  23. package/dist/cli/commands/monitor.js.map +7 -0
  24. package/dist/cli/commands/quality.js +414 -0
  25. package/dist/cli/commands/quality.js.map +7 -0
  26. package/dist/cli/commands/skills.js +262 -0
  27. package/dist/cli/commands/skills.js.map +7 -0
  28. package/dist/cli/commands/storage.js +275 -0
  29. package/dist/cli/commands/storage.js.map +7 -0
  30. package/dist/cli/commands/tui.js +66 -0
  31. package/dist/cli/commands/tui.js.map +7 -0
  32. package/dist/cli/commands/workflow.js +134 -0
  33. package/dist/cli/commands/workflow.js.map +7 -0
  34. package/dist/cli/index.js +109 -8
  35. package/dist/cli/index.js.map +3 -3
  36. package/dist/core/analytics/team-analytics.js +374 -0
  37. package/dist/core/analytics/team-analytics.js.map +7 -0
  38. package/dist/core/context/context-bridge.js +234 -0
  39. package/dist/core/context/context-bridge.js.map +7 -0
  40. package/dist/core/context/dual-stack-manager.js +850 -0
  41. package/dist/core/context/dual-stack-manager.js.map +7 -0
  42. package/dist/core/context/frame-handoff-manager.js +774 -0
  43. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  44. package/dist/core/context/frame-manager.js +142 -13
  45. package/dist/core/context/frame-manager.js.map +2 -2
  46. package/dist/core/context/permission-manager.js +181 -0
  47. package/dist/core/context/permission-manager.js.map +7 -0
  48. package/dist/core/context/shared-context-layer.js +386 -0
  49. package/dist/core/context/shared-context-layer.js.map +7 -0
  50. package/dist/core/context/stack-merge-resolver.js +600 -0
  51. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  52. package/dist/core/context/validation.js +121 -0
  53. package/dist/core/context/validation.js.map +7 -0
  54. package/dist/core/database/connection-pool.js +266 -175
  55. package/dist/core/database/connection-pool.js.map +2 -2
  56. package/dist/core/database/database-adapter.js +51 -0
  57. package/dist/core/database/database-adapter.js.map +7 -0
  58. package/dist/core/database/migration-manager.js +514 -0
  59. package/dist/core/database/migration-manager.js.map +7 -0
  60. package/dist/core/database/paradedb-adapter.js +970 -0
  61. package/dist/core/database/paradedb-adapter.js.map +7 -0
  62. package/dist/core/database/query-router.js +421 -0
  63. package/dist/core/database/query-router.js.map +7 -0
  64. package/dist/core/database/sqlite-adapter.js +547 -0
  65. package/dist/core/database/sqlite-adapter.js.map +7 -0
  66. package/dist/core/errors/index.js +21 -1
  67. package/dist/core/errors/index.js.map +2 -2
  68. package/dist/core/frame/workflow-templates-stub.js +42 -0
  69. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  70. package/dist/core/frame/workflow-templates.js +276 -0
  71. package/dist/core/frame/workflow-templates.js.map +7 -0
  72. package/dist/core/merge/conflict-detector.js +5 -2
  73. package/dist/core/merge/conflict-detector.js.map +2 -2
  74. package/dist/core/merge/resolution-engine.js +3 -14
  75. package/dist/core/merge/resolution-engine.js.map +2 -2
  76. package/dist/core/merge/stack-diff.js.map +2 -2
  77. package/dist/core/monitoring/logger.js +18 -3
  78. package/dist/core/monitoring/logger.js.map +2 -2
  79. package/dist/core/monitoring/session-monitor.js +296 -0
  80. package/dist/core/monitoring/session-monitor.js.map +7 -0
  81. package/dist/core/retrieval/context-retriever.js +475 -0
  82. package/dist/core/retrieval/context-retriever.js.map +7 -0
  83. package/dist/core/retrieval/graph-retrieval.js +658 -0
  84. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  85. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  86. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  87. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  88. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  89. package/dist/core/session/clear-survival-stub.js +49 -0
  90. package/dist/core/session/clear-survival-stub.js.map +7 -0
  91. package/dist/core/session/clear-survival.js +426 -0
  92. package/dist/core/session/clear-survival.js.map +7 -0
  93. package/dist/core/session/handoff-generator.js +339 -0
  94. package/dist/core/session/handoff-generator.js.map +7 -0
  95. package/dist/core/session/session-manager.js +61 -26
  96. package/dist/core/session/session-manager.js.map +3 -3
  97. package/dist/core/skills/index.js +3 -0
  98. package/dist/core/skills/index.js.map +7 -0
  99. package/dist/core/skills/skill-storage.js +749 -0
  100. package/dist/core/skills/skill-storage.js.map +7 -0
  101. package/dist/core/skills/types.js +189 -0
  102. package/dist/core/skills/types.js.map +7 -0
  103. package/dist/core/storage/chromadb-adapter.js +346 -0
  104. package/dist/core/storage/chromadb-adapter.js.map +7 -0
  105. package/dist/core/storage/railway-optimized-storage.js +550 -0
  106. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  107. package/dist/core/storage/remote-storage.js +456 -0
  108. package/dist/core/storage/remote-storage.js.map +7 -0
  109. package/dist/core/trace/trace-detector.js +136 -5
  110. package/dist/core/trace/trace-detector.js.map +2 -2
  111. package/dist/core/trace/trace-store.js.map +2 -2
  112. package/dist/features/tui/components/analytics-panel.js +136 -0
  113. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  114. package/dist/features/tui/components/frame-visualizer.js +377 -0
  115. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  116. package/dist/features/tui/components/pr-tracker.js +123 -0
  117. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  118. package/dist/features/tui/components/session-monitor.js +286 -0
  119. package/dist/features/tui/components/session-monitor.js.map +7 -0
  120. package/dist/features/tui/components/subagent-fleet.js +388 -0
  121. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  122. package/dist/features/tui/components/task-board.js +475 -0
  123. package/dist/features/tui/components/task-board.js.map +7 -0
  124. package/dist/features/tui/index.js +397 -0
  125. package/dist/features/tui/index.js.map +7 -0
  126. package/dist/features/tui/services/data-service.js +654 -0
  127. package/dist/features/tui/services/data-service.js.map +7 -0
  128. package/dist/features/tui/services/websocket-client.js +149 -0
  129. package/dist/features/tui/services/websocket-client.js.map +7 -0
  130. package/dist/features/tui/terminal-compat.js +205 -0
  131. package/dist/features/tui/terminal-compat.js.map +7 -0
  132. package/dist/features/tui/types.js +1 -0
  133. package/dist/features/tui/types.js.map +7 -0
  134. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  135. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  136. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  137. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  138. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  139. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  140. package/dist/integrations/linear/client.js +22 -4
  141. package/dist/integrations/linear/client.js.map +2 -2
  142. package/dist/integrations/linear/migration.js +299 -0
  143. package/dist/integrations/linear/migration.js.map +7 -0
  144. package/dist/integrations/linear/oauth-server.js +396 -0
  145. package/dist/integrations/linear/oauth-server.js.map +7 -0
  146. package/dist/integrations/linear/rest-client.js +199 -0
  147. package/dist/integrations/linear/rest-client.js.map +7 -0
  148. package/dist/integrations/linear/sync.js +14 -2
  149. package/dist/integrations/linear/sync.js.map +2 -2
  150. package/dist/integrations/linear/webhook-handler.js +200 -0
  151. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  152. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  153. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  154. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  155. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  156. package/dist/integrations/mcp/refactored-server.js +31 -3
  157. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  158. package/dist/integrations/mcp/server.js +25 -7
  159. package/dist/integrations/mcp/server.js.map +2 -2
  160. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  161. package/dist/models/user.model.js +3 -0
  162. package/dist/models/user.model.js.map +2 -2
  163. package/dist/services/context-service.js.map +2 -2
  164. package/dist/skills/claude-skills.js +666 -0
  165. package/dist/skills/claude-skills.js.map +7 -0
  166. package/dist/utils/formatting.js +58 -0
  167. package/dist/utils/formatting.js.map +7 -0
  168. package/package.json +30 -24
  169. package/dist/cli/__tests__/index.test.js +0 -290
  170. package/dist/cli/__tests__/index.test.js.map +0 -7
  171. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  172. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  173. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  174. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  175. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  176. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  177. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  178. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  179. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  180. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  181. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  182. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  183. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  184. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  185. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  186. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  187. package/dist/core/trace/trace-detector.test.js +0 -401
  188. package/dist/core/trace/trace-detector.test.js.map +0 -7
  189. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  190. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  191. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  192. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  193. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  194. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  195. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  196. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  197. package/dist/scripts/benchmark-performance.d.ts +0 -7
  198. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  199. package/dist/scripts/benchmark-performance.js +0 -44
  200. package/dist/scripts/benchmark-performance.js.map +0 -1
  201. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  202. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  203. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  204. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  205. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  206. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  207. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  208. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  209. package/dist/scripts/initialize.d.ts +0 -6
  210. package/dist/scripts/initialize.d.ts.map +0 -1
  211. package/dist/scripts/initialize.js +0 -93
  212. package/dist/scripts/initialize.js.map +0 -1
  213. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  214. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  215. package/dist/scripts/list-linear-tasks.js +0 -121
  216. package/dist/scripts/list-linear-tasks.js.map +0 -1
  217. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  218. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  219. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  220. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  221. package/dist/scripts/show-linear-summary.d.ts +0 -6
  222. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  223. package/dist/scripts/show-linear-summary.js +0 -120
  224. package/dist/scripts/show-linear-summary.js.map +0 -1
  225. package/dist/scripts/status.d.ts +0 -6
  226. package/dist/scripts/status.d.ts.map +0 -1
  227. package/dist/scripts/status.js +0 -101
  228. package/dist/scripts/status.js.map +0 -1
  229. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  230. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  231. package/dist/src/agents/core/agent-task-manager.js +0 -504
  232. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  233. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  234. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  236. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  237. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  238. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  239. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  240. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  241. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  242. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  243. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  244. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  245. package/dist/src/cli/auto-detect.d.ts +0 -61
  246. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  247. package/dist/src/cli/auto-detect.js +0 -350
  248. package/dist/src/cli/auto-detect.js.map +0 -1
  249. package/dist/src/cli/browser-test.d.ts +0 -6
  250. package/dist/src/cli/browser-test.d.ts.map +0 -1
  251. package/dist/src/cli/browser-test.js +0 -32
  252. package/dist/src/cli/browser-test.js.map +0 -1
  253. package/dist/src/cli/claude-sm.d.ts +0 -7
  254. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  255. package/dist/src/cli/claude-sm.js +0 -412
  256. package/dist/src/cli/claude-sm.js.map +0 -1
  257. package/dist/src/cli/commands/agent.d.ts +0 -9
  258. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  259. package/dist/src/cli/commands/agent.js +0 -303
  260. package/dist/src/cli/commands/agent.js.map +0 -1
  261. package/dist/src/cli/commands/config.d.ts +0 -6
  262. package/dist/src/cli/commands/config.d.ts.map +0 -1
  263. package/dist/src/cli/commands/config.js +0 -224
  264. package/dist/src/cli/commands/config.js.map +0 -1
  265. package/dist/src/cli/commands/context.d.ts +0 -7
  266. package/dist/src/cli/commands/context.d.ts.map +0 -1
  267. package/dist/src/cli/commands/context.js +0 -365
  268. package/dist/src/cli/commands/context.js.map +0 -1
  269. package/dist/src/cli/commands/handoff.d.ts +0 -6
  270. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  271. package/dist/src/cli/commands/handoff.js +0 -212
  272. package/dist/src/cli/commands/handoff.js.map +0 -1
  273. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  274. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  275. package/dist/src/cli/commands/linear-test.js +0 -123
  276. package/dist/src/cli/commands/linear-test.js.map +0 -1
  277. package/dist/src/cli/commands/linear.d.ts +0 -6
  278. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  279. package/dist/src/cli/commands/linear.js +0 -393
  280. package/dist/src/cli/commands/linear.js.map +0 -1
  281. package/dist/src/cli/commands/log.d.ts +0 -7
  282. package/dist/src/cli/commands/log.d.ts.map +0 -1
  283. package/dist/src/cli/commands/log.js +0 -168
  284. package/dist/src/cli/commands/log.js.map +0 -1
  285. package/dist/src/cli/commands/onboard.d.ts +0 -8
  286. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  287. package/dist/src/cli/commands/onboard.js +0 -363
  288. package/dist/src/cli/commands/onboard.js.map +0 -1
  289. package/dist/src/cli/commands/projects.d.ts +0 -8
  290. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  291. package/dist/src/cli/commands/projects.js +0 -220
  292. package/dist/src/cli/commands/projects.js.map +0 -1
  293. package/dist/src/cli/commands/search.d.ts +0 -7
  294. package/dist/src/cli/commands/search.d.ts.map +0 -1
  295. package/dist/src/cli/commands/search.js +0 -162
  296. package/dist/src/cli/commands/search.js.map +0 -1
  297. package/dist/src/cli/commands/session.d.ts +0 -7
  298. package/dist/src/cli/commands/session.d.ts.map +0 -1
  299. package/dist/src/cli/commands/session.js +0 -222
  300. package/dist/src/cli/commands/session.js.map +0 -1
  301. package/dist/src/cli/commands/tasks.d.ts +0 -7
  302. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  303. package/dist/src/cli/commands/tasks.js +0 -229
  304. package/dist/src/cli/commands/tasks.js.map +0 -1
  305. package/dist/src/cli/commands/webhook.d.ts +0 -3
  306. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  307. package/dist/src/cli/commands/webhook.js +0 -157
  308. package/dist/src/cli/commands/webhook.js.map +0 -1
  309. package/dist/src/cli/commands/worktree.d.ts +0 -8
  310. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  311. package/dist/src/cli/commands/worktree.js +0 -339
  312. package/dist/src/cli/commands/worktree.js.map +0 -1
  313. package/dist/src/cli/index.d.ts +0 -8
  314. package/dist/src/cli/index.d.ts.map +0 -1
  315. package/dist/src/cli/index.js +0 -995
  316. package/dist/src/cli/index.js.map +0 -1
  317. package/dist/src/cli/utils/viewer.d.ts +0 -3
  318. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  319. package/dist/src/cli/utils/viewer.js +0 -91
  320. package/dist/src/cli/utils/viewer.js.map +0 -1
  321. package/dist/src/core/config/config-manager.d.ts +0 -95
  322. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  323. package/dist/src/core/config/config-manager.js +0 -359
  324. package/dist/src/core/config/config-manager.js.map +0 -1
  325. package/dist/src/core/config/types.d.ts +0 -72
  326. package/dist/src/core/config/types.d.ts.map +0 -1
  327. package/dist/src/core/config/types.js +0 -127
  328. package/dist/src/core/config/types.js.map +0 -1
  329. package/dist/src/core/context/auto-context.d.ts +0 -22
  330. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  331. package/dist/src/core/context/auto-context.js +0 -77
  332. package/dist/src/core/context/auto-context.js.map +0 -1
  333. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  334. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  335. package/dist/src/core/context/compaction-handler.js +0 -306
  336. package/dist/src/core/context/compaction-handler.js.map +0 -1
  337. package/dist/src/core/context/frame-database.d.ts +0 -59
  338. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-database.js +0 -333
  340. package/dist/src/core/context/frame-database.js.map +0 -1
  341. package/dist/src/core/context/frame-digest.d.ts +0 -59
  342. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-digest.js +0 -264
  344. package/dist/src/core/context/frame-digest.js.map +0 -1
  345. package/dist/src/core/context/frame-manager.d.ts +0 -112
  346. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-manager.js +0 -600
  348. package/dist/src/core/context/frame-manager.js.map +0 -1
  349. package/dist/src/core/context/frame-stack.d.ts +0 -85
  350. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  351. package/dist/src/core/context/frame-stack.js +0 -287
  352. package/dist/src/core/context/frame-stack.js.map +0 -1
  353. package/dist/src/core/context/frame-types.d.ts +0 -67
  354. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  355. package/dist/src/core/context/frame-types.js +0 -6
  356. package/dist/src/core/context/frame-types.js.map +0 -1
  357. package/dist/src/core/context/index.d.ts +0 -11
  358. package/dist/src/core/context/index.d.ts.map +0 -1
  359. package/dist/src/core/context/index.js +0 -14
  360. package/dist/src/core/context/index.js.map +0 -1
  361. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  362. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  363. package/dist/src/core/context/model-aware-compaction.js +0 -616
  364. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  365. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  366. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  367. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  368. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  369. package/dist/src/core/database/batch-operations.d.ts +0 -118
  370. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  371. package/dist/src/core/database/batch-operations.js +0 -339
  372. package/dist/src/core/database/batch-operations.js.map +0 -1
  373. package/dist/src/core/database/connection-pool.d.ts +0 -79
  374. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  375. package/dist/src/core/database/connection-pool.js +0 -236
  376. package/dist/src/core/database/connection-pool.js.map +0 -1
  377. package/dist/src/core/database/query-cache.d.ts +0 -135
  378. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  379. package/dist/src/core/database/query-cache.js +0 -294
  380. package/dist/src/core/database/query-cache.js.map +0 -1
  381. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  382. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  383. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  384. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  385. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  386. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  387. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  388. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  389. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  390. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  391. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  392. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  393. package/dist/src/core/digest/index.d.ts +0 -9
  394. package/dist/src/core/digest/index.d.ts.map +0 -1
  395. package/dist/src/core/digest/index.js +0 -9
  396. package/dist/src/core/digest/index.js.map +0 -1
  397. package/dist/src/core/digest/types.d.ts +0 -154
  398. package/dist/src/core/digest/types.d.ts.map +0 -1
  399. package/dist/src/core/digest/types.js +0 -18
  400. package/dist/src/core/digest/types.js.map +0 -1
  401. package/dist/src/core/errors/index.d.ts +0 -143
  402. package/dist/src/core/errors/index.d.ts.map +0 -1
  403. package/dist/src/core/errors/index.js +0 -282
  404. package/dist/src/core/errors/index.js.map +0 -1
  405. package/dist/src/core/errors/recovery.d.ts +0 -86
  406. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  407. package/dist/src/core/errors/recovery.js +0 -274
  408. package/dist/src/core/errors/recovery.js.map +0 -1
  409. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  410. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  411. package/dist/src/core/merge/conflict-detector.js +0 -468
  412. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  413. package/dist/src/core/merge/index.d.ts +0 -9
  414. package/dist/src/core/merge/index.d.ts.map +0 -1
  415. package/dist/src/core/merge/index.js +0 -9
  416. package/dist/src/core/merge/index.js.map +0 -1
  417. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  418. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  419. package/dist/src/core/merge/resolution-engine.js +0 -573
  420. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  421. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  422. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  423. package/dist/src/core/merge/stack-diff.js +0 -516
  424. package/dist/src/core/merge/stack-diff.js.map +0 -1
  425. package/dist/src/core/merge/types.d.ts +0 -110
  426. package/dist/src/core/merge/types.d.ts.map +0 -1
  427. package/dist/src/core/merge/types.js +0 -6
  428. package/dist/src/core/merge/types.js.map +0 -1
  429. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  430. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/error-handler.js +0 -212
  432. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  433. package/dist/src/core/monitoring/logger.d.ts +0 -24
  434. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/logger.js +0 -126
  436. package/dist/src/core/monitoring/logger.js.map +0 -1
  437. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  438. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  439. package/dist/src/core/monitoring/metrics.js +0 -152
  440. package/dist/src/core/monitoring/metrics.js.map +0 -1
  441. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  442. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  443. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  444. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  445. package/dist/src/core/performance/context-cache.d.ts +0 -109
  446. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  447. package/dist/src/core/performance/context-cache.js +0 -280
  448. package/dist/src/core/performance/context-cache.js.map +0 -1
  449. package/dist/src/core/performance/index.d.ts +0 -3
  450. package/dist/src/core/performance/index.d.ts.map +0 -1
  451. package/dist/src/core/performance/index.js +0 -3
  452. package/dist/src/core/performance/index.js.map +0 -1
  453. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  454. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  455. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  456. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  457. package/dist/src/core/performance/monitor.d.ts +0 -48
  458. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  459. package/dist/src/core/performance/monitor.js +0 -226
  460. package/dist/src/core/performance/monitor.js.map +0 -1
  461. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  462. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  463. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  464. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  465. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  466. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  467. package/dist/src/core/performance/performance-benchmark.js +0 -290
  468. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  469. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  470. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  471. package/dist/src/core/performance/performance-profiler.js +0 -346
  472. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  473. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  474. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  475. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  476. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  477. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  478. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  479. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  480. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  481. package/dist/src/core/projects/project-manager.d.ts +0 -130
  482. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  483. package/dist/src/core/projects/project-manager.js +0 -709
  484. package/dist/src/core/projects/project-manager.js.map +0 -1
  485. package/dist/src/core/query/query-parser.d.ts +0 -109
  486. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  487. package/dist/src/core/query/query-parser.js +0 -415
  488. package/dist/src/core/query/query-parser.js.map +0 -1
  489. package/dist/src/core/query/query-templates.d.ts +0 -44
  490. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  491. package/dist/src/core/query/query-templates.js +0 -326
  492. package/dist/src/core/query/query-templates.js.map +0 -1
  493. package/dist/src/core/retrieval/index.d.ts +0 -8
  494. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/index.js +0 -8
  496. package/dist/src/core/retrieval/index.js.map +0 -1
  497. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  498. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  500. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  501. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  502. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  503. package/dist/src/core/retrieval/summary-generator.js +0 -622
  504. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  505. package/dist/src/core/retrieval/types.d.ts +0 -257
  506. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  507. package/dist/src/core/retrieval/types.js +0 -18
  508. package/dist/src/core/retrieval/types.js.map +0 -1
  509. package/dist/src/core/session/index.d.ts +0 -2
  510. package/dist/src/core/session/index.d.ts.map +0 -1
  511. package/dist/src/core/session/index.js +0 -2
  512. package/dist/src/core/session/index.js.map +0 -1
  513. package/dist/src/core/session/session-manager.d.ts +0 -69
  514. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  515. package/dist/src/core/session/session-manager.js +0 -311
  516. package/dist/src/core/session/session-manager.js.map +0 -1
  517. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  518. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  519. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  520. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  521. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  522. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  523. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  524. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  525. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  526. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  527. package/dist/src/core/trace/debug-trace.js +0 -402
  528. package/dist/src/core/trace/debug-trace.js.map +0 -1
  529. package/dist/src/core/trace/error-test.d.ts +0 -6
  530. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  531. package/dist/src/core/trace/error-test.js +0 -128
  532. package/dist/src/core/trace/error-test.js.map +0 -1
  533. package/dist/src/core/trace/index.d.ts +0 -25
  534. package/dist/src/core/trace/index.d.ts.map +0 -1
  535. package/dist/src/core/trace/index.js +0 -121
  536. package/dist/src/core/trace/index.js.map +0 -1
  537. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  538. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  539. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  540. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  541. package/dist/src/core/trace/performance-test.d.ts +0 -6
  542. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  543. package/dist/src/core/trace/performance-test.js +0 -111
  544. package/dist/src/core/trace/performance-test.js.map +0 -1
  545. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  546. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  547. package/dist/src/core/trace/trace-demo.js +0 -154
  548. package/dist/src/core/trace/trace-demo.js.map +0 -1
  549. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  550. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  552. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  553. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  554. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  555. package/dist/src/core/trace/trace-detector.js +0 -425
  556. package/dist/src/core/trace/trace-detector.js.map +0 -1
  557. package/dist/src/core/trace/trace-store.d.ts +0 -60
  558. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  559. package/dist/src/core/trace/trace-store.js +0 -323
  560. package/dist/src/core/trace/trace-store.js.map +0 -1
  561. package/dist/src/core/trace/types.d.ts +0 -81
  562. package/dist/src/core/trace/types.d.ts.map +0 -1
  563. package/dist/src/core/trace/types.js +0 -70
  564. package/dist/src/core/trace/types.js.map +0 -1
  565. package/dist/src/core/types.d.ts +0 -35
  566. package/dist/src/core/types.d.ts.map +0 -1
  567. package/dist/src/core/types.js +0 -2
  568. package/dist/src/core/types.js.map +0 -1
  569. package/dist/src/core/utils/update-checker.d.ts +0 -38
  570. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  571. package/dist/src/core/utils/update-checker.js +0 -213
  572. package/dist/src/core/utils/update-checker.js.map +0 -1
  573. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  574. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  575. package/dist/src/core/worktree/worktree-manager.js +0 -456
  576. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  577. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  578. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  579. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  580. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  581. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  582. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  583. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  584. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  585. package/dist/src/features/analytics/index.d.ts +0 -12
  586. package/dist/src/features/analytics/index.d.ts.map +0 -1
  587. package/dist/src/features/analytics/index.js +0 -11
  588. package/dist/src/features/analytics/index.js.map +0 -1
  589. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  590. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  591. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  592. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  593. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  594. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  595. package/dist/src/features/analytics/types/metrics.js +0 -2
  596. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  597. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  598. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  599. package/dist/src/features/browser/browser-mcp.js +0 -459
  600. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  601. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  602. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  603. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  604. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  605. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  606. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  607. package/dist/src/features/tasks/task-aware-context.js +0 -412
  608. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  609. package/dist/src/index.d.ts +0 -21
  610. package/dist/src/index.d.ts.map +0 -1
  611. package/dist/src/index.js +0 -9
  612. package/dist/src/index.js.map +0 -1
  613. package/dist/src/integrations/linear/auth.d.ts +0 -99
  614. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/auth.js +0 -319
  616. package/dist/src/integrations/linear/auth.js.map +0 -1
  617. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  618. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/auto-sync.js +0 -268
  620. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  621. package/dist/src/integrations/linear/client.d.ts +0 -127
  622. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/client.js +0 -446
  624. package/dist/src/integrations/linear/client.js.map +0 -1
  625. package/dist/src/integrations/linear/config.d.ts +0 -51
  626. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/config.js +0 -103
  628. package/dist/src/integrations/linear/config.js.map +0 -1
  629. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  630. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync-manager.js +0 -235
  632. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  633. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  634. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/sync-service.js +0 -217
  636. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  637. package/dist/src/integrations/linear/sync.d.ts +0 -125
  638. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/sync.js +0 -563
  640. package/dist/src/integrations/linear/sync.js.map +0 -1
  641. package/dist/src/integrations/linear/types.d.ts +0 -90
  642. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/types.js +0 -2
  644. package/dist/src/integrations/linear/types.js.map +0 -1
  645. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  646. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  647. package/dist/src/integrations/linear/webhook-server.js +0 -190
  648. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  649. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  650. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  651. package/dist/src/integrations/linear/webhook.js +0 -291
  652. package/dist/src/integrations/linear/webhook.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  654. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  656. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  658. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  660. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  662. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  664. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  666. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  668. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  669. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  670. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  672. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  673. package/dist/src/integrations/mcp/index.d.ts +0 -13
  674. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/index.js +0 -17
  676. package/dist/src/integrations/mcp/index.js.map +0 -1
  677. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  678. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  680. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  681. package/dist/src/integrations/mcp/server.d.ts +0 -54
  682. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/server.js +0 -1616
  684. package/dist/src/integrations/mcp/server.js.map +0 -1
  685. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  686. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  687. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  688. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  689. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  690. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  691. package/dist/src/integrations/mcp/trace-test.js +0 -54
  692. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  694. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  696. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  697. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  698. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  699. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  700. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  701. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  702. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  703. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  704. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  705. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  706. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  707. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  708. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  709. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  710. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  711. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  712. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  713. package/dist/src/models/user.model.d.ts +0 -62
  714. package/dist/src/models/user.model.d.ts.map +0 -1
  715. package/dist/src/models/user.model.js +0 -311
  716. package/dist/src/models/user.model.js.map +0 -1
  717. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  718. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  719. package/dist/src/servers/production/auth-middleware.js +0 -558
  720. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  721. package/dist/src/servers/railway/index.d.ts +0 -7
  722. package/dist/src/servers/railway/index.d.ts.map +0 -1
  723. package/dist/src/servers/railway/index.js +0 -401
  724. package/dist/src/servers/railway/index.js.map +0 -1
  725. package/dist/src/services/config-service.d.ts +0 -44
  726. package/dist/src/services/config-service.d.ts.map +0 -1
  727. package/dist/src/services/config-service.js +0 -61
  728. package/dist/src/services/config-service.js.map +0 -1
  729. package/dist/src/services/context-service.d.ts +0 -17
  730. package/dist/src/services/context-service.d.ts.map +0 -1
  731. package/dist/src/services/context-service.js +0 -173
  732. package/dist/src/services/context-service.js.map +0 -1
  733. package/dist/src/types/task.d.ts +0 -27
  734. package/dist/src/types/task.d.ts.map +0 -1
  735. package/dist/src/types/task.js +0 -2
  736. package/dist/src/types/task.js.map +0 -1
  737. package/dist/src/utils/logger.d.ts +0 -13
  738. package/dist/src/utils/logger.d.ts.map +0 -1
  739. package/dist/src/utils/logger.js +0 -52
  740. package/dist/src/utils/logger.js.map +0 -1
  741. package/dist/src/validation/schemas.d.ts +0 -633
  742. package/dist/src/validation/schemas.d.ts.map +0 -1
  743. package/dist/src/validation/schemas.js +0 -347
  744. package/dist/src/validation/schemas.js.map +0 -1
@@ -2,7 +2,8 @@ import { v4 as uuidv4 } from "uuid";
2
2
  import {
3
3
  TraceType,
4
4
  DEFAULT_TRACE_CONFIG,
5
- TRACE_PATTERNS
5
+ TRACE_PATTERNS,
6
+ CompressionStrategy
6
7
  } from "./types.js";
7
8
  import { ConfigManager } from "../config/config-manager.js";
8
9
  import { TraceStore } from "./trace-store.js";
@@ -280,9 +281,41 @@ class TraceDetector {
280
281
  }
281
282
  }
282
283
  /**
283
- * Compress a trace for long-term storage
284
+ * Compress a trace for long-term storage using strategy
284
285
  */
285
- compressTrace(trace) {
286
+ compressTrace(trace, strategy = CompressionStrategy.PATTERN_BASED) {
287
+ switch (strategy) {
288
+ case CompressionStrategy.SUMMARY_ONLY:
289
+ return this.compressSummaryOnly(trace);
290
+ case CompressionStrategy.PATTERN_BASED:
291
+ return this.compressPatternBased(trace);
292
+ case CompressionStrategy.SELECTIVE:
293
+ return this.compressSelective(trace);
294
+ case CompressionStrategy.FULL_COMPRESSION:
295
+ return this.compressMaximal(trace);
296
+ default:
297
+ return this.compressPatternBased(trace);
298
+ }
299
+ }
300
+ /**
301
+ * Summary-only compression - minimal data retention
302
+ */
303
+ compressSummaryOnly(trace) {
304
+ return {
305
+ pattern: "",
306
+ // No pattern stored
307
+ summary: trace.summary.substring(0, 100),
308
+ // Limit summary
309
+ score: trace.score,
310
+ toolCount: trace.tools.length,
311
+ duration: trace.metadata.endTime - trace.metadata.startTime,
312
+ timestamp: trace.metadata.startTime
313
+ };
314
+ }
315
+ /**
316
+ * Pattern-based compression - keep tool sequence
317
+ */
318
+ compressPatternBased(trace) {
286
319
  const pattern = trace.tools.map((t) => t.tool).join("\u2192");
287
320
  const duration = trace.metadata.endTime - trace.metadata.startTime;
288
321
  return {
@@ -294,6 +327,84 @@ class TraceDetector {
294
327
  timestamp: trace.metadata.startTime
295
328
  };
296
329
  }
330
+ /**
331
+ * Selective compression - keep high-score tools only
332
+ */
333
+ compressSelective(trace, threshold = 0.5) {
334
+ const significantTools = trace.tools.filter((tool) => {
335
+ const score = this.configManager.calculateScore(tool.tool, {
336
+ filesAffected: tool.filesAffected?.length || 0,
337
+ isPermanent: this.isPermanentChange(tool),
338
+ referenceCount: 0
339
+ });
340
+ return score >= threshold;
341
+ });
342
+ const pattern = significantTools.length > 0 ? significantTools.map((t) => t.tool).join("\u2192") : trace.tools.map((t) => t.tool).join("\u2192");
343
+ return {
344
+ pattern,
345
+ summary: `${trace.summary} [${significantTools.length}/${trace.tools.length} significant]`,
346
+ score: trace.score,
347
+ toolCount: significantTools.length,
348
+ duration: trace.metadata.endTime - trace.metadata.startTime,
349
+ timestamp: trace.metadata.startTime
350
+ };
351
+ }
352
+ /**
353
+ * Maximal compression - absolute minimum data
354
+ */
355
+ compressMaximal(trace) {
356
+ const typeAbbrev = this.getTraceTypeAbbreviation(trace.type);
357
+ const pattern = `${typeAbbrev}:${trace.tools.length}`;
358
+ return {
359
+ pattern,
360
+ summary: trace.type,
361
+ // Just the type
362
+ score: Math.round(trace.score * 10) / 10,
363
+ // Round to 1 decimal
364
+ toolCount: trace.tools.length,
365
+ duration: Math.round((trace.metadata.endTime - trace.metadata.startTime) / 1e3) * 1e3,
366
+ // Round to seconds
367
+ timestamp: trace.metadata.startTime
368
+ };
369
+ }
370
+ /**
371
+ * Get abbreviated trace type
372
+ */
373
+ getTraceTypeAbbreviation(type) {
374
+ const abbreviations = {
375
+ [TraceType.SEARCH_DRIVEN]: "SD",
376
+ [TraceType.ERROR_RECOVERY]: "ER",
377
+ [TraceType.FEATURE_IMPLEMENTATION]: "FI",
378
+ [TraceType.REFACTORING]: "RF",
379
+ [TraceType.TESTING]: "TS",
380
+ [TraceType.EXPLORATION]: "EX",
381
+ [TraceType.DEBUGGING]: "DB",
382
+ [TraceType.DOCUMENTATION]: "DC",
383
+ [TraceType.BUILD_DEPLOY]: "BD",
384
+ [TraceType.UNKNOWN]: "UN"
385
+ };
386
+ return abbreviations[type] || "UN";
387
+ }
388
+ /**
389
+ * Choose compression strategy based on trace age and importance
390
+ */
391
+ selectCompressionStrategy(trace) {
392
+ const ageHours = (Date.now() - trace.metadata.startTime) / (1e3 * 60 * 60);
393
+ const score = trace.score;
394
+ if (ageHours < 24 && score > 0.7) {
395
+ return CompressionStrategy.PATTERN_BASED;
396
+ }
397
+ if (ageHours < 24) {
398
+ return CompressionStrategy.SELECTIVE;
399
+ }
400
+ if (ageHours < 168 && score > 0.5) {
401
+ return CompressionStrategy.SELECTIVE;
402
+ }
403
+ if (ageHours < 720) {
404
+ return CompressionStrategy.SUMMARY_ONLY;
405
+ }
406
+ return CompressionStrategy.FULL_COMPRESSION;
407
+ }
297
408
  /**
298
409
  * Get directory from file path
299
410
  */
@@ -329,7 +440,7 @@ class TraceDetector {
329
440
  return this.traces.filter((t) => t.score >= threshold);
330
441
  }
331
442
  /**
332
- * Compress old traces
443
+ * Compress old traces with intelligent strategy selection
333
444
  */
334
445
  compressOldTraces(ageHours = 24) {
335
446
  let compressed = 0;
@@ -337,8 +448,28 @@ class TraceDetector {
337
448
  for (const trace of this.traces) {
338
449
  const age = (now - trace.metadata.startTime) / (1e3 * 60 * 60);
339
450
  if (age > ageHours && !trace.compressed) {
340
- trace.compressed = this.compressTrace(trace);
451
+ const strategy = this.selectCompressionStrategy(trace);
452
+ trace.compressed = this.compressTrace(trace, strategy);
453
+ if (strategy === CompressionStrategy.FULL_COMPRESSION || strategy === CompressionStrategy.SUMMARY_ONLY) {
454
+ trace.tools = [];
455
+ } else if (strategy === CompressionStrategy.SELECTIVE) {
456
+ trace.tools = trace.tools.filter((tool) => {
457
+ const score = this.configManager.calculateScore(tool.tool, {
458
+ filesAffected: tool.filesAffected?.length || 0,
459
+ isPermanent: this.isPermanentChange(tool),
460
+ referenceCount: 0
461
+ });
462
+ return score >= 0.5;
463
+ });
464
+ }
341
465
  compressed++;
466
+ if (this.traceStore) {
467
+ try {
468
+ this.traceStore.updateCompression(trace.id, trace.compressed, strategy);
469
+ } catch (error) {
470
+ console.error("Failed to update trace compression in store:", error);
471
+ }
472
+ }
342
473
  }
343
474
  }
344
475
  return compressed;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/core/trace/trace-detector.ts"],
4
- "sourcesContent": ["/**\n * Trace Detection and Bundling System\n * Identifies chains of related tool calls and bundles them as single traces\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n ToolCall,\n Trace,\n TraceType,\n TraceBoundaryConfig,\n DEFAULT_TRACE_CONFIG,\n TRACE_PATTERNS,\n TraceMetadata,\n TraceScoringFactors,\n CompressedTrace,\n CompressionStrategy,\n} from './types.js';\nimport { ConfigManager } from '../config/config-manager.js';\nimport { TraceStore } from './trace-store.js';\nimport Database from 'better-sqlite3';\n\nexport class TraceDetector {\n private config: TraceBoundaryConfig;\n private activeTrace: ToolCall[] = [];\n private lastToolTime: number = 0;\n private traces: Trace[] = [];\n private configManager: ConfigManager;\n private traceStore?: TraceStore;\n\n constructor(\n config: Partial<TraceBoundaryConfig> = {},\n configManager?: ConfigManager,\n db?: Database.Database\n ) {\n this.config = { ...DEFAULT_TRACE_CONFIG, ...config };\n this.configManager = configManager || new ConfigManager();\n\n if (db) {\n this.traceStore = new TraceStore(db);\n // Load existing traces from database\n this.loadTracesFromStore();\n }\n }\n\n /**\n * Load traces from the database\n */\n private loadTracesFromStore(): void {\n if (!this.traceStore) return;\n\n try {\n // Load recent traces (last 24 hours)\n const recentTraces = this.traceStore.getAllTraces();\n const cutoff = Date.now() - 24 * 60 * 60 * 1000;\n\n this.traces = recentTraces.filter((t) => t.metadata.startTime >= cutoff);\n } catch (error) {\n // If loading fails, start with empty traces\n console.error('Failed to load traces from store:', error);\n this.traces = [];\n }\n }\n\n /**\n * Add a tool call and check if it belongs to current trace\n */\n addToolCall(tool: ToolCall): void {\n const now = Date.now();\n\n // Check if this tool belongs to the current trace\n if (this.shouldStartNewTrace(tool)) {\n // Finalize current trace if it exists\n if (this.activeTrace.length > 0) {\n this.finalizeTrace();\n }\n // Start new trace\n this.activeTrace = [tool];\n } else {\n // Add to current trace\n this.activeTrace.push(tool);\n }\n\n this.lastToolTime = tool.timestamp;\n\n // Check if trace is getting too large\n if (this.activeTrace.length >= this.config.maxTraceSize) {\n this.finalizeTrace();\n }\n }\n\n /**\n * Determine if a tool call should start a new trace\n */\n private shouldStartNewTrace(tool: ToolCall): boolean {\n // First tool always starts a new trace\n if (this.activeTrace.length === 0) {\n return false;\n }\n\n const lastTool = this.activeTrace[this.activeTrace.length - 1];\n\n // Time proximity check\n const timeDiff = tool.timestamp - lastTool.timestamp;\n if (timeDiff > this.config.timeProximityMs) {\n return true;\n }\n\n // Directory check if enabled\n if (this.config.sameDirThreshold) {\n const lastFiles = lastTool.filesAffected || [];\n const currentFiles = tool.filesAffected || [];\n\n if (lastFiles.length > 0 && currentFiles.length > 0) {\n const lastDirs = lastFiles.map((f) => this.getDirectory(f));\n const currentDirs = currentFiles.map((f) => this.getDirectory(f));\n\n const hasCommonDir = lastDirs.some((d) => currentDirs.includes(d));\n if (!hasCommonDir) {\n return true;\n }\n }\n }\n\n // Causal relationship check\n if (this.config.causalRelationship) {\n // If last tool had an error and current tool is not a fix attempt, start new trace\n if (lastTool.error && !this.isFixAttempt(tool, lastTool)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if a tool is attempting to fix an error from previous tool\n */\n private isFixAttempt(current: ToolCall, previous: ToolCall): boolean {\n // Edit after error is likely a fix\n if (\n previous.error &&\n (current.tool === 'edit' || current.tool === 'write')\n ) {\n return true;\n }\n\n // Test after fix is validation\n if (current.tool === 'test' || current.tool === 'bash') {\n return true;\n }\n\n return false;\n }\n\n /**\n * Finalize current trace and add to traces list\n */\n private finalizeTrace(): void {\n if (this.activeTrace.length === 0) return;\n\n const trace = this.createTrace(this.activeTrace);\n this.traces.push(trace);\n\n // Persist to database if store is available\n if (this.traceStore) {\n try {\n this.traceStore.saveTrace(trace);\n } catch (error) {\n console.error('Failed to persist trace:', error);\n }\n }\n\n this.activeTrace = [];\n }\n\n /**\n * Create a trace from a sequence of tool calls\n */\n private createTrace(tools: ToolCall[]): Trace {\n const id = uuidv4();\n const type = this.detectTraceType(tools);\n const metadata = this.extractMetadata(tools);\n const score = this.calculateTraceScore(tools, metadata);\n const summary = this.generateSummary(tools, type, metadata);\n\n const trace: Trace = {\n id,\n type,\n tools,\n score,\n summary,\n metadata,\n };\n\n // Check if trace should be compressed\n const ageHours = (Date.now() - metadata.startTime) / (1000 * 60 * 60);\n if (ageHours > this.config.compressionThreshold) {\n trace.compressed = this.compressTrace(trace);\n }\n\n return trace;\n }\n\n /**\n * Detect the type of trace based on tool patterns\n */\n private detectTraceType(tools: ToolCall[]): TraceType {\n const toolSequence = tools.map((t) => t.tool);\n\n // Check against known patterns\n for (const pattern of TRACE_PATTERNS) {\n if (this.matchesPattern(toolSequence, pattern.pattern)) {\n return pattern.type;\n }\n }\n\n // Heuristic detection\n if (toolSequence.includes('search') || toolSequence.includes('grep')) {\n if (toolSequence.includes('edit')) {\n return TraceType.SEARCH_DRIVEN;\n }\n return TraceType.EXPLORATION;\n }\n\n if (tools.some((t) => t.error)) {\n return TraceType.ERROR_RECOVERY;\n }\n\n if (toolSequence.includes('test')) {\n return TraceType.TESTING;\n }\n\n if (toolSequence.includes('write')) {\n return TraceType.FEATURE_IMPLEMENTATION;\n }\n\n return TraceType.UNKNOWN;\n }\n\n /**\n * Check if tool sequence matches a pattern\n */\n private matchesPattern(\n sequence: string[],\n pattern: RegExp | string[]\n ): boolean {\n if (pattern instanceof RegExp) {\n return pattern.test(sequence.join('\u2192'));\n }\n\n if (Array.isArray(pattern)) {\n // Check if pattern is a subsequence\n let patternIndex = 0;\n for (const tool of sequence) {\n if (tool === pattern[patternIndex]) {\n patternIndex++;\n if (patternIndex >= pattern.length) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * Extract metadata from tool calls\n */\n private extractMetadata(tools: ToolCall[]): TraceMetadata {\n const startTime = tools[0].timestamp;\n const endTime = tools[tools.length - 1].timestamp;\n\n const filesModified = new Set<string>();\n const errorsEncountered: string[] = [];\n const decisionsRecorded: string[] = [];\n\n let hasCausalChain = false;\n\n for (let i = 0; i < tools.length; i++) {\n const tool = tools[i];\n\n // Collect files\n if (tool.filesAffected) {\n tool.filesAffected.forEach((f) => filesModified.add(f));\n }\n\n // Collect errors\n if (tool.error) {\n errorsEncountered.push(tool.error);\n // Check if next tool is a fix attempt\n if (i < tools.length - 1) {\n const nextTool = tools[i + 1];\n if (this.isFixAttempt(nextTool, tool)) {\n hasCausalChain = true;\n }\n }\n }\n\n // Collect decisions (if tool is decision_recording)\n if (tool.tool === 'decision_recording' && tool.arguments?.decision) {\n decisionsRecorded.push(tool.arguments.decision);\n }\n }\n\n return {\n startTime,\n endTime,\n filesModified: Array.from(filesModified),\n errorsEncountered,\n decisionsRecorded,\n causalChain: hasCausalChain,\n };\n }\n\n /**\n * Calculate importance score for a trace\n */\n private calculateTraceScore(\n tools: ToolCall[],\n metadata: TraceMetadata\n ): number {\n // Get individual tool scores\n const toolScores = tools.map((t) =>\n this.configManager.calculateScore(t.tool, {\n filesAffected: t.filesAffected?.length || 0,\n isPermanent: this.isPermanentChange(t),\n referenceCount: 0, // Would need to track references\n })\n );\n\n // Use MAX strategy for trace scoring (highest tool determines trace importance)\n const maxScore = Math.max(...toolScores);\n\n // Apply bonuses\n let score = maxScore;\n\n // Bonus for causal chains (error\u2192fix\u2192verify)\n if (metadata.causalChain) {\n score = Math.min(score + 0.1, 1.0);\n }\n\n // Bonus for decisions\n if (metadata.decisionsRecorded.length > 0) {\n score = Math.min(score + 0.05 * metadata.decisionsRecorded.length, 1.0);\n }\n\n // Penalty for errors without fixes\n if (metadata.errorsEncountered.length > 0 && !metadata.causalChain) {\n score = Math.max(score - 0.1, 0);\n }\n\n return score;\n }\n\n /**\n * Check if a tool call represents a permanent change\n */\n private isPermanentChange(tool: ToolCall): boolean {\n const permanentTools = ['write', 'edit', 'decision_recording'];\n return permanentTools.includes(tool.tool);\n }\n\n /**\n * Generate a summary for the trace\n */\n private generateSummary(\n tools: ToolCall[],\n type: TraceType,\n metadata: TraceMetadata\n ): string {\n const toolChain = tools.map((t) => t.tool).join('\u2192');\n\n switch (type) {\n case TraceType.SEARCH_DRIVEN:\n return `Search-driven modification: ${toolChain}`;\n\n case TraceType.ERROR_RECOVERY:\n const error = metadata.errorsEncountered[0] || 'unknown error';\n return `Error recovery: ${error} via ${toolChain}`;\n\n case TraceType.FEATURE_IMPLEMENTATION:\n const files = metadata.filesModified.length;\n return `Feature implementation: ${files} files via ${toolChain}`;\n\n case TraceType.REFACTORING:\n return `Code refactoring: ${toolChain}`;\n\n case TraceType.TESTING:\n return `Test execution: ${toolChain}`;\n\n case TraceType.EXPLORATION:\n return `Codebase exploration: ${toolChain}`;\n\n case TraceType.DEBUGGING:\n return `Debugging session: ${toolChain}`;\n\n case TraceType.BUILD_DEPLOY:\n return `Build and deploy: ${toolChain}`;\n\n default:\n return `Tool sequence: ${toolChain}`;\n }\n }\n\n /**\n * Compress a trace for long-term storage\n */\n private compressTrace(trace: Trace): CompressedTrace {\n const pattern = trace.tools.map((t) => t.tool).join('\u2192');\n const duration = trace.metadata.endTime - trace.metadata.startTime;\n\n return {\n pattern,\n summary: trace.summary,\n score: trace.score,\n toolCount: trace.tools.length,\n duration,\n timestamp: trace.metadata.startTime,\n };\n }\n\n /**\n * Get directory from file path\n */\n private getDirectory(filePath: string): string {\n const parts = filePath.split('/');\n parts.pop(); // Remove filename\n return parts.join('/');\n }\n\n /**\n * Flush any pending trace\n */\n flush(): void {\n if (this.activeTrace.length > 0) {\n this.finalizeTrace();\n }\n }\n\n /**\n * Get all detected traces\n */\n getTraces(): Trace[] {\n return this.traces;\n }\n\n /**\n * Get traces by type\n */\n getTracesByType(type: TraceType): Trace[] {\n return this.traces.filter((t) => t.type === type);\n }\n\n /**\n * Get high-importance traces\n */\n getHighImportanceTraces(threshold: number = 0.7): Trace[] {\n return this.traces.filter((t) => t.score >= threshold);\n }\n\n /**\n * Compress old traces\n */\n compressOldTraces(ageHours: number = 24): number {\n let compressed = 0;\n const now = Date.now();\n\n for (const trace of this.traces) {\n const age = (now - trace.metadata.startTime) / (1000 * 60 * 60);\n if (age > ageHours && !trace.compressed) {\n trace.compressed = this.compressTrace(trace);\n // Optionally remove full tool data to save space\n // trace.tools = [];\n compressed++;\n }\n }\n\n return compressed;\n }\n\n /**\n * Export traces for analysis\n */\n exportTraces(): string {\n return JSON.stringify(this.traces, null, 2);\n }\n\n /**\n * Get statistics about traces\n */\n getStatistics() {\n const stats = {\n totalTraces: this.traces.length,\n tracesByType: {} as Record<string, number>,\n averageScore: 0,\n averageLength: 0,\n compressedCount: 0,\n highImportanceCount: 0,\n };\n\n if (this.traces.length === 0) return stats;\n\n let totalScore = 0;\n let totalLength = 0;\n\n for (const trace of this.traces) {\n // Type distribution\n stats.tracesByType[trace.type] =\n (stats.tracesByType[trace.type] || 0) + 1;\n\n // Scores\n totalScore += trace.score;\n\n // Length\n totalLength += trace.tools.length;\n\n // Compressed\n if (trace.compressed) {\n stats.compressedCount++;\n }\n\n // High importance\n if (trace.score >= 0.7) {\n stats.highImportanceCount++;\n }\n }\n\n stats.averageScore = totalScore / this.traces.length;\n stats.averageLength = totalLength / this.traces.length;\n\n return stats;\n }\n}\n"],
5
- "mappings": "AAKA,SAAS,MAAM,cAAc;AAC7B;AAAA,EAGE;AAAA,EAEA;AAAA,EACA;AAAA,OAKK;AACP,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAGpB,MAAM,cAAc;AAAA,EACjB;AAAA,EACA,cAA0B,CAAC;AAAA,EAC3B,eAAuB;AAAA,EACvB,SAAkB,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EAER,YACE,SAAuC,CAAC,GACxC,eACA,IACA;AACA,SAAK,SAAS,EAAE,GAAG,sBAAsB,GAAG,OAAO;AACnD,SAAK,gBAAgB,iBAAiB,IAAI,cAAc;AAExD,QAAI,IAAI;AACN,WAAK,aAAa,IAAI,WAAW,EAAE;AAEnC,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAA4B;AAClC,QAAI,CAAC,KAAK,WAAY;AAEtB,QAAI;AAEF,YAAM,eAAe,KAAK,WAAW,aAAa;AAClD,YAAM,SAAS,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;AAE3C,WAAK,SAAS,aAAa,OAAO,CAAC,MAAM,EAAE,SAAS,aAAa,MAAM;AAAA,IACzE,SAAS,OAAO;AAEd,cAAQ,MAAM,qCAAqC,KAAK;AACxD,WAAK,SAAS,CAAC;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAsB;AAChC,UAAM,MAAM,KAAK,IAAI;AAGrB,QAAI,KAAK,oBAAoB,IAAI,GAAG;AAElC,UAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,aAAK,cAAc;AAAA,MACrB;AAEA,WAAK,cAAc,CAAC,IAAI;AAAA,IAC1B,OAAO;AAEL,WAAK,YAAY,KAAK,IAAI;AAAA,IAC5B;AAEA,SAAK,eAAe,KAAK;AAGzB,QAAI,KAAK,YAAY,UAAU,KAAK,OAAO,cAAc;AACvD,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,MAAyB;AAEnD,QAAI,KAAK,YAAY,WAAW,GAAG;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,KAAK,YAAY,KAAK,YAAY,SAAS,CAAC;AAG7D,UAAM,WAAW,KAAK,YAAY,SAAS;AAC3C,QAAI,WAAW,KAAK,OAAO,iBAAiB;AAC1C,aAAO;AAAA,IACT;AAGA,QAAI,KAAK,OAAO,kBAAkB;AAChC,YAAM,YAAY,SAAS,iBAAiB,CAAC;AAC7C,YAAM,eAAe,KAAK,iBAAiB,CAAC;AAE5C,UAAI,UAAU,SAAS,KAAK,aAAa,SAAS,GAAG;AACnD,cAAM,WAAW,UAAU,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AAC1D,cAAM,cAAc,aAAa,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC;AAEhE,cAAM,eAAe,SAAS,KAAK,CAAC,MAAM,YAAY,SAAS,CAAC,CAAC;AACjE,YAAI,CAAC,cAAc;AACjB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,OAAO,oBAAoB;AAElC,UAAI,SAAS,SAAS,CAAC,KAAK,aAAa,MAAM,QAAQ,GAAG;AACxD,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,SAAmB,UAA6B;AAEnE,QACE,SAAS,UACR,QAAQ,SAAS,UAAU,QAAQ,SAAS,UAC7C;AACA,aAAO;AAAA,IACT;AAGA,QAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,QAAQ;AACtD,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAsB;AAC5B,QAAI,KAAK,YAAY,WAAW,EAAG;AAEnC,UAAM,QAAQ,KAAK,YAAY,KAAK,WAAW;AAC/C,SAAK,OAAO,KAAK,KAAK;AAGtB,QAAI,KAAK,YAAY;AACnB,UAAI;AACF,aAAK,WAAW,UAAU,KAAK;AAAA,MACjC,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD;AAAA,IACF;AAEA,SAAK,cAAc,CAAC;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAA0B;AAC5C,UAAM,KAAK,OAAO;AAClB,UAAM,OAAO,KAAK,gBAAgB,KAAK;AACvC,UAAM,WAAW,KAAK,gBAAgB,KAAK;AAC3C,UAAM,QAAQ,KAAK,oBAAoB,OAAO,QAAQ;AACtD,UAAM,UAAU,KAAK,gBAAgB,OAAO,MAAM,QAAQ;AAE1D,UAAM,QAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,YAAY,KAAK,IAAI,IAAI,SAAS,cAAc,MAAO,KAAK;AAClE,QAAI,WAAW,KAAK,OAAO,sBAAsB;AAC/C,YAAM,aAAa,KAAK,cAAc,KAAK;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAA8B;AACpD,UAAM,eAAe,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAG5C,eAAW,WAAW,gBAAgB;AACpC,UAAI,KAAK,eAAe,cAAc,QAAQ,OAAO,GAAG;AACtD,eAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAGA,QAAI,aAAa,SAAS,QAAQ,KAAK,aAAa,SAAS,MAAM,GAAG;AACpE,UAAI,aAAa,SAAS,MAAM,GAAG;AACjC,eAAO,UAAU;AAAA,MACnB;AACA,aAAO,UAAU;AAAA,IACnB;AAEA,QAAI,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;AAC9B,aAAO,UAAU;AAAA,IACnB;AAEA,QAAI,aAAa,SAAS,MAAM,GAAG;AACjC,aAAO,UAAU;AAAA,IACnB;AAEA,QAAI,aAAa,SAAS,OAAO,GAAG;AAClC,aAAO,UAAU;AAAA,IACnB;AAEA,WAAO,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKQ,eACN,UACA,SACS;AACT,QAAI,mBAAmB,QAAQ;AAC7B,aAAO,QAAQ,KAAK,SAAS,KAAK,QAAG,CAAC;AAAA,IACxC;AAEA,QAAI,MAAM,QAAQ,OAAO,GAAG;AAE1B,UAAI,eAAe;AACnB,iBAAW,QAAQ,UAAU;AAC3B,YAAI,SAAS,QAAQ,YAAY,GAAG;AAClC;AACA,cAAI,gBAAgB,QAAQ,QAAQ;AAClC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAAkC;AACxD,UAAM,YAAY,MAAM,CAAC,EAAE;AAC3B,UAAM,UAAU,MAAM,MAAM,SAAS,CAAC,EAAE;AAExC,UAAM,gBAAgB,oBAAI,IAAY;AACtC,UAAM,oBAA8B,CAAC;AACrC,UAAM,oBAA8B,CAAC;AAErC,QAAI,iBAAiB;AAErB,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AAGpB,UAAI,KAAK,eAAe;AACtB,aAAK,cAAc,QAAQ,CAAC,MAAM,cAAc,IAAI,CAAC,CAAC;AAAA,MACxD;AAGA,UAAI,KAAK,OAAO;AACd,0BAAkB,KAAK,KAAK,KAAK;AAEjC,YAAI,IAAI,MAAM,SAAS,GAAG;AACxB,gBAAM,WAAW,MAAM,IAAI,CAAC;AAC5B,cAAI,KAAK,aAAa,UAAU,IAAI,GAAG;AACrC,6BAAiB;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAGA,UAAI,KAAK,SAAS,wBAAwB,KAAK,WAAW,UAAU;AAClE,0BAAkB,KAAK,KAAK,UAAU,QAAQ;AAAA,MAChD;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,eAAe,MAAM,KAAK,aAAa;AAAA,MACvC;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBACN,OACA,UACQ;AAER,UAAM,aAAa,MAAM;AAAA,MAAI,CAAC,MAC5B,KAAK,cAAc,eAAe,EAAE,MAAM;AAAA,QACxC,eAAe,EAAE,eAAe,UAAU;AAAA,QAC1C,aAAa,KAAK,kBAAkB,CAAC;AAAA,QACrC,gBAAgB;AAAA;AAAA,MAClB,CAAC;AAAA,IACH;AAGA,UAAM,WAAW,KAAK,IAAI,GAAG,UAAU;AAGvC,QAAI,QAAQ;AAGZ,QAAI,SAAS,aAAa;AACxB,cAAQ,KAAK,IAAI,QAAQ,KAAK,CAAG;AAAA,IACnC;AAGA,QAAI,SAAS,kBAAkB,SAAS,GAAG;AACzC,cAAQ,KAAK,IAAI,QAAQ,OAAO,SAAS,kBAAkB,QAAQ,CAAG;AAAA,IACxE;AAGA,QAAI,SAAS,kBAAkB,SAAS,KAAK,CAAC,SAAS,aAAa;AAClE,cAAQ,KAAK,IAAI,QAAQ,KAAK,CAAC;AAAA,IACjC;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,MAAyB;AACjD,UAAM,iBAAiB,CAAC,SAAS,QAAQ,oBAAoB;AAC7D,WAAO,eAAe,SAAS,KAAK,IAAI;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKQ,gBACN,OACA,MACA,UACQ;AACR,UAAM,YAAY,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,QAAG;AAEnD,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,eAAO,+BAA+B,SAAS;AAAA,MAEjD,KAAK,UAAU;AACb,cAAM,QAAQ,SAAS,kBAAkB,CAAC,KAAK;AAC/C,eAAO,mBAAmB,KAAK,QAAQ,SAAS;AAAA,MAElD,KAAK,UAAU;AACb,cAAM,QAAQ,SAAS,cAAc;AACrC,eAAO,2BAA2B,KAAK,cAAc,SAAS;AAAA,MAEhE,KAAK,UAAU;AACb,eAAO,qBAAqB,SAAS;AAAA,MAEvC,KAAK,UAAU;AACb,eAAO,mBAAmB,SAAS;AAAA,MAErC,KAAK,UAAU;AACb,eAAO,yBAAyB,SAAS;AAAA,MAE3C,KAAK,UAAU;AACb,eAAO,sBAAsB,SAAS;AAAA,MAExC,KAAK,UAAU;AACb,eAAO,qBAAqB,SAAS;AAAA,MAEvC;AACE,eAAO,kBAAkB,SAAS;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,OAA+B;AACnD,UAAM,UAAU,MAAM,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,QAAG;AACvD,UAAM,WAAW,MAAM,SAAS,UAAU,MAAM,SAAS;AAEzD,WAAO;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AAAA,MACf,OAAO,MAAM;AAAA,MACb,WAAW,MAAM,MAAM;AAAA,MACvB;AAAA,MACA,WAAW,MAAM,SAAS;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,UAA0B;AAC7C,UAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,UAAM,IAAI;AACV,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,QAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,MAA0B;AACxC,WAAO,KAAK,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,YAAoB,KAAc;AACxD,WAAO,KAAK,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,WAAmB,IAAY;AAC/C,QAAI,aAAa;AACjB,UAAM,MAAM,KAAK,IAAI;AAErB,eAAW,SAAS,KAAK,QAAQ;AAC/B,YAAM,OAAO,MAAM,MAAM,SAAS,cAAc,MAAO,KAAK;AAC5D,UAAI,MAAM,YAAY,CAAC,MAAM,YAAY;AACvC,cAAM,aAAa,KAAK,cAAc,KAAK;AAG3C;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AACrB,WAAO,KAAK,UAAU,KAAK,QAAQ,MAAM,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,UAAM,QAAQ;AAAA,MACZ,aAAa,KAAK,OAAO;AAAA,MACzB,cAAc,CAAC;AAAA,MACf,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,IACvB;AAEA,QAAI,KAAK,OAAO,WAAW,EAAG,QAAO;AAErC,QAAI,aAAa;AACjB,QAAI,cAAc;AAElB,eAAW,SAAS,KAAK,QAAQ;AAE/B,YAAM,aAAa,MAAM,IAAI,KAC1B,MAAM,aAAa,MAAM,IAAI,KAAK,KAAK;AAG1C,oBAAc,MAAM;AAGpB,qBAAe,MAAM,MAAM;AAG3B,UAAI,MAAM,YAAY;AACpB,cAAM;AAAA,MACR;AAGA,UAAI,MAAM,SAAS,KAAK;AACtB,cAAM;AAAA,MACR;AAAA,IACF;AAEA,UAAM,eAAe,aAAa,KAAK,OAAO;AAC9C,UAAM,gBAAgB,cAAc,KAAK,OAAO;AAEhD,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["/**\n * Trace Detection and Bundling System\n * Identifies chains of related tool calls and bundles them as single traces\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport {\n ToolCall,\n Trace,\n TraceType,\n TraceBoundaryConfig,\n DEFAULT_TRACE_CONFIG,\n TRACE_PATTERNS,\n TraceMetadata,\n TraceScoringFactors,\n CompressedTrace,\n CompressionStrategy,\n} from './types.js';\nimport { ConfigManager } from '../config/config-manager.js';\nimport { TraceStore } from './trace-store.js';\nimport Database from 'better-sqlite3';\n\nexport class TraceDetector {\n private config: TraceBoundaryConfig;\n private activeTrace: ToolCall[] = [];\n private lastToolTime: number = 0;\n private traces: Trace[] = [];\n private configManager: ConfigManager;\n private traceStore?: TraceStore;\n\n constructor(\n config: Partial<TraceBoundaryConfig> = {},\n configManager?: ConfigManager,\n db?: Database.Database\n ) {\n this.config = { ...DEFAULT_TRACE_CONFIG, ...config };\n this.configManager = configManager || new ConfigManager();\n\n if (db) {\n this.traceStore = new TraceStore(db);\n // Load existing traces from database\n this.loadTracesFromStore();\n }\n }\n\n /**\n * Load traces from the database\n */\n private loadTracesFromStore(): void {\n if (!this.traceStore) return;\n\n try {\n // Load recent traces (last 24 hours)\n const recentTraces = this.traceStore.getAllTraces();\n const cutoff = Date.now() - 24 * 60 * 60 * 1000;\n\n this.traces = recentTraces.filter((t) => t.metadata.startTime >= cutoff);\n } catch (error) {\n // If loading fails, start with empty traces\n console.error('Failed to load traces from store:', error);\n this.traces = [];\n }\n }\n\n /**\n * Add a tool call and check if it belongs to current trace\n */\n addToolCall(tool: ToolCall): void {\n const now = Date.now();\n\n // Check if this tool belongs to the current trace\n if (this.shouldStartNewTrace(tool)) {\n // Finalize current trace if it exists\n if (this.activeTrace.length > 0) {\n this.finalizeTrace();\n }\n // Start new trace\n this.activeTrace = [tool];\n } else {\n // Add to current trace\n this.activeTrace.push(tool);\n }\n\n this.lastToolTime = tool.timestamp;\n\n // Check if trace is getting too large\n if (this.activeTrace.length >= this.config.maxTraceSize) {\n this.finalizeTrace();\n }\n }\n\n /**\n * Determine if a tool call should start a new trace\n */\n private shouldStartNewTrace(tool: ToolCall): boolean {\n // First tool always starts a new trace\n if (this.activeTrace.length === 0) {\n return false;\n }\n\n const lastTool = this.activeTrace[this.activeTrace.length - 1];\n\n // Time proximity check\n const timeDiff = tool.timestamp - lastTool.timestamp;\n if (timeDiff > this.config.timeProximityMs) {\n return true;\n }\n\n // Directory check if enabled\n if (this.config.sameDirThreshold) {\n const lastFiles = lastTool.filesAffected || [];\n const currentFiles = tool.filesAffected || [];\n\n if (lastFiles.length > 0 && currentFiles.length > 0) {\n const lastDirs = lastFiles.map((f) => this.getDirectory(f));\n const currentDirs = currentFiles.map((f) => this.getDirectory(f));\n\n const hasCommonDir = lastDirs.some((d) => currentDirs.includes(d));\n if (!hasCommonDir) {\n return true;\n }\n }\n }\n\n // Causal relationship check\n if (this.config.causalRelationship) {\n // If last tool had an error and current tool is not a fix attempt, start new trace\n if (lastTool.error && !this.isFixAttempt(tool, lastTool)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if a tool is attempting to fix an error from previous tool\n */\n private isFixAttempt(current: ToolCall, previous: ToolCall): boolean {\n // Edit after error is likely a fix\n if (\n previous.error &&\n (current.tool === 'edit' || current.tool === 'write')\n ) {\n return true;\n }\n\n // Test after fix is validation\n if (current.tool === 'test' || current.tool === 'bash') {\n return true;\n }\n\n return false;\n }\n\n /**\n * Finalize current trace and add to traces list\n */\n private finalizeTrace(): void {\n if (this.activeTrace.length === 0) return;\n\n const trace = this.createTrace(this.activeTrace);\n this.traces.push(trace);\n\n // Persist to database if store is available\n if (this.traceStore) {\n try {\n this.traceStore.saveTrace(trace);\n } catch (error) {\n console.error('Failed to persist trace:', error);\n }\n }\n\n this.activeTrace = [];\n }\n\n /**\n * Create a trace from a sequence of tool calls\n */\n private createTrace(tools: ToolCall[]): Trace {\n const id = uuidv4();\n const type = this.detectTraceType(tools);\n const metadata = this.extractMetadata(tools);\n const score = this.calculateTraceScore(tools, metadata);\n const summary = this.generateSummary(tools, type, metadata);\n\n const trace: Trace = {\n id,\n type,\n tools,\n score,\n summary,\n metadata,\n };\n\n // Check if trace should be compressed\n const ageHours = (Date.now() - metadata.startTime) / (1000 * 60 * 60);\n if (ageHours > this.config.compressionThreshold) {\n trace.compressed = this.compressTrace(trace);\n }\n\n return trace;\n }\n\n /**\n * Detect the type of trace based on tool patterns\n */\n private detectTraceType(tools: ToolCall[]): TraceType {\n const toolSequence = tools.map((t) => t.tool);\n\n // Check against known patterns\n for (const pattern of TRACE_PATTERNS) {\n if (this.matchesPattern(toolSequence, pattern.pattern)) {\n return pattern.type;\n }\n }\n\n // Heuristic detection\n if (toolSequence.includes('search') || toolSequence.includes('grep')) {\n if (toolSequence.includes('edit')) {\n return TraceType.SEARCH_DRIVEN;\n }\n return TraceType.EXPLORATION;\n }\n\n if (tools.some((t) => t.error)) {\n return TraceType.ERROR_RECOVERY;\n }\n\n if (toolSequence.includes('test')) {\n return TraceType.TESTING;\n }\n\n if (toolSequence.includes('write')) {\n return TraceType.FEATURE_IMPLEMENTATION;\n }\n\n return TraceType.UNKNOWN;\n }\n\n /**\n * Check if tool sequence matches a pattern\n */\n private matchesPattern(\n sequence: string[],\n pattern: RegExp | string[]\n ): boolean {\n if (pattern instanceof RegExp) {\n return pattern.test(sequence.join('\u2192'));\n }\n\n if (Array.isArray(pattern)) {\n // Check if pattern is a subsequence\n let patternIndex = 0;\n for (const tool of sequence) {\n if (tool === pattern[patternIndex]) {\n patternIndex++;\n if (patternIndex >= pattern.length) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * Extract metadata from tool calls\n */\n private extractMetadata(tools: ToolCall[]): TraceMetadata {\n const startTime = tools[0].timestamp;\n const endTime = tools[tools.length - 1].timestamp;\n\n const filesModified = new Set<string>();\n const errorsEncountered: string[] = [];\n const decisionsRecorded: string[] = [];\n\n let hasCausalChain = false;\n\n for (let i = 0; i < tools.length; i++) {\n const tool = tools[i];\n\n // Collect files\n if (tool.filesAffected) {\n tool.filesAffected.forEach((f) => filesModified.add(f));\n }\n\n // Collect errors\n if (tool.error) {\n errorsEncountered.push(tool.error);\n // Check if next tool is a fix attempt\n if (i < tools.length - 1) {\n const nextTool = tools[i + 1];\n if (this.isFixAttempt(nextTool, tool)) {\n hasCausalChain = true;\n }\n }\n }\n\n // Collect decisions (if tool is decision_recording)\n if (tool.tool === 'decision_recording' && tool.arguments?.decision) {\n decisionsRecorded.push(tool.arguments.decision);\n }\n }\n\n return {\n startTime,\n endTime,\n filesModified: Array.from(filesModified),\n errorsEncountered,\n decisionsRecorded,\n causalChain: hasCausalChain,\n };\n }\n\n /**\n * Calculate importance score for a trace\n */\n private calculateTraceScore(\n tools: ToolCall[],\n metadata: TraceMetadata\n ): number {\n // Get individual tool scores\n const toolScores = tools.map((t) =>\n this.configManager.calculateScore(t.tool, {\n filesAffected: t.filesAffected?.length || 0,\n isPermanent: this.isPermanentChange(t),\n referenceCount: 0, // Would need to track references\n })\n );\n\n // Use MAX strategy for trace scoring (highest tool determines trace importance)\n const maxScore = Math.max(...toolScores);\n\n // Apply bonuses\n let score = maxScore;\n\n // Bonus for causal chains (error\u2192fix\u2192verify)\n if (metadata.causalChain) {\n score = Math.min(score + 0.1, 1.0);\n }\n\n // Bonus for decisions\n if (metadata.decisionsRecorded.length > 0) {\n score = Math.min(score + 0.05 * metadata.decisionsRecorded.length, 1.0);\n }\n\n // Penalty for errors without fixes\n if (metadata.errorsEncountered.length > 0 && !metadata.causalChain) {\n score = Math.max(score - 0.1, 0);\n }\n\n return score;\n }\n\n /**\n * Check if a tool call represents a permanent change\n */\n private isPermanentChange(tool: ToolCall): boolean {\n const permanentTools = ['write', 'edit', 'decision_recording'];\n return permanentTools.includes(tool.tool);\n }\n\n /**\n * Generate a summary for the trace\n */\n private generateSummary(\n tools: ToolCall[],\n type: TraceType,\n metadata: TraceMetadata\n ): string {\n const toolChain = tools.map((t) => t.tool).join('\u2192');\n\n switch (type) {\n case TraceType.SEARCH_DRIVEN:\n return `Search-driven modification: ${toolChain}`;\n\n case TraceType.ERROR_RECOVERY:\n const error = metadata.errorsEncountered[0] || 'unknown error';\n return `Error recovery: ${error} via ${toolChain}`;\n\n case TraceType.FEATURE_IMPLEMENTATION:\n const files = metadata.filesModified.length;\n return `Feature implementation: ${files} files via ${toolChain}`;\n\n case TraceType.REFACTORING:\n return `Code refactoring: ${toolChain}`;\n\n case TraceType.TESTING:\n return `Test execution: ${toolChain}`;\n\n case TraceType.EXPLORATION:\n return `Codebase exploration: ${toolChain}`;\n\n case TraceType.DEBUGGING:\n return `Debugging session: ${toolChain}`;\n\n case TraceType.BUILD_DEPLOY:\n return `Build and deploy: ${toolChain}`;\n\n default:\n return `Tool sequence: ${toolChain}`;\n }\n }\n\n /**\n * Compress a trace for long-term storage using strategy\n */\n private compressTrace(\n trace: Trace, \n strategy: CompressionStrategy = CompressionStrategy.PATTERN_BASED\n ): CompressedTrace {\n switch (strategy) {\n case CompressionStrategy.SUMMARY_ONLY:\n return this.compressSummaryOnly(trace);\n \n case CompressionStrategy.PATTERN_BASED:\n return this.compressPatternBased(trace);\n \n case CompressionStrategy.SELECTIVE:\n return this.compressSelective(trace);\n \n case CompressionStrategy.FULL_COMPRESSION:\n return this.compressMaximal(trace);\n \n default:\n return this.compressPatternBased(trace);\n }\n }\n \n /**\n * Summary-only compression - minimal data retention\n */\n private compressSummaryOnly(trace: Trace): CompressedTrace {\n return {\n pattern: '', // No pattern stored\n summary: trace.summary.substring(0, 100), // Limit summary\n score: trace.score,\n toolCount: trace.tools.length,\n duration: trace.metadata.endTime - trace.metadata.startTime,\n timestamp: trace.metadata.startTime,\n };\n }\n \n /**\n * Pattern-based compression - keep tool sequence\n */\n private compressPatternBased(trace: Trace): CompressedTrace {\n const pattern = trace.tools.map((t) => t.tool).join('\u2192');\n const duration = trace.metadata.endTime - trace.metadata.startTime;\n\n return {\n pattern,\n summary: trace.summary,\n score: trace.score,\n toolCount: trace.tools.length,\n duration,\n timestamp: trace.metadata.startTime,\n };\n }\n \n /**\n * Selective compression - keep high-score tools only\n */\n private compressSelective(trace: Trace, threshold: number = 0.5): CompressedTrace {\n // Calculate individual tool scores\n const significantTools = trace.tools.filter(tool => {\n const score = this.configManager.calculateScore(tool.tool, {\n filesAffected: tool.filesAffected?.length || 0,\n isPermanent: this.isPermanentChange(tool),\n referenceCount: 0,\n });\n return score >= threshold;\n });\n \n const pattern = significantTools.length > 0 \n ? significantTools.map(t => t.tool).join('\u2192')\n : trace.tools.map(t => t.tool).join('\u2192');\n \n return {\n pattern,\n summary: `${trace.summary} [${significantTools.length}/${trace.tools.length} significant]`,\n score: trace.score,\n toolCount: significantTools.length,\n duration: trace.metadata.endTime - trace.metadata.startTime,\n timestamp: trace.metadata.startTime,\n };\n }\n \n /**\n * Maximal compression - absolute minimum data\n */\n private compressMaximal(trace: Trace): CompressedTrace {\n // Compress pattern to type abbreviation\n const typeAbbrev = this.getTraceTypeAbbreviation(trace.type);\n const pattern = `${typeAbbrev}:${trace.tools.length}`;\n \n return {\n pattern,\n summary: trace.type, // Just the type\n score: Math.round(trace.score * 10) / 10, // Round to 1 decimal\n toolCount: trace.tools.length,\n duration: Math.round((trace.metadata.endTime - trace.metadata.startTime) / 1000) * 1000, // Round to seconds\n timestamp: trace.metadata.startTime,\n };\n }\n \n /**\n * Get abbreviated trace type\n */\n private getTraceTypeAbbreviation(type: TraceType): string {\n const abbreviations: Record<TraceType, string> = {\n [TraceType.SEARCH_DRIVEN]: 'SD',\n [TraceType.ERROR_RECOVERY]: 'ER',\n [TraceType.FEATURE_IMPLEMENTATION]: 'FI',\n [TraceType.REFACTORING]: 'RF',\n [TraceType.TESTING]: 'TS',\n [TraceType.EXPLORATION]: 'EX',\n [TraceType.DEBUGGING]: 'DB',\n [TraceType.DOCUMENTATION]: 'DC',\n [TraceType.BUILD_DEPLOY]: 'BD',\n [TraceType.UNKNOWN]: 'UN',\n };\n return abbreviations[type] || 'UN';\n }\n \n /**\n * Choose compression strategy based on trace age and importance\n */\n private selectCompressionStrategy(trace: Trace): CompressionStrategy {\n const ageHours = (Date.now() - trace.metadata.startTime) / (1000 * 60 * 60);\n const score = trace.score;\n \n // Recent and important: pattern-based\n if (ageHours < 24 && score > 0.7) {\n return CompressionStrategy.PATTERN_BASED;\n }\n \n // Recent but less important: selective\n if (ageHours < 24) {\n return CompressionStrategy.SELECTIVE;\n }\n \n // Old and important: selective\n if (ageHours < 168 && score > 0.5) { // 1 week\n return CompressionStrategy.SELECTIVE;\n }\n \n // Old and less important: summary only\n if (ageHours < 720) { // 30 days\n return CompressionStrategy.SUMMARY_ONLY;\n }\n \n // Very old: maximal compression\n return CompressionStrategy.FULL_COMPRESSION;\n }\n\n /**\n * Get directory from file path\n */\n private getDirectory(filePath: string): string {\n const parts = filePath.split('/');\n parts.pop(); // Remove filename\n return parts.join('/');\n }\n\n /**\n * Flush any pending trace\n */\n flush(): void {\n if (this.activeTrace.length > 0) {\n this.finalizeTrace();\n }\n }\n\n /**\n * Get all detected traces\n */\n getTraces(): Trace[] {\n return this.traces;\n }\n\n /**\n * Get traces by type\n */\n getTracesByType(type: TraceType): Trace[] {\n return this.traces.filter((t) => t.type === type);\n }\n\n /**\n * Get high-importance traces\n */\n getHighImportanceTraces(threshold: number = 0.7): Trace[] {\n return this.traces.filter((t) => t.score >= threshold);\n }\n\n /**\n * Compress old traces with intelligent strategy selection\n */\n compressOldTraces(ageHours: number = 24): number {\n let compressed = 0;\n const now = Date.now();\n\n for (const trace of this.traces) {\n const age = (now - trace.metadata.startTime) / (1000 * 60 * 60);\n if (age > ageHours && !trace.compressed) {\n // Select compression strategy based on age and importance\n const strategy = this.selectCompressionStrategy(trace);\n trace.compressed = this.compressTrace(trace, strategy);\n \n // Remove full tool data for older traces to save memory\n if (strategy === CompressionStrategy.FULL_COMPRESSION || \n strategy === CompressionStrategy.SUMMARY_ONLY) {\n trace.tools = []; // Clear tool data for maximum compression\n } else if (strategy === CompressionStrategy.SELECTIVE) {\n // Keep only high-score tools\n trace.tools = trace.tools.filter(tool => {\n const score = this.configManager.calculateScore(tool.tool, {\n filesAffected: tool.filesAffected?.length || 0,\n isPermanent: this.isPermanentChange(tool),\n referenceCount: 0,\n });\n return score >= 0.5;\n });\n }\n \n compressed++;\n \n // Update database if available\n if (this.traceStore) {\n try {\n this.traceStore.updateCompression(trace.id, trace.compressed, strategy);\n } catch (error) {\n console.error('Failed to update trace compression in store:', error);\n }\n }\n }\n }\n\n return compressed;\n }\n\n /**\n * Export traces for analysis\n */\n exportTraces(): string {\n return JSON.stringify(this.traces, null, 2);\n }\n\n /**\n * Get statistics about traces\n */\n getStatistics() {\n const stats = {\n totalTraces: this.traces.length,\n tracesByType: {} as Record<string, number>,\n averageScore: 0,\n averageLength: 0,\n compressedCount: 0,\n highImportanceCount: 0,\n };\n\n if (this.traces.length === 0) return stats;\n\n let totalScore = 0;\n let totalLength = 0;\n\n for (const trace of this.traces) {\n // Type distribution\n stats.tracesByType[trace.type] =\n (stats.tracesByType[trace.type] || 0) + 1;\n\n // Scores\n totalScore += trace.score;\n\n // Length\n totalLength += trace.tools.length;\n\n // Compressed\n if (trace.compressed) {\n stats.compressedCount++;\n }\n\n // High importance\n if (trace.score >= 0.7) {\n stats.highImportanceCount++;\n }\n }\n\n stats.averageScore = totalScore / this.traces.length;\n stats.averageLength = totalLength / this.traces.length;\n\n return stats;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/core/trace/trace-store.ts"],
4
- "sourcesContent": ["/**\n * Trace Store - Database persistence for traces\n */\n\nimport Database from 'better-sqlite3';\nimport {\n Trace,\n ToolCall,\n TraceType,\n TraceMetadata,\n CompressedTrace,\n} from './types.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport class TraceStore {\n private db: Database.Database;\n\n constructor(db: Database.Database) {\n this.db = db;\n this.initializeSchema();\n }\n\n /**\n * Initialize database schema for traces\n */\n private initializeSchema(): void {\n // Check if frames table exists (it may not in all contexts)\n const hasFramesTable = this.db\n .prepare(\n `\n SELECT name FROM sqlite_master \n WHERE type='table' AND name='frames'\n `\n )\n .get();\n\n // Create traces table with optional foreign key\n if (hasFramesTable) {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS traces (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n score REAL NOT NULL,\n summary TEXT NOT NULL,\n start_time INTEGER NOT NULL,\n end_time INTEGER NOT NULL,\n frame_id TEXT,\n user_id TEXT,\n files_modified TEXT,\n errors_encountered TEXT,\n decisions_recorded TEXT,\n causal_chain INTEGER,\n compressed_data TEXT,\n created_at INTEGER DEFAULT (unixepoch()),\n FOREIGN KEY (frame_id) REFERENCES frames(frame_id) ON DELETE SET NULL\n )\n `);\n } else {\n // Create without foreign key constraint\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS traces (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n score REAL NOT NULL,\n summary TEXT NOT NULL,\n start_time INTEGER NOT NULL,\n end_time INTEGER NOT NULL,\n frame_id TEXT,\n user_id TEXT,\n files_modified TEXT,\n errors_encountered TEXT,\n decisions_recorded TEXT,\n causal_chain INTEGER,\n compressed_data TEXT,\n created_at INTEGER DEFAULT (unixepoch())\n )\n `);\n }\n\n // Create tool_calls table\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tool_calls (\n id TEXT PRIMARY KEY,\n trace_id TEXT NOT NULL,\n tool TEXT NOT NULL,\n arguments TEXT,\n timestamp INTEGER NOT NULL,\n result TEXT,\n error TEXT,\n files_affected TEXT,\n duration INTEGER,\n sequence_number INTEGER NOT NULL,\n FOREIGN KEY (trace_id) REFERENCES traces(id) ON DELETE CASCADE\n )\n `);\n\n // Create indexes\n this.db.exec(`\n CREATE INDEX IF NOT EXISTS idx_traces_type ON traces(type);\n CREATE INDEX IF NOT EXISTS idx_traces_frame_id ON traces(frame_id);\n CREATE INDEX IF NOT EXISTS idx_traces_start_time ON traces(start_time);\n CREATE INDEX IF NOT EXISTS idx_traces_score ON traces(score);\n CREATE INDEX IF NOT EXISTS idx_tool_calls_trace_id ON tool_calls(trace_id);\n CREATE INDEX IF NOT EXISTS idx_tool_calls_timestamp ON tool_calls(timestamp);\n `);\n }\n\n /**\n * Save a trace to the database\n */\n saveTrace(trace: Trace): void {\n const traceStmt = this.db.prepare(`\n INSERT OR REPLACE INTO traces (\n id, type, score, summary, start_time, end_time,\n frame_id, user_id, files_modified, errors_encountered,\n decisions_recorded, causal_chain, compressed_data\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n const toolCallStmt = this.db.prepare(`\n INSERT OR REPLACE INTO tool_calls (\n id, trace_id, tool, arguments, timestamp, result,\n error, files_affected, duration, sequence_number\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n try {\n this.db.transaction(() => {\n // Save trace\n traceStmt.run(\n trace.id,\n trace.type,\n trace.score,\n trace.summary,\n trace.metadata.startTime,\n trace.metadata.endTime,\n trace.metadata.frameId || null,\n trace.metadata.userId || null,\n JSON.stringify(trace.metadata.filesModified),\n JSON.stringify(trace.metadata.errorsEncountered),\n JSON.stringify(trace.metadata.decisionsRecorded),\n trace.metadata.causalChain ? 1 : 0,\n trace.compressed ? JSON.stringify(trace.compressed) : null\n );\n\n // Save tool calls\n trace.tools.forEach((tool, index) => {\n toolCallStmt.run(\n tool.id,\n trace.id,\n tool.tool,\n tool.arguments ? JSON.stringify(tool.arguments) : null,\n tool.timestamp,\n tool.result ? JSON.stringify(tool.result) : null,\n tool.error || null,\n tool.filesAffected ? JSON.stringify(tool.filesAffected) : null,\n tool.duration || null,\n index\n );\n });\n })();\n\n logger.debug(\n `Saved trace ${trace.id} with ${trace.tools.length} tool calls`\n );\n } catch (error) {\n logger.error(`Failed to save trace ${trace.id}:`, error as Error);\n throw error;\n }\n }\n\n /**\n * Load a trace by ID\n */\n getTrace(id: string): Trace | null {\n const traceRow = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE id = ?\n `\n )\n .get(id) as any;\n\n if (!traceRow) {\n return null;\n }\n\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n }\n\n /**\n * Load all traces\n */\n getAllTraces(): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces ORDER BY start_time DESC\n `\n )\n .all() as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load traces by type\n */\n getTracesByType(type: TraceType): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE type = ? ORDER BY start_time DESC\n `\n )\n .all(type) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load traces by frame\n */\n getTracesByFrame(frameId: string): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE frame_id = ? ORDER BY start_time DESC\n `\n )\n .all(frameId) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load high-importance traces\n */\n getHighImportanceTraces(minScore: number = 0.7): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE score >= ? ORDER BY score DESC, start_time DESC\n `\n )\n .all(minScore) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load error traces\n */\n getErrorTraces(): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces \n WHERE type = ? OR errors_encountered != '[]'\n ORDER BY start_time DESC\n `\n )\n .all(TraceType.ERROR_RECOVERY) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Get trace statistics\n */\n getStatistics(): {\n totalTraces: number;\n tracesByType: Record<string, number>;\n averageScore: number;\n averageLength: number;\n errorRate: number;\n } {\n const stats = this.db\n .prepare(\n `\n SELECT \n COUNT(*) as total,\n AVG(score) as avg_score,\n AVG((\n SELECT COUNT(*) FROM tool_calls WHERE trace_id = traces.id\n )) as avg_length,\n SUM(CASE WHEN type = ? OR errors_encountered != '[]' THEN 1 ELSE 0 END) * 100.0 / COUNT(*) as error_rate\n FROM traces\n `\n )\n .get(TraceType.ERROR_RECOVERY) as any;\n\n const typeStats = this.db\n .prepare(\n `\n SELECT type, COUNT(*) as count\n FROM traces\n GROUP BY type\n `\n )\n .all() as any[];\n\n const tracesByType: Record<string, number> = {};\n typeStats.forEach((row) => {\n tracesByType[row.type] = row.count;\n });\n\n return {\n totalTraces: stats.total || 0,\n tracesByType,\n averageScore: stats.avg_score || 0,\n averageLength: stats.avg_length || 0,\n errorRate: stats.error_rate || 0,\n };\n }\n\n /**\n * Delete old traces\n */\n deleteOldTraces(olderThanMs: number): number {\n const cutoff = Date.now() - olderThanMs;\n const result = this.db\n .prepare(\n `\n DELETE FROM traces WHERE start_time < ?\n `\n )\n .run(cutoff);\n\n return result.changes;\n }\n\n /**\n * Convert database rows to Trace object\n */\n private rowsToTrace(traceRow: any, toolRows: any[]): Trace {\n const tools: ToolCall[] = toolRows.map((row) => ({\n id: row.id,\n tool: row.tool,\n arguments: row.arguments ? JSON.parse(row.arguments) : undefined,\n timestamp: row.timestamp,\n result: row.result ? JSON.parse(row.result) : undefined,\n error: row.error || undefined,\n filesAffected: row.files_affected\n ? JSON.parse(row.files_affected)\n : undefined,\n duration: row.duration || undefined,\n }));\n\n const metadata: TraceMetadata = {\n startTime: traceRow.start_time,\n endTime: traceRow.end_time,\n frameId: traceRow.frame_id || undefined,\n userId: traceRow.user_id || undefined,\n filesModified: JSON.parse(traceRow.files_modified || '[]'),\n errorsEncountered: JSON.parse(traceRow.errors_encountered || '[]'),\n decisionsRecorded: JSON.parse(traceRow.decisions_recorded || '[]'),\n causalChain: traceRow.causal_chain === 1,\n };\n\n const trace: Trace = {\n id: traceRow.id,\n type: traceRow.type as TraceType,\n tools,\n score: traceRow.score,\n summary: traceRow.summary,\n metadata,\n };\n\n if (traceRow.compressed_data) {\n trace.compressed = JSON.parse(traceRow.compressed_data);\n }\n\n return trace;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Trace Store - Database persistence for traces\n */\n\nimport Database from 'better-sqlite3';\nimport {\n Trace,\n ToolCall,\n TraceType,\n TraceMetadata,\n CompressedTrace,\n CompressionStrategy,\n} from './types.js';\nimport { logger } from '../monitoring/logger.js';\n\nexport class TraceStore {\n private db: Database.Database;\n\n constructor(db: Database.Database) {\n this.db = db;\n this.initializeSchema();\n }\n\n /**\n * Initialize database schema for traces\n */\n private initializeSchema(): void {\n // Check if frames table exists (it may not in all contexts)\n const hasFramesTable = this.db\n .prepare(\n `\n SELECT name FROM sqlite_master \n WHERE type='table' AND name='frames'\n `\n )\n .get();\n\n // Create traces table with optional foreign key\n if (hasFramesTable) {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS traces (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n score REAL NOT NULL,\n summary TEXT NOT NULL,\n start_time INTEGER NOT NULL,\n end_time INTEGER NOT NULL,\n frame_id TEXT,\n user_id TEXT,\n files_modified TEXT,\n errors_encountered TEXT,\n decisions_recorded TEXT,\n causal_chain INTEGER,\n compressed_data TEXT,\n created_at INTEGER DEFAULT (unixepoch()),\n FOREIGN KEY (frame_id) REFERENCES frames(frame_id) ON DELETE SET NULL\n )\n `);\n } else {\n // Create without foreign key constraint\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS traces (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n score REAL NOT NULL,\n summary TEXT NOT NULL,\n start_time INTEGER NOT NULL,\n end_time INTEGER NOT NULL,\n frame_id TEXT,\n user_id TEXT,\n files_modified TEXT,\n errors_encountered TEXT,\n decisions_recorded TEXT,\n causal_chain INTEGER,\n compressed_data TEXT,\n created_at INTEGER DEFAULT (unixepoch())\n )\n `);\n }\n\n // Create tool_calls table\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS tool_calls (\n id TEXT PRIMARY KEY,\n trace_id TEXT NOT NULL,\n tool TEXT NOT NULL,\n arguments TEXT,\n timestamp INTEGER NOT NULL,\n result TEXT,\n error TEXT,\n files_affected TEXT,\n duration INTEGER,\n sequence_number INTEGER NOT NULL,\n FOREIGN KEY (trace_id) REFERENCES traces(id) ON DELETE CASCADE\n )\n `);\n\n // Create indexes\n this.db.exec(`\n CREATE INDEX IF NOT EXISTS idx_traces_type ON traces(type);\n CREATE INDEX IF NOT EXISTS idx_traces_frame_id ON traces(frame_id);\n CREATE INDEX IF NOT EXISTS idx_traces_start_time ON traces(start_time);\n CREATE INDEX IF NOT EXISTS idx_traces_score ON traces(score);\n CREATE INDEX IF NOT EXISTS idx_tool_calls_trace_id ON tool_calls(trace_id);\n CREATE INDEX IF NOT EXISTS idx_tool_calls_timestamp ON tool_calls(timestamp);\n `);\n }\n\n /**\n * Save a trace to the database\n */\n saveTrace(trace: Trace): void {\n const traceStmt = this.db.prepare(`\n INSERT OR REPLACE INTO traces (\n id, type, score, summary, start_time, end_time,\n frame_id, user_id, files_modified, errors_encountered,\n decisions_recorded, causal_chain, compressed_data\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n const toolCallStmt = this.db.prepare(`\n INSERT OR REPLACE INTO tool_calls (\n id, trace_id, tool, arguments, timestamp, result,\n error, files_affected, duration, sequence_number\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n try {\n this.db.transaction(() => {\n // Save trace\n traceStmt.run(\n trace.id,\n trace.type,\n trace.score,\n trace.summary,\n trace.metadata.startTime,\n trace.metadata.endTime,\n trace.metadata.frameId || null,\n trace.metadata.userId || null,\n JSON.stringify(trace.metadata.filesModified),\n JSON.stringify(trace.metadata.errorsEncountered),\n JSON.stringify(trace.metadata.decisionsRecorded),\n trace.metadata.causalChain ? 1 : 0,\n trace.compressed ? JSON.stringify(trace.compressed) : null\n );\n\n // Save tool calls\n trace.tools.forEach((tool, index) => {\n toolCallStmt.run(\n tool.id,\n trace.id,\n tool.tool,\n tool.arguments ? JSON.stringify(tool.arguments) : null,\n tool.timestamp,\n tool.result ? JSON.stringify(tool.result) : null,\n tool.error || null,\n tool.filesAffected ? JSON.stringify(tool.filesAffected) : null,\n tool.duration || null,\n index\n );\n });\n })();\n\n logger.debug(\n `Saved trace ${trace.id} with ${trace.tools.length} tool calls`\n );\n } catch (error) {\n logger.error(`Failed to save trace ${trace.id}:`, error as Error);\n throw error;\n }\n }\n\n /**\n * Load a trace by ID\n */\n getTrace(id: string): Trace | null {\n const traceRow = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE id = ?\n `\n )\n .get(id) as any;\n\n if (!traceRow) {\n return null;\n }\n\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n }\n\n /**\n * Load all traces\n */\n getAllTraces(): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces ORDER BY start_time DESC\n `\n )\n .all() as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load traces by type\n */\n getTracesByType(type: TraceType): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE type = ? ORDER BY start_time DESC\n `\n )\n .all(type) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load traces by frame\n */\n getTracesByFrame(frameId: string): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE frame_id = ? ORDER BY start_time DESC\n `\n )\n .all(frameId) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load high-importance traces\n */\n getHighImportanceTraces(minScore: number = 0.7): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces WHERE score >= ? ORDER BY score DESC, start_time DESC\n `\n )\n .all(minScore) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Load error traces\n */\n getErrorTraces(): Trace[] {\n const traceRows = this.db\n .prepare(\n `\n SELECT * FROM traces \n WHERE type = ? OR errors_encountered != '[]'\n ORDER BY start_time DESC\n `\n )\n .all(TraceType.ERROR_RECOVERY) as any[];\n\n return traceRows.map((traceRow) => {\n const toolRows = this.db\n .prepare(\n `\n SELECT * FROM tool_calls WHERE trace_id = ? ORDER BY sequence_number\n `\n )\n .all(traceRow.id) as any[];\n\n return this.rowsToTrace(traceRow, toolRows);\n });\n }\n\n /**\n * Get trace statistics\n */\n getStatistics(): {\n totalTraces: number;\n tracesByType: Record<string, number>;\n averageScore: number;\n averageLength: number;\n errorRate: number;\n } {\n const stats = this.db\n .prepare(\n `\n SELECT \n COUNT(*) as total,\n AVG(score) as avg_score,\n AVG((\n SELECT COUNT(*) FROM tool_calls WHERE trace_id = traces.id\n )) as avg_length,\n SUM(CASE WHEN type = ? OR errors_encountered != '[]' THEN 1 ELSE 0 END) * 100.0 / COUNT(*) as error_rate\n FROM traces\n `\n )\n .get(TraceType.ERROR_RECOVERY) as any;\n\n const typeStats = this.db\n .prepare(\n `\n SELECT type, COUNT(*) as count\n FROM traces\n GROUP BY type\n `\n )\n .all() as any[];\n\n const tracesByType: Record<string, number> = {};\n typeStats.forEach((row) => {\n tracesByType[row.type] = row.count;\n });\n\n return {\n totalTraces: stats.total || 0,\n tracesByType,\n averageScore: stats.avg_score || 0,\n averageLength: stats.avg_length || 0,\n errorRate: stats.error_rate || 0,\n };\n }\n\n /**\n * Delete old traces\n */\n deleteOldTraces(olderThanMs: number): number {\n const cutoff = Date.now() - olderThanMs;\n const result = this.db\n .prepare(\n `\n DELETE FROM traces WHERE start_time < ?\n `\n )\n .run(cutoff);\n\n return result.changes;\n }\n\n /**\n * Convert database rows to Trace object\n */\n private rowsToTrace(traceRow: any, toolRows: any[]): Trace {\n const tools: ToolCall[] = toolRows.map((row) => ({\n id: row.id,\n tool: row.tool,\n arguments: row.arguments ? JSON.parse(row.arguments) : undefined,\n timestamp: row.timestamp,\n result: row.result ? JSON.parse(row.result) : undefined,\n error: row.error || undefined,\n filesAffected: row.files_affected\n ? JSON.parse(row.files_affected)\n : undefined,\n duration: row.duration || undefined,\n }));\n\n const metadata: TraceMetadata = {\n startTime: traceRow.start_time,\n endTime: traceRow.end_time,\n frameId: traceRow.frame_id || undefined,\n userId: traceRow.user_id || undefined,\n filesModified: JSON.parse(traceRow.files_modified || '[]'),\n errorsEncountered: JSON.parse(traceRow.errors_encountered || '[]'),\n decisionsRecorded: JSON.parse(traceRow.decisions_recorded || '[]'),\n causalChain: traceRow.causal_chain === 1,\n };\n\n const trace: Trace = {\n id: traceRow.id,\n type: traceRow.type as TraceType,\n tools,\n score: traceRow.score,\n summary: traceRow.summary,\n metadata,\n };\n\n if (traceRow.compressed_data) {\n trace.compressed = JSON.parse(traceRow.compressed_data);\n }\n\n return trace;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,136 @@
1
+ import { EventEmitter } from "events";
2
+ class AnalyticsPanel extends EventEmitter {
3
+ line;
4
+ // contrib.line type
5
+ currentMetric = "tokens";
6
+ data = null;
7
+ constructor(line) {
8
+ super();
9
+ this.line = line;
10
+ this.initializeUI();
11
+ }
12
+ initializeUI() {
13
+ this.line.screen.key(["m"], () => {
14
+ this.cycleMetric();
15
+ });
16
+ this.showTokenUsage();
17
+ }
18
+ cycleMetric() {
19
+ const metrics = ["tokens", "velocity", "quality", "performance"];
20
+ const currentIndex = metrics.indexOf(this.currentMetric);
21
+ this.currentMetric = metrics[(currentIndex + 1) % metrics.length];
22
+ switch (this.currentMetric) {
23
+ case "tokens":
24
+ this.showTokenUsage();
25
+ break;
26
+ case "velocity":
27
+ this.showVelocity();
28
+ break;
29
+ case "quality":
30
+ this.showQuality();
31
+ break;
32
+ case "performance":
33
+ this.showPerformance();
34
+ break;
35
+ }
36
+ }
37
+ showTokenUsage() {
38
+ if (!this.data) return;
39
+ const data = [{
40
+ title: "Token Usage",
41
+ x: this.data.tokens.labels.map((_, i) => i.toString()),
42
+ y: this.data.tokens.values,
43
+ style: { line: "yellow" }
44
+ }];
45
+ this.line.setData(data);
46
+ if (typeof this.line.setLabel === "function") {
47
+ this.line.setLabel(" \u{1F4C8} Analytics - Token Usage [m] cycle ");
48
+ }
49
+ this.line.screen.render();
50
+ }
51
+ showVelocity() {
52
+ if (!this.data) return;
53
+ const data = [{
54
+ title: "Task Velocity",
55
+ x: this.data.tasks.velocity.map((_, i) => `Sprint ${i + 1}`),
56
+ y: this.data.tasks.velocity,
57
+ style: { line: "green" }
58
+ }];
59
+ this.line.setData(data);
60
+ if (typeof this.line.setLabel === "function") {
61
+ this.line.setLabel(" \u{1F4C8} Analytics - Task Velocity [m] cycle ");
62
+ }
63
+ this.line.screen.render();
64
+ }
65
+ showQuality() {
66
+ if (!this.data) return;
67
+ const data = [
68
+ {
69
+ title: "Tests Passed",
70
+ x: ["1", "2", "3", "4", "5"],
71
+ y: [this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed],
72
+ style: { line: "green" }
73
+ },
74
+ {
75
+ title: "Coverage %",
76
+ x: ["1", "2", "3", "4", "5"],
77
+ y: [this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage],
78
+ style: { line: "blue" }
79
+ }
80
+ ];
81
+ this.line.setData(data);
82
+ if (typeof this.line.setLabel === "function") {
83
+ this.line.setLabel(" \u{1F4C8} Analytics - Code Quality [m] cycle ");
84
+ }
85
+ this.line.screen.render();
86
+ }
87
+ showPerformance() {
88
+ if (!this.data) return;
89
+ const data = [
90
+ {
91
+ title: "Response Time (ms)",
92
+ x: this.data.performance.avgResponseTime.map((_, i) => i.toString()),
93
+ y: this.data.performance.avgResponseTime,
94
+ style: { line: "cyan" }
95
+ },
96
+ {
97
+ title: "Error Rate (%)",
98
+ x: this.data.performance.errorRate.map((_, i) => i.toString()),
99
+ y: this.data.performance.errorRate.map((r) => r * 100),
100
+ style: { line: "red" }
101
+ }
102
+ ];
103
+ this.line.setData(data);
104
+ if (typeof this.line.setLabel === "function") {
105
+ this.line.setLabel(" \u{1F4C8} Analytics - Performance [m] cycle ");
106
+ }
107
+ this.line.screen.render();
108
+ }
109
+ update(data) {
110
+ this.data = data;
111
+ switch (this.currentMetric) {
112
+ case "tokens":
113
+ this.showTokenUsage();
114
+ break;
115
+ case "velocity":
116
+ this.showVelocity();
117
+ break;
118
+ case "quality":
119
+ this.showQuality();
120
+ break;
121
+ case "performance":
122
+ this.showPerformance();
123
+ break;
124
+ }
125
+ }
126
+ focus() {
127
+ this.emit("focused");
128
+ }
129
+ hasFocus() {
130
+ return false;
131
+ }
132
+ }
133
+ export {
134
+ AnalyticsPanel
135
+ };
136
+ //# sourceMappingURL=analytics-panel.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/features/tui/components/analytics-panel.ts"],
4
+ "sourcesContent": ["/**\n * Analytics Panel Component\n * Real-time charts and metrics visualization\n */\n\nimport contrib from 'blessed-contrib';\nimport { EventEmitter } from 'events';\nimport type { AnalyticsData } from '../types.js';\n\nexport class AnalyticsPanel extends EventEmitter {\n private line: any; // contrib.line type\n private currentMetric: 'tokens' | 'velocity' | 'quality' | 'performance' = 'tokens';\n private data: AnalyticsData | null = null;\n\n constructor(line: any) {\n super();\n this.line = line;\n this.initializeUI();\n }\n\n private initializeUI(): void {\n // Cycle through metrics\n this.line.screen.key(['m'], () => {\n this.cycleMetric();\n });\n\n // Set initial display\n this.showTokenUsage();\n }\n\n private cycleMetric(): void {\n const metrics: Array<typeof this.currentMetric> = ['tokens', 'velocity', 'quality', 'performance'];\n const currentIndex = metrics.indexOf(this.currentMetric);\n this.currentMetric = metrics[(currentIndex + 1) % metrics.length];\n \n switch (this.currentMetric) {\n case 'tokens':\n this.showTokenUsage();\n break;\n case 'velocity':\n this.showVelocity();\n break;\n case 'quality':\n this.showQuality();\n break;\n case 'performance':\n this.showPerformance();\n break;\n }\n }\n\n private showTokenUsage(): void {\n if (!this.data) return;\n \n const data = [{\n title: 'Token Usage',\n x: this.data.tokens.labels.map((_, i) => i.toString()),\n y: this.data.tokens.values,\n style: { line: 'yellow' }\n }];\n \n this.line.setData(data);\n if (typeof this.line.setLabel === 'function') {\n this.line.setLabel(' \uD83D\uDCC8 Analytics - Token Usage [m] cycle ');\n }\n this.line.screen.render();\n }\n\n private showVelocity(): void {\n if (!this.data) return;\n \n const data = [{\n title: 'Task Velocity',\n x: this.data.tasks.velocity.map((_, i) => `Sprint ${i + 1}`),\n y: this.data.tasks.velocity,\n style: { line: 'green' }\n }];\n \n this.line.setData(data);\n if (typeof this.line.setLabel === 'function') {\n this.line.setLabel(' \uD83D\uDCC8 Analytics - Task Velocity [m] cycle ');\n }\n this.line.screen.render();\n }\n\n private showQuality(): void {\n if (!this.data) return;\n \n const data = [\n {\n title: 'Tests Passed',\n x: ['1', '2', '3', '4', '5'],\n y: [this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed, this.data.quality.testsPassed],\n style: { line: 'green' }\n },\n {\n title: 'Coverage %',\n x: ['1', '2', '3', '4', '5'],\n y: [this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage, this.data.quality.coverage],\n style: { line: 'blue' }\n }\n ];\n \n this.line.setData(data);\n if (typeof this.line.setLabel === 'function') {\n this.line.setLabel(' \uD83D\uDCC8 Analytics - Code Quality [m] cycle ');\n }\n this.line.screen.render();\n }\n\n private showPerformance(): void {\n if (!this.data) return;\n \n const data = [\n {\n title: 'Response Time (ms)',\n x: this.data.performance.avgResponseTime.map((_, i) => i.toString()),\n y: this.data.performance.avgResponseTime,\n style: { line: 'cyan' }\n },\n {\n title: 'Error Rate (%)',\n x: this.data.performance.errorRate.map((_, i) => i.toString()),\n y: this.data.performance.errorRate.map(r => r * 100),\n style: { line: 'red' }\n }\n ];\n \n this.line.setData(data);\n if (typeof this.line.setLabel === 'function') {\n this.line.setLabel(' \uD83D\uDCC8 Analytics - Performance [m] cycle ');\n }\n this.line.screen.render();\n }\n\n public update(data: AnalyticsData): void {\n this.data = data;\n \n // Refresh current view\n switch (this.currentMetric) {\n case 'tokens':\n this.showTokenUsage();\n break;\n case 'velocity':\n this.showVelocity();\n break;\n case 'quality':\n this.showQuality();\n break;\n case 'performance':\n this.showPerformance();\n break;\n }\n }\n\n public focus(): void {\n // Line chart doesn't have traditional focus\n this.emit('focused');\n }\n\n public hasFocus(): boolean {\n return false; // Line charts don't take focus\n }\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }