@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
@@ -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