@stackmemoryai/stackmemory 0.3.1 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (744) hide show
  1. package/README.md +69 -288
  2. package/dist/cli/commands/chromadb.js +267 -0
  3. package/dist/cli/commands/chromadb.js.map +7 -0
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/context.js +15 -5
  9. package/dist/cli/commands/context.js.map +2 -2
  10. package/dist/cli/commands/dashboard.js +178 -0
  11. package/dist/cli/commands/dashboard.js.map +7 -0
  12. package/dist/cli/commands/handoff.js +125 -8
  13. package/dist/cli/commands/handoff.js.map +2 -2
  14. package/dist/cli/commands/linear-create.js +132 -0
  15. package/dist/cli/commands/linear-create.js.map +7 -0
  16. package/dist/cli/commands/linear-list.js +69 -0
  17. package/dist/cli/commands/linear-list.js.map +7 -0
  18. package/dist/cli/commands/linear-migrate.js +40 -0
  19. package/dist/cli/commands/linear-migrate.js.map +7 -0
  20. package/dist/cli/commands/linear.js +185 -36
  21. package/dist/cli/commands/linear.js.map +2 -2
  22. package/dist/cli/commands/monitor.js +309 -0
  23. package/dist/cli/commands/monitor.js.map +7 -0
  24. package/dist/cli/commands/quality.js +414 -0
  25. package/dist/cli/commands/quality.js.map +7 -0
  26. package/dist/cli/commands/skills.js +262 -0
  27. package/dist/cli/commands/skills.js.map +7 -0
  28. package/dist/cli/commands/storage.js +275 -0
  29. package/dist/cli/commands/storage.js.map +7 -0
  30. package/dist/cli/commands/tui.js +66 -0
  31. package/dist/cli/commands/tui.js.map +7 -0
  32. package/dist/cli/commands/workflow.js +134 -0
  33. package/dist/cli/commands/workflow.js.map +7 -0
  34. package/dist/cli/index.js +109 -8
  35. package/dist/cli/index.js.map +3 -3
  36. package/dist/core/analytics/team-analytics.js +374 -0
  37. package/dist/core/analytics/team-analytics.js.map +7 -0
  38. package/dist/core/context/context-bridge.js +234 -0
  39. package/dist/core/context/context-bridge.js.map +7 -0
  40. package/dist/core/context/dual-stack-manager.js +850 -0
  41. package/dist/core/context/dual-stack-manager.js.map +7 -0
  42. package/dist/core/context/frame-handoff-manager.js +774 -0
  43. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  44. package/dist/core/context/frame-manager.js +142 -13
  45. package/dist/core/context/frame-manager.js.map +2 -2
  46. package/dist/core/context/permission-manager.js +181 -0
  47. package/dist/core/context/permission-manager.js.map +7 -0
  48. package/dist/core/context/shared-context-layer.js +386 -0
  49. package/dist/core/context/shared-context-layer.js.map +7 -0
  50. package/dist/core/context/stack-merge-resolver.js +600 -0
  51. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  52. package/dist/core/context/validation.js +121 -0
  53. package/dist/core/context/validation.js.map +7 -0
  54. package/dist/core/database/connection-pool.js +266 -175
  55. package/dist/core/database/connection-pool.js.map +2 -2
  56. package/dist/core/database/database-adapter.js +51 -0
  57. package/dist/core/database/database-adapter.js.map +7 -0
  58. package/dist/core/database/migration-manager.js +514 -0
  59. package/dist/core/database/migration-manager.js.map +7 -0
  60. package/dist/core/database/paradedb-adapter.js +970 -0
  61. package/dist/core/database/paradedb-adapter.js.map +7 -0
  62. package/dist/core/database/query-router.js +421 -0
  63. package/dist/core/database/query-router.js.map +7 -0
  64. package/dist/core/database/sqlite-adapter.js +547 -0
  65. package/dist/core/database/sqlite-adapter.js.map +7 -0
  66. package/dist/core/errors/index.js +21 -1
  67. package/dist/core/errors/index.js.map +2 -2
  68. package/dist/core/frame/workflow-templates-stub.js +42 -0
  69. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  70. package/dist/core/frame/workflow-templates.js +276 -0
  71. package/dist/core/frame/workflow-templates.js.map +7 -0
  72. package/dist/core/merge/conflict-detector.js +5 -2
  73. package/dist/core/merge/conflict-detector.js.map +2 -2
  74. package/dist/core/merge/resolution-engine.js +3 -14
  75. package/dist/core/merge/resolution-engine.js.map +2 -2
  76. package/dist/core/merge/stack-diff.js.map +2 -2
  77. package/dist/core/monitoring/logger.js +18 -3
  78. package/dist/core/monitoring/logger.js.map +2 -2
  79. package/dist/core/monitoring/session-monitor.js +296 -0
  80. package/dist/core/monitoring/session-monitor.js.map +7 -0
  81. package/dist/core/retrieval/context-retriever.js +475 -0
  82. package/dist/core/retrieval/context-retriever.js.map +7 -0
  83. package/dist/core/retrieval/graph-retrieval.js +658 -0
  84. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  85. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  86. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  87. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  88. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  89. package/dist/core/session/clear-survival-stub.js +49 -0
  90. package/dist/core/session/clear-survival-stub.js.map +7 -0
  91. package/dist/core/session/clear-survival.js +426 -0
  92. package/dist/core/session/clear-survival.js.map +7 -0
  93. package/dist/core/session/handoff-generator.js +339 -0
  94. package/dist/core/session/handoff-generator.js.map +7 -0
  95. package/dist/core/session/session-manager.js +61 -26
  96. package/dist/core/session/session-manager.js.map +3 -3
  97. package/dist/core/skills/index.js +3 -0
  98. package/dist/core/skills/index.js.map +7 -0
  99. package/dist/core/skills/skill-storage.js +749 -0
  100. package/dist/core/skills/skill-storage.js.map +7 -0
  101. package/dist/core/skills/types.js +189 -0
  102. package/dist/core/skills/types.js.map +7 -0
  103. package/dist/core/storage/chromadb-adapter.js +346 -0
  104. package/dist/core/storage/chromadb-adapter.js.map +7 -0
  105. package/dist/core/storage/railway-optimized-storage.js +550 -0
  106. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  107. package/dist/core/storage/remote-storage.js +456 -0
  108. package/dist/core/storage/remote-storage.js.map +7 -0
  109. package/dist/core/trace/trace-detector.js +136 -5
  110. package/dist/core/trace/trace-detector.js.map +2 -2
  111. package/dist/core/trace/trace-store.js.map +2 -2
  112. package/dist/features/tui/components/analytics-panel.js +136 -0
  113. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  114. package/dist/features/tui/components/frame-visualizer.js +377 -0
  115. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  116. package/dist/features/tui/components/pr-tracker.js +123 -0
  117. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  118. package/dist/features/tui/components/session-monitor.js +286 -0
  119. package/dist/features/tui/components/session-monitor.js.map +7 -0
  120. package/dist/features/tui/components/subagent-fleet.js +388 -0
  121. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  122. package/dist/features/tui/components/task-board.js +475 -0
  123. package/dist/features/tui/components/task-board.js.map +7 -0
  124. package/dist/features/tui/index.js +397 -0
  125. package/dist/features/tui/index.js.map +7 -0
  126. package/dist/features/tui/services/data-service.js +654 -0
  127. package/dist/features/tui/services/data-service.js.map +7 -0
  128. package/dist/features/tui/services/websocket-client.js +149 -0
  129. package/dist/features/tui/services/websocket-client.js.map +7 -0
  130. package/dist/features/tui/terminal-compat.js +205 -0
  131. package/dist/features/tui/terminal-compat.js.map +7 -0
  132. package/dist/features/tui/types.js +1 -0
  133. package/dist/features/tui/types.js.map +7 -0
  134. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  135. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  136. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  137. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  138. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  139. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  140. package/dist/integrations/linear/client.js +22 -4
  141. package/dist/integrations/linear/client.js.map +2 -2
  142. package/dist/integrations/linear/migration.js +299 -0
  143. package/dist/integrations/linear/migration.js.map +7 -0
  144. package/dist/integrations/linear/oauth-server.js +396 -0
  145. package/dist/integrations/linear/oauth-server.js.map +7 -0
  146. package/dist/integrations/linear/rest-client.js +199 -0
  147. package/dist/integrations/linear/rest-client.js.map +7 -0
  148. package/dist/integrations/linear/sync.js +14 -2
  149. package/dist/integrations/linear/sync.js.map +2 -2
  150. package/dist/integrations/linear/webhook-handler.js +200 -0
  151. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  152. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  153. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  154. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  155. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  156. package/dist/integrations/mcp/refactored-server.js +31 -3
  157. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  158. package/dist/integrations/mcp/server.js +25 -7
  159. package/dist/integrations/mcp/server.js.map +2 -2
  160. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  161. package/dist/models/user.model.js +3 -0
  162. package/dist/models/user.model.js.map +2 -2
  163. package/dist/services/context-service.js.map +2 -2
  164. package/dist/skills/claude-skills.js +666 -0
  165. package/dist/skills/claude-skills.js.map +7 -0
  166. package/dist/utils/formatting.js +58 -0
  167. package/dist/utils/formatting.js.map +7 -0
  168. package/package.json +30 -24
  169. package/dist/cli/__tests__/index.test.js +0 -290
  170. package/dist/cli/__tests__/index.test.js.map +0 -7
  171. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  172. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  173. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  174. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  175. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  176. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  177. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  178. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  179. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  180. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  181. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  182. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  183. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  184. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  185. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  186. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  187. package/dist/core/trace/trace-detector.test.js +0 -401
  188. package/dist/core/trace/trace-detector.test.js.map +0 -7
  189. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  190. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  191. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  192. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  193. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  194. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  195. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  196. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  197. package/dist/scripts/benchmark-performance.d.ts +0 -7
  198. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  199. package/dist/scripts/benchmark-performance.js +0 -44
  200. package/dist/scripts/benchmark-performance.js.map +0 -1
  201. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  202. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  203. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  204. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  205. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  206. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  207. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  208. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  209. package/dist/scripts/initialize.d.ts +0 -6
  210. package/dist/scripts/initialize.d.ts.map +0 -1
  211. package/dist/scripts/initialize.js +0 -93
  212. package/dist/scripts/initialize.js.map +0 -1
  213. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  214. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  215. package/dist/scripts/list-linear-tasks.js +0 -121
  216. package/dist/scripts/list-linear-tasks.js.map +0 -1
  217. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  218. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  219. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  220. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  221. package/dist/scripts/show-linear-summary.d.ts +0 -6
  222. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  223. package/dist/scripts/show-linear-summary.js +0 -120
  224. package/dist/scripts/show-linear-summary.js.map +0 -1
  225. package/dist/scripts/status.d.ts +0 -6
  226. package/dist/scripts/status.d.ts.map +0 -1
  227. package/dist/scripts/status.js +0 -101
  228. package/dist/scripts/status.js.map +0 -1
  229. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  230. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  231. package/dist/src/agents/core/agent-task-manager.js +0 -504
  232. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  233. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  234. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  236. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  237. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  238. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  239. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  240. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  241. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  242. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  243. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  244. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  245. package/dist/src/cli/auto-detect.d.ts +0 -61
  246. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  247. package/dist/src/cli/auto-detect.js +0 -350
  248. package/dist/src/cli/auto-detect.js.map +0 -1
  249. package/dist/src/cli/browser-test.d.ts +0 -6
  250. package/dist/src/cli/browser-test.d.ts.map +0 -1
  251. package/dist/src/cli/browser-test.js +0 -32
  252. package/dist/src/cli/browser-test.js.map +0 -1
  253. package/dist/src/cli/claude-sm.d.ts +0 -7
  254. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  255. package/dist/src/cli/claude-sm.js +0 -412
  256. package/dist/src/cli/claude-sm.js.map +0 -1
  257. package/dist/src/cli/commands/agent.d.ts +0 -9
  258. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  259. package/dist/src/cli/commands/agent.js +0 -303
  260. package/dist/src/cli/commands/agent.js.map +0 -1
  261. package/dist/src/cli/commands/config.d.ts +0 -6
  262. package/dist/src/cli/commands/config.d.ts.map +0 -1
  263. package/dist/src/cli/commands/config.js +0 -224
  264. package/dist/src/cli/commands/config.js.map +0 -1
  265. package/dist/src/cli/commands/context.d.ts +0 -7
  266. package/dist/src/cli/commands/context.d.ts.map +0 -1
  267. package/dist/src/cli/commands/context.js +0 -365
  268. package/dist/src/cli/commands/context.js.map +0 -1
  269. package/dist/src/cli/commands/handoff.d.ts +0 -6
  270. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  271. package/dist/src/cli/commands/handoff.js +0 -212
  272. package/dist/src/cli/commands/handoff.js.map +0 -1
  273. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  274. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  275. package/dist/src/cli/commands/linear-test.js +0 -123
  276. package/dist/src/cli/commands/linear-test.js.map +0 -1
  277. package/dist/src/cli/commands/linear.d.ts +0 -6
  278. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  279. package/dist/src/cli/commands/linear.js +0 -393
  280. package/dist/src/cli/commands/linear.js.map +0 -1
  281. package/dist/src/cli/commands/log.d.ts +0 -7
  282. package/dist/src/cli/commands/log.d.ts.map +0 -1
  283. package/dist/src/cli/commands/log.js +0 -168
  284. package/dist/src/cli/commands/log.js.map +0 -1
  285. package/dist/src/cli/commands/onboard.d.ts +0 -8
  286. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  287. package/dist/src/cli/commands/onboard.js +0 -363
  288. package/dist/src/cli/commands/onboard.js.map +0 -1
  289. package/dist/src/cli/commands/projects.d.ts +0 -8
  290. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  291. package/dist/src/cli/commands/projects.js +0 -220
  292. package/dist/src/cli/commands/projects.js.map +0 -1
  293. package/dist/src/cli/commands/search.d.ts +0 -7
  294. package/dist/src/cli/commands/search.d.ts.map +0 -1
  295. package/dist/src/cli/commands/search.js +0 -162
  296. package/dist/src/cli/commands/search.js.map +0 -1
  297. package/dist/src/cli/commands/session.d.ts +0 -7
  298. package/dist/src/cli/commands/session.d.ts.map +0 -1
  299. package/dist/src/cli/commands/session.js +0 -222
  300. package/dist/src/cli/commands/session.js.map +0 -1
  301. package/dist/src/cli/commands/tasks.d.ts +0 -7
  302. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  303. package/dist/src/cli/commands/tasks.js +0 -229
  304. package/dist/src/cli/commands/tasks.js.map +0 -1
  305. package/dist/src/cli/commands/webhook.d.ts +0 -3
  306. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  307. package/dist/src/cli/commands/webhook.js +0 -157
  308. package/dist/src/cli/commands/webhook.js.map +0 -1
  309. package/dist/src/cli/commands/worktree.d.ts +0 -8
  310. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  311. package/dist/src/cli/commands/worktree.js +0 -339
  312. package/dist/src/cli/commands/worktree.js.map +0 -1
  313. package/dist/src/cli/index.d.ts +0 -8
  314. package/dist/src/cli/index.d.ts.map +0 -1
  315. package/dist/src/cli/index.js +0 -995
  316. package/dist/src/cli/index.js.map +0 -1
  317. package/dist/src/cli/utils/viewer.d.ts +0 -3
  318. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  319. package/dist/src/cli/utils/viewer.js +0 -91
  320. package/dist/src/cli/utils/viewer.js.map +0 -1
  321. package/dist/src/core/config/config-manager.d.ts +0 -95
  322. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  323. package/dist/src/core/config/config-manager.js +0 -359
  324. package/dist/src/core/config/config-manager.js.map +0 -1
  325. package/dist/src/core/config/types.d.ts +0 -72
  326. package/dist/src/core/config/types.d.ts.map +0 -1
  327. package/dist/src/core/config/types.js +0 -127
  328. package/dist/src/core/config/types.js.map +0 -1
  329. package/dist/src/core/context/auto-context.d.ts +0 -22
  330. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  331. package/dist/src/core/context/auto-context.js +0 -77
  332. package/dist/src/core/context/auto-context.js.map +0 -1
  333. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  334. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  335. package/dist/src/core/context/compaction-handler.js +0 -306
  336. package/dist/src/core/context/compaction-handler.js.map +0 -1
  337. package/dist/src/core/context/frame-database.d.ts +0 -59
  338. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-database.js +0 -333
  340. package/dist/src/core/context/frame-database.js.map +0 -1
  341. package/dist/src/core/context/frame-digest.d.ts +0 -59
  342. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-digest.js +0 -264
  344. package/dist/src/core/context/frame-digest.js.map +0 -1
  345. package/dist/src/core/context/frame-manager.d.ts +0 -112
  346. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-manager.js +0 -600
  348. package/dist/src/core/context/frame-manager.js.map +0 -1
  349. package/dist/src/core/context/frame-stack.d.ts +0 -85
  350. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  351. package/dist/src/core/context/frame-stack.js +0 -287
  352. package/dist/src/core/context/frame-stack.js.map +0 -1
  353. package/dist/src/core/context/frame-types.d.ts +0 -67
  354. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  355. package/dist/src/core/context/frame-types.js +0 -6
  356. package/dist/src/core/context/frame-types.js.map +0 -1
  357. package/dist/src/core/context/index.d.ts +0 -11
  358. package/dist/src/core/context/index.d.ts.map +0 -1
  359. package/dist/src/core/context/index.js +0 -14
  360. package/dist/src/core/context/index.js.map +0 -1
  361. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  362. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  363. package/dist/src/core/context/model-aware-compaction.js +0 -616
  364. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  365. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  366. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  367. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  368. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  369. package/dist/src/core/database/batch-operations.d.ts +0 -118
  370. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  371. package/dist/src/core/database/batch-operations.js +0 -339
  372. package/dist/src/core/database/batch-operations.js.map +0 -1
  373. package/dist/src/core/database/connection-pool.d.ts +0 -79
  374. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  375. package/dist/src/core/database/connection-pool.js +0 -236
  376. package/dist/src/core/database/connection-pool.js.map +0 -1
  377. package/dist/src/core/database/query-cache.d.ts +0 -135
  378. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  379. package/dist/src/core/database/query-cache.js +0 -294
  380. package/dist/src/core/database/query-cache.js.map +0 -1
  381. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  382. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  383. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  384. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  385. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  386. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  387. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  388. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  389. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  390. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  391. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  392. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  393. package/dist/src/core/digest/index.d.ts +0 -9
  394. package/dist/src/core/digest/index.d.ts.map +0 -1
  395. package/dist/src/core/digest/index.js +0 -9
  396. package/dist/src/core/digest/index.js.map +0 -1
  397. package/dist/src/core/digest/types.d.ts +0 -154
  398. package/dist/src/core/digest/types.d.ts.map +0 -1
  399. package/dist/src/core/digest/types.js +0 -18
  400. package/dist/src/core/digest/types.js.map +0 -1
  401. package/dist/src/core/errors/index.d.ts +0 -143
  402. package/dist/src/core/errors/index.d.ts.map +0 -1
  403. package/dist/src/core/errors/index.js +0 -282
  404. package/dist/src/core/errors/index.js.map +0 -1
  405. package/dist/src/core/errors/recovery.d.ts +0 -86
  406. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  407. package/dist/src/core/errors/recovery.js +0 -274
  408. package/dist/src/core/errors/recovery.js.map +0 -1
  409. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  410. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  411. package/dist/src/core/merge/conflict-detector.js +0 -468
  412. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  413. package/dist/src/core/merge/index.d.ts +0 -9
  414. package/dist/src/core/merge/index.d.ts.map +0 -1
  415. package/dist/src/core/merge/index.js +0 -9
  416. package/dist/src/core/merge/index.js.map +0 -1
  417. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  418. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  419. package/dist/src/core/merge/resolution-engine.js +0 -573
  420. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  421. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  422. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  423. package/dist/src/core/merge/stack-diff.js +0 -516
  424. package/dist/src/core/merge/stack-diff.js.map +0 -1
  425. package/dist/src/core/merge/types.d.ts +0 -110
  426. package/dist/src/core/merge/types.d.ts.map +0 -1
  427. package/dist/src/core/merge/types.js +0 -6
  428. package/dist/src/core/merge/types.js.map +0 -1
  429. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  430. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/error-handler.js +0 -212
  432. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  433. package/dist/src/core/monitoring/logger.d.ts +0 -24
  434. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/logger.js +0 -126
  436. package/dist/src/core/monitoring/logger.js.map +0 -1
  437. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  438. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  439. package/dist/src/core/monitoring/metrics.js +0 -152
  440. package/dist/src/core/monitoring/metrics.js.map +0 -1
  441. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  442. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  443. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  444. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  445. package/dist/src/core/performance/context-cache.d.ts +0 -109
  446. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  447. package/dist/src/core/performance/context-cache.js +0 -280
  448. package/dist/src/core/performance/context-cache.js.map +0 -1
  449. package/dist/src/core/performance/index.d.ts +0 -3
  450. package/dist/src/core/performance/index.d.ts.map +0 -1
  451. package/dist/src/core/performance/index.js +0 -3
  452. package/dist/src/core/performance/index.js.map +0 -1
  453. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  454. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  455. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  456. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  457. package/dist/src/core/performance/monitor.d.ts +0 -48
  458. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  459. package/dist/src/core/performance/monitor.js +0 -226
  460. package/dist/src/core/performance/monitor.js.map +0 -1
  461. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  462. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  463. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  464. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  465. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  466. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  467. package/dist/src/core/performance/performance-benchmark.js +0 -290
  468. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  469. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  470. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  471. package/dist/src/core/performance/performance-profiler.js +0 -346
  472. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  473. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  474. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  475. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  476. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  477. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  478. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  479. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  480. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  481. package/dist/src/core/projects/project-manager.d.ts +0 -130
  482. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  483. package/dist/src/core/projects/project-manager.js +0 -709
  484. package/dist/src/core/projects/project-manager.js.map +0 -1
  485. package/dist/src/core/query/query-parser.d.ts +0 -109
  486. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  487. package/dist/src/core/query/query-parser.js +0 -415
  488. package/dist/src/core/query/query-parser.js.map +0 -1
  489. package/dist/src/core/query/query-templates.d.ts +0 -44
  490. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  491. package/dist/src/core/query/query-templates.js +0 -326
  492. package/dist/src/core/query/query-templates.js.map +0 -1
  493. package/dist/src/core/retrieval/index.d.ts +0 -8
  494. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/index.js +0 -8
  496. package/dist/src/core/retrieval/index.js.map +0 -1
  497. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  498. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  500. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  501. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  502. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  503. package/dist/src/core/retrieval/summary-generator.js +0 -622
  504. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  505. package/dist/src/core/retrieval/types.d.ts +0 -257
  506. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  507. package/dist/src/core/retrieval/types.js +0 -18
  508. package/dist/src/core/retrieval/types.js.map +0 -1
  509. package/dist/src/core/session/index.d.ts +0 -2
  510. package/dist/src/core/session/index.d.ts.map +0 -1
  511. package/dist/src/core/session/index.js +0 -2
  512. package/dist/src/core/session/index.js.map +0 -1
  513. package/dist/src/core/session/session-manager.d.ts +0 -69
  514. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  515. package/dist/src/core/session/session-manager.js +0 -311
  516. package/dist/src/core/session/session-manager.js.map +0 -1
  517. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  518. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  519. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  520. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  521. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  522. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  523. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  524. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  525. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  526. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  527. package/dist/src/core/trace/debug-trace.js +0 -402
  528. package/dist/src/core/trace/debug-trace.js.map +0 -1
  529. package/dist/src/core/trace/error-test.d.ts +0 -6
  530. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  531. package/dist/src/core/trace/error-test.js +0 -128
  532. package/dist/src/core/trace/error-test.js.map +0 -1
  533. package/dist/src/core/trace/index.d.ts +0 -25
  534. package/dist/src/core/trace/index.d.ts.map +0 -1
  535. package/dist/src/core/trace/index.js +0 -121
  536. package/dist/src/core/trace/index.js.map +0 -1
  537. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  538. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  539. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  540. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  541. package/dist/src/core/trace/performance-test.d.ts +0 -6
  542. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  543. package/dist/src/core/trace/performance-test.js +0 -111
  544. package/dist/src/core/trace/performance-test.js.map +0 -1
  545. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  546. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  547. package/dist/src/core/trace/trace-demo.js +0 -154
  548. package/dist/src/core/trace/trace-demo.js.map +0 -1
  549. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  550. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  552. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  553. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  554. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  555. package/dist/src/core/trace/trace-detector.js +0 -425
  556. package/dist/src/core/trace/trace-detector.js.map +0 -1
  557. package/dist/src/core/trace/trace-store.d.ts +0 -60
  558. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  559. package/dist/src/core/trace/trace-store.js +0 -323
  560. package/dist/src/core/trace/trace-store.js.map +0 -1
  561. package/dist/src/core/trace/types.d.ts +0 -81
  562. package/dist/src/core/trace/types.d.ts.map +0 -1
  563. package/dist/src/core/trace/types.js +0 -70
  564. package/dist/src/core/trace/types.js.map +0 -1
  565. package/dist/src/core/types.d.ts +0 -35
  566. package/dist/src/core/types.d.ts.map +0 -1
  567. package/dist/src/core/types.js +0 -2
  568. package/dist/src/core/types.js.map +0 -1
  569. package/dist/src/core/utils/update-checker.d.ts +0 -38
  570. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  571. package/dist/src/core/utils/update-checker.js +0 -213
  572. package/dist/src/core/utils/update-checker.js.map +0 -1
  573. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  574. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  575. package/dist/src/core/worktree/worktree-manager.js +0 -456
  576. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  577. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  578. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  579. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  580. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  581. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  582. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  583. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  584. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  585. package/dist/src/features/analytics/index.d.ts +0 -12
  586. package/dist/src/features/analytics/index.d.ts.map +0 -1
  587. package/dist/src/features/analytics/index.js +0 -11
  588. package/dist/src/features/analytics/index.js.map +0 -1
  589. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  590. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  591. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  592. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  593. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  594. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  595. package/dist/src/features/analytics/types/metrics.js +0 -2
  596. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  597. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  598. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  599. package/dist/src/features/browser/browser-mcp.js +0 -459
  600. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  601. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  602. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  603. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  604. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  605. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  606. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  607. package/dist/src/features/tasks/task-aware-context.js +0 -412
  608. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  609. package/dist/src/index.d.ts +0 -21
  610. package/dist/src/index.d.ts.map +0 -1
  611. package/dist/src/index.js +0 -9
  612. package/dist/src/index.js.map +0 -1
  613. package/dist/src/integrations/linear/auth.d.ts +0 -99
  614. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/auth.js +0 -319
  616. package/dist/src/integrations/linear/auth.js.map +0 -1
  617. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  618. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/auto-sync.js +0 -268
  620. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  621. package/dist/src/integrations/linear/client.d.ts +0 -127
  622. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/client.js +0 -446
  624. package/dist/src/integrations/linear/client.js.map +0 -1
  625. package/dist/src/integrations/linear/config.d.ts +0 -51
  626. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/config.js +0 -103
  628. package/dist/src/integrations/linear/config.js.map +0 -1
  629. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  630. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync-manager.js +0 -235
  632. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  633. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  634. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/sync-service.js +0 -217
  636. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  637. package/dist/src/integrations/linear/sync.d.ts +0 -125
  638. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/sync.js +0 -563
  640. package/dist/src/integrations/linear/sync.js.map +0 -1
  641. package/dist/src/integrations/linear/types.d.ts +0 -90
  642. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/types.js +0 -2
  644. package/dist/src/integrations/linear/types.js.map +0 -1
  645. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  646. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  647. package/dist/src/integrations/linear/webhook-server.js +0 -190
  648. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  649. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  650. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  651. package/dist/src/integrations/linear/webhook.js +0 -291
  652. package/dist/src/integrations/linear/webhook.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  654. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  656. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  658. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  660. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  662. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  664. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  666. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  668. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  669. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  670. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  672. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  673. package/dist/src/integrations/mcp/index.d.ts +0 -13
  674. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/index.js +0 -17
  676. package/dist/src/integrations/mcp/index.js.map +0 -1
  677. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  678. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  680. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  681. package/dist/src/integrations/mcp/server.d.ts +0 -54
  682. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/server.js +0 -1616
  684. package/dist/src/integrations/mcp/server.js.map +0 -1
  685. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  686. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  687. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  688. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  689. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  690. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  691. package/dist/src/integrations/mcp/trace-test.js +0 -54
  692. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  694. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  696. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  697. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  698. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  699. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  700. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  701. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  702. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  703. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  704. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  705. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  706. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  707. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  708. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  709. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  710. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  711. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  712. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  713. package/dist/src/models/user.model.d.ts +0 -62
  714. package/dist/src/models/user.model.d.ts.map +0 -1
  715. package/dist/src/models/user.model.js +0 -311
  716. package/dist/src/models/user.model.js.map +0 -1
  717. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  718. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  719. package/dist/src/servers/production/auth-middleware.js +0 -558
  720. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  721. package/dist/src/servers/railway/index.d.ts +0 -7
  722. package/dist/src/servers/railway/index.d.ts.map +0 -1
  723. package/dist/src/servers/railway/index.js +0 -401
  724. package/dist/src/servers/railway/index.js.map +0 -1
  725. package/dist/src/services/config-service.d.ts +0 -44
  726. package/dist/src/services/config-service.d.ts.map +0 -1
  727. package/dist/src/services/config-service.js +0 -61
  728. package/dist/src/services/config-service.js.map +0 -1
  729. package/dist/src/services/context-service.d.ts +0 -17
  730. package/dist/src/services/context-service.d.ts.map +0 -1
  731. package/dist/src/services/context-service.js +0 -173
  732. package/dist/src/services/context-service.js.map +0 -1
  733. package/dist/src/types/task.d.ts +0 -27
  734. package/dist/src/types/task.d.ts.map +0 -1
  735. package/dist/src/types/task.js +0 -2
  736. package/dist/src/types/task.js.map +0 -1
  737. package/dist/src/utils/logger.d.ts +0 -13
  738. package/dist/src/utils/logger.d.ts.map +0 -1
  739. package/dist/src/utils/logger.js +0 -52
  740. package/dist/src/utils/logger.js.map +0 -1
  741. package/dist/src/validation/schemas.d.ts +0 -633
  742. package/dist/src/validation/schemas.d.ts.map +0 -1
  743. package/dist/src/validation/schemas.js +0 -347
  744. package/dist/src/validation/schemas.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/retrieval/hierarchical-retrieval.ts"],
