@stackmemoryai/stackmemory 0.3.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (736) hide show
  1. package/README.md +52 -272
  2. package/dist/cli/codex-sm.js +48 -19
  3. package/dist/cli/codex-sm.js.map +2 -2
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/dashboard.js +178 -0
  9. package/dist/cli/commands/dashboard.js.map +7 -0
  10. package/dist/cli/commands/handoff.js +125 -8
  11. package/dist/cli/commands/handoff.js.map +2 -2
  12. package/dist/cli/commands/linear-create.js +132 -0
  13. package/dist/cli/commands/linear-create.js.map +7 -0
  14. package/dist/cli/commands/linear-list.js +69 -0
  15. package/dist/cli/commands/linear-list.js.map +7 -0
  16. package/dist/cli/commands/linear-migrate.js +40 -0
  17. package/dist/cli/commands/linear-migrate.js.map +7 -0
  18. package/dist/cli/commands/linear.js +185 -36
  19. package/dist/cli/commands/linear.js.map +2 -2
  20. package/dist/cli/commands/monitor.js +309 -0
  21. package/dist/cli/commands/monitor.js.map +7 -0
  22. package/dist/cli/commands/quality.js +414 -0
  23. package/dist/cli/commands/quality.js.map +7 -0
  24. package/dist/cli/commands/storage.js +275 -0
  25. package/dist/cli/commands/storage.js.map +7 -0
  26. package/dist/cli/commands/tui.js +66 -0
  27. package/dist/cli/commands/tui.js.map +7 -0
  28. package/dist/cli/commands/workflow.js +134 -0
  29. package/dist/cli/commands/workflow.js.map +7 -0
  30. package/dist/cli/index.js +105 -9
  31. package/dist/cli/index.js.map +3 -3
  32. package/dist/core/analytics/team-analytics.js +374 -0
  33. package/dist/core/analytics/team-analytics.js.map +7 -0
  34. package/dist/core/context/context-bridge.js +234 -0
  35. package/dist/core/context/context-bridge.js.map +7 -0
  36. package/dist/core/context/dual-stack-manager.js +850 -0
  37. package/dist/core/context/dual-stack-manager.js.map +7 -0
  38. package/dist/core/context/frame-handoff-manager.js +384 -0
  39. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  40. package/dist/core/context/frame-manager.js +132 -12
  41. package/dist/core/context/frame-manager.js.map +2 -2
  42. package/dist/core/context/permission-manager.js +181 -0
  43. package/dist/core/context/permission-manager.js.map +7 -0
  44. package/dist/core/context/shared-context-layer.js +386 -0
  45. package/dist/core/context/shared-context-layer.js.map +7 -0
  46. package/dist/core/context/stack-merge-resolver.js +600 -0
  47. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  48. package/dist/core/context/validation.js +121 -0
  49. package/dist/core/context/validation.js.map +7 -0
  50. package/dist/core/database/connection-pool.js +266 -175
  51. package/dist/core/database/connection-pool.js.map +2 -2
  52. package/dist/core/database/database-adapter.js +51 -0
  53. package/dist/core/database/database-adapter.js.map +7 -0
  54. package/dist/core/database/migration-manager.js +514 -0
  55. package/dist/core/database/migration-manager.js.map +7 -0
  56. package/dist/core/database/paradedb-adapter.js +970 -0
  57. package/dist/core/database/paradedb-adapter.js.map +7 -0
  58. package/dist/core/database/query-router.js +421 -0
  59. package/dist/core/database/query-router.js.map +7 -0
  60. package/dist/core/database/sqlite-adapter.js +547 -0
  61. package/dist/core/database/sqlite-adapter.js.map +7 -0
  62. package/dist/core/errors/index.js +21 -1
  63. package/dist/core/errors/index.js.map +2 -2
  64. package/dist/core/frame/workflow-templates-stub.js +42 -0
  65. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  66. package/dist/core/frame/workflow-templates.js +276 -0
  67. package/dist/core/frame/workflow-templates.js.map +7 -0
  68. package/dist/core/merge/conflict-detector.js +5 -2
  69. package/dist/core/merge/conflict-detector.js.map +2 -2
  70. package/dist/core/merge/resolution-engine.js +3 -14
  71. package/dist/core/merge/resolution-engine.js.map +2 -2
  72. package/dist/core/merge/stack-diff.js.map +2 -2
  73. package/dist/core/monitoring/logger.js +18 -3
  74. package/dist/core/monitoring/logger.js.map +2 -2
  75. package/dist/core/monitoring/session-monitor.js +296 -0
  76. package/dist/core/monitoring/session-monitor.js.map +7 -0
  77. package/dist/core/retrieval/context-retriever.js +475 -0
  78. package/dist/core/retrieval/context-retriever.js.map +7 -0
  79. package/dist/core/retrieval/graph-retrieval.js +658 -0
  80. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  81. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  82. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  83. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  84. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  85. package/dist/core/session/clear-survival-stub.js +49 -0
  86. package/dist/core/session/clear-survival-stub.js.map +7 -0
  87. package/dist/core/session/clear-survival.js +426 -0
  88. package/dist/core/session/clear-survival.js.map +7 -0
  89. package/dist/core/session/handoff-generator.js +339 -0
  90. package/dist/core/session/handoff-generator.js.map +7 -0
  91. package/dist/core/session/session-manager.js +61 -26
  92. package/dist/core/session/session-manager.js.map +3 -3
  93. package/dist/core/skills/index.js +3 -0
  94. package/dist/core/skills/index.js.map +7 -0
  95. package/dist/core/skills/skill-storage.js +749 -0
  96. package/dist/core/skills/skill-storage.js.map +7 -0
  97. package/dist/core/skills/types.js +189 -0
  98. package/dist/core/skills/types.js.map +7 -0
  99. package/dist/core/storage/railway-optimized-storage.js +550 -0
  100. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  101. package/dist/core/storage/remote-storage.js +456 -0
  102. package/dist/core/storage/remote-storage.js.map +7 -0
  103. package/dist/core/trace/trace-detector.js +136 -5
  104. package/dist/core/trace/trace-detector.js.map +2 -2
  105. package/dist/core/trace/trace-store.js.map +2 -2
  106. package/dist/features/tui/components/analytics-panel.js +136 -0
  107. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  108. package/dist/features/tui/components/frame-visualizer.js +377 -0
  109. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  110. package/dist/features/tui/components/pr-tracker.js +123 -0
  111. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  112. package/dist/features/tui/components/session-monitor.js +286 -0
  113. package/dist/features/tui/components/session-monitor.js.map +7 -0
  114. package/dist/features/tui/components/subagent-fleet.js +388 -0
  115. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  116. package/dist/features/tui/components/task-board.js +475 -0
  117. package/dist/features/tui/components/task-board.js.map +7 -0
  118. package/dist/features/tui/index.js +397 -0
  119. package/dist/features/tui/index.js.map +7 -0
  120. package/dist/features/tui/services/data-service.js +654 -0
  121. package/dist/features/tui/services/data-service.js.map +7 -0
  122. package/dist/features/tui/services/websocket-client.js +149 -0
  123. package/dist/features/tui/services/websocket-client.js.map +7 -0
  124. package/dist/features/tui/terminal-compat.js +205 -0
  125. package/dist/features/tui/terminal-compat.js.map +7 -0
  126. package/dist/features/tui/types.js +1 -0
  127. package/dist/features/tui/types.js.map +7 -0
  128. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  129. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  130. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  131. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  132. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  133. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  134. package/dist/integrations/linear/client.js +22 -4
  135. package/dist/integrations/linear/client.js.map +2 -2
  136. package/dist/integrations/linear/migration.js +299 -0
  137. package/dist/integrations/linear/migration.js.map +7 -0
  138. package/dist/integrations/linear/oauth-server.js +396 -0
  139. package/dist/integrations/linear/oauth-server.js.map +7 -0
  140. package/dist/integrations/linear/rest-client.js +199 -0
  141. package/dist/integrations/linear/rest-client.js.map +7 -0
  142. package/dist/integrations/linear/sync.js +14 -2
  143. package/dist/integrations/linear/sync.js.map +2 -2
  144. package/dist/integrations/linear/webhook-handler.js +200 -0
  145. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  146. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  147. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  148. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  149. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  150. package/dist/integrations/mcp/refactored-server.js +31 -3
  151. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  152. package/dist/integrations/mcp/server.js +25 -7
  153. package/dist/integrations/mcp/server.js.map +2 -2
  154. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  155. package/dist/models/user.model.js +3 -0
  156. package/dist/models/user.model.js.map +2 -2
  157. package/dist/services/context-service.js.map +2 -2
  158. package/dist/utils/formatting.js +58 -0
  159. package/dist/utils/formatting.js.map +7 -0
  160. package/package.json +24 -5
  161. package/dist/cli/__tests__/index.test.js +0 -290
  162. package/dist/cli/__tests__/index.test.js.map +0 -7
  163. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  164. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  165. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  166. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  167. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  168. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  169. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  170. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  171. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  172. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  173. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  174. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  175. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  176. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  177. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  178. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  179. package/dist/core/trace/trace-detector.test.js +0 -401
  180. package/dist/core/trace/trace-detector.test.js.map +0 -7
  181. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  182. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  183. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  184. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  185. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  186. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  187. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  188. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  189. package/dist/scripts/benchmark-performance.d.ts +0 -7
  190. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  191. package/dist/scripts/benchmark-performance.js +0 -44
  192. package/dist/scripts/benchmark-performance.js.map +0 -1
  193. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  194. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  195. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  196. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  197. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  198. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  199. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  200. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  201. package/dist/scripts/initialize.d.ts +0 -6
  202. package/dist/scripts/initialize.d.ts.map +0 -1
  203. package/dist/scripts/initialize.js +0 -93
  204. package/dist/scripts/initialize.js.map +0 -1
  205. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  206. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  207. package/dist/scripts/list-linear-tasks.js +0 -121
  208. package/dist/scripts/list-linear-tasks.js.map +0 -1
  209. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  210. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  211. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  212. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  213. package/dist/scripts/show-linear-summary.d.ts +0 -6
  214. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  215. package/dist/scripts/show-linear-summary.js +0 -120
  216. package/dist/scripts/show-linear-summary.js.map +0 -1
  217. package/dist/scripts/status.d.ts +0 -6
  218. package/dist/scripts/status.d.ts.map +0 -1
  219. package/dist/scripts/status.js +0 -101
  220. package/dist/scripts/status.js.map +0 -1
  221. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  222. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  223. package/dist/src/agents/core/agent-task-manager.js +0 -504
  224. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  225. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  226. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  227. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  228. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  229. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  230. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  231. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  232. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  233. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  234. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  236. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  237. package/dist/src/cli/auto-detect.d.ts +0 -61
  238. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  239. package/dist/src/cli/auto-detect.js +0 -350
  240. package/dist/src/cli/auto-detect.js.map +0 -1
  241. package/dist/src/cli/browser-test.d.ts +0 -6
  242. package/dist/src/cli/browser-test.d.ts.map +0 -1
  243. package/dist/src/cli/browser-test.js +0 -32
  244. package/dist/src/cli/browser-test.js.map +0 -1
  245. package/dist/src/cli/claude-sm.d.ts +0 -7
  246. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  247. package/dist/src/cli/claude-sm.js +0 -412
  248. package/dist/src/cli/claude-sm.js.map +0 -1
  249. package/dist/src/cli/commands/agent.d.ts +0 -9
  250. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  251. package/dist/src/cli/commands/agent.js +0 -303
  252. package/dist/src/cli/commands/agent.js.map +0 -1
  253. package/dist/src/cli/commands/config.d.ts +0 -6
  254. package/dist/src/cli/commands/config.d.ts.map +0 -1
  255. package/dist/src/cli/commands/config.js +0 -224
  256. package/dist/src/cli/commands/config.js.map +0 -1
  257. package/dist/src/cli/commands/context.d.ts +0 -7
  258. package/dist/src/cli/commands/context.d.ts.map +0 -1
  259. package/dist/src/cli/commands/context.js +0 -365
  260. package/dist/src/cli/commands/context.js.map +0 -1
  261. package/dist/src/cli/commands/handoff.d.ts +0 -6
  262. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  263. package/dist/src/cli/commands/handoff.js +0 -212
  264. package/dist/src/cli/commands/handoff.js.map +0 -1
  265. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  266. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  267. package/dist/src/cli/commands/linear-test.js +0 -123
  268. package/dist/src/cli/commands/linear-test.js.map +0 -1
  269. package/dist/src/cli/commands/linear.d.ts +0 -6
  270. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  271. package/dist/src/cli/commands/linear.js +0 -393
  272. package/dist/src/cli/commands/linear.js.map +0 -1
  273. package/dist/src/cli/commands/log.d.ts +0 -7
  274. package/dist/src/cli/commands/log.d.ts.map +0 -1
  275. package/dist/src/cli/commands/log.js +0 -168
  276. package/dist/src/cli/commands/log.js.map +0 -1
  277. package/dist/src/cli/commands/onboard.d.ts +0 -8
  278. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  279. package/dist/src/cli/commands/onboard.js +0 -363
  280. package/dist/src/cli/commands/onboard.js.map +0 -1
  281. package/dist/src/cli/commands/projects.d.ts +0 -8
  282. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  283. package/dist/src/cli/commands/projects.js +0 -220
  284. package/dist/src/cli/commands/projects.js.map +0 -1
  285. package/dist/src/cli/commands/search.d.ts +0 -7
  286. package/dist/src/cli/commands/search.d.ts.map +0 -1
  287. package/dist/src/cli/commands/search.js +0 -162
  288. package/dist/src/cli/commands/search.js.map +0 -1
  289. package/dist/src/cli/commands/session.d.ts +0 -7
  290. package/dist/src/cli/commands/session.d.ts.map +0 -1
  291. package/dist/src/cli/commands/session.js +0 -222
  292. package/dist/src/cli/commands/session.js.map +0 -1
  293. package/dist/src/cli/commands/tasks.d.ts +0 -7
  294. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  295. package/dist/src/cli/commands/tasks.js +0 -229
  296. package/dist/src/cli/commands/tasks.js.map +0 -1
  297. package/dist/src/cli/commands/webhook.d.ts +0 -3
  298. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  299. package/dist/src/cli/commands/webhook.js +0 -157
  300. package/dist/src/cli/commands/webhook.js.map +0 -1
  301. package/dist/src/cli/commands/worktree.d.ts +0 -8
  302. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  303. package/dist/src/cli/commands/worktree.js +0 -339
  304. package/dist/src/cli/commands/worktree.js.map +0 -1
  305. package/dist/src/cli/index.d.ts +0 -8
  306. package/dist/src/cli/index.d.ts.map +0 -1
  307. package/dist/src/cli/index.js +0 -995
  308. package/dist/src/cli/index.js.map +0 -1
  309. package/dist/src/cli/utils/viewer.d.ts +0 -3
  310. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  311. package/dist/src/cli/utils/viewer.js +0 -91
  312. package/dist/src/cli/utils/viewer.js.map +0 -1
  313. package/dist/src/core/config/config-manager.d.ts +0 -95
  314. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  315. package/dist/src/core/config/config-manager.js +0 -359
  316. package/dist/src/core/config/config-manager.js.map +0 -1
  317. package/dist/src/core/config/types.d.ts +0 -72
  318. package/dist/src/core/config/types.d.ts.map +0 -1
  319. package/dist/src/core/config/types.js +0 -127
  320. package/dist/src/core/config/types.js.map +0 -1
  321. package/dist/src/core/context/auto-context.d.ts +0 -22
  322. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  323. package/dist/src/core/context/auto-context.js +0 -77
  324. package/dist/src/core/context/auto-context.js.map +0 -1
  325. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  326. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  327. package/dist/src/core/context/compaction-handler.js +0 -306
  328. package/dist/src/core/context/compaction-handler.js.map +0 -1
  329. package/dist/src/core/context/frame-database.d.ts +0 -59
  330. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  331. package/dist/src/core/context/frame-database.js +0 -333
  332. package/dist/src/core/context/frame-database.js.map +0 -1
  333. package/dist/src/core/context/frame-digest.d.ts +0 -59
  334. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  335. package/dist/src/core/context/frame-digest.js +0 -264
  336. package/dist/src/core/context/frame-digest.js.map +0 -1
  337. package/dist/src/core/context/frame-manager.d.ts +0 -112
  338. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-manager.js +0 -600
  340. package/dist/src/core/context/frame-manager.js.map +0 -1
  341. package/dist/src/core/context/frame-stack.d.ts +0 -85
  342. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-stack.js +0 -287
  344. package/dist/src/core/context/frame-stack.js.map +0 -1
  345. package/dist/src/core/context/frame-types.d.ts +0 -67
  346. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-types.js +0 -6
  348. package/dist/src/core/context/frame-types.js.map +0 -1
  349. package/dist/src/core/context/index.d.ts +0 -11
  350. package/dist/src/core/context/index.d.ts.map +0 -1
  351. package/dist/src/core/context/index.js +0 -14
  352. package/dist/src/core/context/index.js.map +0 -1
  353. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  354. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  355. package/dist/src/core/context/model-aware-compaction.js +0 -616
  356. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  357. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  358. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  359. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  360. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  361. package/dist/src/core/database/batch-operations.d.ts +0 -118
  362. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  363. package/dist/src/core/database/batch-operations.js +0 -339
  364. package/dist/src/core/database/batch-operations.js.map +0 -1
  365. package/dist/src/core/database/connection-pool.d.ts +0 -79
  366. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  367. package/dist/src/core/database/connection-pool.js +0 -236
  368. package/dist/src/core/database/connection-pool.js.map +0 -1
  369. package/dist/src/core/database/query-cache.d.ts +0 -135
  370. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  371. package/dist/src/core/database/query-cache.js +0 -294
  372. package/dist/src/core/database/query-cache.js.map +0 -1
  373. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  374. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  375. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  376. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  377. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  378. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  379. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  380. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  381. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  382. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  383. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  384. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  385. package/dist/src/core/digest/index.d.ts +0 -9
  386. package/dist/src/core/digest/index.d.ts.map +0 -1
  387. package/dist/src/core/digest/index.js +0 -9
  388. package/dist/src/core/digest/index.js.map +0 -1
  389. package/dist/src/core/digest/types.d.ts +0 -154
  390. package/dist/src/core/digest/types.d.ts.map +0 -1
  391. package/dist/src/core/digest/types.js +0 -18
  392. package/dist/src/core/digest/types.js.map +0 -1
  393. package/dist/src/core/errors/index.d.ts +0 -143
  394. package/dist/src/core/errors/index.d.ts.map +0 -1
  395. package/dist/src/core/errors/index.js +0 -282
  396. package/dist/src/core/errors/index.js.map +0 -1
  397. package/dist/src/core/errors/recovery.d.ts +0 -86
  398. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  399. package/dist/src/core/errors/recovery.js +0 -274
  400. package/dist/src/core/errors/recovery.js.map +0 -1
  401. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  402. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  403. package/dist/src/core/merge/conflict-detector.js +0 -468
  404. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  405. package/dist/src/core/merge/index.d.ts +0 -9
  406. package/dist/src/core/merge/index.d.ts.map +0 -1
  407. package/dist/src/core/merge/index.js +0 -9
  408. package/dist/src/core/merge/index.js.map +0 -1
  409. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  410. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  411. package/dist/src/core/merge/resolution-engine.js +0 -573
  412. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  413. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  414. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  415. package/dist/src/core/merge/stack-diff.js +0 -516
  416. package/dist/src/core/merge/stack-diff.js.map +0 -1
  417. package/dist/src/core/merge/types.d.ts +0 -110
  418. package/dist/src/core/merge/types.d.ts.map +0 -1
  419. package/dist/src/core/merge/types.js +0 -6
  420. package/dist/src/core/merge/types.js.map +0 -1
  421. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  422. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  423. package/dist/src/core/monitoring/error-handler.js +0 -212
  424. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  425. package/dist/src/core/monitoring/logger.d.ts +0 -24
  426. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  427. package/dist/src/core/monitoring/logger.js +0 -126
  428. package/dist/src/core/monitoring/logger.js.map +0 -1
  429. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  430. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/metrics.js +0 -152
  432. package/dist/src/core/monitoring/metrics.js.map +0 -1
  433. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  434. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  436. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  437. package/dist/src/core/performance/context-cache.d.ts +0 -109
  438. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  439. package/dist/src/core/performance/context-cache.js +0 -280
  440. package/dist/src/core/performance/context-cache.js.map +0 -1
  441. package/dist/src/core/performance/index.d.ts +0 -3
  442. package/dist/src/core/performance/index.d.ts.map +0 -1
  443. package/dist/src/core/performance/index.js +0 -3
  444. package/dist/src/core/performance/index.js.map +0 -1
  445. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  446. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  447. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  448. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  449. package/dist/src/core/performance/monitor.d.ts +0 -48
  450. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  451. package/dist/src/core/performance/monitor.js +0 -226
  452. package/dist/src/core/performance/monitor.js.map +0 -1
  453. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  454. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  455. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  456. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  457. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  458. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  459. package/dist/src/core/performance/performance-benchmark.js +0 -290
  460. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  461. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  462. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  463. package/dist/src/core/performance/performance-profiler.js +0 -346
  464. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  465. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  466. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  467. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  468. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  469. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  470. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  471. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  472. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  473. package/dist/src/core/projects/project-manager.d.ts +0 -130
  474. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  475. package/dist/src/core/projects/project-manager.js +0 -709
  476. package/dist/src/core/projects/project-manager.js.map +0 -1
  477. package/dist/src/core/query/query-parser.d.ts +0 -109
  478. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  479. package/dist/src/core/query/query-parser.js +0 -415
  480. package/dist/src/core/query/query-parser.js.map +0 -1
  481. package/dist/src/core/query/query-templates.d.ts +0 -44
  482. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  483. package/dist/src/core/query/query-templates.js +0 -326
  484. package/dist/src/core/query/query-templates.js.map +0 -1
  485. package/dist/src/core/retrieval/index.d.ts +0 -8
  486. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  487. package/dist/src/core/retrieval/index.js +0 -8
  488. package/dist/src/core/retrieval/index.js.map +0 -1
  489. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  490. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  491. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  492. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  493. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  494. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/summary-generator.js +0 -622
  496. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  497. package/dist/src/core/retrieval/types.d.ts +0 -257
  498. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/types.js +0 -18
  500. package/dist/src/core/retrieval/types.js.map +0 -1
  501. package/dist/src/core/session/index.d.ts +0 -2
  502. package/dist/src/core/session/index.d.ts.map +0 -1
  503. package/dist/src/core/session/index.js +0 -2
  504. package/dist/src/core/session/index.js.map +0 -1
  505. package/dist/src/core/session/session-manager.d.ts +0 -69
  506. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  507. package/dist/src/core/session/session-manager.js +0 -311
  508. package/dist/src/core/session/session-manager.js.map +0 -1
  509. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  510. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  511. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  512. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  513. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  514. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  515. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  516. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  517. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  518. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  519. package/dist/src/core/trace/debug-trace.js +0 -402
  520. package/dist/src/core/trace/debug-trace.js.map +0 -1
  521. package/dist/src/core/trace/error-test.d.ts +0 -6
  522. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  523. package/dist/src/core/trace/error-test.js +0 -128
  524. package/dist/src/core/trace/error-test.js.map +0 -1
  525. package/dist/src/core/trace/index.d.ts +0 -25
  526. package/dist/src/core/trace/index.d.ts.map +0 -1
  527. package/dist/src/core/trace/index.js +0 -121
  528. package/dist/src/core/trace/index.js.map +0 -1
  529. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  530. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  531. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  532. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  533. package/dist/src/core/trace/performance-test.d.ts +0 -6
  534. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  535. package/dist/src/core/trace/performance-test.js +0 -111
  536. package/dist/src/core/trace/performance-test.js.map +0 -1
  537. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  538. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  539. package/dist/src/core/trace/trace-demo.js +0 -154
  540. package/dist/src/core/trace/trace-demo.js.map +0 -1
  541. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  542. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  543. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  544. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  545. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  546. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  547. package/dist/src/core/trace/trace-detector.js +0 -425
  548. package/dist/src/core/trace/trace-detector.js.map +0 -1
  549. package/dist/src/core/trace/trace-store.d.ts +0 -60
  550. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-store.js +0 -323
  552. package/dist/src/core/trace/trace-store.js.map +0 -1
  553. package/dist/src/core/trace/types.d.ts +0 -81
  554. package/dist/src/core/trace/types.d.ts.map +0 -1
  555. package/dist/src/core/trace/types.js +0 -70
  556. package/dist/src/core/trace/types.js.map +0 -1
  557. package/dist/src/core/types.d.ts +0 -35
  558. package/dist/src/core/types.d.ts.map +0 -1
  559. package/dist/src/core/types.js +0 -2
  560. package/dist/src/core/types.js.map +0 -1
  561. package/dist/src/core/utils/update-checker.d.ts +0 -38
  562. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  563. package/dist/src/core/utils/update-checker.js +0 -213
  564. package/dist/src/core/utils/update-checker.js.map +0 -1
  565. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  566. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  567. package/dist/src/core/worktree/worktree-manager.js +0 -456
  568. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  569. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  570. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  571. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  572. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  573. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  574. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  575. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  576. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  577. package/dist/src/features/analytics/index.d.ts +0 -12
  578. package/dist/src/features/analytics/index.d.ts.map +0 -1
  579. package/dist/src/features/analytics/index.js +0 -11
  580. package/dist/src/features/analytics/index.js.map +0 -1
  581. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  582. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  583. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  584. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  585. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  586. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  587. package/dist/src/features/analytics/types/metrics.js +0 -2
  588. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  589. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  590. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  591. package/dist/src/features/browser/browser-mcp.js +0 -459
  592. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  593. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  594. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  595. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  596. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  597. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  598. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  599. package/dist/src/features/tasks/task-aware-context.js +0 -412
  600. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  601. package/dist/src/index.d.ts +0 -21
  602. package/dist/src/index.d.ts.map +0 -1
  603. package/dist/src/index.js +0 -9
  604. package/dist/src/index.js.map +0 -1
  605. package/dist/src/integrations/linear/auth.d.ts +0 -99
  606. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  607. package/dist/src/integrations/linear/auth.js +0 -319
  608. package/dist/src/integrations/linear/auth.js.map +0 -1
  609. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  610. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  611. package/dist/src/integrations/linear/auto-sync.js +0 -268
  612. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  613. package/dist/src/integrations/linear/client.d.ts +0 -127
  614. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/client.js +0 -446
  616. package/dist/src/integrations/linear/client.js.map +0 -1
  617. package/dist/src/integrations/linear/config.d.ts +0 -51
  618. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/config.js +0 -103
  620. package/dist/src/integrations/linear/config.js.map +0 -1
  621. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  622. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/sync-manager.js +0 -235
  624. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  625. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  626. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/sync-service.js +0 -217
  628. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  629. package/dist/src/integrations/linear/sync.d.ts +0 -125
  630. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync.js +0 -563
  632. package/dist/src/integrations/linear/sync.js.map +0 -1
  633. package/dist/src/integrations/linear/types.d.ts +0 -90
  634. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/types.js +0 -2
  636. package/dist/src/integrations/linear/types.js.map +0 -1
  637. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  638. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/webhook-server.js +0 -190
  640. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  641. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  642. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/webhook.js +0 -291
  644. package/dist/src/integrations/linear/webhook.js.map +0 -1
  645. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  646. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  647. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  648. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  649. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  650. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  651. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  652. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  654. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  656. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  658. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  660. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  662. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  664. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/index.d.ts +0 -13
  666. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/index.js +0 -17
  668. package/dist/src/integrations/mcp/index.js.map +0 -1
  669. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  670. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  672. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  673. package/dist/src/integrations/mcp/server.d.ts +0 -54
  674. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/server.js +0 -1616
  676. package/dist/src/integrations/mcp/server.js.map +0 -1
  677. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  678. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  680. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  681. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  682. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/trace-test.js +0 -54
  684. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  685. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  686. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  687. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  688. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  689. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  690. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  691. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  692. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  694. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  696. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  697. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  698. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  699. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  700. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  701. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  702. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  703. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  704. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  705. package/dist/src/models/user.model.d.ts +0 -62
  706. package/dist/src/models/user.model.d.ts.map +0 -1
  707. package/dist/src/models/user.model.js +0 -311
  708. package/dist/src/models/user.model.js.map +0 -1
  709. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  710. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  711. package/dist/src/servers/production/auth-middleware.js +0 -558
  712. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  713. package/dist/src/servers/railway/index.d.ts +0 -7
  714. package/dist/src/servers/railway/index.d.ts.map +0 -1
  715. package/dist/src/servers/railway/index.js +0 -401
  716. package/dist/src/servers/railway/index.js.map +0 -1
  717. package/dist/src/services/config-service.d.ts +0 -44
  718. package/dist/src/services/config-service.d.ts.map +0 -1
  719. package/dist/src/services/config-service.js +0 -61
  720. package/dist/src/services/config-service.js.map +0 -1
  721. package/dist/src/services/context-service.d.ts +0 -17
  722. package/dist/src/services/context-service.d.ts.map +0 -1
  723. package/dist/src/services/context-service.js +0 -173
  724. package/dist/src/services/context-service.js.map +0 -1
  725. package/dist/src/types/task.d.ts +0 -27
  726. package/dist/src/types/task.d.ts.map +0 -1
  727. package/dist/src/types/task.js +0 -2
  728. package/dist/src/types/task.js.map +0 -1
  729. package/dist/src/utils/logger.d.ts +0 -13
  730. package/dist/src/utils/logger.d.ts.map +0 -1
  731. package/dist/src/utils/logger.js +0 -52
  732. package/dist/src/utils/logger.js.map +0 -1
  733. package/dist/src/validation/schemas.d.ts +0 -633
  734. package/dist/src/validation/schemas.d.ts.map +0 -1
  735. package/dist/src/validation/schemas.js +0 -347
  736. package/dist/src/validation/schemas.js.map +0 -1
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/core/context/__tests__/frame-manager.test.ts"],
4
- "sourcesContent": ["/**\n * Tests for FrameManager - Call Stack Implementation\n */\n\nimport { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport Database from 'better-sqlite3';\nimport { FrameManager, FrameType, FrameState, Frame } from '../frame-manager';\nimport { DatabaseError, FrameError, ErrorCode } from '../../errors/index';\nimport { join } from 'path';\nimport { mkdtempSync, rmSync } from 'fs';\nimport { tmpdir } from 'os';\n\ndescribe('FrameManager', () => {\n let db: Database.Database;\n let frameManager: FrameManager;\n let tempDir: string;\n const projectId = 'test-project';\n\n beforeEach(() => {\n // Create a temporary directory for test database\n tempDir = mkdtempSync(join(tmpdir(), 'stackmemory-test-'));\n const dbPath = join(tempDir, 'test.db');\n \n // Initialize database\n db = new Database(dbPath);\n \n // Create frame manager\n frameManager = new FrameManager(db, projectId);\n });\n\n afterEach(() => {\n // Clean up\n if (db) {\n db.close();\n }\n if (tempDir) {\n rmSync(tempDir, { recursive: true, force: true });\n }\n });\n\n describe('Initialization', () => {\n it('should initialize database schema correctly', () => {\n // Check if tables exist\n const tables = db.prepare(`\n SELECT name FROM sqlite_master \n WHERE type='table' AND name IN ('frames', 'events', 'anchors')\n `).all();\n\n expect(tables).toHaveLength(3);\n expect(tables.map((t: { name: string }) => t.name)).toContain('frames');\n expect(tables.map((t: { name: string }) => t.name)).toContain('events');\n expect(tables.map((t: { name: string }) => t.name)).toContain('anchors');\n });\n\n it('should load empty active stack on initialization', () => {\n const stackDepth = frameManager.getStackDepth();\n expect(stackDepth).toBe(0);\n });\n });\n\n describe('Frame Creation', () => {\n it('should create a new frame successfully', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Test Task',\n inputs: { input: 'test' },\n });\n\n expect(frameId).toBeDefined();\n expect(typeof frameId).toBe('string');\n \n const frame = frameManager.getFrame(frameId);\n expect(frame).toBeDefined();\n expect(frame!.frame_id).toBe(frameId);\n expect(frame!.name).toBe('Test Task');\n expect(frame!.type).toBe('task');\n expect(frame!.state).toBe('active');\n expect(frame!.inputs).toEqual({ input: 'test' });\n expect(frame!.depth).toBe(0);\n });\n\n it('should create nested frames with correct depth', () => {\n const parentFrameId = frameManager.createFrame({\n type: 'task',\n name: 'Parent',\n });\n \n const childFrameId = frameManager.createFrame({\n type: 'subtask',\n name: 'Child',\n });\n\n const parentFrame = frameManager.getFrame(parentFrameId);\n const childFrame = frameManager.getFrame(childFrameId);\n \n expect(parentFrame!.depth).toBe(0);\n expect(childFrame!.depth).toBe(1);\n expect(childFrame!.parent_frame_id).toBe(parentFrameId);\n });\n\n it('should update active stack when creating frames', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n\n const stackDepth = frameManager.getStackDepth();\n expect(stackDepth).toBe(2);\n expect(frameManager.getCurrentFrameId()).toBe(frame2Id);\n });\n\n it('should handle frame creation errors', () => {\n // Close the database to simulate an error\n db.close();\n\n expect(() => {\n frameManager.createFrame({\n type: 'task',\n name: 'Error Frame',\n });\n }).toThrow(DatabaseError);\n });\n\n it('should handle different frame types', () => {\n const frameTypes: FrameType[] = ['task', 'subtask', 'tool_scope', 'review', 'write', 'debug'];\n \n frameTypes.forEach(type => {\n const frameId = frameManager.createFrame({\n type,\n name: `${type} frame`,\n });\n \n const frame = frameManager.getFrame(frameId);\n expect(frame!.type).toBe(type);\n });\n });\n\n it('should create frames with specific parent', () => {\n const rootFrameId = frameManager.createFrame({\n type: 'task',\n name: 'Root Frame',\n });\n \n const childFrameId = frameManager.createFrame({\n type: 'subtask',\n name: 'Child Frame',\n parentFrameId: rootFrameId,\n });\n \n const childFrame = frameManager.getFrame(childFrameId);\n expect(childFrame!.parent_frame_id).toBe(rootFrameId);\n expect(childFrame!.depth).toBe(1);\n });\n });\n\n describe('Frame Closing', () => {\n it('should close a frame successfully', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Test Frame',\n });\n \n frameManager.closeFrame(frameId, {\n result: 'completed',\n data: 'output'\n });\n\n const closedFrame = frameManager.getFrame(frameId);\n expect(closedFrame!.state).toBe('closed');\n expect(closedFrame!.outputs).toMatchObject({ data: 'output' });\n expect(closedFrame!.closed_at).toBeDefined();\n });\n\n it('should generate digest when closing frame', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Digest Test',\n });\n \n // Add some events\n frameManager.addEvent('user_message', {\n content: 'Test message'\n }, frameId);\n\n frameManager.closeFrame(frameId, {\n result: 'success'\n });\n\n const closedFrame = frameManager.getFrame(frameId);\n expect(closedFrame!.digest_text).toBeDefined();\n expect(closedFrame!.digest_json).toBeDefined();\n expect(closedFrame!.digest_text).toContain('Digest Test');\n });\n\n it('should remove from active stack when closing', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n\n frameManager.closeFrame(frame2Id);\n\n const stackDepth = frameManager.getStackDepth();\n expect(stackDepth).toBe(1);\n expect(frameManager.getCurrentFrameId()).toBe(frame1Id);\n });\n\n it('should close current frame when no frameId specified', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n\n expect(frameManager.getCurrentFrameId()).toBe(frame2Id);\n frameManager.closeFrame(); // Close current frame\n\n const closedFrame = frameManager.getFrame(frame2Id);\n expect(closedFrame!.state).toBe('closed');\n expect(frameManager.getCurrentFrameId()).toBe(frame1Id);\n });\n\n it('should throw error when closing non-existent frame', () => {\n expect(() => {\n frameManager.closeFrame('non-existent-id');\n }).toThrow(FrameError);\n });\n\n it('should warn when closing already closed frame', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Test',\n });\n \n frameManager.closeFrame(frameId);\n\n // Should not throw, but should warn\n expect(() => {\n frameManager.closeFrame(frameId);\n }).not.toThrow();\n });\n\n it('should close child frames recursively', () => {\n const rootId = frameManager.createFrame({\n type: 'task',\n name: 'Root',\n });\n \n const child1Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Child 1',\n });\n \n const child2Id = frameManager.createFrame({\n type: 'tool_scope',\n name: 'Child 2',\n });\n\n // Close the root frame\n frameManager.closeFrame(rootId);\n\n // All frames should be closed\n expect(frameManager.getFrame(rootId)!.state).toBe('closed');\n expect(frameManager.getFrame(child1Id)!.state).toBe('closed');\n expect(frameManager.getFrame(child2Id)!.state).toBe('closed');\n expect(frameManager.getStackDepth()).toBe(0);\n });\n\n it('should throw error when no active frame to close', () => {\n expect(() => {\n frameManager.closeFrame(); // No frames created\n }).toThrow(FrameError);\n });\n });\n\n describe('Event Management', () => {\n it('should add events to a frame', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Event Test',\n });\n \n const eventId = frameManager.addEvent(\n 'user_message',\n { content: 'Hello' },\n frameId\n );\n\n expect(eventId).toBeDefined();\n expect(typeof eventId).toBe('string');\n \n const events = frameManager.getFrameEvents(frameId);\n expect(events).toHaveLength(1);\n expect(events[0].event_id).toBe(eventId);\n expect(events[0].frame_id).toBe(frameId);\n expect(events[0].event_type).toBe('user_message');\n expect(events[0].payload).toEqual({ content: 'Hello' });\n });\n\n it('should add events to current frame when no frameId specified', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Current Frame Test',\n });\n \n const eventId = frameManager.addEvent('user_message', { content: 'Hello' });\n \n const events = frameManager.getFrameEvents(frameId);\n expect(events).toHaveLength(1);\n expect(events[0].event_id).toBe(eventId);\n });\n\n it('should retrieve frame events', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Event Retrieval',\n });\n \n frameManager.addEvent('user_message', { msg: '1' }, frameId);\n frameManager.addEvent('tool_call', { tool: 'test' }, frameId);\n frameManager.addEvent('tool_result', { result: 'ok' }, frameId);\n\n const events = frameManager.getFrameEvents(frameId);\n \n expect(events).toHaveLength(3);\n expect(events[0].event_type).toBe('user_message');\n expect(events[1].event_type).toBe('tool_call');\n expect(events[2].event_type).toBe('tool_result');\n });\n\n it('should maintain event sequence numbers', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Sequence Test',\n });\n \n frameManager.addEvent('user_message', { index: 1 }, frameId);\n frameManager.addEvent('user_message', { index: 2 }, frameId);\n frameManager.addEvent('user_message', { index: 3 }, frameId);\n\n const events = frameManager.getFrameEvents(frameId);\n \n expect(events[0].seq).toBe(1);\n expect(events[1].seq).toBe(2);\n expect(events[2].seq).toBe(3);\n });\n\n it('should limit frame events when requested', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Limit Test',\n });\n \n // Add many events\n for (let i = 0; i < 20; i++) {\n frameManager.addEvent('user_message', { index: i }, frameId);\n }\n \n const limitedEvents = frameManager.getFrameEvents(frameId, 5);\n expect(limitedEvents).toHaveLength(5);\n \n // Should get the last 5 events (most recent)\n expect(limitedEvents[0].payload.index).toBe(19);\n expect(limitedEvents[4].payload.index).toBe(15);\n });\n\n it('should throw error when adding event with no active frame', () => {\n expect(() => {\n frameManager.addEvent('user_message', { content: 'test' });\n }).toThrow(FrameError);\n });\n\n it('should handle different event types', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Event Types Test',\n });\n \n const eventTypes = [\n 'user_message',\n 'assistant_message',\n 'tool_call',\n 'tool_result',\n 'decision',\n 'constraint',\n 'artifact',\n 'observation'\n ] as const;\n \n eventTypes.forEach((type) => {\n frameManager.addEvent(type, { type }, frameId);\n });\n \n const events = frameManager.getFrameEvents(frameId);\n expect(events).toHaveLength(eventTypes.length);\n \n eventTypes.forEach((type, index) => {\n expect(events[index].event_type).toBe(type);\n });\n });\n });\n\n describe('Anchor Management', () => {\n it('should add anchors to a frame', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Anchor Test',\n });\n \n const anchorId = frameManager.addAnchor(\n 'FACT',\n 'Important fact',\n 9 // priority 0-10\n );\n\n expect(anchorId).toBeDefined();\n expect(typeof anchorId).toBe('string');\n });\n\n it('should add anchors to current frame when no frameId specified', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Current Frame Anchor Test',\n });\n \n const anchorId = frameManager.addAnchor('FACT', 'Important fact', 9);\n expect(anchorId).toBeDefined();\n });\n\n it('should handle different anchor types', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Anchor Types',\n });\n \n const anchorTypes = [\n 'FACT',\n 'DECISION',\n 'CONSTRAINT',\n 'INTERFACE_CONTRACT',\n 'TODO',\n 'RISK'\n ] as const;\n\n anchorTypes.forEach(type => {\n const anchorId = frameManager.addAnchor(\n type,\n `${type} content`,\n 5,\n { testMetadata: true },\n frameId\n );\n expect(anchorId).toBeDefined();\n });\n });\n\n it('should handle metadata in anchors', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Metadata Test',\n });\n \n const metadata = {\n source: 'test',\n confidence: 0.95,\n tags: ['important', 'decision']\n };\n \n const anchorId = frameManager.addAnchor(\n 'DECISION',\n 'Decision with metadata',\n 8,\n metadata,\n frameId\n );\n \n expect(anchorId).toBeDefined();\n });\n\n it('should use default priority when not specified', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Default Priority Test',\n });\n \n const anchorId = frameManager.addAnchor('TODO', 'Task without priority');\n expect(anchorId).toBeDefined();\n });\n\n it('should throw error when adding anchor with no active frame', () => {\n expect(() => {\n frameManager.addAnchor('FACT', 'No active frame');\n }).toThrow(FrameError);\n });\n });\n\n describe('Context Assembly', () => {\n it('should get hot stack context with active frames', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n \n const frame3Id = frameManager.createFrame({\n type: 'tool_scope',\n name: 'Frame 3',\n });\n\n const hotStack = frameManager.getHotStackContext(5);\n\n expect(hotStack).toHaveLength(3);\n expect(hotStack[0].frameId).toBe(frame1Id);\n expect(hotStack[1].frameId).toBe(frame2Id);\n expect(hotStack[2].frameId).toBe(frame3Id);\n });\n\n it('should assemble frame context correctly', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Context Test',\n inputs: {\n constraints: ['constraint1', 'constraint2'],\n definitions: { key: 'value' }\n }\n });\n\n // Add events and anchors\n frameManager.addEvent('user_message', {\n content: 'Test message'\n }, frameId);\n \n frameManager.addAnchor('FACT', 'Important fact', 9, {}, frameId);\n\n const hotStack = frameManager.getHotStackContext(10);\n const context = hotStack.find(ctx => ctx.frameId === frameId);\n\n expect(context).toBeDefined();\n expect(context!.frameId).toBe(frameId);\n expect(context!.header.goal).toBe('Context Test');\n expect(context!.header.constraints).toEqual(['constraint1', 'constraint2']);\n expect(context!.header.definitions).toEqual({ key: 'value' });\n expect(context!.anchors).toHaveLength(1);\n expect(context!.recentEvents).toHaveLength(1);\n });\n\n it('should limit events in context assembly', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Event Limit Test',\n });\n\n // Add many events\n for (let i = 0; i < 20; i++) {\n frameManager.addEvent('user_message', { index: i }, frameId);\n }\n\n const hotStack = frameManager.getHotStackContext(5);\n const context = hotStack.find(ctx => ctx.frameId === frameId);\n \n expect(context!.recentEvents).toHaveLength(5);\n });\n\n it('should return empty hot stack when no active frames', () => {\n const hotStack = frameManager.getHotStackContext();\n expect(hotStack).toHaveLength(0);\n });\n\n it('should get active frame path', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Root Frame',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask', \n name: 'Child Frame',\n });\n\n const activePath = frameManager.getActiveFramePath();\n \n expect(activePath).toHaveLength(2);\n expect(activePath[0].frame_id).toBe(frame1Id);\n expect(activePath[0].name).toBe('Root Frame');\n expect(activePath[1].frame_id).toBe(frame2Id);\n expect(activePath[1].name).toBe('Child Frame');\n });\n\n it('should extract active artifacts from events', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Artifact Test',\n });\n \n frameManager.addEvent('artifact', {\n ref: '/path/to/file1.ts',\n kind: 'file'\n }, frameId);\n \n frameManager.addEvent('artifact', {\n ref: '/path/to/file2.ts',\n kind: 'file'\n }, frameId);\n\n const hotStack = frameManager.getHotStackContext();\n const context = hotStack.find(ctx => ctx.frameId === frameId);\n \n expect(context!.activeArtifacts).toHaveLength(2);\n expect(context!.activeArtifacts).toContain('/path/to/file1.ts');\n expect(context!.activeArtifacts).toContain('/path/to/file2.ts');\n });\n });\n\n describe('Frame Retrieval', () => {\n it('should get frame by ID', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Get Test',\n });\n \n const retrieved = frameManager.getFrame(frameId);\n\n expect(retrieved).toBeDefined();\n expect(retrieved!.frame_id).toBe(frameId);\n expect(retrieved!.name).toBe('Get Test');\n });\n\n it('should return undefined for non-existent frame', () => {\n const frame = frameManager.getFrame('non-existent');\n expect(frame).toBeUndefined();\n });\n\n it('should get current frame ID (top of stack)', () => {\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n\n const currentFrameId = frameManager.getCurrentFrameId();\n \n expect(currentFrameId).toBe(frame2Id);\n });\n\n it('should return undefined when stack is empty', () => {\n const currentFrameId = frameManager.getCurrentFrameId();\n expect(currentFrameId).toBeUndefined();\n });\n\n it('should get stack depth', () => {\n expect(frameManager.getStackDepth()).toBe(0);\n \n frameManager.createFrame({\n type: 'task',\n name: 'Frame 1',\n });\n expect(frameManager.getStackDepth()).toBe(1);\n \n frameManager.createFrame({\n type: 'subtask',\n name: 'Frame 2',\n });\n expect(frameManager.getStackDepth()).toBe(2);\n });\n\n it('should handle frame with all properties', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Complete Test',\n inputs: {\n test: true,\n data: { nested: 'value' },\n list: [1, 2, 3]\n }\n });\n \n const frame = frameManager.getFrame(frameId);\n \n expect(frame!.frame_id).toBe(frameId);\n expect(frame!.run_id).toBeDefined();\n expect(frame!.project_id).toBe(projectId);\n expect(frame!.parent_frame_id).toBeNull();\n expect(frame!.depth).toBe(0);\n expect(frame!.type).toBe('task');\n expect(frame!.name).toBe('Complete Test');\n expect(frame!.state).toBe('active');\n expect(frame!.inputs).toEqual({\n test: true,\n data: { nested: 'value' },\n list: [1, 2, 3]\n });\n expect(frame!.outputs).toEqual({});\n expect(frame!.digest_json).toEqual({});\n expect(frame!.created_at).toBeDefined();\n expect(frame!.closed_at).toBeNull();\n });\n });\n\n describe('Digest Generation', () => {\n it('should generate meaningful digest', async () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Digest Frame',\n });\n\n // Add various events\n frameManager.addEvent('user_message', {\n content: 'What is the weather?'\n }, frameId);\n \n frameManager.addEvent('tool_call', {\n tool: 'weather_api',\n params: { location: 'NYC' }\n }, frameId);\n \n frameManager.addEvent('tool_result', {\n result: 'Sunny, 72\u00B0F'\n }, frameId);\n \n frameManager.addEvent('artifact', {\n kind: 'file',\n ref: '/path/to/weather.json'\n }, frameId);\n\n // Add anchors\n frameManager.addAnchor('FACT', 'Weather is sunny', 9, {}, frameId);\n frameManager.addAnchor('DECISION', 'No umbrella needed', 8, {}, frameId);\n frameManager.addAnchor('RISK', 'Rain possible later', 3, {}, frameId);\n\n // Add a delay to ensure duration > 0 (need at least 1000ms for 1 second difference)\n await new Promise(resolve => setTimeout(resolve, 1100));\n \n frameManager.closeFrame(frameId, {\n result: 'Weather information provided',\n data: 'temperature: 72\u00B0F'\n });\n\n const closedFrame = frameManager.getFrame(frameId);\n\n expect(closedFrame!.digest_text).toContain('Completed: Digest Frame');\n expect(closedFrame!.digest_text).toContain('Decisions made');\n expect(closedFrame!.digest_text).toContain('No umbrella needed');\n expect(closedFrame!.digest_text).toContain('Rain possible later');\n expect(closedFrame!.digest_text).toContain('4 events');\n expect(closedFrame!.digest_text).toContain('1 tool calls');\n \n const digest = closedFrame!.digest_json;\n expect(digest.result).toBe('Digest Frame');\n expect(digest.decisions).toHaveLength(1);\n expect(digest.decisions[0].text).toBe('No umbrella needed');\n expect(digest.risks).toHaveLength(1);\n expect(digest.risks[0].text).toBe('Rain possible later');\n expect(digest.artifacts).toHaveLength(1);\n expect(digest.artifacts[0].ref).toBe('/path/to/weather.json');\n expect(digest.tool_calls_count).toBe(1);\n expect(digest.duration_seconds).toBeGreaterThanOrEqual(0);\n });\n });\n\n describe('Error Handling', () => {\n it('should handle database errors gracefully', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Error Test',\n });\n \n // Close database to simulate error\n db.close();\n\n expect(() => {\n frameManager.addEvent('user_message', {}, frameId);\n }).toThrow(DatabaseError);\n });\n\n it('should validate frame types', () => {\n const validTypes: FrameType[] = [\n 'task',\n 'subtask',\n 'tool_scope',\n 'review',\n 'write',\n 'debug'\n ];\n\n validTypes.forEach(type => {\n const frameId = frameManager.createFrame({\n type,\n name: `${type} frame`,\n });\n \n const frame = frameManager.getFrame(frameId);\n expect(frame!.type).toBe(type);\n });\n });\n\n it('should handle concurrent frame operations', () => {\n const frameIds = [];\n \n // Create multiple frames quickly\n for (let i = 0; i < 10; i++) {\n frameIds.push(frameManager.createFrame({\n type: 'task',\n name: `Frame ${i}`,\n }));\n }\n\n expect(frameIds).toHaveLength(10);\n expect(frameManager.getStackDepth()).toBe(10);\n \n // Close them in reverse order (child to parent)\n for (let i = 9; i >= 0; i--) {\n frameManager.closeFrame(frameIds[i]);\n }\n\n expect(frameManager.getStackDepth()).toBe(0);\n });\n\n it('should handle database query errors gracefully', () => {\n // This tests the error handling in various methods\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Query Error Test',\n });\n \n db.close();\n \n expect(() => frameManager.getFrame(frameId)).toThrow(DatabaseError);\n expect(() => frameManager.getFrameEvents(frameId)).toThrow(DatabaseError);\n });\n\n it('should provide meaningful error messages', () => {\n try {\n frameManager.closeFrame('invalid-frame-id');\n expect.fail('Should have thrown an error');\n } catch (error) {\n expect(error).toBeInstanceOf(FrameError);\n expect((error as FrameError).message).toContain('Frame not found');\n expect((error as FrameError).code).toBe(ErrorCode.FRAME_NOT_FOUND);\n }\n });\n\n it('should include context in error metadata', () => {\n try {\n frameManager.addAnchor('FACT', 'Test fact');\n expect.fail('Should have thrown an error');\n } catch (error) {\n expect(error).toBeInstanceOf(FrameError);\n expect((error as FrameError).context).toMatchObject({\n operation: 'addAnchor',\n anchorType: 'FACT'\n });\n }\n });\n });\n\n describe('Complex Scenarios', () => {\n it('should handle deep nesting', () => {\n const frameIds = [];\n const maxDepth = 10;\n\n for (let i = 0; i < maxDepth; i++) {\n const frameId = frameManager.createFrame({\n type: i === 0 ? 'task' : 'subtask',\n name: `Level ${i}`,\n });\n frameIds.push(frameId);\n \n const frame = frameManager.getFrame(frameId);\n expect(frame!.depth).toBe(i);\n }\n\n expect(frameManager.getStackDepth()).toBe(maxDepth);\n\n // Close from deepest to root\n for (let i = maxDepth - 1; i >= 0; i--) {\n frameManager.closeFrame(frameIds[i]);\n }\n\n expect(frameManager.getStackDepth()).toBe(0);\n });\n\n it('should handle frame with many events and anchors', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Heavy Frame',\n });\n\n // Add 100 events\n for (let i = 0; i < 100; i++) {\n frameManager.addEvent('user_message', { index: i }, frameId);\n }\n\n // Add 50 anchors of different types\n const anchorTypes = ['FACT', 'DECISION', 'CONSTRAINT', 'TODO', 'RISK'] as const;\n for (let i = 0; i < 50; i++) {\n frameManager.addAnchor(\n anchorTypes[i % anchorTypes.length],\n `Content ${i}`,\n Math.floor(Math.random() * 10),\n { index: i },\n frameId\n );\n }\n\n const events = frameManager.getFrameEvents(frameId);\n expect(events).toHaveLength(100);\n\n // Close and check digest is generated correctly\n frameManager.closeFrame(frameId, {\n result: 'Heavy frame completed',\n processedEvents: 100,\n processedAnchors: 50\n });\n\n const closedFrame = frameManager.getFrame(frameId);\n expect(closedFrame!.digest_text).toBeDefined();\n expect(closedFrame!.digest_json).toBeDefined();\n expect(closedFrame!.digest_json.tool_calls_count).toBe(0); // No tool calls\n expect(closedFrame!.state).toBe('closed');\n });\n\n it('should handle frame inheritance with specific parent', () => {\n const rootId = frameManager.createFrame({\n type: 'task',\n name: 'Root Task',\n });\n \n const childId = frameManager.createFrame({\n type: 'subtask',\n name: 'Child Task',\n parentFrameId: rootId,\n });\n \n const grandchildId = frameManager.createFrame({\n type: 'tool_scope',\n name: 'Grandchild Task',\n parentFrameId: childId,\n });\n \n const rootFrame = frameManager.getFrame(rootId);\n const childFrame = frameManager.getFrame(childId);\n const grandchildFrame = frameManager.getFrame(grandchildId);\n \n expect(rootFrame!.depth).toBe(0);\n expect(childFrame!.depth).toBe(1);\n expect(grandchildFrame!.depth).toBe(2);\n \n expect(rootFrame!.parent_frame_id).toBeNull();\n expect(childFrame!.parent_frame_id).toBe(rootId);\n expect(grandchildFrame!.parent_frame_id).toBe(childId);\n });\n\n it('should handle session recovery with existing frames', () => {\n // Simulate existing frames in database\n const frame1Id = frameManager.createFrame({\n type: 'task',\n name: 'Existing Frame 1',\n });\n \n const frame2Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Existing Frame 2',\n });\n \n // Create new frame manager with same database and runId (simulating session recovery)\n const originalRunId = (frameManager as any).currentRunId;\n const newFrameManager = new FrameManager(db, projectId, originalRunId);\n \n // Should have restored the active stack\n expect(newFrameManager.getStackDepth()).toBe(2);\n expect(newFrameManager.getCurrentFrameId()).toBe(frame2Id);\n \n // Should be able to work with existing frames\n newFrameManager.addEvent('observation', { message: 'Session recovered' });\n newFrameManager.closeFrame();\n \n expect(newFrameManager.getStackDepth()).toBe(1);\n expect(newFrameManager.getCurrentFrameId()).toBe(frame1Id);\n });\n\n it('should handle mixed event and anchor operations', () => {\n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'Mixed Operations',\n });\n \n // Interleave events and anchors\n frameManager.addEvent('user_message', { msg: 'Start task' }, frameId);\n frameManager.addAnchor('FACT', 'Task started', 8, {}, frameId);\n \n frameManager.addEvent('tool_call', { tool: 'analyzer' }, frameId);\n frameManager.addAnchor('DECISION', 'Use analyzer tool', 9, {}, frameId);\n \n frameManager.addEvent('tool_result', { result: 'Analysis complete' }, frameId);\n frameManager.addAnchor('CONSTRAINT', 'Must validate results', 7, {}, frameId);\n \n frameManager.addEvent('assistant_message', { msg: 'Task complete' }, frameId);\n frameManager.addAnchor('TODO', 'Document findings', 5, {}, frameId);\n \n const events = frameManager.getFrameEvents(frameId);\n expect(events).toHaveLength(4);\n \n const hotStack = frameManager.getHotStackContext();\n const context = hotStack.find(ctx => ctx.frameId === frameId);\n expect(context!.anchors).toHaveLength(4);\n expect(context!.recentEvents).toHaveLength(4);\n \n // Events should be chronological, anchors should be by priority \n // Check that we have the right events (order may vary based on implementation)\n const eventMessages = context!.recentEvents.map(e => e.payload.msg).filter(Boolean);\n expect(eventMessages).toContain('Start task');\n expect(eventMessages).toContain('Task complete');\n });\n\n it('should handle closing frames out of order', () => {\n const rootId = frameManager.createFrame({\n type: 'task',\n name: 'Root',\n });\n \n const child1Id = frameManager.createFrame({\n type: 'subtask',\n name: 'Child 1',\n });\n \n const child2Id = frameManager.createFrame({\n type: 'tool_scope',\n name: 'Child 2',\n });\n \n expect(frameManager.getStackDepth()).toBe(3);\n \n // Close the middle frame\n frameManager.closeFrame(child1Id);\n \n // Child 2 should also be closed (child of child1)\n expect(frameManager.getFrame(child1Id)!.state).toBe('closed');\n expect(frameManager.getFrame(child2Id)!.state).toBe('closed');\n expect(frameManager.getStackDepth()).toBe(1);\n expect(frameManager.getCurrentFrameId()).toBe(rootId);\n });\n });\n\n describe('Database Schema and Persistence', () => {\n it('should initialize all required tables', () => {\n const tables = db.prepare(`\n SELECT name FROM sqlite_master \n WHERE type='table' AND name IN ('frames', 'events', 'anchors')\n `).all();\n\n expect(tables).toHaveLength(3);\n expect(tables.map((t: any) => t.name)).toContain('frames');\n expect(tables.map((t: any) => t.name)).toContain('events');\n expect(tables.map((t: any) => t.name)).toContain('anchors');\n });\n\n it('should create required indexes', () => {\n const indexes = db.prepare(`\n SELECT name FROM sqlite_master \n WHERE type='index' AND name LIKE 'idx_%'\n `).all();\n\n const expectedIndexes = [\n 'idx_frames_run',\n 'idx_frames_parent', \n 'idx_frames_state',\n 'idx_events_frame',\n 'idx_events_seq',\n 'idx_anchors_frame'\n ];\n\n expectedIndexes.forEach(expectedIndex => {\n expect(indexes.some((idx: any) => idx.name === expectedIndex)).toBe(true);\n });\n });\n\n it('should handle JSON serialization correctly', () => {\n const complexInputs = {\n nested: { deep: { value: 'test' } },\n array: [1, 2, { key: 'value' }],\n boolean: true,\n number: 42.5,\n null: null\n };\n \n const frameId = frameManager.createFrame({\n type: 'task',\n name: 'JSON Test',\n inputs: complexInputs,\n });\n \n const frame = frameManager.getFrame(frameId);\n expect(frame!.inputs).toEqual(complexInputs);\n });\n });\n});"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,379 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi, afterEach } from "vitest";
2
- import Database from "better-sqlite3";
3
- import {
4
- EnhancedHybridDigestGenerator
5
- } from "../enhanced-hybrid-digest";
6
- describe("EnhancedHybridDigestGenerator", () => {
7
- let db;
8
- let generator;
9
- let mockLLMProvider;
10
- beforeEach(() => {
11
- db = new Database(":memory:");
12
- mockLLMProvider = {
13
- generateSummary: vi.fn().mockResolvedValue({
14
- summary: "Test summary",
15
- insight: "Test insight",
16
- flaggedIssue: "Test issue",
17
- generatedAt: Date.now(),
18
- modelUsed: "test-model",
19
- tokensUsed: 150
20
- })
21
- };
22
- generator = new EnhancedHybridDigestGenerator(
23
- db,
24
- { enableAIGeneration: true, maxTokens: 200 },
25
- mockLLMProvider,
26
- { checkInterval: 100 }
27
- // Fast interval for testing
28
- );
29
- });
30
- afterEach(() => {
31
- generator.shutdown();
32
- db.close();
33
- });
34
- describe("Idle Detection", () => {
35
- it("should detect idle state after no tool calls", async () => {
36
- let status = generator.getIdleStatus();
37
- expect(status.isIdle).toBe(false);
38
- generator.recordToolCall();
39
- status = generator.getIdleStatus();
40
- expect(status.isIdle).toBe(false);
41
- await new Promise((resolve) => setTimeout(resolve, 100));
42
- status = generator.getIdleStatus();
43
- expect(status.timeSinceLastToolCall).toBeGreaterThan(0);
44
- });
45
- it("should track user input activity", () => {
46
- generator.recordUserInput();
47
- const status = generator.getIdleStatus();
48
- expect(status.timeSinceLastInput).toBeLessThan(100);
49
- });
50
- it("should track active frames", () => {
51
- generator.onFrameOpened("frame-1");
52
- generator.onFrameOpened("frame-2");
53
- let status = generator.getIdleStatus();
54
- expect(status.activeFrames).toBe(2);
55
- generator.onFrameClosed("frame-1");
56
- status = generator.getIdleStatus();
57
- expect(status.activeFrames).toBe(1);
58
- });
59
- it("should handle interruption gracefully", () => {
60
- generator.handleInterruption();
61
- const status = generator.getIdleStatus();
62
- expect(status.isIdle).toBe(false);
63
- });
64
- });
65
- describe("Digest Generation", () => {
66
- const mockFrame = {
67
- frame_id: "test-frame-1",
68
- name: "Test Frame",
69
- type: "task",
70
- state: "active",
71
- created_at: Math.floor(Date.now() / 1e3),
72
- closed_at: null,
73
- inputs: {},
74
- outputs: {},
75
- digest_text: "",
76
- digest_json: {},
77
- metadata: {}
78
- };
79
- const mockEvents = [
80
- {
81
- event_id: "evt-1",
82
- frame_id: "test-frame-1",
83
- ts: Math.floor(Date.now() / 1e3),
84
- event_type: "tool_call",
85
- payload: {
86
- tool_name: "write_file",
87
- file_path: "/src/test.ts"
88
- }
89
- },
90
- {
91
- event_id: "evt-2",
92
- frame_id: "test-frame-1",
93
- ts: Math.floor(Date.now() / 1e3),
94
- event_type: "tool_result",
95
- payload: {
96
- success: true,
97
- output: "10 tests passed"
98
- }
99
- }
100
- ];
101
- const mockAnchors = [
102
- {
103
- anchor_id: "anc-1",
104
- frame_id: "test-frame-1",
105
- type: "DECISION",
106
- text: "Use TypeScript for type safety",
107
- metadata: {},
108
- created_at: Math.floor(Date.now() / 1e3)
109
- }
110
- ];
111
- const mockInput = {
112
- frame: mockFrame,
113
- events: mockEvents,
114
- anchors: mockAnchors
115
- };
116
- it("should generate deterministic digest immediately", () => {
117
- const digest = generator.generateDigest(mockInput);
118
- expect(digest).toBeDefined();
119
- expect(digest.frameId).toBe("test-frame-1");
120
- expect(digest.frameName).toBe("Test Frame");
121
- expect(digest.deterministic).toBeDefined();
122
- expect(digest.status).toBe("ai_pending");
123
- });
124
- it("should extract files modified correctly", () => {
125
- const digest = generator.generateDigest(mockInput);
126
- expect(digest.deterministic.filesModified).toHaveLength(1);
127
- expect(digest.deterministic.filesModified[0]).toEqual({
128
- path: "/src/test.ts",
129
- operation: "modify",
130
- linesChanged: void 0
131
- });
132
- });
133
- it("should extract test results", () => {
134
- const digest = generator.generateDigest(mockInput);
135
- expect(digest.deterministic.testsRun).toHaveLength(1);
136
- expect(digest.deterministic.testsRun[0]).toEqual({
137
- name: "10 tests",
138
- status: "passed",
139
- duration: void 0
140
- });
141
- });
142
- it("should extract decisions from anchors", () => {
143
- const digest = generator.generateDigest(mockInput);
144
- expect(digest.deterministic.decisions).toContain(
145
- "Use TypeScript for type safety"
146
- );
147
- });
148
- it("should generate text summary", () => {
149
- const digest = generator.generateDigest(mockInput);
150
- expect(digest.text).toBeDefined();
151
- expect(digest.text).toContain("Test Frame");
152
- expect(digest.text).toContain("Status: success");
153
- });
154
- });
155
- describe("AI Generation Queue", () => {
156
- it("should queue frames for AI generation", async () => {
157
- const mockInput = {
158
- frame: {
159
- frame_id: "test-ai-1",
160
- name: "AI Test Frame",
161
- type: "feature",
162
- state: "closed",
163
- // Frame should be closed for AI generation
164
- created_at: Math.floor(Date.now() / 1e3),
165
- closed_at: Math.floor(Date.now() / 1e3) + 100,
166
- inputs: {},
167
- outputs: {},
168
- digest_text: "",
169
- digest_json: {},
170
- metadata: {}
171
- },
172
- events: [],
173
- anchors: []
174
- };
175
- const digest = generator.generateDigest(mockInput);
176
- expect(digest.status).toBe("ai_pending");
177
- await generator.forceProcessQueue();
178
- const wasCalled = mockLLMProvider.generateSummary.mock.calls.length > 0;
179
- if (!wasCalled) {
180
- expect(digest.status).toBe("ai_pending");
181
- }
182
- });
183
- it("should prioritize frame on close", () => {
184
- generator.onFrameOpened("frame-close-test");
185
- generator.onFrameClosed("frame-close-test");
186
- const status = generator.getIdleStatus();
187
- expect(status.activeFrames).toBe(0);
188
- });
189
- });
190
- describe("Pattern Detection", () => {
191
- it("should detect test-driven development pattern", () => {
192
- const input = {
193
- frame: {
194
- frame_id: "tdd-frame",
195
- name: "TDD Frame",
196
- type: "feature",
197
- state: "closed",
198
- created_at: Math.floor(Date.now() / 1e3),
199
- closed_at: Math.floor(Date.now() / 1e3) + 300,
200
- inputs: {},
201
- outputs: {},
202
- digest_text: "",
203
- digest_json: {},
204
- metadata: {}
205
- },
206
- events: [
207
- {
208
- event_id: "evt-test",
209
- frame_id: "tdd-frame",
210
- ts: Math.floor(Date.now() / 1e3),
211
- event_type: "tool_call",
212
- payload: {
213
- tool_name: "run_test",
214
- command: "npm test",
215
- output: "5 tests passed"
216
- }
217
- },
218
- {
219
- event_id: "evt-code",
220
- frame_id: "tdd-frame",
221
- ts: Math.floor(Date.now() / 1e3),
222
- event_type: "tool_call",
223
- payload: {
224
- tool_name: "edit_file",
225
- file_path: "/src/feature.ts"
226
- }
227
- }
228
- ],
229
- anchors: []
230
- };
231
- const digest = generator.generateDigest(input);
232
- expect(digest.deterministic.testsRun.length).toBeGreaterThan(0);
233
- expect(digest.deterministic.filesModified).toHaveLength(1);
234
- });
235
- it("should identify technical debt", () => {
236
- const input = {
237
- frame: {
238
- frame_id: "debt-frame",
239
- name: "Tech Debt Frame",
240
- type: "feature",
241
- state: "closed",
242
- created_at: Math.floor(Date.now() / 1e3),
243
- closed_at: Math.floor(Date.now() / 1e3) + 300,
244
- inputs: {},
245
- outputs: {},
246
- digest_text: "",
247
- digest_json: {},
248
- metadata: {}
249
- },
250
- events: [
251
- {
252
- event_id: "evt-1",
253
- frame_id: "debt-frame",
254
- ts: Math.floor(Date.now() / 1e3),
255
- event_type: "tool_call",
256
- payload: {
257
- tool_name: "write_file",
258
- file_path: "/src/file1.ts"
259
- }
260
- },
261
- {
262
- event_id: "evt-2",
263
- frame_id: "debt-frame",
264
- ts: Math.floor(Date.now() / 1e3),
265
- event_type: "tool_call",
266
- payload: {
267
- tool_name: "write_file",
268
- file_path: "/src/file2.ts"
269
- }
270
- },
271
- {
272
- event_id: "evt-3",
273
- frame_id: "debt-frame",
274
- ts: Math.floor(Date.now() / 1e3),
275
- event_type: "tool_call",
276
- payload: {
277
- tool_name: "write_file",
278
- file_path: "/src/file3.ts"
279
- }
280
- },
281
- {
282
- event_id: "evt-4",
283
- frame_id: "debt-frame",
284
- ts: Math.floor(Date.now() / 1e3),
285
- event_type: "tool_call",
286
- payload: {
287
- tool_name: "write_file",
288
- file_path: "/src/file4.ts"
289
- }
290
- }
291
- ],
292
- anchors: [
293
- {
294
- anchor_id: "anc-todo",
295
- frame_id: "debt-frame",
296
- type: "DECISION",
297
- text: "TODO: Refactor this later",
298
- metadata: {},
299
- created_at: Math.floor(Date.now() / 1e3)
300
- }
301
- ]
302
- };
303
- const digest = generator.generateDigest(input);
304
- expect(digest.deterministic.filesModified.length).toBeGreaterThan(3);
305
- expect(digest.deterministic.testsRun).toHaveLength(0);
306
- expect(
307
- digest.deterministic.decisions.some(
308
- (d) => d.toLowerCase().includes("todo")
309
- )
310
- ).toBe(true);
311
- });
312
- });
313
- describe("60/40 Split Validation", () => {
314
- it("should maintain 60% deterministic content", () => {
315
- const input = {
316
- frame: {
317
- frame_id: "split-test",
318
- name: "Split Test Frame",
319
- type: "task",
320
- state: "active",
321
- created_at: Math.floor(Date.now() / 1e3),
322
- closed_at: null,
323
- inputs: {},
324
- outputs: {},
325
- digest_text: "",
326
- digest_json: {},
327
- metadata: {}
328
- },
329
- events: Array(10).fill(null).map((_, i) => ({
330
- event_id: `evt-${i}`,
331
- frame_id: "split-test",
332
- ts: Math.floor(Date.now() / 1e3),
333
- event_type: "tool_call",
334
- payload: { tool_name: `tool_${i}` }
335
- })),
336
- anchors: Array(5).fill(null).map((_, i) => ({
337
- anchor_id: `anc-${i}`,
338
- frame_id: "split-test",
339
- type: "DECISION",
340
- text: `Decision ${i}`,
341
- metadata: {},
342
- created_at: Math.floor(Date.now() / 1e3)
343
- }))
344
- };
345
- const digest = generator.generateDigest(input);
346
- expect(digest.deterministic).toBeDefined();
347
- expect(digest.deterministic.toolCallCount).toBe(10);
348
- expect(digest.deterministic.decisions).toHaveLength(5);
349
- expect(digest.aiGenerated).toBeUndefined();
350
- expect(digest.status).toBe("ai_pending");
351
- });
352
- it("should keep AI summaries under 200 tokens", async () => {
353
- const input = {
354
- frame: {
355
- frame_id: "token-test",
356
- name: "Token Test",
357
- type: "task",
358
- state: "closed",
359
- created_at: Math.floor(Date.now() / 1e3),
360
- closed_at: Math.floor(Date.now() / 1e3) + 100,
361
- inputs: {},
362
- outputs: {},
363
- digest_text: "",
364
- digest_json: {},
365
- metadata: {}
366
- },
367
- events: [],
368
- anchors: []
369
- };
370
- generator.generateDigest(input);
371
- await generator.forceProcessQueue();
372
- const mockCalls = vi.mocked(mockLLMProvider.generateSummary).mock.calls;
373
- if (mockCalls.length > 0) {
374
- expect(mockCalls[0][2]).toBe(200);
375
- }
376
- });
377
- });
378
- });
379
- //# sourceMappingURL=enhanced-hybrid-digest.test.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/core/digest/__tests__/enhanced-hybrid-digest.test.ts"],
4
- "sourcesContent": ["import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';\nimport Database from 'better-sqlite3';\nimport {\n EnhancedHybridDigestGenerator,\n EnhancedAIDigest,\n} from '../enhanced-hybrid-digest';\nimport { DigestInput, DigestLLMProvider, Frame, Event, Anchor } from '../types';\n\ndescribe('EnhancedHybridDigestGenerator', () => {\n let db: Database.Database;\n let generator: EnhancedHybridDigestGenerator;\n let mockLLMProvider: DigestLLMProvider;\n\n beforeEach(() => {\n // Create in-memory database\n db = new Database(':memory:');\n\n // Create mock LLM provider\n mockLLMProvider = {\n generateSummary: vi.fn().mockResolvedValue({\n summary: 'Test summary',\n insight: 'Test insight',\n flaggedIssue: 'Test issue',\n generatedAt: Date.now(),\n modelUsed: 'test-model',\n tokensUsed: 150,\n }),\n };\n\n // Initialize generator\n generator = new EnhancedHybridDigestGenerator(\n db,\n { enableAIGeneration: true, maxTokens: 200 },\n mockLLMProvider,\n { checkInterval: 100 } // Fast interval for testing\n );\n });\n\n afterEach(() => {\n generator.shutdown();\n db.close();\n });\n\n describe('Idle Detection', () => {\n it('should detect idle state after no tool calls', async () => {\n // Initially not idle\n let status = generator.getIdleStatus();\n expect(status.isIdle).toBe(false);\n\n // Record activity\n generator.recordToolCall();\n\n // Still not idle immediately after\n status = generator.getIdleStatus();\n expect(status.isIdle).toBe(false);\n\n // Wait for idle threshold\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n // Check if idle detection would trigger (in real scenario with longer threshold)\n status = generator.getIdleStatus();\n expect(status.timeSinceLastToolCall).toBeGreaterThan(0);\n });\n\n it('should track user input activity', () => {\n generator.recordUserInput();\n\n const status = generator.getIdleStatus();\n expect(status.timeSinceLastInput).toBeLessThan(100);\n });\n\n it('should track active frames', () => {\n generator.onFrameOpened('frame-1');\n generator.onFrameOpened('frame-2');\n\n let status = generator.getIdleStatus();\n expect(status.activeFrames).toBe(2);\n\n generator.onFrameClosed('frame-1');\n status = generator.getIdleStatus();\n expect(status.activeFrames).toBe(1);\n });\n\n it('should handle interruption gracefully', () => {\n generator.handleInterruption();\n\n const status = generator.getIdleStatus();\n expect(status.isIdle).toBe(false);\n });\n });\n\n describe('Digest Generation', () => {\n const mockFrame: Frame = {\n frame_id: 'test-frame-1',\n name: 'Test Frame',\n type: 'task',\n state: 'active',\n created_at: Math.floor(Date.now() / 1000),\n closed_at: null,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n };\n\n const mockEvents: Event[] = [\n {\n event_id: 'evt-1',\n frame_id: 'test-frame-1',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'write_file',\n file_path: '/src/test.ts',\n },\n },\n {\n event_id: 'evt-2',\n frame_id: 'test-frame-1',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_result',\n payload: {\n success: true,\n output: '10 tests passed',\n },\n },\n ];\n\n const mockAnchors: Anchor[] = [\n {\n anchor_id: 'anc-1',\n frame_id: 'test-frame-1',\n type: 'DECISION',\n text: 'Use TypeScript for type safety',\n metadata: {},\n created_at: Math.floor(Date.now() / 1000),\n },\n ];\n\n const mockInput: DigestInput = {\n frame: mockFrame,\n events: mockEvents,\n anchors: mockAnchors,\n };\n\n it('should generate deterministic digest immediately', () => {\n const digest = generator.generateDigest(mockInput);\n\n expect(digest).toBeDefined();\n expect(digest.frameId).toBe('test-frame-1');\n expect(digest.frameName).toBe('Test Frame');\n expect(digest.deterministic).toBeDefined();\n expect(digest.status).toBe('ai_pending'); // AI generation queued\n });\n\n it('should extract files modified correctly', () => {\n const digest = generator.generateDigest(mockInput);\n\n expect(digest.deterministic.filesModified).toHaveLength(1);\n expect(digest.deterministic.filesModified[0]).toEqual({\n path: '/src/test.ts',\n operation: 'modify',\n linesChanged: undefined,\n });\n });\n\n it('should extract test results', () => {\n const digest = generator.generateDigest(mockInput);\n\n expect(digest.deterministic.testsRun).toHaveLength(1);\n expect(digest.deterministic.testsRun[0]).toEqual({\n name: '10 tests',\n status: 'passed',\n duration: undefined,\n });\n });\n\n it('should extract decisions from anchors', () => {\n const digest = generator.generateDigest(mockInput);\n\n expect(digest.deterministic.decisions).toContain(\n 'Use TypeScript for type safety'\n );\n });\n\n it('should generate text summary', () => {\n const digest = generator.generateDigest(mockInput);\n\n expect(digest.text).toBeDefined();\n expect(digest.text).toContain('Test Frame');\n expect(digest.text).toContain('Status: success');\n });\n });\n\n describe('AI Generation Queue', () => {\n it('should queue frames for AI generation', async () => {\n const mockInput: DigestInput = {\n frame: {\n frame_id: 'test-ai-1',\n name: 'AI Test Frame',\n type: 'feature',\n state: 'closed', // Frame should be closed for AI generation\n created_at: Math.floor(Date.now() / 1000),\n closed_at: Math.floor(Date.now() / 1000) + 100,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n },\n events: [],\n anchors: [],\n };\n\n const digest = generator.generateDigest(mockInput);\n expect(digest.status).toBe('ai_pending');\n\n // Force process queue\n await generator.forceProcessQueue();\n\n // Verify LLM provider was called if the frame was queued\n // The base class may have additional conditions for AI generation\n const wasCalled = mockLLMProvider.generateSummary.mock.calls.length > 0;\n if (!wasCalled) {\n // Verify at least that the digest was marked as pending\n expect(digest.status).toBe('ai_pending');\n }\n });\n\n it('should prioritize frame on close', () => {\n generator.onFrameOpened('frame-close-test');\n generator.onFrameClosed('frame-close-test');\n\n // In a real scenario, this would trigger immediate processing\n const status = generator.getIdleStatus();\n expect(status.activeFrames).toBe(0);\n });\n });\n\n describe('Pattern Detection', () => {\n it('should detect test-driven development pattern', () => {\n const input: DigestInput = {\n frame: {\n frame_id: 'tdd-frame',\n name: 'TDD Frame',\n type: 'feature',\n state: 'closed',\n created_at: Math.floor(Date.now() / 1000),\n closed_at: Math.floor(Date.now() / 1000) + 300,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n },\n events: [\n {\n event_id: 'evt-test',\n frame_id: 'tdd-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'run_test',\n command: 'npm test',\n output: '5 tests passed',\n },\n },\n {\n event_id: 'evt-code',\n frame_id: 'tdd-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'edit_file',\n file_path: '/src/feature.ts',\n },\n },\n ],\n anchors: [],\n };\n\n const digest = generator.generateDigest(input);\n\n // Pattern detection would be in AI processing\n // Multiple test results may be extracted from the output\n expect(digest.deterministic.testsRun.length).toBeGreaterThan(0);\n expect(digest.deterministic.filesModified).toHaveLength(1);\n });\n\n it('should identify technical debt', () => {\n const input: DigestInput = {\n frame: {\n frame_id: 'debt-frame',\n name: 'Tech Debt Frame',\n type: 'feature',\n state: 'closed',\n created_at: Math.floor(Date.now() / 1000),\n closed_at: Math.floor(Date.now() / 1000) + 300,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n },\n events: [\n {\n event_id: 'evt-1',\n frame_id: 'debt-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'write_file',\n file_path: '/src/file1.ts',\n },\n },\n {\n event_id: 'evt-2',\n frame_id: 'debt-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'write_file',\n file_path: '/src/file2.ts',\n },\n },\n {\n event_id: 'evt-3',\n frame_id: 'debt-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'write_file',\n file_path: '/src/file3.ts',\n },\n },\n {\n event_id: 'evt-4',\n frame_id: 'debt-frame',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: {\n tool_name: 'write_file',\n file_path: '/src/file4.ts',\n },\n },\n ],\n anchors: [\n {\n anchor_id: 'anc-todo',\n frame_id: 'debt-frame',\n type: 'DECISION',\n text: 'TODO: Refactor this later',\n metadata: {},\n created_at: Math.floor(Date.now() / 1000),\n },\n ],\n };\n\n const digest = generator.generateDigest(input);\n\n // Many files modified without tests\n expect(digest.deterministic.filesModified.length).toBeGreaterThan(3);\n expect(digest.deterministic.testsRun).toHaveLength(0);\n\n // TODO in decisions\n expect(\n digest.deterministic.decisions.some((d) =>\n d.toLowerCase().includes('todo')\n )\n ).toBe(true);\n });\n });\n\n describe('60/40 Split Validation', () => {\n it('should maintain 60% deterministic content', () => {\n const input: DigestInput = {\n frame: {\n frame_id: 'split-test',\n name: 'Split Test Frame',\n type: 'task',\n state: 'active',\n created_at: Math.floor(Date.now() / 1000),\n closed_at: null,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n },\n events: Array(10)\n .fill(null)\n .map((_, i) => ({\n event_id: `evt-${i}`,\n frame_id: 'split-test',\n ts: Math.floor(Date.now() / 1000),\n event_type: 'tool_call',\n payload: { tool_name: `tool_${i}` },\n })),\n anchors: Array(5)\n .fill(null)\n .map((_, i) => ({\n anchor_id: `anc-${i}`,\n frame_id: 'split-test',\n type: 'DECISION',\n text: `Decision ${i}`,\n metadata: {},\n created_at: Math.floor(Date.now() / 1000),\n })),\n };\n\n const digest = generator.generateDigest(input);\n\n // Deterministic fields should be populated (60%)\n expect(digest.deterministic).toBeDefined();\n expect(digest.deterministic.toolCallCount).toBe(10);\n expect(digest.deterministic.decisions).toHaveLength(5);\n\n // AI should be pending (40%)\n expect(digest.aiGenerated).toBeUndefined();\n expect(digest.status).toBe('ai_pending');\n });\n\n it('should keep AI summaries under 200 tokens', async () => {\n const input: DigestInput = {\n frame: {\n frame_id: 'token-test',\n name: 'Token Test',\n type: 'task',\n state: 'closed',\n created_at: Math.floor(Date.now() / 1000),\n closed_at: Math.floor(Date.now() / 1000) + 100,\n inputs: {},\n outputs: {},\n digest_text: '',\n digest_json: {},\n metadata: {},\n },\n events: [],\n anchors: [],\n };\n\n generator.generateDigest(input);\n await generator.forceProcessQueue();\n\n // Verify token limit was respected if LLM was actually called\n const mockCalls = vi.mocked(mockLLMProvider.generateSummary).mock.calls;\n if (mockCalls.length > 0) {\n expect(mockCalls[0][2]).toBe(200); // maxTokens parameter\n }\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": []
7
- }