@stackmemoryai/stackmemory 0.3.0 → 0.3.3

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 (736) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/codex-sm.js +48 -19
  3. package/dist/cli/codex-sm.js.map +2 -2
  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/dashboard.js +178 -0
  9. package/dist/cli/commands/dashboard.js.map +7 -0
  10. package/dist/cli/commands/handoff.js +125 -8
  11. package/dist/cli/commands/handoff.js.map +2 -2
  12. package/dist/cli/commands/linear-create.js +132 -0
  13. package/dist/cli/commands/linear-create.js.map +7 -0
  14. package/dist/cli/commands/linear-list.js +69 -0
  15. package/dist/cli/commands/linear-list.js.map +7 -0
  16. package/dist/cli/commands/linear-migrate.js +40 -0
  17. package/dist/cli/commands/linear-migrate.js.map +7 -0
  18. package/dist/cli/commands/linear.js +185 -36
  19. package/dist/cli/commands/linear.js.map +2 -2
  20. package/dist/cli/commands/monitor.js +309 -0
  21. package/dist/cli/commands/monitor.js.map +7 -0
  22. package/dist/cli/commands/quality.js +414 -0
  23. package/dist/cli/commands/quality.js.map +7 -0
  24. package/dist/cli/commands/storage.js +275 -0
  25. package/dist/cli/commands/storage.js.map +7 -0
  26. package/dist/cli/commands/tui.js +66 -0
  27. package/dist/cli/commands/tui.js.map +7 -0
  28. package/dist/cli/commands/workflow.js +134 -0
  29. package/dist/cli/commands/workflow.js.map +7 -0
  30. package/dist/cli/index.js +105 -9
  31. package/dist/cli/index.js.map +3 -3
  32. package/dist/core/analytics/team-analytics.js +374 -0
  33. package/dist/core/analytics/team-analytics.js.map +7 -0
  34. package/dist/core/context/context-bridge.js +234 -0
  35. package/dist/core/context/context-bridge.js.map +7 -0
  36. package/dist/core/context/dual-stack-manager.js +850 -0
  37. package/dist/core/context/dual-stack-manager.js.map +7 -0
  38. package/dist/core/context/frame-handoff-manager.js +384 -0
  39. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  40. package/dist/core/context/frame-manager.js +132 -12
  41. package/dist/core/context/frame-manager.js.map +2 -2
  42. package/dist/core/context/permission-manager.js +181 -0
  43. package/dist/core/context/permission-manager.js.map +7 -0
  44. package/dist/core/context/shared-context-layer.js +386 -0
  45. package/dist/core/context/shared-context-layer.js.map +7 -0
  46. package/dist/core/context/stack-merge-resolver.js +600 -0
  47. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  48. package/dist/core/context/validation.js +121 -0
  49. package/dist/core/context/validation.js.map +7 -0
  50. package/dist/core/database/connection-pool.js +266 -175
  51. package/dist/core/database/connection-pool.js.map +2 -2
  52. package/dist/core/database/database-adapter.js +51 -0
  53. package/dist/core/database/database-adapter.js.map +7 -0
  54. package/dist/core/database/migration-manager.js +514 -0
  55. package/dist/core/database/migration-manager.js.map +7 -0
  56. package/dist/core/database/paradedb-adapter.js +970 -0
  57. package/dist/core/database/paradedb-adapter.js.map +7 -0
  58. package/dist/core/database/query-router.js +421 -0
  59. package/dist/core/database/query-router.js.map +7 -0
  60. package/dist/core/database/sqlite-adapter.js +547 -0
  61. package/dist/core/database/sqlite-adapter.js.map +7 -0
  62. package/dist/core/errors/index.js +21 -1
  63. package/dist/core/errors/index.js.map +2 -2
  64. package/dist/core/frame/workflow-templates-stub.js +42 -0
  65. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  66. package/dist/core/frame/workflow-templates.js +276 -0
  67. package/dist/core/frame/workflow-templates.js.map +7 -0
  68. package/dist/core/merge/conflict-detector.js +5 -2
  69. package/dist/core/merge/conflict-detector.js.map +2 -2
  70. package/dist/core/merge/resolution-engine.js +3 -14
  71. package/dist/core/merge/resolution-engine.js.map +2 -2
  72. package/dist/core/merge/stack-diff.js.map +2 -2
  73. package/dist/core/monitoring/logger.js +18 -3
  74. package/dist/core/monitoring/logger.js.map +2 -2
  75. package/dist/core/monitoring/session-monitor.js +296 -0
  76. package/dist/core/monitoring/session-monitor.js.map +7 -0
  77. package/dist/core/retrieval/context-retriever.js +475 -0
  78. package/dist/core/retrieval/context-retriever.js.map +7 -0
  79. package/dist/core/retrieval/graph-retrieval.js +658 -0
  80. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  82. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  83. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  84. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  85. package/dist/core/session/clear-survival-stub.js +49 -0
  86. package/dist/core/session/clear-survival-stub.js.map +7 -0
  87. package/dist/core/session/clear-survival.js +426 -0
  88. package/dist/core/session/clear-survival.js.map +7 -0
  89. package/dist/core/session/handoff-generator.js +339 -0
  90. package/dist/core/session/handoff-generator.js.map +7 -0
  91. package/dist/core/session/session-manager.js +61 -26
  92. package/dist/core/session/session-manager.js.map +3 -3
  93. package/dist/core/skills/index.js +3 -0
  94. package/dist/core/skills/index.js.map +7 -0
  95. package/dist/core/skills/skill-storage.js +749 -0
  96. package/dist/core/skills/skill-storage.js.map +7 -0
  97. package/dist/core/skills/types.js +189 -0
  98. package/dist/core/skills/types.js.map +7 -0
  99. package/dist/core/storage/railway-optimized-storage.js +550 -0
  100. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  101. package/dist/core/storage/remote-storage.js +456 -0
  102. package/dist/core/storage/remote-storage.js.map +7 -0
  103. package/dist/core/trace/trace-detector.js +136 -5
  104. package/dist/core/trace/trace-detector.js.map +2 -2
  105. package/dist/core/trace/trace-store.js.map +2 -2
  106. package/dist/features/tui/components/analytics-panel.js +136 -0
  107. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  108. package/dist/features/tui/components/frame-visualizer.js +377 -0
  109. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  110. package/dist/features/tui/components/pr-tracker.js +123 -0
  111. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  112. package/dist/features/tui/components/session-monitor.js +286 -0
  113. package/dist/features/tui/components/session-monitor.js.map +7 -0
  114. package/dist/features/tui/components/subagent-fleet.js +388 -0
  115. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  116. package/dist/features/tui/components/task-board.js +475 -0
  117. package/dist/features/tui/components/task-board.js.map +7 -0
  118. package/dist/features/tui/index.js +397 -0
  119. package/dist/features/tui/index.js.map +7 -0
  120. package/dist/features/tui/services/data-service.js +654 -0
  121. package/dist/features/tui/services/data-service.js.map +7 -0
  122. package/dist/features/tui/services/websocket-client.js +149 -0
  123. package/dist/features/tui/services/websocket-client.js.map +7 -0
  124. package/dist/features/tui/terminal-compat.js +205 -0
  125. package/dist/features/tui/terminal-compat.js.map +7 -0
  126. package/dist/features/tui/types.js +1 -0
  127. package/dist/features/tui/types.js.map +7 -0
  128. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  129. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  131. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  132. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  133. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  134. package/dist/integrations/linear/client.js +22 -4
  135. package/dist/integrations/linear/client.js.map +2 -2
  136. package/dist/integrations/linear/migration.js +299 -0
  137. package/dist/integrations/linear/migration.js.map +7 -0
  138. package/dist/integrations/linear/oauth-server.js +396 -0
  139. package/dist/integrations/linear/oauth-server.js.map +7 -0
  140. package/dist/integrations/linear/rest-client.js +199 -0
  141. package/dist/integrations/linear/rest-client.js.map +7 -0
  142. package/dist/integrations/linear/sync.js +14 -2
  143. package/dist/integrations/linear/sync.js.map +2 -2
  144. package/dist/integrations/linear/webhook-handler.js +200 -0
  145. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  146. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  147. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  148. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  149. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  150. package/dist/integrations/mcp/refactored-server.js +31 -3
  151. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  152. package/dist/integrations/mcp/server.js +25 -7
  153. package/dist/integrations/mcp/server.js.map +2 -2
  154. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  155. package/dist/models/user.model.js +3 -0
  156. package/dist/models/user.model.js.map +2 -2
  157. package/dist/services/context-service.js.map +2 -2
  158. package/dist/utils/formatting.js +58 -0
  159. package/dist/utils/formatting.js.map +7 -0
  160. package/package.json +24 -5
  161. package/dist/cli/__tests__/index.test.js +0 -290
  162. package/dist/cli/__tests__/index.test.js.map +0 -7
  163. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  164. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  165. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  166. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  168. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  169. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  170. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  171. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  172. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  173. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  174. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  176. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  177. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  178. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  179. package/dist/core/trace/trace-detector.test.js +0 -401
  180. package/dist/core/trace/trace-detector.test.js.map +0 -7
  181. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  182. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  184. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  185. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  186. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  187. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  188. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  189. package/dist/scripts/benchmark-performance.d.ts +0 -7
  190. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  191. package/dist/scripts/benchmark-performance.js +0 -44
  192. package/dist/scripts/benchmark-performance.js.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  194. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  195. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  196. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  198. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  199. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  200. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  201. package/dist/scripts/initialize.d.ts +0 -6
  202. package/dist/scripts/initialize.d.ts.map +0 -1
  203. package/dist/scripts/initialize.js +0 -93
  204. package/dist/scripts/initialize.js.map +0 -1
  205. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  206. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  207. package/dist/scripts/list-linear-tasks.js +0 -121
  208. package/dist/scripts/list-linear-tasks.js.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  210. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  211. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  212. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  213. package/dist/scripts/show-linear-summary.d.ts +0 -6
  214. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  215. package/dist/scripts/show-linear-summary.js +0 -120
  216. package/dist/scripts/show-linear-summary.js.map +0 -1
  217. package/dist/scripts/status.d.ts +0 -6
  218. package/dist/scripts/status.d.ts.map +0 -1
  219. package/dist/scripts/status.js +0 -101
  220. package/dist/scripts/status.js.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  222. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  223. package/dist/src/agents/core/agent-task-manager.js +0 -504
  224. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  226. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  227. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  228. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  230. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  231. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  232. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  234. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  236. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  237. package/dist/src/cli/auto-detect.d.ts +0 -61
  238. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  239. package/dist/src/cli/auto-detect.js +0 -350
  240. package/dist/src/cli/auto-detect.js.map +0 -1
  241. package/dist/src/cli/browser-test.d.ts +0 -6
  242. package/dist/src/cli/browser-test.d.ts.map +0 -1
  243. package/dist/src/cli/browser-test.js +0 -32
  244. package/dist/src/cli/browser-test.js.map +0 -1
  245. package/dist/src/cli/claude-sm.d.ts +0 -7
  246. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  247. package/dist/src/cli/claude-sm.js +0 -412
  248. package/dist/src/cli/claude-sm.js.map +0 -1
  249. package/dist/src/cli/commands/agent.d.ts +0 -9
  250. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  251. package/dist/src/cli/commands/agent.js +0 -303
  252. package/dist/src/cli/commands/agent.js.map +0 -1
  253. package/dist/src/cli/commands/config.d.ts +0 -6
  254. package/dist/src/cli/commands/config.d.ts.map +0 -1
  255. package/dist/src/cli/commands/config.js +0 -224
  256. package/dist/src/cli/commands/config.js.map +0 -1
  257. package/dist/src/cli/commands/context.d.ts +0 -7
  258. package/dist/src/cli/commands/context.d.ts.map +0 -1
  259. package/dist/src/cli/commands/context.js +0 -365
  260. package/dist/src/cli/commands/context.js.map +0 -1
  261. package/dist/src/cli/commands/handoff.d.ts +0 -6
  262. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  263. package/dist/src/cli/commands/handoff.js +0 -212
  264. package/dist/src/cli/commands/handoff.js.map +0 -1
  265. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  266. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  267. package/dist/src/cli/commands/linear-test.js +0 -123
  268. package/dist/src/cli/commands/linear-test.js.map +0 -1
  269. package/dist/src/cli/commands/linear.d.ts +0 -6
  270. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  271. package/dist/src/cli/commands/linear.js +0 -393
  272. package/dist/src/cli/commands/linear.js.map +0 -1
  273. package/dist/src/cli/commands/log.d.ts +0 -7
  274. package/dist/src/cli/commands/log.d.ts.map +0 -1
  275. package/dist/src/cli/commands/log.js +0 -168
  276. package/dist/src/cli/commands/log.js.map +0 -1
  277. package/dist/src/cli/commands/onboard.d.ts +0 -8
  278. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  279. package/dist/src/cli/commands/onboard.js +0 -363
  280. package/dist/src/cli/commands/onboard.js.map +0 -1
  281. package/dist/src/cli/commands/projects.d.ts +0 -8
  282. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  283. package/dist/src/cli/commands/projects.js +0 -220
  284. package/dist/src/cli/commands/projects.js.map +0 -1
  285. package/dist/src/cli/commands/search.d.ts +0 -7
  286. package/dist/src/cli/commands/search.d.ts.map +0 -1
  287. package/dist/src/cli/commands/search.js +0 -162
  288. package/dist/src/cli/commands/search.js.map +0 -1
  289. package/dist/src/cli/commands/session.d.ts +0 -7
  290. package/dist/src/cli/commands/session.d.ts.map +0 -1
  291. package/dist/src/cli/commands/session.js +0 -222
  292. package/dist/src/cli/commands/session.js.map +0 -1
  293. package/dist/src/cli/commands/tasks.d.ts +0 -7
  294. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  295. package/dist/src/cli/commands/tasks.js +0 -229
  296. package/dist/src/cli/commands/tasks.js.map +0 -1
  297. package/dist/src/cli/commands/webhook.d.ts +0 -3
  298. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  299. package/dist/src/cli/commands/webhook.js +0 -157
  300. package/dist/src/cli/commands/webhook.js.map +0 -1
  301. package/dist/src/cli/commands/worktree.d.ts +0 -8
  302. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  303. package/dist/src/cli/commands/worktree.js +0 -339
  304. package/dist/src/cli/commands/worktree.js.map +0 -1
  305. package/dist/src/cli/index.d.ts +0 -8
  306. package/dist/src/cli/index.d.ts.map +0 -1
  307. package/dist/src/cli/index.js +0 -995
  308. package/dist/src/cli/index.js.map +0 -1
  309. package/dist/src/cli/utils/viewer.d.ts +0 -3
  310. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  311. package/dist/src/cli/utils/viewer.js +0 -91
  312. package/dist/src/cli/utils/viewer.js.map +0 -1
  313. package/dist/src/core/config/config-manager.d.ts +0 -95
  314. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  315. package/dist/src/core/config/config-manager.js +0 -359
  316. package/dist/src/core/config/config-manager.js.map +0 -1
  317. package/dist/src/core/config/types.d.ts +0 -72
  318. package/dist/src/core/config/types.d.ts.map +0 -1
  319. package/dist/src/core/config/types.js +0 -127
  320. package/dist/src/core/config/types.js.map +0 -1
  321. package/dist/src/core/context/auto-context.d.ts +0 -22
  322. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  323. package/dist/src/core/context/auto-context.js +0 -77
  324. package/dist/src/core/context/auto-context.js.map +0 -1
  325. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  326. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  327. package/dist/src/core/context/compaction-handler.js +0 -306
  328. package/dist/src/core/context/compaction-handler.js.map +0 -1
  329. package/dist/src/core/context/frame-database.d.ts +0 -59
  330. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  331. package/dist/src/core/context/frame-database.js +0 -333
  332. package/dist/src/core/context/frame-database.js.map +0 -1
  333. package/dist/src/core/context/frame-digest.d.ts +0 -59
  334. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  335. package/dist/src/core/context/frame-digest.js +0 -264
  336. package/dist/src/core/context/frame-digest.js.map +0 -1
  337. package/dist/src/core/context/frame-manager.d.ts +0 -112
  338. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-manager.js +0 -600
  340. package/dist/src/core/context/frame-manager.js.map +0 -1
  341. package/dist/src/core/context/frame-stack.d.ts +0 -85
  342. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-stack.js +0 -287
  344. package/dist/src/core/context/frame-stack.js.map +0 -1
  345. package/dist/src/core/context/frame-types.d.ts +0 -67
  346. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-types.js +0 -6
  348. package/dist/src/core/context/frame-types.js.map +0 -1
  349. package/dist/src/core/context/index.d.ts +0 -11
  350. package/dist/src/core/context/index.d.ts.map +0 -1
  351. package/dist/src/core/context/index.js +0 -14
  352. package/dist/src/core/context/index.js.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  354. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  355. package/dist/src/core/context/model-aware-compaction.js +0 -616
  356. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  358. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  359. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  360. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  361. package/dist/src/core/database/batch-operations.d.ts +0 -118
  362. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  363. package/dist/src/core/database/batch-operations.js +0 -339
  364. package/dist/src/core/database/batch-operations.js.map +0 -1
  365. package/dist/src/core/database/connection-pool.d.ts +0 -79
  366. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  367. package/dist/src/core/database/connection-pool.js +0 -236
  368. package/dist/src/core/database/connection-pool.js.map +0 -1
  369. package/dist/src/core/database/query-cache.d.ts +0 -135
  370. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  371. package/dist/src/core/database/query-cache.js +0 -294
  372. package/dist/src/core/database/query-cache.js.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  374. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  375. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  376. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  378. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  379. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  380. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  382. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  383. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  384. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  385. package/dist/src/core/digest/index.d.ts +0 -9
  386. package/dist/src/core/digest/index.d.ts.map +0 -1
  387. package/dist/src/core/digest/index.js +0 -9
  388. package/dist/src/core/digest/index.js.map +0 -1
  389. package/dist/src/core/digest/types.d.ts +0 -154
  390. package/dist/src/core/digest/types.d.ts.map +0 -1
  391. package/dist/src/core/digest/types.js +0 -18
  392. package/dist/src/core/digest/types.js.map +0 -1
  393. package/dist/src/core/errors/index.d.ts +0 -143
  394. package/dist/src/core/errors/index.d.ts.map +0 -1
  395. package/dist/src/core/errors/index.js +0 -282
  396. package/dist/src/core/errors/index.js.map +0 -1
  397. package/dist/src/core/errors/recovery.d.ts +0 -86
  398. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  399. package/dist/src/core/errors/recovery.js +0 -274
  400. package/dist/src/core/errors/recovery.js.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  402. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  403. package/dist/src/core/merge/conflict-detector.js +0 -468
  404. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  405. package/dist/src/core/merge/index.d.ts +0 -9
  406. package/dist/src/core/merge/index.d.ts.map +0 -1
  407. package/dist/src/core/merge/index.js +0 -9
  408. package/dist/src/core/merge/index.js.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  410. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  411. package/dist/src/core/merge/resolution-engine.js +0 -573
  412. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  413. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  414. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  415. package/dist/src/core/merge/stack-diff.js +0 -516
  416. package/dist/src/core/merge/stack-diff.js.map +0 -1
  417. package/dist/src/core/merge/types.d.ts +0 -110
  418. package/dist/src/core/merge/types.d.ts.map +0 -1
  419. package/dist/src/core/merge/types.js +0 -6
  420. package/dist/src/core/merge/types.js.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  422. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  423. package/dist/src/core/monitoring/error-handler.js +0 -212
  424. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  425. package/dist/src/core/monitoring/logger.d.ts +0 -24
  426. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  427. package/dist/src/core/monitoring/logger.js +0 -126
  428. package/dist/src/core/monitoring/logger.js.map +0 -1
  429. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  430. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/metrics.js +0 -152
  432. package/dist/src/core/monitoring/metrics.js.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  434. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  436. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  437. package/dist/src/core/performance/context-cache.d.ts +0 -109
  438. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  439. package/dist/src/core/performance/context-cache.js +0 -280
  440. package/dist/src/core/performance/context-cache.js.map +0 -1
  441. package/dist/src/core/performance/index.d.ts +0 -3
  442. package/dist/src/core/performance/index.d.ts.map +0 -1
  443. package/dist/src/core/performance/index.js +0 -3
  444. package/dist/src/core/performance/index.js.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  446. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  447. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  448. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  449. package/dist/src/core/performance/monitor.d.ts +0 -48
  450. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  451. package/dist/src/core/performance/monitor.js +0 -226
  452. package/dist/src/core/performance/monitor.js.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  454. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  455. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  456. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  458. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  459. package/dist/src/core/performance/performance-benchmark.js +0 -290
  460. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  462. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  463. package/dist/src/core/performance/performance-profiler.js +0 -346
  464. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  466. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  467. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  468. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  470. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  471. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  472. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  473. package/dist/src/core/projects/project-manager.d.ts +0 -130
  474. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  475. package/dist/src/core/projects/project-manager.js +0 -709
  476. package/dist/src/core/projects/project-manager.js.map +0 -1
  477. package/dist/src/core/query/query-parser.d.ts +0 -109
  478. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  479. package/dist/src/core/query/query-parser.js +0 -415
  480. package/dist/src/core/query/query-parser.js.map +0 -1
  481. package/dist/src/core/query/query-templates.d.ts +0 -44
  482. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  483. package/dist/src/core/query/query-templates.js +0 -326
  484. package/dist/src/core/query/query-templates.js.map +0 -1
  485. package/dist/src/core/retrieval/index.d.ts +0 -8
  486. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  487. package/dist/src/core/retrieval/index.js +0 -8
  488. package/dist/src/core/retrieval/index.js.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  490. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  491. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  492. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  494. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/summary-generator.js +0 -622
  496. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  497. package/dist/src/core/retrieval/types.d.ts +0 -257
  498. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/types.js +0 -18
  500. package/dist/src/core/retrieval/types.js.map +0 -1
  501. package/dist/src/core/session/index.d.ts +0 -2
  502. package/dist/src/core/session/index.d.ts.map +0 -1
  503. package/dist/src/core/session/index.js +0 -2
  504. package/dist/src/core/session/index.js.map +0 -1
  505. package/dist/src/core/session/session-manager.d.ts +0 -69
  506. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  507. package/dist/src/core/session/session-manager.js +0 -311
  508. package/dist/src/core/session/session-manager.js.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  510. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  511. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  512. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  514. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  515. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  516. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  517. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  518. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  519. package/dist/src/core/trace/debug-trace.js +0 -402
  520. package/dist/src/core/trace/debug-trace.js.map +0 -1
  521. package/dist/src/core/trace/error-test.d.ts +0 -6
  522. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  523. package/dist/src/core/trace/error-test.js +0 -128
  524. package/dist/src/core/trace/error-test.js.map +0 -1
  525. package/dist/src/core/trace/index.d.ts +0 -25
  526. package/dist/src/core/trace/index.d.ts.map +0 -1
  527. package/dist/src/core/trace/index.js +0 -121
  528. package/dist/src/core/trace/index.js.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  530. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  531. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  532. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  533. package/dist/src/core/trace/performance-test.d.ts +0 -6
  534. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  535. package/dist/src/core/trace/performance-test.js +0 -111
  536. package/dist/src/core/trace/performance-test.js.map +0 -1
  537. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  538. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  539. package/dist/src/core/trace/trace-demo.js +0 -154
  540. package/dist/src/core/trace/trace-demo.js.map +0 -1
  541. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  542. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  544. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  545. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  546. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  547. package/dist/src/core/trace/trace-detector.js +0 -425
  548. package/dist/src/core/trace/trace-detector.js.map +0 -1
  549. package/dist/src/core/trace/trace-store.d.ts +0 -60
  550. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-store.js +0 -323
  552. package/dist/src/core/trace/trace-store.js.map +0 -1
  553. package/dist/src/core/trace/types.d.ts +0 -81
  554. package/dist/src/core/trace/types.d.ts.map +0 -1
  555. package/dist/src/core/trace/types.js +0 -70
  556. package/dist/src/core/trace/types.js.map +0 -1
  557. package/dist/src/core/types.d.ts +0 -35
  558. package/dist/src/core/types.d.ts.map +0 -1
  559. package/dist/src/core/types.js +0 -2
  560. package/dist/src/core/types.js.map +0 -1
  561. package/dist/src/core/utils/update-checker.d.ts +0 -38
  562. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  563. package/dist/src/core/utils/update-checker.js +0 -213
  564. package/dist/src/core/utils/update-checker.js.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  566. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  567. package/dist/src/core/worktree/worktree-manager.js +0 -456
  568. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  570. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  571. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  572. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  574. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  575. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  576. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  577. package/dist/src/features/analytics/index.d.ts +0 -12
  578. package/dist/src/features/analytics/index.d.ts.map +0 -1
  579. package/dist/src/features/analytics/index.js +0 -11
  580. package/dist/src/features/analytics/index.js.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  582. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  583. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  584. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  586. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  587. package/dist/src/features/analytics/types/metrics.js +0 -2
  588. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  590. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  591. package/dist/src/features/browser/browser-mcp.js +0 -459
  592. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  594. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  595. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  596. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  598. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  599. package/dist/src/features/tasks/task-aware-context.js +0 -412
  600. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  601. package/dist/src/index.d.ts +0 -21
  602. package/dist/src/index.d.ts.map +0 -1
  603. package/dist/src/index.js +0 -9
  604. package/dist/src/index.js.map +0 -1
  605. package/dist/src/integrations/linear/auth.d.ts +0 -99
  606. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  607. package/dist/src/integrations/linear/auth.js +0 -319
  608. package/dist/src/integrations/linear/auth.js.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  610. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  611. package/dist/src/integrations/linear/auto-sync.js +0 -268
  612. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  613. package/dist/src/integrations/linear/client.d.ts +0 -127
  614. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/client.js +0 -446
  616. package/dist/src/integrations/linear/client.js.map +0 -1
  617. package/dist/src/integrations/linear/config.d.ts +0 -51
  618. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/config.js +0 -103
  620. package/dist/src/integrations/linear/config.js.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  622. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/sync-manager.js +0 -235
  624. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  626. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/sync-service.js +0 -217
  628. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  629. package/dist/src/integrations/linear/sync.d.ts +0 -125
  630. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync.js +0 -563
  632. package/dist/src/integrations/linear/sync.js.map +0 -1
  633. package/dist/src/integrations/linear/types.d.ts +0 -90
  634. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/types.js +0 -2
  636. package/dist/src/integrations/linear/types.js.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  638. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/webhook-server.js +0 -190
  640. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  641. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  642. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/webhook.js +0 -291
  644. package/dist/src/integrations/linear/webhook.js.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  646. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  648. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  650. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  652. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  656. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  658. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  660. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  664. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/index.d.ts +0 -13
  666. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/index.js +0 -17
  668. package/dist/src/integrations/mcp/index.js.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  670. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  672. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  673. package/dist/src/integrations/mcp/server.d.ts +0 -54
  674. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/server.js +0 -1616
  676. package/dist/src/integrations/mcp/server.js.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  678. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  680. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  682. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/trace-test.js +0 -54
  684. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  688. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  690. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  692. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  696. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  698. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  699. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  700. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  702. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  703. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  704. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  705. package/dist/src/models/user.model.d.ts +0 -62
  706. package/dist/src/models/user.model.d.ts.map +0 -1
  707. package/dist/src/models/user.model.js +0 -311
  708. package/dist/src/models/user.model.js.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  710. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  711. package/dist/src/servers/production/auth-middleware.js +0 -558
  712. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  713. package/dist/src/servers/railway/index.d.ts +0 -7
  714. package/dist/src/servers/railway/index.d.ts.map +0 -1
  715. package/dist/src/servers/railway/index.js +0 -401
  716. package/dist/src/servers/railway/index.js.map +0 -1
  717. package/dist/src/services/config-service.d.ts +0 -44
  718. package/dist/src/services/config-service.d.ts.map +0 -1
  719. package/dist/src/services/config-service.js +0 -61
  720. package/dist/src/services/config-service.js.map +0 -1
  721. package/dist/src/services/context-service.d.ts +0 -17
  722. package/dist/src/services/context-service.d.ts.map +0 -1
  723. package/dist/src/services/context-service.js +0 -173
  724. package/dist/src/services/context-service.js.map +0 -1
  725. package/dist/src/types/task.d.ts +0 -27
  726. package/dist/src/types/task.d.ts.map +0 -1
  727. package/dist/src/types/task.js +0 -2
  728. package/dist/src/types/task.js.map +0 -1
  729. package/dist/src/utils/logger.d.ts +0 -13
  730. package/dist/src/utils/logger.d.ts.map +0 -1
  731. package/dist/src/utils/logger.js +0 -52
  732. package/dist/src/utils/logger.js.map +0 -1
  733. package/dist/src/validation/schemas.d.ts +0 -633
  734. package/dist/src/validation/schemas.d.ts.map +0 -1
  735. package/dist/src/validation/schemas.js +0 -347
  736. package/dist/src/validation/schemas.js.map +0 -1