4
+ "sourcesContent": ["/**\n * Hierarchical Retrieval System with Progressive Summarization\n * Implements multi-level tree structure to prevent semantic collapse at scale\n *\n * Based on: Encyclopedia \u2192 Chapter \u2192 Section \u2192 Paragraph model\n * Reduces search space from 50K to ~200 at each hop\n */\n\nimport Database from 'better-sqlite3';\nimport { logger } from '../monitoring/logger.js';\nimport { Trace, CompressedTrace } from '../trace/types.js';\nimport { Frame, Anchor, Event } from '../context/frame-manager.js';\nimport * as zlib from 'zlib';\nimport { promisify } from 'util';\nimport crypto from 'crypto';\n\nconst gzipAsync = promisify(zlib.gzip);\nconst gunzipAsync = promisify(zlib.gunzip);\n\nexport interface HierarchyLevel {\n level: 'encyclopedia' | 'chapter' | 'section' | 'paragraph' | 'atom';\n id: string;\n parentId?: string;\n title: string;\n summary: string;\n embeddings?: number[];\n childCount: number;\n tokenCount: number;\n score: number;\n timeRange: {\n start: number;\n end: number;\n };\n metadata: {\n compressionRatio?: number;\n semanticDensity?: number;\n accessPattern?: 'hot' | 'warm' | 'cold';\n lastAccessed?: number;\n };\n}\n\nexport interface RetrievalNode {\n id: string;\n level: HierarchyLevel;\n children?: RetrievalNode[];\n content?: string; // Only for leaf nodes\n compressed?: boolean;\n}\n\nexport interface HierarchicalConfig {\n maxEncyclopediaSize: number; // Total documents (~50K)\n maxChapterSize: number; // Documents per chapter (~6K)\n maxSectionSize: number; // Docs per section (~250)\n maxParagraphSize: number; // Docs per paragraph (~10-20)\n compressionThreshold: number; // Token threshold for compression\n semanticThreshold: number; // Similarity threshold for grouping\n}\n\nexport const DEFAULT_HIERARCHY_CONFIG: HierarchicalConfig = {\n maxEncyclopediaSize: 50000,\n maxChapterSize: 6000,\n maxSectionSize: 250,\n maxParagraphSize: 20,\n compressionThreshold: 1000,\n semanticThreshold: 0.7,\n};\n\n/**\n * Manages hierarchical retrieval with progressive summarization\n */\nexport class HierarchicalRetrieval {\n private db: Database.Database;\n private config: HierarchicalConfig;\n private hierarchyCache: Map<string, RetrievalNode> = new Map();\n private summaryCache: Map<string, string> = new Map();\n\n constructor(db: Database.Database, config: Partial<HierarchicalConfig> = {}) {\n this.db = db;\n this.config = { ...DEFAULT_HIERARCHY_CONFIG, ...config };\n this.initializeSchema();\n }\n\n private initializeSchema(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS hierarchy_nodes (\n id TEXT PRIMARY KEY,\n level TEXT NOT NULL,\n parent_id TEXT,\n title TEXT NOT NULL,\n summary TEXT,\n embeddings BLOB,\n child_count INTEGER DEFAULT 0,\n token_count INTEGER DEFAULT 0,\n score REAL DEFAULT 0,\n time_start INTEGER,\n time_end INTEGER,\n compression_ratio REAL,\n semantic_density REAL,\n access_pattern TEXT DEFAULT 'cold',\n last_accessed INTEGER,\n created_at INTEGER DEFAULT (unixepoch() * 1000),\n FOREIGN KEY (parent_id) REFERENCES hierarchy_nodes(id) ON DELETE CASCADE\n )\n `);\n\n this.db.exec(`\n CREATE INDEX IF NOT EXISTS idx_hierarchy_level ON hierarchy_nodes(level);\n CREATE INDEX IF NOT EXISTS idx_hierarchy_parent ON hierarchy_nodes(parent_id);\n CREATE INDEX IF NOT EXISTS idx_hierarchy_score ON hierarchy_nodes(score DESC);\n CREATE INDEX IF NOT EXISTS idx_hierarchy_time ON hierarchy_nodes(time_start, time_end);\n `);\n\n // Content storage for leaf nodes\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS hierarchy_content (\n node_id TEXT PRIMARY KEY,\n content TEXT,\n compressed BOOLEAN DEFAULT 0,\n original_size INTEGER,\n compressed_size INTEGER,\n FOREIGN KEY (node_id) REFERENCES hierarchy_nodes(id) ON DELETE CASCADE\n )\n `);\n }\n\n /**\n * Build hierarchical structure from traces\n */\n async buildHierarchy(traces: Trace[]): Promise<RetrievalNode> {\n logger.info('Building hierarchical retrieval structure', {\n traceCount: traces.length,\n });\n\n // Sort traces by time and score\n traces.sort((a, b) => {\n const timeDiff = b.metadata.startTime - a.metadata.startTime;\n return timeDiff !== 0 ? timeDiff : b.score - a.score;\n });\n\n // Create root encyclopedia node\n const encyclopediaId = this.generateId('encyclopedia');\n const encyclopedia: RetrievalNode = {\n id: encyclopediaId,\n level: {\n level: 'encyclopedia',\n id: encyclopediaId,\n title: 'Knowledge Base',\n summary: await this.generateSummary(traces, 'encyclopedia'),\n childCount: 0,\n tokenCount: traces.reduce((sum, t) => sum + (t.tokenCount || 0), 0),\n score: Math.max(...traces.map((t) => t.score)),\n timeRange: {\n start: Math.min(...traces.map((t) => t.metadata.startTime)),\n end: Math.max(...traces.map((t) => t.metadata.endTime)),\n },\n metadata: {\n semanticDensity: 1.0,\n accessPattern: 'hot',\n },\n },\n children: [],\n };\n\n // Partition into chapters\n const chapters = await this.partitionIntoChapters(traces);\n\n for (const chapterTraces of chapters) {\n const chapter = await this.buildChapter(chapterTraces, encyclopediaId);\n encyclopedia.children!.push(chapter);\n }\n\n // Update child count\n encyclopedia.level.childCount = encyclopedia.children!.length;\n\n // Store in database\n await this.storeNode(encyclopedia);\n\n return encyclopedia;\n }\n\n /**\n * Partition traces into chapters based on semantic similarity and time\n */\n private async partitionIntoChapters(traces: Trace[]): Promise<Trace[][]> {\n const chapters: Trace[][] = [];\n let currentChapter: Trace[] = [];\n\n for (const trace of traces) {\n if (currentChapter.length >= this.config.maxChapterSize) {\n chapters.push(currentChapter);\n currentChapter = [trace];\n } else if (currentChapter.length > 0) {\n // Check semantic similarity with chapter\n const similarity = await this.calculateSimilarity(\n trace,\n currentChapter[currentChapter.length - 1]\n );\n\n if (similarity < this.config.semanticThreshold) {\n // Start new chapter if semantically different\n chapters.push(currentChapter);\n currentChapter = [trace];\n } else {\n currentChapter.push(trace);\n }\n } else {\n currentChapter.push(trace);\n }\n }\n\n if (currentChapter.length > 0) {\n chapters.push(currentChapter);\n }\n\n return chapters;\n }\n\n /**\n * Build a chapter node\n */\n private async buildChapter(\n traces: Trace[],\n parentId: string\n ): Promise<RetrievalNode> {\n const chapterId = this.generateId('chapter');\n\n const chapter: RetrievalNode = {\n id: chapterId,\n level: {\n level: 'chapter',\n id: chapterId,\n parentId,\n title: this.generateChapterTitle(traces),\n summary: await this.generateSummary(traces, 'chapter'),\n childCount: 0,\n tokenCount: traces.reduce((sum, t) => sum + (t.tokenCount || 0), 0),\n score: Math.max(...traces.map((t) => t.score)),\n timeRange: {\n start: Math.min(...traces.map((t) => t.metadata.startTime)),\n end: Math.max(...traces.map((t) => t.metadata.endTime)),\n },\n metadata: {\n compressionRatio: 0.8,\n semanticDensity: 0.8,\n accessPattern: 'warm',\n },\n },\n children: [],\n };\n\n // Partition into sections\n const sections = await this.partitionIntoSections(traces);\n\n for (const sectionTraces of sections) {\n const section = await this.buildSection(sectionTraces, chapterId);\n chapter.children!.push(section);\n }\n\n chapter.level.childCount = chapter.children!.length;\n return chapter;\n }\n\n /**\n * Build a section node\n */\n private async buildSection(\n traces: Trace[],\n parentId: string\n ): Promise<RetrievalNode> {\n const sectionId = this.generateId('section');\n\n const section: RetrievalNode = {\n id: sectionId,\n level: {\n level: 'section',\n id: sectionId,\n parentId,\n title: this.generateSectionTitle(traces),\n summary: await this.generateSummary(traces, 'section'),\n childCount: 0,\n tokenCount: traces.reduce((sum, t) => sum + (t.tokenCount || 0), 0),\n score: Math.max(...traces.map((t) => t.score)),\n timeRange: {\n start: Math.min(...traces.map((t) => t.metadata.startTime)),\n end: Math.max(...traces.map((t) => t.metadata.endTime)),\n },\n metadata: {\n compressionRatio: 0.6,\n semanticDensity: 0.6,\n accessPattern: 'cold',\n },\n },\n children: [],\n };\n\n // Partition into paragraphs\n const paragraphs = await this.partitionIntoParagraphs(traces);\n\n for (const paragraphTraces of paragraphs) {\n const paragraph = await this.buildParagraph(paragraphTraces, sectionId);\n section.children!.push(paragraph);\n }\n\n section.level.childCount = section.children!.length;\n return section;\n }\n\n /**\n * Build a paragraph (leaf) node\n */\n private async buildParagraph(\n traces: Trace[],\n parentId: string\n ): Promise<RetrievalNode> {\n const paragraphId = this.generateId('paragraph');\n\n // Combine trace content\n const content = traces\n .map((t) => {\n return `[${new Date(t.metadata.startTime).toISOString()}] ${t.type}: ${t.summary}`;\n })\n .join('\\n\\n');\n\n // Compress if large\n let storedContent = content;\n let compressed = false;\n\n if (content.length > this.config.compressionThreshold) {\n const compressedData = await gzipAsync(content);\n storedContent = compressedData.toString('base64');\n compressed = true;\n }\n\n const paragraph: RetrievalNode = {\n id: paragraphId,\n level: {\n level: 'paragraph',\n id: paragraphId,\n parentId,\n title: this.generateParagraphTitle(traces),\n summary: await this.generateSummary(traces, 'paragraph'),\n childCount: traces.length,\n tokenCount: traces.reduce((sum, t) => sum + (t.tokenCount || 0), 0),\n score: Math.max(...traces.map((t) => t.score)),\n timeRange: {\n start: Math.min(...traces.map((t) => t.metadata.startTime)),\n end: Math.max(...traces.map((t) => t.metadata.endTime)),\n },\n metadata: {\n compressionRatio: compressed ? 0.3 : 1.0,\n semanticDensity: 0.4,\n accessPattern: 'cold',\n },\n },\n content: storedContent,\n compressed,\n };\n\n return paragraph;\n }\n\n /**\n * Partition traces into sections\n */\n private async partitionIntoSections(traces: Trace[]): Promise<Trace[][]> {\n const sections: Trace[][] = [];\n const sectionSize = Math.ceil(\n traces.length / Math.ceil(traces.length / this.config.maxSectionSize)\n );\n\n for (let i = 0; i < traces.length; i += sectionSize) {\n sections.push(traces.slice(i, i + sectionSize));\n }\n\n return sections;\n }\n\n /**\n * Partition traces into paragraphs\n */\n private async partitionIntoParagraphs(traces: Trace[]): Promise<Trace[][]> {\n const paragraphs: Trace[][] = [];\n const paragraphSize = Math.ceil(\n traces.length / Math.ceil(traces.length / this.config.maxParagraphSize)\n );\n\n for (let i = 0; i < traces.length; i += paragraphSize) {\n paragraphs.push(traces.slice(i, i + paragraphSize));\n }\n\n return paragraphs;\n }\n\n /**\n * Traverse hierarchy to retrieve relevant content\n */\n async retrieve(\n query: string,\n maxDepth: number = 4,\n tokenBudget: number = 4000\n ): Promise<string> {\n logger.info('Hierarchical retrieval', { query, maxDepth, tokenBudget });\n\n // Start from encyclopedia\n const encyclopedia = await this.loadRootNode();\n if (!encyclopedia) {\n return 'No content available';\n }\n\n const path: RetrievalNode[] = [encyclopedia];\n let currentNode = encyclopedia;\n let tokensUsed = 0;\n\n // Traverse down the hierarchy\n for (let depth = 1; depth < maxDepth && tokensUsed < tokenBudget; depth++) {\n if (!currentNode.children || currentNode.children.length === 0) {\n break;\n }\n\n // Select best matching child\n const bestChild = await this.selectBestChild(\n currentNode.children,\n query,\n tokenBudget - tokensUsed\n );\n\n if (!bestChild) break;\n\n path.push(bestChild);\n currentNode = bestChild;\n tokensUsed += bestChild.level.tokenCount;\n\n // Update access pattern\n await this.updateAccessPattern(bestChild.id);\n }\n\n // Build context from path\n return this.buildContextFromPath(path, tokenBudget);\n }\n\n /**\n * Select best matching child node\n */\n private async selectBestChild(\n children: RetrievalNode[],\n query: string,\n remainingBudget: number\n ): Promise<RetrievalNode | null> {\n let bestChild: RetrievalNode | null = null;\n let bestScore = 0;\n\n for (const child of children) {\n if (child.level.tokenCount > remainingBudget) {\n continue;\n }\n\n // Calculate relevance score\n const score = await this.calculateRelevance(child, query);\n\n if (score > bestScore) {\n bestScore = score;\n bestChild = child;\n }\n }\n\n return bestChild;\n }\n\n /**\n * Calculate relevance of node to query\n */\n private async calculateRelevance(\n node: RetrievalNode,\n query: string\n ): Promise<number> {\n // Simple keyword matching for now\n // In production, use embeddings\n const queryWords = query.toLowerCase().split(/\\s+/);\n const nodeText = `${node.level.title} ${node.level.summary}`.toLowerCase();\n\n let matches = 0;\n for (const word of queryWords) {\n if (nodeText.includes(word)) {\n matches++;\n }\n }\n\n const keywordScore = matches / queryWords.length;\n const recencyScore =\n 1 / (1 + (Date.now() - node.level.timeRange.end) / (1000 * 60 * 60 * 24));\n const importanceScore = node.level.score;\n\n return keywordScore * 0.5 + recencyScore * 0.3 + importanceScore * 0.2;\n }\n\n /**\n * Build context string from retrieval path\n */\n private async buildContextFromPath(\n path: RetrievalNode[],\n tokenBudget: number\n ): Promise<string> {\n const sections: string[] = [];\n\n sections.push('## Retrieval Path');\n sections.push(path.map((n) => n.level.title).join(' \u2192 '));\n sections.push('');\n\n // Add summaries from each level\n for (const node of path) {\n sections.push(`### ${node.level.level}: ${node.level.title}`);\n sections.push(node.level.summary);\n\n if (node.content) {\n // Decompress if needed\n let content = node.content;\n if (node.compressed) {\n const compressed = Buffer.from(content, 'base64');\n const decompressed = await gunzipAsync(compressed);\n content = decompressed.toString();\n }\n sections.push('');\n sections.push('**Content:**');\n sections.push(content);\n }\n sections.push('');\n }\n\n // Add statistics\n sections.push('## Retrieval Statistics');\n sections.push(`- Levels traversed: ${path.length}`);\n sections.push(\n `- Search space reduction: ${this.calculateReduction(path)}x`\n );\n sections.push(\n `- Semantic density: ${this.calculateDensity(path).toFixed(2)}`\n );\n\n return sections.join('\\n');\n }\n\n /**\n * Calculate search space reduction\n */\n private calculateReduction(path: RetrievalNode[]): number {\n if (path.length < 2) return 1;\n\n const initial = path[0].level.childCount;\n const final = path[path.length - 1].level.childCount || 1;\n\n return Math.round(initial / final);\n }\n\n /**\n * Calculate semantic density along path\n */\n private calculateDensity(path: RetrievalNode[]): number {\n const densities = path.map((n) => n.level.metadata.semanticDensity || 1);\n return densities.reduce((sum, d) => sum + d, 0) / densities.length;\n }\n\n /**\n * Generate summary for a level\n */\n private async generateSummary(\n traces: Trace[],\n level: string\n ): Promise<string> {\n // Cache key\n const cacheKey = `${level}:${traces.map((t) => t.id).join(',')}`;\n\n if (this.summaryCache.has(cacheKey)) {\n return this.summaryCache.get(cacheKey)!;\n }\n\n // Generate summary based on level\n let summary: string;\n\n switch (level) {\n case 'encyclopedia':\n summary = `Complete knowledge base with ${traces.length} traces covering ${this.getTopics(traces).join(', ')}`;\n break;\n case 'chapter':\n summary = `${traces.length} operations focused on ${this.getDominantOperation(traces)}`;\n break;\n case 'section':\n summary = `${traces.length} traces: ${this.getKeyActivities(traces).join(', ')}`;\n break;\n case 'paragraph':\n summary = traces\n .slice(0, 3)\n .map((t) => t.summary)\n .join('. ');\n break;\n default:\n summary = `${traces.length} items`;\n }\n\n this.summaryCache.set(cacheKey, summary);\n return summary;\n }\n\n /**\n * Extract topics from traces\n */\n private getTopics(traces: Trace[]): string[] {\n const topics = new Set<string>();\n\n for (const trace of traces) {\n topics.add(trace.type);\n }\n\n return Array.from(topics).slice(0, 5);\n }\n\n /**\n * Get dominant operation type\n */\n private getDominantOperation(traces: Trace[]): string {\n const counts: Record<string, number> = {};\n\n for (const trace of traces) {\n counts[trace.type] = (counts[trace.type] || 0) + 1;\n }\n\n const sorted = Object.entries(counts).sort((a, b) => b[1] - a[1]);\n return sorted[0]?.[0] || 'mixed operations';\n }\n\n /**\n * Get key activities\n */\n private getKeyActivities(traces: Trace[]): string[] {\n return traces.slice(0, 3).map((t) => t.type);\n }\n\n /**\n * Generate titles\n */\n private generateChapterTitle(traces: Trace[]): string {\n const start = new Date(traces[0].metadata.startTime);\n const operation = this.getDominantOperation(traces);\n return `${operation} (${start.toLocaleDateString()})`;\n }\n\n private generateSectionTitle(traces: Trace[]): string {\n const start = new Date(traces[0].metadata.startTime);\n return `Section ${start.toLocaleTimeString()}`;\n }\n\n private generateParagraphTitle(traces: Trace[]): string {\n return `${traces.length} traces`;\n }\n\n /**\n * Calculate similarity between traces\n */\n private async calculateSimilarity(a: Trace, b: Trace): Promise<number> {\n // Simple similarity based on type and time\n const typeSimilarity = a.type === b.type ? 1 : 0;\n const timeDiff = Math.abs(a.metadata.startTime - b.metadata.startTime);\n const timeSimilarity = 1 / (1 + timeDiff / (1000 * 60 * 60)); // Hour scale\n\n return typeSimilarity * 0.5 + timeSimilarity * 0.5;\n }\n\n /**\n * Store node in database\n */\n private async storeNode(node: RetrievalNode): Promise<void> {\n const stmt = this.db.prepare(`\n INSERT OR REPLACE INTO hierarchy_nodes (\n id, level, parent_id, title, summary,\n child_count, token_count, score,\n time_start, time_end,\n compression_ratio, semantic_density, access_pattern\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `);\n\n stmt.run(\n node.id,\n node.level.level,\n node.level.parentId || null,\n node.level.title,\n node.level.summary,\n node.level.childCount,\n node.level.tokenCount,\n node.level.score,\n node.level.timeRange.start,\n node.level.timeRange.end,\n node.level.metadata.compressionRatio || 1,\n node.level.metadata.semanticDensity || 1,\n node.level.metadata.accessPattern || 'cold'\n );\n\n // Store content if present\n if (node.content) {\n this.db\n .prepare(\n `\n INSERT OR REPLACE INTO hierarchy_content (\n node_id, content, compressed, original_size, compressed_size\n ) VALUES (?, ?, ?, ?, ?)\n `\n )\n .run(\n node.id,\n node.content,\n node.compressed ? 1 : 0,\n node.compressed ? node.content.length * 2 : node.content.length,\n node.content.length\n );\n }\n\n // Recursively store children\n if (node.children) {\n for (const child of node.children) {\n await this.storeNode(child);\n }\n }\n }\n\n /**\n * Load root encyclopedia node\n */\n private async loadRootNode(): Promise<RetrievalNode | null> {\n const row = this.db\n .prepare(\n `\n SELECT * FROM hierarchy_nodes\n WHERE level = 'encyclopedia'\n ORDER BY created_at DESC\n LIMIT 1\n `\n )\n .get() as any;\n\n if (!row) return null;\n\n return this.loadNode(row.id);\n }\n\n /**\n * Load node from database\n */\n private async loadNode(nodeId: string): Promise<RetrievalNode | null> {\n // Check cache\n if (this.hierarchyCache.has(nodeId)) {\n return this.hierarchyCache.get(nodeId)!;\n }\n\n const nodeRow = this.db\n .prepare(\n `\n SELECT * FROM hierarchy_nodes WHERE id = ?\n `\n )\n .get(nodeId) as any;\n\n if (!nodeRow) return null;\n\n // Load content if exists\n const contentRow = this.db\n .prepare(\n `\n SELECT * FROM hierarchy_content WHERE node_id = ?\n `\n )\n .get(nodeId) as any;\n\n // Load children\n const childRows = this.db\n .prepare(\n `\n SELECT id FROM hierarchy_nodes WHERE parent_id = ?\n `\n )\n .all(nodeId) as any[];\n\n const children: RetrievalNode[] = [];\n for (const childRow of childRows) {\n const child = await this.loadNode(childRow.id);\n if (child) children.push(child);\n }\n\n const node: RetrievalNode = {\n id: nodeRow.id,\n level: {\n level: nodeRow.level as any,\n id: nodeRow.id,\n parentId: nodeRow.parent_id,\n title: nodeRow.title,\n summary: nodeRow.summary,\n childCount: nodeRow.child_count,\n tokenCount: nodeRow.token_count,\n score: nodeRow.score,\n timeRange: {\n start: nodeRow.time_start,\n end: nodeRow.time_end,\n },\n metadata: {\n compressionRatio: nodeRow.compression_ratio,\n semanticDensity: nodeRow.semantic_density,\n accessPattern: nodeRow.access_pattern as any,\n lastAccessed: nodeRow.last_accessed,\n },\n },\n children: children.length > 0 ? children : undefined,\n content: contentRow?.content,\n compressed: contentRow?.compressed === 1,\n };\n\n // Cache the node\n this.hierarchyCache.set(nodeId, node);\n\n return node;\n }\n\n /**\n * Update access pattern for a node\n */\n private async updateAccessPattern(nodeId: string): Promise<void> {\n this.db\n .prepare(\n `\n UPDATE hierarchy_nodes\n SET last_accessed = ?, access_pattern = 'hot'\n WHERE id = ?\n `\n )\n .run(Date.now(), nodeId);\n }\n\n /**\n * Generate unique ID\n */\n private generateId(prefix: string): string {\n return `${prefix}_${crypto.randomBytes(8).toString('hex')}`;\n }\n\n /**\n * Get hierarchy statistics\n */\n getStatistics(): any {\n const stats = this.db\n .prepare(\n `\n SELECT \n level,\n COUNT(*) as count,\n AVG(token_count) as avg_tokens,\n AVG(child_count) as avg_children,\n AVG(compression_ratio) as avg_compression,\n AVG(semantic_density) as avg_density\n FROM hierarchy_nodes\n GROUP BY level\n `\n )\n .all();\n\n const totalNodes = this.db\n .prepare(\n `\n SELECT COUNT(*) as count FROM hierarchy_nodes\n `\n )\n .get() as any;\n\n const totalContent = this.db\n .prepare(\n `\n SELECT \n SUM(original_size) as original,\n SUM(compressed_size) as compressed\n FROM hierarchy_content\n `\n )\n .get() as any;\n\n return {\n nodesByLevel: stats,\n totalNodes: totalNodes.count,\n totalContent: {\n original: totalContent?.original || 0,\n compressed: totalContent?.compressed || 0,\n ratio: totalContent?.original\n ? (1 - totalContent.compressed / totalContent.original).toFixed(2)\n : 0,\n },\n cacheSize: this.hierarchyCache.size,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,517 @@
1
+ import { logger } from "../monitoring/logger.js";
2
+ import { LLMContextRetrieval } from "./llm-context-retrieval.js";
3
+ import { HierarchicalRetrieval } from "./hierarchical-retrieval.js";
4
+ import { GraphRetrieval } from "./graph-retrieval.js";
5
+ class RetrievalBenchmarks {
6
+ db;
7
+ flatRetrieval;
8
+ hierarchicalRetrieval;
9
+ graphRetrieval;
10
+ frameManager;
11
+ constructor(db, frameManager, projectId) {
12
+ this.db = db;
13
+ this.frameManager = frameManager;
14
+ this.flatRetrieval = new LLMContextRetrieval(db, frameManager, projectId);
15
+ this.hierarchicalRetrieval = new HierarchicalRetrieval(db);
16
+ this.graphRetrieval = new GraphRetrieval(db);
17
+ this.initializeSchema();
18
+ }
19
+ initializeSchema() {
20
+ this.db.exec(`
21
+ CREATE TABLE IF NOT EXISTS benchmark_results (
22
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
23
+ timestamp INTEGER DEFAULT (unixepoch() * 1000),
24
+ strategy TEXT NOT NULL,
25
+ query TEXT NOT NULL,
26
+ difficulty TEXT,
27
+ category TEXT,
28
+ precision REAL,
29
+ recall REAL,
30
+ f1_score REAL,
31
+ query_time_ms INTEGER,
32
+ tokens_used INTEGER,
33
+ semantic_drift REAL,
34
+ trace_count INTEGER,
35
+ retrieved_ids TEXT,
36
+ expected_ids TEXT
37
+ )
38
+ `);
39
+ this.db.exec(`
40
+ CREATE INDEX IF NOT EXISTS idx_benchmark_strategy ON benchmark_results(strategy);
41
+ CREATE INDEX IF NOT EXISTS idx_benchmark_timestamp ON benchmark_results(timestamp);
42
+ CREATE INDEX IF NOT EXISTS idx_benchmark_difficulty ON benchmark_results(difficulty);
43
+ `);
44
+ }
45
+ /**
46
+ * Generate benchmark queries based on current data
47
+ */
48
+ async generateBenchmarkQueries(traces) {
49
+ const queries = [];
50
+ const recentTraces = traces.sort((a, b) => b.metadata.startTime - a.metadata.startTime).slice(0, 10);
51
+ for (const trace of recentTraces.slice(0, 3)) {
52
+ queries.push({
53
+ query: `Show me the ${trace.type} operation from ${new Date(trace.metadata.startTime).toLocaleString()}`,
54
+ expectedTraceIds: [trace.id],
55
+ expectedTopics: [trace.type],
56
+ difficulty: "easy",
57
+ category: "specific_lookup"
58
+ });
59
+ }
60
+ const topicGroups = this.groupByTopic(traces);
61
+ for (const [topic, topicTraces] of topicGroups.entries()) {
62
+ if (topicTraces.length >= 5) {
63
+ queries.push({
64
+ query: `What ${topic} operations have been performed recently?`,
65
+ expectedTraceIds: topicTraces.slice(0, 10).map((t) => t.id),
66
+ expectedTopics: [topic],
67
+ difficulty: "medium",
68
+ category: "topic_search"
69
+ });
70
+ }
71
+ }
72
+ if (traces.length > 50) {
73
+ const errorTraces = traces.filter(
74
+ (t) => t.metadata.errorsEncountered.length > 0
75
+ );
76
+ if (errorTraces.length > 0) {
77
+ queries.push({
78
+ query: "What errors occurred and how were they resolved?",
79
+ expectedTraceIds: errorTraces.map((t) => t.id),
80
+ expectedTopics: ["error", "fix", "debug"],
81
+ difficulty: "hard",
82
+ category: "error_analysis"
83
+ });
84
+ }
85
+ const decisionTraces = traces.filter(
86
+ (t) => t.metadata.decisionsRecorded.length > 0
87
+ );
88
+ if (decisionTraces.length > 0) {
89
+ queries.push({
90
+ query: "What architectural decisions were made and why?",
91
+ expectedTraceIds: decisionTraces.map((t) => t.id),
92
+ expectedTopics: ["decision", "architecture", "design"],
93
+ difficulty: "hard",
94
+ category: "decision_tracking"
95
+ });
96
+ }
97
+ }
98
+ queries.push({
99
+ query: "something about code",
100
+ expectedTraceIds: [],
101
+ expectedTopics: [],
102
+ difficulty: "hard",
103
+ category: "vague_query"
104
+ });
105
+ queries.push({
106
+ query: "the thing we did yesterday with the files",
107
+ expectedTraceIds: [],
108
+ expectedTopics: [],
109
+ difficulty: "hard",
110
+ category: "ambiguous_query"
111
+ });
112
+ return queries;
113
+ }
114
+ /**
115
+ * Run benchmarks on all strategies
116
+ */
117
+ async runBenchmarks(traces, sampleSize = 10) {
118
+ logger.info("Starting retrieval benchmarks", {
119
+ traceCount: traces.length,
120
+ sampleSize
121
+ });
122
+ const queries = await this.generateBenchmarkQueries(traces);
123
+ const sampledQueries = this.sampleQueries(queries, sampleSize);
124
+ const results = [];
125
+ await this.hierarchicalRetrieval.buildHierarchy(traces);
126
+ const frames = await this.frameManager.getAllFrames();
127
+ await this.graphRetrieval.buildGraph(traces, frames);
128
+ for (const query of sampledQueries) {
129
+ const result = await this.benchmarkFlatRetrieval(query, traces);
130
+ results.push(result);
131
+ await this.saveResult(result, traces.length);
132
+ }
133
+ for (const query of sampledQueries) {
134
+ const result = await this.benchmarkHierarchicalRetrieval(query, traces);
135
+ results.push(result);
136
+ await this.saveResult(result, traces.length);
137
+ }
138
+ for (const query of sampledQueries) {
139
+ const result = await this.benchmarkGraphRetrieval(query, traces);
140
+ results.push(result);
141
+ await this.saveResult(result, traces.length);
142
+ }
143
+ const report = this.generateReport(results, traces.length);
144
+ logger.info("Benchmarks complete", {
145
+ strategies: 3,
146
+ queries: sampledQueries.length,
147
+ avgF1: {
148
+ flat: report.strategies.flat.avgF1Score,
149
+ hierarchical: report.strategies.hierarchical.avgF1Score,
150
+ graph: report.strategies.graph.avgF1Score
151
+ }
152
+ });
153
+ return report;
154
+ }
155
+ /**
156
+ * Benchmark flat embedding retrieval
157
+ */
158
+ async benchmarkFlatRetrieval(query, traces) {
159
+ const startTime = Date.now();
160
+ try {
161
+ const result = await this.flatRetrieval.retrieveContext(query.query, {
162
+ tokenBudget: 4e3
163
+ });
164
+ const retrievedIds = result.frames.map((f) => f.id);
165
+ const queryTime = Date.now() - startTime;
166
+ return this.evaluateResult(
167
+ "flat",
168
+ query,
169
+ retrievedIds,
170
+ queryTime,
171
+ result.tokenUsage.used,
172
+ "Standard flat embedding retrieval"
173
+ );
174
+ } catch (error) {
175
+ logger.error("Flat retrieval failed", error);
176
+ return this.createErrorResult("flat", query, error);
177
+ }
178
+ }
179
+ /**
180
+ * Benchmark hierarchical retrieval
181
+ */
182
+ async benchmarkHierarchicalRetrieval(query, traces) {
183
+ const startTime = Date.now();
184
+ try {
185
+ const context = await this.hierarchicalRetrieval.retrieve(
186
+ query.query,
187
+ 4,
188
+ 4e3
189
+ );
190
+ const queryTime = Date.now() - startTime;
191
+ const retrievedIds = this.extractTraceIds(context);
192
+ return this.evaluateResult(
193
+ "hierarchical",
194
+ query,
195
+ retrievedIds,
196
+ queryTime,
197
+ context.length / 4,
198
+ // Estimate tokens
199
+ "Hierarchical retrieval with progressive summarization"
200
+ );
201
+ } catch (error) {
202
+ logger.error("Hierarchical retrieval failed", error);
203
+ return this.createErrorResult("hierarchical", query, error);
204
+ }
205
+ }
206
+ /**
207
+ * Benchmark graph retrieval
208
+ */
209
+ async benchmarkGraphRetrieval(query, traces) {
210
+ const startTime = Date.now();
211
+ try {
212
+ const paths = await this.graphRetrieval.traverse(query.query, {
213
+ maxHops: 3,
214
+ minWeight: 0.3
215
+ });
216
+ const queryTime = Date.now() - startTime;
217
+ const retrievedIds = /* @__PURE__ */ new Set();
218
+ for (const path of paths) {
219
+ for (const node of path.nodes) {
220
+ if (node.metadata.traceIds) {
221
+ node.metadata.traceIds.forEach((id) => retrievedIds.add(id));
222
+ }
223
+ }
224
+ }
225
+ return this.evaluateResult(
226
+ "graph",
227
+ query,
228
+ Array.from(retrievedIds),
229
+ queryTime,
230
+ paths.length * 100,
231
+ // Estimate tokens
232
+ "Graph-based retrieval with explicit relationships"
233
+ );
234
+ } catch (error) {
235
+ logger.error("Graph retrieval failed", error);
236
+ return this.createErrorResult("graph", query, error);
237
+ }
238
+ }
239
+ /**
240
+ * Evaluate retrieval results
241
+ */
242
+ evaluateResult(strategy, query, retrievedIds, queryTimeMs, tokensUsed, explanation) {
243
+ const expectedSet = new Set(query.expectedTraceIds);
244
+ const retrievedSet = new Set(retrievedIds);
245
+ const truePositives = [...retrievedSet].filter(
246
+ (id) => expectedSet.has(id)
247
+ ).length;
248
+ const falsePositives = retrievedSet.size - truePositives;
249
+ const falseNegatives = expectedSet.size - truePositives;
250
+ const precision = retrievedSet.size > 0 ? truePositives / retrievedSet.size : 0;
251
+ const recall = expectedSet.size > 0 ? truePositives / expectedSet.size : 1;
252
+ const f1Score = precision + recall > 0 ? 2 * (precision * recall) / (precision + recall) : 0;
253
+ const semanticDrift = this.calculateSemanticDrift(query, retrievedIds);
254
+ return {
255
+ strategy,
256
+ query,
257
+ retrievedTraceIds: retrievedIds,
258
+ precision,
259
+ recall,
260
+ f1Score,
261
+ queryTimeMs,
262
+ tokensUsed,
263
+ semanticDrift,
264
+ explanation
265
+ };
266
+ }
267
+ /**
268
+ * Calculate semantic drift indicator
269
+ */
270
+ calculateSemanticDrift(query, retrievedIds) {
271
+ if (query.category === "vague_query" && retrievedIds.length > 10) {
272
+ return 0.8;
273
+ }
274
+ if (query.category === "specific_lookup" && retrievedIds.length === 0) {
275
+ return 0.7;
276
+ }
277
+ return 0.1;
278
+ }
279
+ /**
280
+ * Create error result
281
+ */
282
+ createErrorResult(strategy, query, error) {
283
+ return {
284
+ strategy,
285
+ query,
286
+ retrievedTraceIds: [],
287
+ precision: 0,
288
+ recall: 0,
289
+ f1Score: 0,
290
+ queryTimeMs: 0,
291
+ tokensUsed: 0,
292
+ semanticDrift: 1,
293
+ explanation: `Error: ${error.message}`
294
+ };
295
+ }
296
+ /**
297
+ * Generate benchmark report
298
+ */
299
+ generateReport(results, traceCount) {
300
+ const byStrategy = this.groupByStrategy(results);
301
+ const report = {
302
+ timestamp: Date.now(),
303
+ traceCount,
304
+ strategies: {
305
+ flat: this.calculateStrategyMetrics(byStrategy.flat || []),
306
+ hierarchical: this.calculateStrategyMetrics(
307
+ byStrategy.hierarchical || []
308
+ ),
309
+ graph: this.calculateStrategyMetrics(byStrategy.graph || [])
310
+ },
311
+ warnings: [],
312
+ recommendations: []
313
+ };
314
+ if (report.strategies.flat.semanticCollapse) {
315
+ report.warnings.push("Flat embedding shows signs of semantic collapse");
316
+ }
317
+ if (report.strategies.flat.avgQueryTime > 1e3) {
318
+ report.warnings.push("Flat retrieval query time exceeds 1 second");
319
+ }
320
+ const bestStrategy = this.getBestStrategy(report.strategies);
321
+ report.recommendations.push(`Best overall strategy: ${bestStrategy}`);
322
+ if (traceCount > 1e4) {
323
+ report.recommendations.push("Consider hierarchical retrieval for scale");
324
+ }
325
+ if (report.strategies.graph.avgF1Score > report.strategies.flat.avgF1Score * 1.2) {
326
+ report.recommendations.push(
327
+ "Graph retrieval significantly outperforms flat - consider switching"
328
+ );
329
+ }
330
+ return report;
331
+ }
332
+ /**
333
+ * Calculate strategy metrics
334
+ */
335
+ calculateStrategyMetrics(results) {
336
+ if (results.length === 0) {
337
+ return {
338
+ avgPrecision: 0,
339
+ avgRecall: 0,
340
+ avgF1Score: 0,
341
+ avgQueryTime: 0,
342
+ avgTokensUsed: 0,
343
+ semanticCollapse: false,
344
+ collapseIndicators: []
345
+ };
346
+ }
347
+ const avgPrecision = results.reduce((sum, r) => sum + r.precision, 0) / results.length;
348
+ const avgRecall = results.reduce((sum, r) => sum + r.recall, 0) / results.length;
349
+ const avgF1Score = results.reduce((sum, r) => sum + r.f1Score, 0) / results.length;
350
+ const avgQueryTime = results.reduce((sum, r) => sum + r.queryTimeMs, 0) / results.length;
351
+ const avgTokensUsed = results.reduce((sum, r) => sum + r.tokensUsed, 0) / results.length;
352
+ const collapseIndicators = [];
353
+ const avgDrift = results.reduce((sum, r) => sum + (r.semanticDrift || 0), 0) / results.length;
354
+ if (avgDrift > 0.5) {
355
+ collapseIndicators.push("High semantic drift detected");
356
+ }
357
+ const uniqueResults = new Set(
358
+ results.map((r) => r.retrievedTraceIds.sort().join(","))
359
+ );
360
+ if (uniqueResults.size < results.length * 0.3) {
361
+ collapseIndicators.push(
362
+ "Low result diversity - possible embedding collapse"
363
+ );
364
+ }
365
+ const specificQueries = results.filter(
366
+ (r) => r.query.difficulty === "easy"
367
+ );
368
+ const specificPrecision = specificQueries.reduce((sum, r) => sum + r.precision, 0) / (specificQueries.length || 1);
369
+ if (specificPrecision < 0.5) {
370
+ collapseIndicators.push("Poor precision on specific queries");
371
+ }
372
+ return {
373
+ avgPrecision,
374
+ avgRecall,
375
+ avgF1Score,
376
+ avgQueryTime,
377
+ avgTokensUsed,
378
+ semanticCollapse: collapseIndicators.length > 0,
379
+ collapseIndicators
380
+ };
381
+ }
382
+ /**
383
+ * Determine best strategy
384
+ */
385
+ getBestStrategy(strategies) {
386
+ const scores = {
387
+ flat: strategies.flat.avgF1Score * (1 - strategies.flat.avgQueryTime / 5e3),
388
+ hierarchical: strategies.hierarchical.avgF1Score * (1 - strategies.hierarchical.avgQueryTime / 5e3),
389
+ graph: strategies.graph.avgF1Score * (1 - strategies.graph.avgQueryTime / 5e3)
390
+ };
391
+ return Object.entries(scores).sort((a, b) => b[1] - a[1])[0][0];
392
+ }
393
+ /**
394
+ * Group traces by topic
395
+ */
396
+ groupByTopic(traces) {
397
+ const groups = /* @__PURE__ */ new Map();
398
+ for (const trace of traces) {
399
+ if (!groups.has(trace.type)) {
400
+ groups.set(trace.type, []);
401
+ }
402
+ groups.get(trace.type).push(trace);
403
+ }
404
+ return groups;
405
+ }
406
+ /**
407
+ * Group results by strategy
408
+ */
409
+ groupByStrategy(results) {
410
+ const grouped = {};
411
+ for (const result of results) {
412
+ if (!grouped[result.strategy]) {
413
+ grouped[result.strategy] = [];
414
+ }
415
+ grouped[result.strategy].push(result);
416
+ }
417
+ return grouped;
418
+ }
419
+ /**
420
+ * Sample queries for benchmarking
421
+ */
422
+ sampleQueries(queries, sampleSize) {
423
+ const byDifficulty = this.groupByDifficulty(queries);
424
+ const sampled = [];
425
+ const perDifficulty = Math.ceil(sampleSize / 3);
426
+ for (const difficulty of ["easy", "medium", "hard"]) {
427
+ const difficultyQueries = byDifficulty[difficulty] || [];
428
+ const sample = this.randomSample(difficultyQueries, perDifficulty);
429
+ sampled.push(...sample);
430
+ }
431
+ return sampled.slice(0, sampleSize);
432
+ }
433
+ /**
434
+ * Group queries by difficulty
435
+ */
436
+ groupByDifficulty(queries) {
437
+ const grouped = {};
438
+ for (const query of queries) {
439
+ if (!grouped[query.difficulty]) {
440
+ grouped[query.difficulty] = [];
441
+ }
442
+ grouped[query.difficulty].push(query);
443
+ }
444
+ return grouped;
445
+ }
446
+ /**
447
+ * Random sample from array
448
+ */
449
+ randomSample(array, size) {
450
+ const shuffled = [...array].sort(() => Math.random() - 0.5);
451
+ return shuffled.slice(0, size);
452
+ }
453
+ /**
454
+ * Extract trace IDs from context string
455
+ */
456
+ extractTraceIds(context) {
457
+ const matches = context.match(/trace_[a-f0-9]{16}/g) || [];
458
+ return [...new Set(matches)];
459
+ }
460
+ /**
461
+ * Save benchmark result to database
462
+ */
463
+ async saveResult(result, traceCount) {
464
+ this.db.prepare(
465
+ `
466
+ INSERT INTO benchmark_results (
467
+ strategy, query, difficulty, category,
468
+ precision, recall, f1_score,
469
+ query_time_ms, tokens_used, semantic_drift,
470
+ trace_count, retrieved_ids, expected_ids
471
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
472
+ `
473
+ ).run(
474
+ result.strategy,
475
+ result.query.query,
476
+ result.query.difficulty,
477
+ result.query.category,
478
+ result.precision,
479
+ result.recall,
480
+ result.f1Score,
481
+ result.queryTimeMs,
482
+ result.tokensUsed,
483
+ result.semanticDrift || 0,
484
+ traceCount,
485
+ JSON.stringify(result.retrievedTraceIds),
486
+ JSON.stringify(result.query.expectedTraceIds)
487
+ );
488
+ }
489
+ /**
490
+ * Get historical benchmark trends
491
+ */
492
+ getHistoricalTrends(days = 7) {
493
+ const cutoff = Date.now() - days * 24 * 60 * 60 * 1e3;
494
+ const trends = this.db.prepare(
495
+ `
496
+ SELECT
497
+ strategy,
498
+ DATE(timestamp / 1000, 'unixepoch') as date,
499
+ AVG(precision) as avg_precision,
500
+ AVG(recall) as avg_recall,
501
+ AVG(f1_score) as avg_f1,
502
+ AVG(query_time_ms) as avg_query_time,
503
+ AVG(semantic_drift) as avg_drift,
504
+ COUNT(*) as query_count
505
+ FROM benchmark_results
506
+ WHERE timestamp > ?
507
+ GROUP BY strategy, date
508
+ ORDER BY date, strategy
509
+ `
510
+ ).all(cutoff);
511
+ return trends;
512
+ }
513
+ }
514
+ export {
515
+ RetrievalBenchmarks
516
+ };
517
+ //# sourceMappingURL=retrieval-benchmarks.js.map