@@ -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": "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",
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": "AAKA;AAAA,EAGE;AAAA,OAIK;AACP,SAAS,cAAc;AAEhB,MAAM,WAAW;AAAA,EACd;AAAA,EAER,YAAY,IAAuB;AACjC,SAAK,KAAK;AACV,SAAK,iBAAiB;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAyB;AAE/B,UAAM,iBAAiB,KAAK,GACzB;AAAA,MACC;AAAA;AAAA;AAAA;AAAA,IAIF,EACC,IAAI;AAGP,QAAI,gBAAgB;AAClB,WAAK,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAkBZ;AAAA,IACH,OAAO;AAEL,WAAK,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAiBZ;AAAA,IACH;AAGA,SAAK,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAcZ;AAGD,SAAK,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOZ;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAAoB;AAC5B,UAAM,YAAY,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMjC;AAED,UAAM,eAAe,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,KAKpC;AAED,QAAI;AACF,WAAK,GAAG,YAAY,MAAM;AAExB,kBAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,SAAS;AAAA,UACf,MAAM,SAAS;AAAA,UACf,MAAM,SAAS,WAAW;AAAA,UAC1B,MAAM,SAAS,UAAU;AAAA,UACzB,KAAK,UAAU,MAAM,SAAS,aAAa;AAAA,UAC3C,KAAK,UAAU,MAAM,SAAS,iBAAiB;AAAA,UAC/C,KAAK,UAAU,MAAM,SAAS,iBAAiB;AAAA,UAC/C,MAAM,SAAS,cAAc,IAAI;AAAA,UACjC,MAAM,aAAa,KAAK,UAAU,MAAM,UAAU,IAAI;AAAA,QACxD;AAGA,cAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AACnC,uBAAa;AAAA,YACX,KAAK;AAAA,YACL,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK,YAAY,KAAK,UAAU,KAAK,SAAS,IAAI;AAAA,YAClD,KAAK;AAAA,YACL,KAAK,SAAS,KAAK,UAAU,KAAK,MAAM,IAAI;AAAA,YAC5C,KAAK,SAAS;AAAA,YACd,KAAK,gBAAgB,KAAK,UAAU,KAAK,aAAa,IAAI;AAAA,YAC1D,KAAK,YAAY;AAAA,YACjB;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH,CAAC,EAAE;AAEH,aAAO;AAAA,QACL,eAAe,MAAM,EAAE,SAAS,MAAM,MAAM,MAAM;AAAA,MACpD;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,wBAAwB,MAAM,EAAE,KAAK,KAAc;AAChE,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,IAA0B;AACjC,UAAM,WAAW,KAAK,GACnB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,EAAE;AAET,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,KAAK,GACnB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,EAAE;AAET,WAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI;AAEP,WAAO,UAAU,IAAI,CAAC,aAAa;AACjC,YAAM,WAAW,KAAK,GACnB;AAAA,QACC;AAAA;AAAA;AAAA,MAGF,EACC,IAAI,SAAS,EAAE;AAElB,aAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,MAA0B;AACxC,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,IAAI;AAEX,WAAO,UAAU,IAAI,CAAC,aAAa;AACjC,YAAM,WAAW,KAAK,GACnB;AAAA,QACC;AAAA;AAAA;AAAA,MAGF,EACC,IAAI,SAAS,EAAE;AAElB,aAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,SAA0B;AACzC,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,OAAO;AAEd,WAAO,UAAU,IAAI,CAAC,aAAa;AACjC,YAAM,WAAW,KAAK,GACnB;AAAA,QACC;AAAA;AAAA;AAAA,MAGF,EACC,IAAI,SAAS,EAAE;AAElB,aAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,WAAmB,KAAc;AACvD,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,QAAQ;AAEf,WAAO,UAAU,IAAI,CAAC,aAAa;AACjC,YAAM,WAAW,KAAK,GACnB;AAAA,QACC;AAAA;AAAA;AAAA,MAGF,EACC,IAAI,SAAS,EAAE;AAElB,aAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,iBAA0B;AACxB,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKF,EACC,IAAI,UAAU,cAAc;AAE/B,WAAO,UAAU,IAAI,CAAC,aAAa;AACjC,YAAM,WAAW,KAAK,GACnB;AAAA,QACC;AAAA;AAAA;AAAA,MAGF,EACC,IAAI,SAAS,EAAE;AAElB,aAAO,KAAK,YAAY,UAAU,QAAQ;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,gBAME;AACA,UAAM,QAAQ,KAAK,GAChB;AAAA,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUF,EACC,IAAI,UAAU,cAAc;AAE/B,UAAM,YAAY,KAAK,GACpB;AAAA,MACC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKF,EACC,IAAI;AAEP,UAAM,eAAuC,CAAC;AAC9C,cAAU,QAAQ,CAAC,QAAQ;AACzB,mBAAa,IAAI,IAAI,IAAI,IAAI;AAAA,IAC/B,CAAC;AAED,WAAO;AAAA,MACL,aAAa,MAAM,SAAS;AAAA,MAC5B;AAAA,MACA,cAAc,MAAM,aAAa;AAAA,MACjC,eAAe,MAAM,cAAc;AAAA,MACnC,WAAW,MAAM,cAAc;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,aAA6B;AAC3C,UAAM,SAAS,KAAK,IAAI,IAAI;AAC5B,UAAM,SAAS,KAAK,GACjB;AAAA,MACC;AAAA;AAAA;AAAA,IAGF,EACC,IAAI,MAAM;AAEb,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,UAAe,UAAwB;AACzD,UAAM,QAAoB,SAAS,IAAI,CAAC,SAAS;AAAA,MAC/C,IAAI,IAAI;AAAA,MACR,MAAM,IAAI;AAAA,MACV,WAAW,IAAI,YAAY,KAAK,MAAM,IAAI,SAAS,IAAI;AAAA,MACvD,WAAW,IAAI;AAAA,MACf,QAAQ,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,IAAI;AAAA,MAC9C,OAAO,IAAI,SAAS;AAAA,MACpB,eAAe,IAAI,iBACf,KAAK,MAAM,IAAI,cAAc,IAC7B;AAAA,MACJ,UAAU,IAAI,YAAY;AAAA,IAC5B,EAAE;AAEF,UAAM,WAA0B;AAAA,MAC9B,WAAW,SAAS;AAAA,MACpB,SAAS,SAAS;AAAA,MAClB,SAAS,SAAS,YAAY;AAAA,MAC9B,QAAQ,SAAS,WAAW;AAAA,MAC5B,eAAe,KAAK,MAAM,SAAS,kBAAkB,IAAI;AAAA,MACzD,mBAAmB,KAAK,MAAM,SAAS,sBAAsB,IAAI;AAAA,MACjE,mBAAmB,KAAK,MAAM,SAAS,sBAAsB,IAAI;AAAA,MACjE,aAAa,SAAS,iBAAiB;AAAA,IACzC;AAEA,UAAM,QAAe;AAAA,MACnB,IAAI,SAAS;AAAA,MACb,MAAM,SAAS;AAAA,MACf;AAAA,MACA,OAAO,SAAS;AAAA,MAChB,SAAS,SAAS;AAAA,MAClB;AAAA,IACF;AAEA,QAAI,SAAS,iBAAiB;AAC5B,YAAM,aAAa,KAAK,MAAM,SAAS,eAAe;AAAA,IACxD;AAEA,WAAO;AAAA,EACT;AACF;",
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
+ }