@stackmemoryai/stackmemory 0.3.1 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (744) hide show
  1. package/README.md +69 -288
  2. package/dist/cli/commands/chromadb.js +267 -0
  3. package/dist/cli/commands/chromadb.js.map +7 -0
  4. package/dist/cli/commands/clear.js +191 -0
  5. package/dist/cli/commands/clear.js.map +7 -0
  6. package/dist/cli/commands/config.js +152 -1
  7. package/dist/cli/commands/config.js.map +2 -2
  8. package/dist/cli/commands/context.js +15 -5
  9. package/dist/cli/commands/context.js.map +2 -2
  10. package/dist/cli/commands/dashboard.js +178 -0
  11. package/dist/cli/commands/dashboard.js.map +7 -0
  12. package/dist/cli/commands/handoff.js +125 -8
  13. package/dist/cli/commands/handoff.js.map +2 -2
  14. package/dist/cli/commands/linear-create.js +132 -0
  15. package/dist/cli/commands/linear-create.js.map +7 -0
  16. package/dist/cli/commands/linear-list.js +69 -0
  17. package/dist/cli/commands/linear-list.js.map +7 -0
  18. package/dist/cli/commands/linear-migrate.js +40 -0
  19. package/dist/cli/commands/linear-migrate.js.map +7 -0
  20. package/dist/cli/commands/linear.js +185 -36
  21. package/dist/cli/commands/linear.js.map +2 -2
  22. package/dist/cli/commands/monitor.js +309 -0
  23. package/dist/cli/commands/monitor.js.map +7 -0
  24. package/dist/cli/commands/quality.js +414 -0
  25. package/dist/cli/commands/quality.js.map +7 -0
  26. package/dist/cli/commands/skills.js +262 -0
  27. package/dist/cli/commands/skills.js.map +7 -0
  28. package/dist/cli/commands/storage.js +275 -0
  29. package/dist/cli/commands/storage.js.map +7 -0
  30. package/dist/cli/commands/tui.js +66 -0
  31. package/dist/cli/commands/tui.js.map +7 -0
  32. package/dist/cli/commands/workflow.js +134 -0
  33. package/dist/cli/commands/workflow.js.map +7 -0
  34. package/dist/cli/index.js +109 -8
  35. package/dist/cli/index.js.map +3 -3
  36. package/dist/core/analytics/team-analytics.js +374 -0
  37. package/dist/core/analytics/team-analytics.js.map +7 -0
  38. package/dist/core/context/context-bridge.js +234 -0
  39. package/dist/core/context/context-bridge.js.map +7 -0
  40. package/dist/core/context/dual-stack-manager.js +850 -0
  41. package/dist/core/context/dual-stack-manager.js.map +7 -0
  42. package/dist/core/context/frame-handoff-manager.js +774 -0
  43. package/dist/core/context/frame-handoff-manager.js.map +7 -0
  44. package/dist/core/context/frame-manager.js +142 -13
  45. package/dist/core/context/frame-manager.js.map +2 -2
  46. package/dist/core/context/permission-manager.js +181 -0
  47. package/dist/core/context/permission-manager.js.map +7 -0
  48. package/dist/core/context/shared-context-layer.js +386 -0
  49. package/dist/core/context/shared-context-layer.js.map +7 -0
  50. package/dist/core/context/stack-merge-resolver.js +600 -0
  51. package/dist/core/context/stack-merge-resolver.js.map +7 -0
  52. package/dist/core/context/validation.js +121 -0
  53. package/dist/core/context/validation.js.map +7 -0
  54. package/dist/core/database/connection-pool.js +266 -175
  55. package/dist/core/database/connection-pool.js.map +2 -2
  56. package/dist/core/database/database-adapter.js +51 -0
  57. package/dist/core/database/database-adapter.js.map +7 -0
  58. package/dist/core/database/migration-manager.js +514 -0
  59. package/dist/core/database/migration-manager.js.map +7 -0
  60. package/dist/core/database/paradedb-adapter.js +970 -0
  61. package/dist/core/database/paradedb-adapter.js.map +7 -0
  62. package/dist/core/database/query-router.js +421 -0
  63. package/dist/core/database/query-router.js.map +7 -0
  64. package/dist/core/database/sqlite-adapter.js +547 -0
  65. package/dist/core/database/sqlite-adapter.js.map +7 -0
  66. package/dist/core/errors/index.js +21 -1
  67. package/dist/core/errors/index.js.map +2 -2
  68. package/dist/core/frame/workflow-templates-stub.js +42 -0
  69. package/dist/core/frame/workflow-templates-stub.js.map +7 -0
  70. package/dist/core/frame/workflow-templates.js +276 -0
  71. package/dist/core/frame/workflow-templates.js.map +7 -0
  72. package/dist/core/merge/conflict-detector.js +5 -2
  73. package/dist/core/merge/conflict-detector.js.map +2 -2
  74. package/dist/core/merge/resolution-engine.js +3 -14
  75. package/dist/core/merge/resolution-engine.js.map +2 -2
  76. package/dist/core/merge/stack-diff.js.map +2 -2
  77. package/dist/core/monitoring/logger.js +18 -3
  78. package/dist/core/monitoring/logger.js.map +2 -2
  79. package/dist/core/monitoring/session-monitor.js +296 -0
  80. package/dist/core/monitoring/session-monitor.js.map +7 -0
  81. package/dist/core/retrieval/context-retriever.js +475 -0
  82. package/dist/core/retrieval/context-retriever.js.map +7 -0
  83. package/dist/core/retrieval/graph-retrieval.js +658 -0
  84. package/dist/core/retrieval/graph-retrieval.js.map +7 -0
  85. package/dist/core/retrieval/hierarchical-retrieval.js +652 -0
  86. package/dist/core/retrieval/hierarchical-retrieval.js.map +7 -0
  87. package/dist/core/retrieval/retrieval-benchmarks.js +517 -0
  88. package/dist/core/retrieval/retrieval-benchmarks.js.map +7 -0
  89. package/dist/core/session/clear-survival-stub.js +49 -0
  90. package/dist/core/session/clear-survival-stub.js.map +7 -0
  91. package/dist/core/session/clear-survival.js +426 -0
  92. package/dist/core/session/clear-survival.js.map +7 -0
  93. package/dist/core/session/handoff-generator.js +339 -0
  94. package/dist/core/session/handoff-generator.js.map +7 -0
  95. package/dist/core/session/session-manager.js +61 -26
  96. package/dist/core/session/session-manager.js.map +3 -3
  97. package/dist/core/skills/index.js +3 -0
  98. package/dist/core/skills/index.js.map +7 -0
  99. package/dist/core/skills/skill-storage.js +749 -0
  100. package/dist/core/skills/skill-storage.js.map +7 -0
  101. package/dist/core/skills/types.js +189 -0
  102. package/dist/core/skills/types.js.map +7 -0
  103. package/dist/core/storage/chromadb-adapter.js +346 -0
  104. package/dist/core/storage/chromadb-adapter.js.map +7 -0
  105. package/dist/core/storage/railway-optimized-storage.js +550 -0
  106. package/dist/core/storage/railway-optimized-storage.js.map +7 -0
  107. package/dist/core/storage/remote-storage.js +456 -0
  108. package/dist/core/storage/remote-storage.js.map +7 -0
  109. package/dist/core/trace/trace-detector.js +136 -5
  110. package/dist/core/trace/trace-detector.js.map +2 -2
  111. package/dist/core/trace/trace-store.js.map +2 -2
  112. package/dist/features/tui/components/analytics-panel.js +136 -0
  113. package/dist/features/tui/components/analytics-panel.js.map +7 -0
  114. package/dist/features/tui/components/frame-visualizer.js +377 -0
  115. package/dist/features/tui/components/frame-visualizer.js.map +7 -0
  116. package/dist/features/tui/components/pr-tracker.js +123 -0
  117. package/dist/features/tui/components/pr-tracker.js.map +7 -0
  118. package/dist/features/tui/components/session-monitor.js +286 -0
  119. package/dist/features/tui/components/session-monitor.js.map +7 -0
  120. package/dist/features/tui/components/subagent-fleet.js +388 -0
  121. package/dist/features/tui/components/subagent-fleet.js.map +7 -0
  122. package/dist/features/tui/components/task-board.js +475 -0
  123. package/dist/features/tui/components/task-board.js.map +7 -0
  124. package/dist/features/tui/index.js +397 -0
  125. package/dist/features/tui/index.js.map +7 -0
  126. package/dist/features/tui/services/data-service.js +654 -0
  127. package/dist/features/tui/services/data-service.js.map +7 -0
  128. package/dist/features/tui/services/websocket-client.js +149 -0
  129. package/dist/features/tui/services/websocket-client.js.map +7 -0
  130. package/dist/features/tui/terminal-compat.js +205 -0
  131. package/dist/features/tui/terminal-compat.js.map +7 -0
  132. package/dist/features/tui/types.js +1 -0
  133. package/dist/features/tui/types.js.map +7 -0
  134. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +455 -0
  135. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  136. package/dist/integrations/claude-code/lifecycle-hooks.js +250 -0
  137. package/dist/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  138. package/dist/integrations/claude-code/post-task-hooks.js +541 -0
  139. package/dist/integrations/claude-code/post-task-hooks.js.map +7 -0
  140. package/dist/integrations/linear/client.js +22 -4
  141. package/dist/integrations/linear/client.js.map +2 -2
  142. package/dist/integrations/linear/migration.js +299 -0
  143. package/dist/integrations/linear/migration.js.map +7 -0
  144. package/dist/integrations/linear/oauth-server.js +396 -0
  145. package/dist/integrations/linear/oauth-server.js.map +7 -0
  146. package/dist/integrations/linear/rest-client.js +199 -0
  147. package/dist/integrations/linear/rest-client.js.map +7 -0
  148. package/dist/integrations/linear/sync.js +14 -2
  149. package/dist/integrations/linear/sync.js.map +2 -2
  150. package/dist/integrations/linear/webhook-handler.js +200 -0
  151. package/dist/integrations/linear/webhook-handler.js.map +7 -0
  152. package/dist/integrations/mcp/handlers/skill-handlers.js +514 -0
  153. package/dist/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  154. package/dist/integrations/mcp/middleware/tool-scoring.js +352 -0
  155. package/dist/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  156. package/dist/integrations/mcp/refactored-server.js +31 -3
  157. package/dist/integrations/mcp/refactored-server.js.map +2 -2
  158. package/dist/integrations/mcp/server.js +25 -7
  159. package/dist/integrations/mcp/server.js.map +2 -2
  160. package/dist/mcp/stackmemory-mcp-server.js.map +1 -1
  161. package/dist/models/user.model.js +3 -0
  162. package/dist/models/user.model.js.map +2 -2
  163. package/dist/services/context-service.js.map +2 -2
  164. package/dist/skills/claude-skills.js +666 -0
  165. package/dist/skills/claude-skills.js.map +7 -0
  166. package/dist/utils/formatting.js +58 -0
  167. package/dist/utils/formatting.js.map +7 -0
  168. package/package.json +30 -24
  169. package/dist/cli/__tests__/index.test.js +0 -290
  170. package/dist/cli/__tests__/index.test.js.map +0 -7
  171. package/dist/core/config/__tests__/config-manager.test.js +0 -248
  172. package/dist/core/config/__tests__/config-manager.test.js.map +0 -7
  173. package/dist/core/context/__tests__/frame-manager.test.js +0 -879
  174. package/dist/core/context/__tests__/frame-manager.test.js.map +0 -7
  175. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js +0 -379
  176. package/dist/core/digest/__tests__/enhanced-hybrid-digest.test.js.map +0 -7
  177. package/dist/core/digest/__tests__/frame-digest-integration.test.js +0 -230
  178. package/dist/core/digest/__tests__/frame-digest-integration.test.js.map +0 -7
  179. package/dist/core/errors/__tests__/error-handling.test.js +0 -270
  180. package/dist/core/errors/__tests__/error-handling.test.js.map +0 -7
  181. package/dist/core/merge/__tests__/conflict-scenarios.test.js +0 -414
  182. package/dist/core/merge/__tests__/conflict-scenarios.test.js.map +0 -7
  183. package/dist/core/query/__tests__/query-parser.test.js +0 -301
  184. package/dist/core/query/__tests__/query-parser.test.js.map +0 -7
  185. package/dist/core/query/__tests__/query-templates.test.js +0 -210
  186. package/dist/core/query/__tests__/query-templates.test.js.map +0 -7
  187. package/dist/core/trace/trace-detector.test.js +0 -401
  188. package/dist/core/trace/trace-detector.test.js.map +0 -7
  189. package/dist/features/tasks/__tests__/pebbles-task-store.test.js +0 -747
  190. package/dist/features/tasks/__tests__/pebbles-task-store.test.js.map +0 -7
  191. package/dist/integrations/linear/__tests__/auth.test.js +0 -558
  192. package/dist/integrations/linear/__tests__/auth.test.js.map +0 -7
  193. package/dist/integrations/linear/__tests__/sync-service.test.js +0 -760
  194. package/dist/integrations/linear/__tests__/sync-service.test.js.map +0 -7
  195. package/dist/integrations/mcp/__tests__/server.test.js +0 -798
  196. package/dist/integrations/mcp/__tests__/server.test.js.map +0 -7
  197. package/dist/scripts/benchmark-performance.d.ts +0 -7
  198. package/dist/scripts/benchmark-performance.d.ts.map +0 -1
  199. package/dist/scripts/benchmark-performance.js +0 -44
  200. package/dist/scripts/benchmark-performance.js.map +0 -1
  201. package/dist/scripts/cancel-duplicate-tasks.d.ts +0 -7
  202. package/dist/scripts/cancel-duplicate-tasks.d.ts.map +0 -1
  203. package/dist/scripts/cancel-duplicate-tasks.js +0 -172
  204. package/dist/scripts/cancel-duplicate-tasks.js.map +0 -1
  205. package/dist/scripts/cleanup-duplicate-tasks.d.ts +0 -12
  206. package/dist/scripts/cleanup-duplicate-tasks.d.ts.map +0 -1
  207. package/dist/scripts/cleanup-duplicate-tasks.js +0 -215
  208. package/dist/scripts/cleanup-duplicate-tasks.js.map +0 -1
  209. package/dist/scripts/initialize.d.ts +0 -6
  210. package/dist/scripts/initialize.d.ts.map +0 -1
  211. package/dist/scripts/initialize.js +0 -93
  212. package/dist/scripts/initialize.js.map +0 -1
  213. package/dist/scripts/list-linear-tasks.d.ts +0 -6
  214. package/dist/scripts/list-linear-tasks.d.ts.map +0 -1
  215. package/dist/scripts/list-linear-tasks.js +0 -121
  216. package/dist/scripts/list-linear-tasks.js.map +0 -1
  217. package/dist/scripts/merge-linear-duplicates-safe.d.ts +0 -7
  218. package/dist/scripts/merge-linear-duplicates-safe.d.ts.map +0 -1
  219. package/dist/scripts/merge-linear-duplicates-safe.js +0 -267
  220. package/dist/scripts/merge-linear-duplicates-safe.js.map +0 -1
  221. package/dist/scripts/show-linear-summary.d.ts +0 -6
  222. package/dist/scripts/show-linear-summary.d.ts.map +0 -1
  223. package/dist/scripts/show-linear-summary.js +0 -120
  224. package/dist/scripts/show-linear-summary.js.map +0 -1
  225. package/dist/scripts/status.d.ts +0 -6
  226. package/dist/scripts/status.d.ts.map +0 -1
  227. package/dist/scripts/status.js +0 -101
  228. package/dist/scripts/status.js.map +0 -1
  229. package/dist/src/agents/core/agent-task-manager.d.ts +0 -154
  230. package/dist/src/agents/core/agent-task-manager.d.ts.map +0 -1
  231. package/dist/src/agents/core/agent-task-manager.js +0 -504
  232. package/dist/src/agents/core/agent-task-manager.js.map +0 -1
  233. package/dist/src/agents/verifiers/base-verifier.d.ts +0 -112
  234. package/dist/src/agents/verifiers/base-verifier.d.ts.map +0 -1
  235. package/dist/src/agents/verifiers/base-verifier.js +0 -130
  236. package/dist/src/agents/verifiers/base-verifier.js.map +0 -1
  237. package/dist/src/agents/verifiers/formatter-verifier.d.ts +0 -14
  238. package/dist/src/agents/verifiers/formatter-verifier.d.ts.map +0 -1
  239. package/dist/src/agents/verifiers/formatter-verifier.js +0 -107
  240. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -1
  241. package/dist/src/agents/verifiers/llm-judge.d.ts +0 -46
  242. package/dist/src/agents/verifiers/llm-judge.d.ts.map +0 -1
  243. package/dist/src/agents/verifiers/llm-judge.js +0 -248
  244. package/dist/src/agents/verifiers/llm-judge.js.map +0 -1
  245. package/dist/src/cli/auto-detect.d.ts +0 -61
  246. package/dist/src/cli/auto-detect.d.ts.map +0 -1
  247. package/dist/src/cli/auto-detect.js +0 -350
  248. package/dist/src/cli/auto-detect.js.map +0 -1
  249. package/dist/src/cli/browser-test.d.ts +0 -6
  250. package/dist/src/cli/browser-test.d.ts.map +0 -1
  251. package/dist/src/cli/browser-test.js +0 -32
  252. package/dist/src/cli/browser-test.js.map +0 -1
  253. package/dist/src/cli/claude-sm.d.ts +0 -7
  254. package/dist/src/cli/claude-sm.d.ts.map +0 -1
  255. package/dist/src/cli/claude-sm.js +0 -412
  256. package/dist/src/cli/claude-sm.js.map +0 -1
  257. package/dist/src/cli/commands/agent.d.ts +0 -9
  258. package/dist/src/cli/commands/agent.d.ts.map +0 -1
  259. package/dist/src/cli/commands/agent.js +0 -303
  260. package/dist/src/cli/commands/agent.js.map +0 -1
  261. package/dist/src/cli/commands/config.d.ts +0 -6
  262. package/dist/src/cli/commands/config.d.ts.map +0 -1
  263. package/dist/src/cli/commands/config.js +0 -224
  264. package/dist/src/cli/commands/config.js.map +0 -1
  265. package/dist/src/cli/commands/context.d.ts +0 -7
  266. package/dist/src/cli/commands/context.d.ts.map +0 -1
  267. package/dist/src/cli/commands/context.js +0 -365
  268. package/dist/src/cli/commands/context.js.map +0 -1
  269. package/dist/src/cli/commands/handoff.d.ts +0 -6
  270. package/dist/src/cli/commands/handoff.d.ts.map +0 -1
  271. package/dist/src/cli/commands/handoff.js +0 -212
  272. package/dist/src/cli/commands/handoff.js.map +0 -1
  273. package/dist/src/cli/commands/linear-test.d.ts +0 -6
  274. package/dist/src/cli/commands/linear-test.d.ts.map +0 -1
  275. package/dist/src/cli/commands/linear-test.js +0 -123
  276. package/dist/src/cli/commands/linear-test.js.map +0 -1
  277. package/dist/src/cli/commands/linear.d.ts +0 -6
  278. package/dist/src/cli/commands/linear.d.ts.map +0 -1
  279. package/dist/src/cli/commands/linear.js +0 -393
  280. package/dist/src/cli/commands/linear.js.map +0 -1
  281. package/dist/src/cli/commands/log.d.ts +0 -7
  282. package/dist/src/cli/commands/log.d.ts.map +0 -1
  283. package/dist/src/cli/commands/log.js +0 -168
  284. package/dist/src/cli/commands/log.js.map +0 -1
  285. package/dist/src/cli/commands/onboard.d.ts +0 -8
  286. package/dist/src/cli/commands/onboard.d.ts.map +0 -1
  287. package/dist/src/cli/commands/onboard.js +0 -363
  288. package/dist/src/cli/commands/onboard.js.map +0 -1
  289. package/dist/src/cli/commands/projects.d.ts +0 -8
  290. package/dist/src/cli/commands/projects.d.ts.map +0 -1
  291. package/dist/src/cli/commands/projects.js +0 -220
  292. package/dist/src/cli/commands/projects.js.map +0 -1
  293. package/dist/src/cli/commands/search.d.ts +0 -7
  294. package/dist/src/cli/commands/search.d.ts.map +0 -1
  295. package/dist/src/cli/commands/search.js +0 -162
  296. package/dist/src/cli/commands/search.js.map +0 -1
  297. package/dist/src/cli/commands/session.d.ts +0 -7
  298. package/dist/src/cli/commands/session.d.ts.map +0 -1
  299. package/dist/src/cli/commands/session.js +0 -222
  300. package/dist/src/cli/commands/session.js.map +0 -1
  301. package/dist/src/cli/commands/tasks.d.ts +0 -7
  302. package/dist/src/cli/commands/tasks.d.ts.map +0 -1
  303. package/dist/src/cli/commands/tasks.js +0 -229
  304. package/dist/src/cli/commands/tasks.js.map +0 -1
  305. package/dist/src/cli/commands/webhook.d.ts +0 -3
  306. package/dist/src/cli/commands/webhook.d.ts.map +0 -1
  307. package/dist/src/cli/commands/webhook.js +0 -157
  308. package/dist/src/cli/commands/webhook.js.map +0 -1
  309. package/dist/src/cli/commands/worktree.d.ts +0 -8
  310. package/dist/src/cli/commands/worktree.d.ts.map +0 -1
  311. package/dist/src/cli/commands/worktree.js +0 -339
  312. package/dist/src/cli/commands/worktree.js.map +0 -1
  313. package/dist/src/cli/index.d.ts +0 -8
  314. package/dist/src/cli/index.d.ts.map +0 -1
  315. package/dist/src/cli/index.js +0 -995
  316. package/dist/src/cli/index.js.map +0 -1
  317. package/dist/src/cli/utils/viewer.d.ts +0 -3
  318. package/dist/src/cli/utils/viewer.d.ts.map +0 -1
  319. package/dist/src/cli/utils/viewer.js +0 -91
  320. package/dist/src/cli/utils/viewer.js.map +0 -1
  321. package/dist/src/core/config/config-manager.d.ts +0 -95
  322. package/dist/src/core/config/config-manager.d.ts.map +0 -1
  323. package/dist/src/core/config/config-manager.js +0 -359
  324. package/dist/src/core/config/config-manager.js.map +0 -1
  325. package/dist/src/core/config/types.d.ts +0 -72
  326. package/dist/src/core/config/types.d.ts.map +0 -1
  327. package/dist/src/core/config/types.js +0 -127
  328. package/dist/src/core/config/types.js.map +0 -1
  329. package/dist/src/core/context/auto-context.d.ts +0 -22
  330. package/dist/src/core/context/auto-context.d.ts.map +0 -1
  331. package/dist/src/core/context/auto-context.js +0 -77
  332. package/dist/src/core/context/auto-context.js.map +0 -1
  333. package/dist/src/core/context/compaction-handler.d.ts +0 -119
  334. package/dist/src/core/context/compaction-handler.d.ts.map +0 -1
  335. package/dist/src/core/context/compaction-handler.js +0 -306
  336. package/dist/src/core/context/compaction-handler.js.map +0 -1
  337. package/dist/src/core/context/frame-database.d.ts +0 -59
  338. package/dist/src/core/context/frame-database.d.ts.map +0 -1
  339. package/dist/src/core/context/frame-database.js +0 -333
  340. package/dist/src/core/context/frame-database.js.map +0 -1
  341. package/dist/src/core/context/frame-digest.d.ts +0 -59
  342. package/dist/src/core/context/frame-digest.d.ts.map +0 -1
  343. package/dist/src/core/context/frame-digest.js +0 -264
  344. package/dist/src/core/context/frame-digest.js.map +0 -1
  345. package/dist/src/core/context/frame-manager.d.ts +0 -112
  346. package/dist/src/core/context/frame-manager.d.ts.map +0 -1
  347. package/dist/src/core/context/frame-manager.js +0 -600
  348. package/dist/src/core/context/frame-manager.js.map +0 -1
  349. package/dist/src/core/context/frame-stack.d.ts +0 -85
  350. package/dist/src/core/context/frame-stack.d.ts.map +0 -1
  351. package/dist/src/core/context/frame-stack.js +0 -287
  352. package/dist/src/core/context/frame-stack.js.map +0 -1
  353. package/dist/src/core/context/frame-types.d.ts +0 -67
  354. package/dist/src/core/context/frame-types.d.ts.map +0 -1
  355. package/dist/src/core/context/frame-types.js +0 -6
  356. package/dist/src/core/context/frame-types.js.map +0 -1
  357. package/dist/src/core/context/index.d.ts +0 -11
  358. package/dist/src/core/context/index.d.ts.map +0 -1
  359. package/dist/src/core/context/index.js +0 -14
  360. package/dist/src/core/context/index.js.map +0 -1
  361. package/dist/src/core/context/model-aware-compaction.d.ts +0 -101
  362. package/dist/src/core/context/model-aware-compaction.d.ts.map +0 -1
  363. package/dist/src/core/context/model-aware-compaction.js +0 -616
  364. package/dist/src/core/context/model-aware-compaction.js.map +0 -1
  365. package/dist/src/core/context/refactored-frame-manager.d.ts +0 -99
  366. package/dist/src/core/context/refactored-frame-manager.d.ts.map +0 -1
  367. package/dist/src/core/context/refactored-frame-manager.js +0 -340
  368. package/dist/src/core/context/refactored-frame-manager.js.map +0 -1
  369. package/dist/src/core/database/batch-operations.d.ts +0 -118
  370. package/dist/src/core/database/batch-operations.d.ts.map +0 -1
  371. package/dist/src/core/database/batch-operations.js +0 -339
  372. package/dist/src/core/database/batch-operations.js.map +0 -1
  373. package/dist/src/core/database/connection-pool.d.ts +0 -79
  374. package/dist/src/core/database/connection-pool.d.ts.map +0 -1
  375. package/dist/src/core/database/connection-pool.js +0 -236
  376. package/dist/src/core/database/connection-pool.js.map +0 -1
  377. package/dist/src/core/database/query-cache.d.ts +0 -135
  378. package/dist/src/core/database/query-cache.d.ts.map +0 -1
  379. package/dist/src/core/database/query-cache.js +0 -294
  380. package/dist/src/core/database/query-cache.js.map +0 -1
  381. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts +0 -125
  382. package/dist/src/core/digest/enhanced-hybrid-digest.d.ts.map +0 -1
  383. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -282
  384. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -1
  385. package/dist/src/core/digest/frame-digest-integration.d.ts +0 -67
  386. package/dist/src/core/digest/frame-digest-integration.d.ts.map +0 -1
  387. package/dist/src/core/digest/frame-digest-integration.js +0 -198
  388. package/dist/src/core/digest/frame-digest-integration.js.map +0 -1
  389. package/dist/src/core/digest/hybrid-digest-generator.d.ts +0 -76
  390. package/dist/src/core/digest/hybrid-digest-generator.d.ts.map +0 -1
  391. package/dist/src/core/digest/hybrid-digest-generator.js +0 -629
  392. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -1
  393. package/dist/src/core/digest/index.d.ts +0 -9
  394. package/dist/src/core/digest/index.d.ts.map +0 -1
  395. package/dist/src/core/digest/index.js +0 -9
  396. package/dist/src/core/digest/index.js.map +0 -1
  397. package/dist/src/core/digest/types.d.ts +0 -154
  398. package/dist/src/core/digest/types.d.ts.map +0 -1
  399. package/dist/src/core/digest/types.js +0 -18
  400. package/dist/src/core/digest/types.js.map +0 -1
  401. package/dist/src/core/errors/index.d.ts +0 -143
  402. package/dist/src/core/errors/index.d.ts.map +0 -1
  403. package/dist/src/core/errors/index.js +0 -282
  404. package/dist/src/core/errors/index.js.map +0 -1
  405. package/dist/src/core/errors/recovery.d.ts +0 -86
  406. package/dist/src/core/errors/recovery.d.ts.map +0 -1
  407. package/dist/src/core/errors/recovery.js +0 -274
  408. package/dist/src/core/errors/recovery.js.map +0 -1
  409. package/dist/src/core/merge/conflict-detector.d.ts +0 -122
  410. package/dist/src/core/merge/conflict-detector.d.ts.map +0 -1
  411. package/dist/src/core/merge/conflict-detector.js +0 -468
  412. package/dist/src/core/merge/conflict-detector.js.map +0 -1
  413. package/dist/src/core/merge/index.d.ts +0 -9
  414. package/dist/src/core/merge/index.d.ts.map +0 -1
  415. package/dist/src/core/merge/index.js +0 -9
  416. package/dist/src/core/merge/index.js.map +0 -1
  417. package/dist/src/core/merge/resolution-engine.d.ts +0 -120
  418. package/dist/src/core/merge/resolution-engine.d.ts.map +0 -1
  419. package/dist/src/core/merge/resolution-engine.js +0 -573
  420. package/dist/src/core/merge/resolution-engine.js.map +0 -1
  421. package/dist/src/core/merge/stack-diff.d.ts +0 -97
  422. package/dist/src/core/merge/stack-diff.d.ts.map +0 -1
  423. package/dist/src/core/merge/stack-diff.js +0 -516
  424. package/dist/src/core/merge/stack-diff.js.map +0 -1
  425. package/dist/src/core/merge/types.d.ts +0 -110
  426. package/dist/src/core/merge/types.d.ts.map +0 -1
  427. package/dist/src/core/merge/types.js +0 -6
  428. package/dist/src/core/merge/types.js.map +0 -1
  429. package/dist/src/core/monitoring/error-handler.d.ts +0 -46
  430. package/dist/src/core/monitoring/error-handler.d.ts.map +0 -1
  431. package/dist/src/core/monitoring/error-handler.js +0 -212
  432. package/dist/src/core/monitoring/error-handler.js.map +0 -1
  433. package/dist/src/core/monitoring/logger.d.ts +0 -24
  434. package/dist/src/core/monitoring/logger.d.ts.map +0 -1
  435. package/dist/src/core/monitoring/logger.js +0 -126
  436. package/dist/src/core/monitoring/logger.js.map +0 -1
  437. package/dist/src/core/monitoring/metrics.d.ts +0 -10
  438. package/dist/src/core/monitoring/metrics.d.ts.map +0 -1
  439. package/dist/src/core/monitoring/metrics.js +0 -152
  440. package/dist/src/core/monitoring/metrics.js.map +0 -1
  441. package/dist/src/core/monitoring/progress-tracker.d.ts +0 -95
  442. package/dist/src/core/monitoring/progress-tracker.d.ts.map +0 -1
  443. package/dist/src/core/monitoring/progress-tracker.js +0 -178
  444. package/dist/src/core/monitoring/progress-tracker.js.map +0 -1
  445. package/dist/src/core/performance/context-cache.d.ts +0 -109
  446. package/dist/src/core/performance/context-cache.d.ts.map +0 -1
  447. package/dist/src/core/performance/context-cache.js +0 -280
  448. package/dist/src/core/performance/context-cache.js.map +0 -1
  449. package/dist/src/core/performance/index.d.ts +0 -3
  450. package/dist/src/core/performance/index.d.ts.map +0 -1
  451. package/dist/src/core/performance/index.js +0 -3
  452. package/dist/src/core/performance/index.js.map +0 -1
  453. package/dist/src/core/performance/lazy-context-loader.d.ts +0 -93
  454. package/dist/src/core/performance/lazy-context-loader.d.ts.map +0 -1
  455. package/dist/src/core/performance/lazy-context-loader.js +0 -332
  456. package/dist/src/core/performance/lazy-context-loader.js.map +0 -1
  457. package/dist/src/core/performance/monitor.d.ts +0 -48
  458. package/dist/src/core/performance/monitor.d.ts.map +0 -1
  459. package/dist/src/core/performance/monitor.js +0 -226
  460. package/dist/src/core/performance/monitor.js.map +0 -1
  461. package/dist/src/core/performance/optimized-frame-context.d.ts +0 -74
  462. package/dist/src/core/performance/optimized-frame-context.d.ts.map +0 -1
  463. package/dist/src/core/performance/optimized-frame-context.js +0 -330
  464. package/dist/src/core/performance/optimized-frame-context.js.map +0 -1
  465. package/dist/src/core/performance/performance-benchmark.d.ts +0 -50
  466. package/dist/src/core/performance/performance-benchmark.d.ts.map +0 -1
  467. package/dist/src/core/performance/performance-benchmark.js +0 -290
  468. package/dist/src/core/performance/performance-benchmark.js.map +0 -1
  469. package/dist/src/core/performance/performance-profiler.d.ts +0 -151
  470. package/dist/src/core/performance/performance-profiler.d.ts.map +0 -1
  471. package/dist/src/core/performance/performance-profiler.js +0 -346
  472. package/dist/src/core/performance/performance-profiler.js.map +0 -1
  473. package/dist/src/core/performance/streaming-jsonl-parser.d.ts +0 -41
  474. package/dist/src/core/performance/streaming-jsonl-parser.d.ts.map +0 -1
  475. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -193
  476. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -1
  477. package/dist/src/core/persistence/postgres-adapter.d.ts +0 -31
  478. package/dist/src/core/persistence/postgres-adapter.d.ts.map +0 -1
  479. package/dist/src/core/persistence/postgres-adapter.js +0 -330
  480. package/dist/src/core/persistence/postgres-adapter.js.map +0 -1
  481. package/dist/src/core/projects/project-manager.d.ts +0 -130
  482. package/dist/src/core/projects/project-manager.d.ts.map +0 -1
  483. package/dist/src/core/projects/project-manager.js +0 -709
  484. package/dist/src/core/projects/project-manager.js.map +0 -1
  485. package/dist/src/core/query/query-parser.d.ts +0 -109
  486. package/dist/src/core/query/query-parser.d.ts.map +0 -1
  487. package/dist/src/core/query/query-parser.js +0 -415
  488. package/dist/src/core/query/query-parser.js.map +0 -1
  489. package/dist/src/core/query/query-templates.d.ts +0 -44
  490. package/dist/src/core/query/query-templates.d.ts.map +0 -1
  491. package/dist/src/core/query/query-templates.js +0 -326
  492. package/dist/src/core/query/query-templates.js.map +0 -1
  493. package/dist/src/core/retrieval/index.d.ts +0 -8
  494. package/dist/src/core/retrieval/index.d.ts.map +0 -1
  495. package/dist/src/core/retrieval/index.js +0 -8
  496. package/dist/src/core/retrieval/index.js.map +0 -1
  497. package/dist/src/core/retrieval/llm-context-retrieval.d.ts +0 -73
  498. package/dist/src/core/retrieval/llm-context-retrieval.d.ts.map +0 -1
  499. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -597
  500. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -1
  501. package/dist/src/core/retrieval/summary-generator.d.ts +0 -63
  502. package/dist/src/core/retrieval/summary-generator.d.ts.map +0 -1
  503. package/dist/src/core/retrieval/summary-generator.js +0 -622
  504. package/dist/src/core/retrieval/summary-generator.js.map +0 -1
  505. package/dist/src/core/retrieval/types.d.ts +0 -257
  506. package/dist/src/core/retrieval/types.d.ts.map +0 -1
  507. package/dist/src/core/retrieval/types.js +0 -18
  508. package/dist/src/core/retrieval/types.js.map +0 -1
  509. package/dist/src/core/session/index.d.ts +0 -2
  510. package/dist/src/core/session/index.d.ts.map +0 -1
  511. package/dist/src/core/session/index.js +0 -2
  512. package/dist/src/core/session/index.js.map +0 -1
  513. package/dist/src/core/session/session-manager.d.ts +0 -69
  514. package/dist/src/core/session/session-manager.d.ts.map +0 -1
  515. package/dist/src/core/session/session-manager.js +0 -311
  516. package/dist/src/core/session/session-manager.js.map +0 -1
  517. package/dist/src/core/trace/cli-trace-wrapper.d.ts +0 -23
  518. package/dist/src/core/trace/cli-trace-wrapper.d.ts.map +0 -1
  519. package/dist/src/core/trace/cli-trace-wrapper.js +0 -141
  520. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -1
  521. package/dist/src/core/trace/db-trace-wrapper.d.ts +0 -36
  522. package/dist/src/core/trace/db-trace-wrapper.d.ts.map +0 -1
  523. package/dist/src/core/trace/db-trace-wrapper.js +0 -252
  524. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -1
  525. package/dist/src/core/trace/debug-trace.d.ts +0 -84
  526. package/dist/src/core/trace/debug-trace.d.ts.map +0 -1
  527. package/dist/src/core/trace/debug-trace.js +0 -402
  528. package/dist/src/core/trace/debug-trace.js.map +0 -1
  529. package/dist/src/core/trace/error-test.d.ts +0 -6
  530. package/dist/src/core/trace/error-test.d.ts.map +0 -1
  531. package/dist/src/core/trace/error-test.js +0 -128
  532. package/dist/src/core/trace/error-test.js.map +0 -1
  533. package/dist/src/core/trace/index.d.ts +0 -25
  534. package/dist/src/core/trace/index.d.ts.map +0 -1
  535. package/dist/src/core/trace/index.js +0 -121
  536. package/dist/src/core/trace/index.js.map +0 -1
  537. package/dist/src/core/trace/linear-api-wrapper.d.ts +0 -17
  538. package/dist/src/core/trace/linear-api-wrapper.d.ts.map +0 -1
  539. package/dist/src/core/trace/linear-api-wrapper.js +0 -205
  540. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -1
  541. package/dist/src/core/trace/performance-test.d.ts +0 -6
  542. package/dist/src/core/trace/performance-test.d.ts.map +0 -1
  543. package/dist/src/core/trace/performance-test.js +0 -111
  544. package/dist/src/core/trace/performance-test.js.map +0 -1
  545. package/dist/src/core/trace/trace-demo.d.ts +0 -8
  546. package/dist/src/core/trace/trace-demo.d.ts.map +0 -1
  547. package/dist/src/core/trace/trace-demo.js +0 -154
  548. package/dist/src/core/trace/trace-demo.js.map +0 -1
  549. package/dist/src/core/trace/trace-detector.d.ts +0 -108
  550. package/dist/src/core/trace/trace-detector.d.ts.map +0 -1
  551. package/dist/src/core/trace/trace-detector.demo.d.ts +0 -5
  552. package/dist/src/core/trace/trace-detector.demo.d.ts.map +0 -1
  553. package/dist/src/core/trace/trace-detector.demo.js +0 -145
  554. package/dist/src/core/trace/trace-detector.demo.js.map +0 -1
  555. package/dist/src/core/trace/trace-detector.js +0 -425
  556. package/dist/src/core/trace/trace-detector.js.map +0 -1
  557. package/dist/src/core/trace/trace-store.d.ts +0 -60
  558. package/dist/src/core/trace/trace-store.d.ts.map +0 -1
  559. package/dist/src/core/trace/trace-store.js +0 -323
  560. package/dist/src/core/trace/trace-store.js.map +0 -1
  561. package/dist/src/core/trace/types.d.ts +0 -81
  562. package/dist/src/core/trace/types.d.ts.map +0 -1
  563. package/dist/src/core/trace/types.js +0 -70
  564. package/dist/src/core/trace/types.js.map +0 -1
  565. package/dist/src/core/types.d.ts +0 -35
  566. package/dist/src/core/types.d.ts.map +0 -1
  567. package/dist/src/core/types.js +0 -2
  568. package/dist/src/core/types.js.map +0 -1
  569. package/dist/src/core/utils/update-checker.d.ts +0 -38
  570. package/dist/src/core/utils/update-checker.d.ts.map +0 -1
  571. package/dist/src/core/utils/update-checker.js +0 -213
  572. package/dist/src/core/utils/update-checker.js.map +0 -1
  573. package/dist/src/core/worktree/worktree-manager.d.ts +0 -110
  574. package/dist/src/core/worktree/worktree-manager.d.ts.map +0 -1
  575. package/dist/src/core/worktree/worktree-manager.js +0 -456
  576. package/dist/src/core/worktree/worktree-manager.js.map +0 -1
  577. package/dist/src/features/analytics/api/analytics-api.d.ts +0 -24
  578. package/dist/src/features/analytics/api/analytics-api.d.ts.map +0 -1
  579. package/dist/src/features/analytics/api/analytics-api.js +0 -289
  580. package/dist/src/features/analytics/api/analytics-api.js.map +0 -1
  581. package/dist/src/features/analytics/core/analytics-service.d.ts +0 -29
  582. package/dist/src/features/analytics/core/analytics-service.d.ts.map +0 -1
  583. package/dist/src/features/analytics/core/analytics-service.js +0 -275
  584. package/dist/src/features/analytics/core/analytics-service.js.map +0 -1
  585. package/dist/src/features/analytics/index.d.ts +0 -12
  586. package/dist/src/features/analytics/index.d.ts.map +0 -1
  587. package/dist/src/features/analytics/index.js +0 -11
  588. package/dist/src/features/analytics/index.js.map +0 -1
  589. package/dist/src/features/analytics/queries/metrics-queries.d.ts +0 -11
  590. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +0 -1
  591. package/dist/src/features/analytics/queries/metrics-queries.js +0 -240
  592. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -1
  593. package/dist/src/features/analytics/types/metrics.d.ts +0 -60
  594. package/dist/src/features/analytics/types/metrics.d.ts.map +0 -1
  595. package/dist/src/features/analytics/types/metrics.js +0 -2
  596. package/dist/src/features/analytics/types/metrics.js.map +0 -1
  597. package/dist/src/features/browser/browser-mcp.d.ts +0 -94
  598. package/dist/src/features/browser/browser-mcp.d.ts.map +0 -1
  599. package/dist/src/features/browser/browser-mcp.js +0 -459
  600. package/dist/src/features/browser/browser-mcp.js.map +0 -1
  601. package/dist/src/features/tasks/pebbles-task-store.d.ts +0 -128
  602. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +0 -1
  603. package/dist/src/features/tasks/pebbles-task-store.js +0 -572
  604. package/dist/src/features/tasks/pebbles-task-store.js.map +0 -1
  605. package/dist/src/features/tasks/task-aware-context.d.ts +0 -103
  606. package/dist/src/features/tasks/task-aware-context.d.ts.map +0 -1
  607. package/dist/src/features/tasks/task-aware-context.js +0 -412
  608. package/dist/src/features/tasks/task-aware-context.js.map +0 -1
  609. package/dist/src/index.d.ts +0 -21
  610. package/dist/src/index.d.ts.map +0 -1
  611. package/dist/src/index.js +0 -9
  612. package/dist/src/index.js.map +0 -1
  613. package/dist/src/integrations/linear/auth.d.ts +0 -99
  614. package/dist/src/integrations/linear/auth.d.ts.map +0 -1
  615. package/dist/src/integrations/linear/auth.js +0 -319
  616. package/dist/src/integrations/linear/auth.js.map +0 -1
  617. package/dist/src/integrations/linear/auto-sync.d.ts +0 -77
  618. package/dist/src/integrations/linear/auto-sync.d.ts.map +0 -1
  619. package/dist/src/integrations/linear/auto-sync.js +0 -268
  620. package/dist/src/integrations/linear/auto-sync.js.map +0 -1
  621. package/dist/src/integrations/linear/client.d.ts +0 -127
  622. package/dist/src/integrations/linear/client.d.ts.map +0 -1
  623. package/dist/src/integrations/linear/client.js +0 -446
  624. package/dist/src/integrations/linear/client.js.map +0 -1
  625. package/dist/src/integrations/linear/config.d.ts +0 -51
  626. package/dist/src/integrations/linear/config.d.ts.map +0 -1
  627. package/dist/src/integrations/linear/config.js +0 -103
  628. package/dist/src/integrations/linear/config.js.map +0 -1
  629. package/dist/src/integrations/linear/sync-manager.d.ts +0 -78
  630. package/dist/src/integrations/linear/sync-manager.d.ts.map +0 -1
  631. package/dist/src/integrations/linear/sync-manager.js +0 -235
  632. package/dist/src/integrations/linear/sync-manager.js.map +0 -1
  633. package/dist/src/integrations/linear/sync-service.d.ts +0 -46
  634. package/dist/src/integrations/linear/sync-service.d.ts.map +0 -1
  635. package/dist/src/integrations/linear/sync-service.js +0 -217
  636. package/dist/src/integrations/linear/sync-service.js.map +0 -1
  637. package/dist/src/integrations/linear/sync.d.ts +0 -125
  638. package/dist/src/integrations/linear/sync.d.ts.map +0 -1
  639. package/dist/src/integrations/linear/sync.js +0 -563
  640. package/dist/src/integrations/linear/sync.js.map +0 -1
  641. package/dist/src/integrations/linear/types.d.ts +0 -90
  642. package/dist/src/integrations/linear/types.d.ts.map +0 -1
  643. package/dist/src/integrations/linear/types.js +0 -2
  644. package/dist/src/integrations/linear/types.js.map +0 -1
  645. package/dist/src/integrations/linear/webhook-server.d.ts +0 -32
  646. package/dist/src/integrations/linear/webhook-server.d.ts.map +0 -1
  647. package/dist/src/integrations/linear/webhook-server.js +0 -190
  648. package/dist/src/integrations/linear/webhook-server.js.map +0 -1
  649. package/dist/src/integrations/linear/webhook.d.ts +0 -108
  650. package/dist/src/integrations/linear/webhook.d.ts.map +0 -1
  651. package/dist/src/integrations/linear/webhook.js +0 -291
  652. package/dist/src/integrations/linear/webhook.js.map +0 -1
  653. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts +0 -39
  654. package/dist/src/integrations/mcp/handlers/context-handlers.d.ts.map +0 -1
  655. package/dist/src/integrations/mcp/handlers/context-handlers.js +0 -266
  656. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -1
  657. package/dist/src/integrations/mcp/handlers/index.d.ts +0 -37
  658. package/dist/src/integrations/mcp/handlers/index.d.ts.map +0 -1
  659. package/dist/src/integrations/mcp/handlers/index.js +0 -134
  660. package/dist/src/integrations/mcp/handlers/index.js.map +0 -1
  661. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts +0 -33
  662. package/dist/src/integrations/mcp/handlers/linear-handlers.d.ts.map +0 -1
  663. package/dist/src/integrations/mcp/handlers/linear-handlers.js +0 -251
  664. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -1
  665. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts +0 -42
  666. package/dist/src/integrations/mcp/handlers/task-handlers.d.ts.map +0 -1
  667. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -238
  668. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -1
  669. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts +0 -41
  670. package/dist/src/integrations/mcp/handlers/trace-handlers.d.ts.map +0 -1
  671. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -298
  672. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -1
  673. package/dist/src/integrations/mcp/index.d.ts +0 -13
  674. package/dist/src/integrations/mcp/index.d.ts.map +0 -1
  675. package/dist/src/integrations/mcp/index.js +0 -17
  676. package/dist/src/integrations/mcp/index.js.map +0 -1
  677. package/dist/src/integrations/mcp/refactored-server.d.ts +0 -76
  678. package/dist/src/integrations/mcp/refactored-server.d.ts.map +0 -1
  679. package/dist/src/integrations/mcp/refactored-server.js +0 -351
  680. package/dist/src/integrations/mcp/refactored-server.js.map +0 -1
  681. package/dist/src/integrations/mcp/server.d.ts +0 -54
  682. package/dist/src/integrations/mcp/server.d.ts.map +0 -1
  683. package/dist/src/integrations/mcp/server.js +0 -1616
  684. package/dist/src/integrations/mcp/server.js.map +0 -1
  685. package/dist/src/integrations/mcp/tool-definitions.d.ts +0 -44
  686. package/dist/src/integrations/mcp/tool-definitions.d.ts.map +0 -1
  687. package/dist/src/integrations/mcp/tool-definitions.js +0 -563
  688. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -1
  689. package/dist/src/integrations/mcp/trace-test.d.ts +0 -5
  690. package/dist/src/integrations/mcp/trace-test.d.ts.map +0 -1
  691. package/dist/src/integrations/mcp/trace-test.js +0 -54
  692. package/dist/src/integrations/mcp/trace-test.js.map +0 -1
  693. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts +0 -48
  694. package/dist/src/integrations/pg-aiguide/embedding-provider.d.ts.map +0 -1
  695. package/dist/src/integrations/pg-aiguide/embedding-provider.js +0 -190
  696. package/dist/src/integrations/pg-aiguide/embedding-provider.js.map +0 -1
  697. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts +0 -34
  698. package/dist/src/integrations/pg-aiguide/semantic-search.d.ts.map +0 -1
  699. package/dist/src/integrations/pg-aiguide/semantic-search.js +0 -176
  700. package/dist/src/integrations/pg-aiguide/semantic-search.js.map +0 -1
  701. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts +0 -44
  702. package/dist/src/integrations/pg-aiguide/timescale-analytics.d.ts.map +0 -1
  703. package/dist/src/integrations/pg-aiguide/timescale-analytics.js +0 -215
  704. package/dist/src/integrations/pg-aiguide/timescale-analytics.js.map +0 -1
  705. package/dist/src/mcp/stackmemory-mcp-server.d.ts +0 -9
  706. package/dist/src/mcp/stackmemory-mcp-server.d.ts.map +0 -1
  707. package/dist/src/mcp/stackmemory-mcp-server.js +0 -519
  708. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -1
  709. package/dist/src/middleware/exponential-rate-limiter.d.ts +0 -78
  710. package/dist/src/middleware/exponential-rate-limiter.d.ts.map +0 -1
  711. package/dist/src/middleware/exponential-rate-limiter.js +0 -293
  712. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -1
  713. package/dist/src/models/user.model.d.ts +0 -62
  714. package/dist/src/models/user.model.d.ts.map +0 -1
  715. package/dist/src/models/user.model.js +0 -311
  716. package/dist/src/models/user.model.js.map +0 -1
  717. package/dist/src/servers/production/auth-middleware.d.ts +0 -76
  718. package/dist/src/servers/production/auth-middleware.d.ts.map +0 -1
  719. package/dist/src/servers/production/auth-middleware.js +0 -558
  720. package/dist/src/servers/production/auth-middleware.js.map +0 -1
  721. package/dist/src/servers/railway/index.d.ts +0 -7
  722. package/dist/src/servers/railway/index.d.ts.map +0 -1
  723. package/dist/src/servers/railway/index.js +0 -401
  724. package/dist/src/servers/railway/index.js.map +0 -1
  725. package/dist/src/services/config-service.d.ts +0 -44
  726. package/dist/src/services/config-service.d.ts.map +0 -1
  727. package/dist/src/services/config-service.js +0 -61
  728. package/dist/src/services/config-service.js.map +0 -1
  729. package/dist/src/services/context-service.d.ts +0 -17
  730. package/dist/src/services/context-service.d.ts.map +0 -1
  731. package/dist/src/services/context-service.js +0 -173
  732. package/dist/src/services/context-service.js.map +0 -1
  733. package/dist/src/types/task.d.ts +0 -27
  734. package/dist/src/types/task.d.ts.map +0 -1
  735. package/dist/src/types/task.js +0 -2
  736. package/dist/src/types/task.js.map +0 -1
  737. package/dist/src/utils/logger.d.ts +0 -13
  738. package/dist/src/utils/logger.d.ts.map +0 -1
  739. package/dist/src/utils/logger.js +0 -52
  740. package/dist/src/utils/logger.js.map +0 -1
  741. package/dist/src/validation/schemas.d.ts +0 -633
  742. package/dist/src/validation/schemas.d.ts.map +0 -1
  743. package/dist/src/validation/schemas.js +0 -347
  744. package/dist/src/validation/schemas.js.map +0 -1
@@ -1,1616 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * StackMemory MCP Server - Local Instance
4
- * This runs locally and provides context to Claude Code
5
- */
6
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
- import { z } from 'zod';
9
- import Database from 'better-sqlite3';
10
- import { readFileSync, existsSync, mkdirSync } from 'fs';
11
- import { join, dirname } from 'path';
12
- import { execSync } from 'child_process';
13
- import { FrameManager } from '../../core/context/frame-manager.js';
14
- import { PebblesTaskStore, } from '../../features/tasks/pebbles-task-store.js';
15
- import { LinearAuthManager } from '../linear/auth.js';
16
- import { LinearSyncEngine, DEFAULT_SYNC_CONFIG } from '../linear/sync.js';
17
- import { logger } from '../../core/monitoring/logger.js';
18
- import { BrowserMCPIntegration } from '../../features/browser/browser-mcp.js';
19
- import { TraceDetector } from '../../core/trace/trace-detector.js';
20
- import { LLMContextRetrieval } from '../../core/retrieval/index.js';
21
- import { v4 as uuidv4 } from 'uuid';
22
- // ============================================
23
- // Simple Local MCP Server
24
- // ============================================
25
- class LocalStackMemoryMCP {
26
- server;
27
- db;
28
- projectRoot;
29
- frameManager;
30
- taskStore;
31
- linearAuthManager;
32
- linearSync;
33
- projectId;
34
- contexts = new Map();
35
- browserMCP;
36
- traceDetector;
37
- contextRetrieval;
38
- constructor() {
39
- // Find project root (where .git is)
40
- this.projectRoot = this.findProjectRoot();
41
- this.projectId = this.getProjectId();
42
- // Ensure .stackmemory directory exists
43
- const dbDir = join(this.projectRoot, '.stackmemory');
44
- if (!existsSync(dbDir)) {
45
- mkdirSync(dbDir, { recursive: true });
46
- }
47
- // Initialize database
48
- const dbPath = join(dbDir, 'context.db');
49
- this.db = new Database(dbPath);
50
- this.initDB();
51
- // Initialize frame manager
52
- this.frameManager = new FrameManager(this.db, this.projectId);
53
- // Initialize task store
54
- this.taskStore = new PebblesTaskStore(this.projectRoot, this.db);
55
- // Initialize Linear integration
56
- this.linearAuthManager = new LinearAuthManager(this.projectRoot);
57
- this.linearSync = new LinearSyncEngine(this.taskStore, this.linearAuthManager, DEFAULT_SYNC_CONFIG);
58
- // Initialize MCP server
59
- this.server = new Server({
60
- name: 'stackmemory-local',
61
- version: '0.1.0',
62
- }, {
63
- capabilities: {
64
- tools: {},
65
- },
66
- });
67
- // Initialize Browser MCP integration
68
- this.browserMCP = new BrowserMCPIntegration({
69
- headless: process.env.BROWSER_HEADLESS !== 'false',
70
- defaultViewport: { width: 1280, height: 720 },
71
- });
72
- // Initialize Trace Detector with database persistence
73
- this.traceDetector = new TraceDetector({}, undefined, this.db);
74
- // Initialize LLM Context Retrieval
75
- this.contextRetrieval = new LLMContextRetrieval(this.db, this.frameManager, this.projectId);
76
- this.setupHandlers();
77
- this.loadInitialContext();
78
- // Initialize Browser MCP with this server
79
- this.browserMCP.initialize(this.server).catch((error) => {
80
- logger.error('Failed to initialize Browser MCP', error);
81
- });
82
- logger.info('StackMemory MCP Server initialized', {
83
- projectRoot: this.projectRoot,
84
- projectId: this.projectId,
85
- });
86
- }
87
- findProjectRoot() {
88
- let dir = process.cwd();
89
- while (dir !== '/') {
90
- if (existsSync(join(dir, '.git'))) {
91
- return dir;
92
- }
93
- dir = dirname(dir);
94
- }
95
- return process.cwd();
96
- }
97
- initDB() {
98
- // Note: Don't create frames table here - FrameManager handles the schema
99
- // with the full run_id, project_id, parent_frame_id columns
100
- this.db.exec(`
101
- CREATE TABLE IF NOT EXISTS contexts (
102
- id TEXT PRIMARY KEY,
103
- type TEXT NOT NULL,
104
- content TEXT NOT NULL,
105
- importance REAL DEFAULT 0.5,
106
- created_at INTEGER DEFAULT (unixepoch()),
107
- last_accessed INTEGER DEFAULT (unixepoch()),
108
- access_count INTEGER DEFAULT 1
109
- );
110
-
111
- CREATE TABLE IF NOT EXISTS attention_log (
112
- id INTEGER PRIMARY KEY AUTOINCREMENT,
113
- context_id TEXT,
114
- query TEXT,
115
- response TEXT,
116
- influence_score REAL,
117
- timestamp INTEGER DEFAULT (unixepoch())
118
- );
119
- `);
120
- }
121
- loadInitialContext() {
122
- // Load project information
123
- const projectInfo = this.getProjectInfo();
124
- this.addContext('project', `Project: ${projectInfo.name}\nPath: ${projectInfo.path}`, 0.9);
125
- // Load recent git commits
126
- try {
127
- const recentCommits = execSync('git log --oneline -10', {
128
- cwd: this.projectRoot,
129
- }).toString();
130
- this.addContext('git_history', `Recent commits:\n${recentCommits}`, 0.6);
131
- }
132
- catch {
133
- // Not a git repo or git not available
134
- }
135
- // Load README if exists
136
- const readmePath = join(this.projectRoot, 'README.md');
137
- if (existsSync(readmePath)) {
138
- const readme = readFileSync(readmePath, 'utf-8');
139
- const summary = readme.substring(0, 500);
140
- this.addContext('readme', `Project README:\n${summary}...`, 0.8);
141
- }
142
- // Load any existing decisions from previous sessions
143
- this.loadStoredContexts();
144
- }
145
- getProjectId() {
146
- // Use git remote or directory name as project ID
147
- try {
148
- const remoteUrl = execSync('git config --get remote.origin.url', {
149
- cwd: this.projectRoot,
150
- stdio: 'pipe',
151
- })
152
- .toString()
153
- .trim();
154
- return remoteUrl || this.projectRoot.split('/').pop() || 'unknown';
155
- }
156
- catch {
157
- return this.projectRoot.split('/').pop() || 'unknown';
158
- }
159
- }
160
- getProjectInfo() {
161
- const packageJsonPath = join(this.projectRoot, 'package.json');
162
- if (existsSync(packageJsonPath)) {
163
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
164
- return {
165
- name: pkg.name || 'unknown',
166
- path: this.projectRoot,
167
- };
168
- }
169
- return {
170
- name: this.projectRoot.split('/').pop() || 'unknown',
171
- path: this.projectRoot,
172
- };
173
- }
174
- addContext(type, content, importance = 0.5) {
175
- const id = `${type}_${Date.now()}`;
176
- this.db
177
- .prepare(`
178
- INSERT OR REPLACE INTO contexts (id, type, content, importance)
179
- VALUES (?, ?, ?, ?)
180
- `)
181
- .run(id, type, content, importance);
182
- this.contexts.set(id, { type, content, importance });
183
- return id;
184
- }
185
- loadStoredContexts() {
186
- const stored = this.db
187
- .prepare(`
188
- SELECT * FROM contexts
189
- ORDER BY importance DESC, last_accessed DESC
190
- LIMIT 50
191
- `)
192
- .all();
193
- stored.forEach((ctx) => {
194
- this.contexts.set(ctx.id, ctx);
195
- });
196
- }
197
- setupHandlers() {
198
- // Tool listing
199
- this.server.setRequestHandler(z.object({
200
- method: z.literal('tools/list'),
201
- }), async () => {
202
- return {
203
- tools: [
204
- {
205
- name: 'get_context',
206
- description: 'Get current project context',
207
- inputSchema: {
208
- type: 'object',
209
- properties: {
210
- query: {
211
- type: 'string',
212
- description: 'What you want to know',
213
- },
214
- limit: {
215
- type: 'number',
216
- description: 'Max contexts to return',
217
- },
218
- },
219
- },
220
- },
221
- {
222
- name: 'add_decision',
223
- description: 'Record a decision or important information',
224
- inputSchema: {
225
- type: 'object',
226
- properties: {
227
- content: {
228
- type: 'string',
229
- description: 'The decision or information',
230
- },
231
- type: {
232
- type: 'string',
233
- enum: ['decision', 'constraint', 'learning'],
234
- },
235
- },
236
- required: ['content', 'type'],
237
- },
238
- },
239
- {
240
- name: 'start_frame',
241
- description: 'Start a new frame (task/subtask) on the call stack',
242
- inputSchema: {
243
- type: 'object',
244
- properties: {
245
- name: { type: 'string', description: 'Frame name/goal' },
246
- type: {
247
- type: 'string',
248
- enum: [
249
- 'task',
250
- 'subtask',
251
- 'tool_scope',
252
- 'review',
253
- 'write',
254
- 'debug',
255
- ],
256
- description: 'Frame type',
257
- },
258
- constraints: {
259
- type: 'array',
260
- items: { type: 'string' },
261
- description: 'Constraints for this frame',
262
- },
263
- },
264
- required: ['name', 'type'],
265
- },
266
- },
267
- {
268
- name: 'close_frame',
269
- description: 'Close current frame and generate digest',
270
- inputSchema: {
271
- type: 'object',
272
- properties: {
273
- result: {
274
- type: 'string',
275
- description: 'Frame completion result',
276
- },
277
- outputs: {
278
- type: 'object',
279
- description: 'Final outputs from frame',
280
- },
281
- },
282
- },
283
- },
284
- {
285
- name: 'add_anchor',
286
- description: 'Add anchored fact/decision/constraint to current frame',
287
- inputSchema: {
288
- type: 'object',
289
- properties: {
290
- type: {
291
- type: 'string',
292
- enum: [
293
- 'FACT',
294
- 'DECISION',
295
- 'CONSTRAINT',
296
- 'INTERFACE_CONTRACT',
297
- 'TODO',
298
- 'RISK',
299
- ],
300
- description: 'Anchor type',
301
- },
302
- text: { type: 'string', description: 'Anchor content' },
303
- priority: {
304
- type: 'number',
305
- description: 'Priority (0-10)',
306
- minimum: 0,
307
- maximum: 10,
308
- },
309
- },
310
- required: ['type', 'text'],
311
- },
312
- },
313
- {
314
- name: 'get_hot_stack',
315
- description: 'Get current active frames and context',
316
- inputSchema: {
317
- type: 'object',
318
- properties: {
319
- maxEvents: {
320
- type: 'number',
321
- description: 'Max recent events per frame',
322
- default: 20,
323
- },
324
- },
325
- },
326
- },
327
- {
328
- name: 'create_task',
329
- description: 'Create a new task in git-tracked JSONL storage',
330
- inputSchema: {
331
- type: 'object',
332
- properties: {
333
- title: { type: 'string', description: 'Task title' },
334
- description: {
335
- type: 'string',
336
- description: 'Task description',
337
- },
338
- priority: {
339
- type: 'string',
340
- enum: ['low', 'medium', 'high', 'urgent'],
341
- description: 'Task priority',
342
- },
343
- estimatedEffort: {
344
- type: 'number',
345
- description: 'Estimated effort in minutes',
346
- },
347
- dependsOn: {
348
- type: 'array',
349
- items: { type: 'string' },
350
- description: 'Task IDs this depends on',
351
- },
352
- tags: {
353
- type: 'array',
354
- items: { type: 'string' },
355
- description: 'Tags for categorization',
356
- },
357
- },
358
- required: ['title'],
359
- },
360
- },
361
- {
362
- name: 'update_task_status',
363
- description: 'Update task status with automatic time tracking',
364
- inputSchema: {
365
- type: 'object',
366
- properties: {
367
- taskId: { type: 'string', description: 'Task ID to update' },
368
- status: {
369
- type: 'string',
370
- enum: [
371
- 'pending',
372
- 'in_progress',
373
- 'completed',
374
- 'blocked',
375
- 'cancelled',
376
- ],
377
- description: 'New status',
378
- },
379
- reason: {
380
- type: 'string',
381
- description: 'Reason for status change (especially for blocked)',
382
- },
383
- },
384
- required: ['taskId', 'status'],
385
- },
386
- },
387
- {
388
- name: 'get_active_tasks',
389
- description: 'Get currently active tasks synced from Linear',
390
- inputSchema: {
391
- type: 'object',
392
- properties: {
393
- frameId: {
394
- type: 'string',
395
- description: 'Filter by specific frame ID',
396
- },
397
- status: {
398
- type: 'string',
399
- enum: [
400
- 'pending',
401
- 'in_progress',
402
- 'completed',
403
- 'blocked',
404
- 'cancelled',
405
- ],
406
- description: 'Filter by status',
407
- },
408
- priority: {
409
- type: 'string',
410
- enum: ['low', 'medium', 'high', 'urgent'],
411
- description: 'Filter by priority',
412
- },
413
- search: {
414
- type: 'string',
415
- description: 'Search in task title or description',
416
- },
417
- limit: {
418
- type: 'number',
419
- description: 'Max number of tasks to return (default: 20)',
420
- },
421
- },
422
- },
423
- },
424
- {
425
- name: 'get_task_metrics',
426
- description: 'Get project task metrics and analytics',
427
- inputSchema: {
428
- type: 'object',
429
- properties: {},
430
- },
431
- },
432
- {
433
- name: 'add_task_dependency',
434
- description: 'Add dependency relationship between tasks',
435
- inputSchema: {
436
- type: 'object',
437
- properties: {
438
- taskId: {
439
- type: 'string',
440
- description: 'Task that depends on another',
441
- },
442
- dependsOnId: {
443
- type: 'string',
444
- description: 'Task ID that this depends on',
445
- },
446
- },
447
- required: ['taskId', 'dependsOnId'],
448
- },
449
- },
450
- {
451
- name: 'linear_sync',
452
- description: 'Sync tasks with Linear',
453
- inputSchema: {
454
- type: 'object',
455
- properties: {
456
- direction: {
457
- type: 'string',
458
- enum: ['bidirectional', 'to_linear', 'from_linear'],
459
- description: 'Sync direction',
460
- },
461
- },
462
- },
463
- },
464
- {
465
- name: 'linear_update_task',
466
- description: 'Update a Linear task status',
467
- inputSchema: {
468
- type: 'object',
469
- properties: {
470
- issueId: {
471
- type: 'string',
472
- description: 'Linear issue ID or identifier (e.g., STA-34)',
473
- },
474
- status: {
475
- type: 'string',
476
- enum: ['todo', 'in-progress', 'done', 'canceled'],
477
- description: 'New status for the task',
478
- },
479
- title: {
480
- type: 'string',
481
- description: 'Update task title (optional)',
482
- },
483
- description: {
484
- type: 'string',
485
- description: 'Update task description (optional)',
486
- },
487
- priority: {
488
- type: 'number',
489
- enum: [1, 2, 3, 4],
490
- description: 'Priority (1=urgent, 2=high, 3=medium, 4=low)',
491
- },
492
- },
493
- required: ['issueId'],
494
- },
495
- },
496
- {
497
- name: 'linear_get_tasks',
498
- description: 'Get Linear tasks',
499
- inputSchema: {
500
- type: 'object',
501
- properties: {
502
- status: {
503
- type: 'string',
504
- enum: ['todo', 'in-progress', 'done', 'all'],
505
- description: 'Filter by status',
506
- },
507
- limit: {
508
- type: 'number',
509
- description: 'Maximum number of tasks to return',
510
- },
511
- },
512
- },
513
- },
514
- {
515
- name: 'linear_status',
516
- description: 'Get Linear integration status',
517
- inputSchema: {
518
- type: 'object',
519
- properties: {},
520
- },
521
- },
522
- {
523
- name: 'get_traces',
524
- description: 'Get detected traces (bundled tool call sequences)',
525
- inputSchema: {
526
- type: 'object',
527
- properties: {
528
- type: {
529
- type: 'string',
530
- enum: [
531
- 'search_driven',
532
- 'error_recovery',
533
- 'feature_implementation',
534
- 'refactoring',
535
- 'testing',
536
- 'exploration',
537
- 'debugging',
538
- 'documentation',
539
- 'build_deploy',
540
- 'unknown',
541
- ],
542
- description: 'Filter by trace type',
543
- },
544
- minScore: {
545
- type: 'number',
546
- description: 'Minimum importance score (0-1)',
547
- },
548
- limit: {
549
- type: 'number',
550
- description: 'Maximum number of traces to return',
551
- },
552
- },
553
- },
554
- },
555
- {
556
- name: 'get_trace_statistics',
557
- description: 'Get statistics about detected traces',
558
- inputSchema: {
559
- type: 'object',
560
- properties: {},
561
- },
562
- },
563
- {
564
- name: 'flush_traces',
565
- description: 'Flush any pending trace and finalize detection',
566
- inputSchema: {
567
- type: 'object',
568
- properties: {},
569
- },
570
- },
571
- {
572
- name: 'compress_old_traces',
573
- description: 'Compress traces older than specified hours',
574
- inputSchema: {
575
- type: 'object',
576
- properties: {
577
- ageHours: {
578
- type: 'number',
579
- description: 'Age threshold in hours (default: 24)',
580
- },
581
- },
582
- },
583
- },
584
- {
585
- name: 'smart_context',
586
- description: 'LLM-driven context retrieval - intelligently selects relevant frames based on query',
587
- inputSchema: {
588
- type: 'object',
589
- properties: {
590
- query: {
591
- type: 'string',
592
- description: 'Natural language query describing what context you need',
593
- },
594
- tokenBudget: {
595
- type: 'number',
596
- description: 'Maximum tokens to use for context (default: 4000)',
597
- },
598
- forceRefresh: {
599
- type: 'boolean',
600
- description: 'Force refresh of cached summaries',
601
- },
602
- },
603
- required: ['query'],
604
- },
605
- },
606
- {
607
- name: 'get_summary',
608
- description: 'Get compressed summary of project memory for analysis',
609
- inputSchema: {
610
- type: 'object',
611
- properties: {
612
- forceRefresh: {
613
- type: 'boolean',
614
- description: 'Force refresh of cached summary',
615
- },
616
- },
617
- },
618
- },
619
- ],
620
- };
621
- });
622
- // Tool execution
623
- this.server.setRequestHandler(z.object({
624
- method: z.literal('tools/call'),
625
- params: z.object({
626
- name: z.string(),
627
- arguments: z.record(z.unknown()),
628
- }),
629
- }), async (request) => {
630
- const { name, arguments: args } = request.params;
631
- const callId = uuidv4();
632
- const startTime = Date.now();
633
- // Log tool call event before execution
634
- const currentFrameId = this.frameManager.getCurrentFrameId();
635
- if (currentFrameId) {
636
- this.frameManager.addEvent('tool_call', {
637
- tool_name: name,
638
- arguments: args,
639
- timestamp: startTime,
640
- });
641
- }
642
- // Create ToolCall for trace detection
643
- const toolCall = {
644
- id: callId,
645
- tool: name,
646
- arguments: args,
647
- timestamp: startTime,
648
- };
649
- let result;
650
- let error;
651
- try {
652
- switch (name) {
653
- case 'get_context':
654
- result = await this.handleGetContext(args);
655
- break;
656
- case 'add_decision':
657
- result = await this.handleAddDecision(args);
658
- break;
659
- case 'start_frame':
660
- result = await this.handleStartFrame(args);
661
- break;
662
- case 'close_frame':
663
- result = await this.handleCloseFrame(args);
664
- break;
665
- case 'add_anchor':
666
- result = await this.handleAddAnchor(args);
667
- break;
668
- case 'get_hot_stack':
669
- result = await this.handleGetHotStack(args);
670
- break;
671
- case 'create_task':
672
- result = await this.handleCreateTask(args);
673
- break;
674
- case 'update_task_status':
675
- result = await this.handleUpdateTaskStatus(args);
676
- break;
677
- case 'get_active_tasks':
678
- result = await this.handleGetActiveTasks(args);
679
- break;
680
- case 'get_task_metrics':
681
- result = await this.handleGetTaskMetrics(args);
682
- break;
683
- case 'add_task_dependency':
684
- result = await this.handleAddTaskDependency(args);
685
- break;
686
- case 'linear_sync':
687
- result = await this.handleLinearSync(args);
688
- break;
689
- case 'linear_update_task':
690
- result = await this.handleLinearUpdateTask(args);
691
- break;
692
- case 'linear_get_tasks':
693
- result = await this.handleLinearGetTasks(args);
694
- break;
695
- case 'linear_status':
696
- result = await this.handleLinearStatus(args);
697
- break;
698
- case 'get_traces':
699
- result = await this.handleGetTraces(args);
700
- break;
701
- case 'get_trace_statistics':
702
- result = await this.handleGetTraceStatistics(args);
703
- break;
704
- case 'flush_traces':
705
- result = await this.handleFlushTraces(args);
706
- break;
707
- case 'compress_old_traces':
708
- result = await this.handleCompressOldTraces(args);
709
- break;
710
- case 'smart_context':
711
- result = await this.handleSmartContext(args);
712
- break;
713
- case 'get_summary':
714
- result = await this.handleGetSummary(args);
715
- break;
716
- default:
717
- throw new Error(`Unknown tool: ${name}`);
718
- }
719
- }
720
- catch (err) {
721
- error = err instanceof Error ? err : new Error(String(err));
722
- toolCall.error = error.message;
723
- throw err;
724
- }
725
- finally {
726
- const endTime = Date.now();
727
- // Log tool result event after execution (success or failure)
728
- // Skip for close_frame since the frame no longer exists after closing
729
- if (currentFrameId && name !== 'close_frame') {
730
- try {
731
- this.frameManager.addEvent('tool_result', {
732
- tool_name: name,
733
- success: !error,
734
- result: error ? { error: error.message } : result,
735
- timestamp: endTime,
736
- });
737
- }
738
- catch {
739
- // Frame may have been closed, ignore logging error
740
- }
741
- }
742
- // Update tool call with results and add to trace detector
743
- toolCall.result = error ? undefined : result;
744
- toolCall.duration = endTime - startTime;
745
- // Extract files affected if available from result or args
746
- if (args.file_path || args.path) {
747
- toolCall.filesAffected = [args.file_path || args.path].filter(Boolean);
748
- }
749
- else if (result?.files) {
750
- const files = result.files;
751
- toolCall.filesAffected = Array.isArray(files) ? files : [files];
752
- }
753
- // Add to trace detector
754
- this.traceDetector.addToolCall(toolCall);
755
- }
756
- return result;
757
- });
758
- }
759
- async handleGetContext(args) {
760
- const { query = '', limit = 10 } = args;
761
- // Get relevant contexts
762
- const contexts = Array.from(this.contexts.values())
763
- .sort((a, b) => b.importance - a.importance)
764
- .slice(0, limit);
765
- // Update access counts
766
- contexts.forEach((ctx) => {
767
- this.db
768
- .prepare(`
769
- UPDATE contexts
770
- SET last_accessed = unixepoch(),
771
- access_count = access_count + 1
772
- WHERE id = ?
773
- `)
774
- .run(ctx.id);
775
- });
776
- // Format response
777
- const response = contexts
778
- .map((ctx) => `[${ctx.type.toUpperCase()}] (importance: ${ctx.importance.toFixed(2)})\n${ctx.content}`)
779
- .join('\n\n---\n\n');
780
- // Log for attention tracking
781
- this.logAttention(query, response);
782
- return {
783
- content: [
784
- {
785
- type: 'text',
786
- text: response ||
787
- 'No context available yet. Start adding decisions and information!',
788
- },
789
- ],
790
- };
791
- }
792
- async handleAddDecision(args) {
793
- const { content, type = 'decision' } = args;
794
- const id = this.addContext(type, content, 0.8);
795
- return {
796
- content: [
797
- {
798
- type: 'text',
799
- text: `āœ“ Added ${type}: ${content}\nID: ${id}`,
800
- },
801
- ],
802
- };
803
- }
804
- async handleStartFrame(args) {
805
- const { name, type, constraints } = args;
806
- const inputs = {};
807
- if (constraints) {
808
- inputs.constraints = constraints;
809
- }
810
- const frameId = this.frameManager.createFrame({
811
- type: type,
812
- name,
813
- inputs,
814
- });
815
- // Log event
816
- this.frameManager.addEvent('user_message', {
817
- action: 'start_frame',
818
- name,
819
- type,
820
- constraints,
821
- });
822
- // Add as context
823
- this.addContext('active_frame', `Active frame: ${name} (${type})`, 0.9);
824
- const stackDepth = this.frameManager.getStackDepth();
825
- return {
826
- content: [
827
- {
828
- type: 'text',
829
- text: `šŸš€ Started ${type}: ${name}\nFrame ID: ${frameId}\nStack depth: ${stackDepth}`,
830
- },
831
- ],
832
- };
833
- }
834
- async handleCloseFrame(args) {
835
- const { result, outputs } = args;
836
- const currentFrameId = this.frameManager.getCurrentFrameId();
837
- if (!currentFrameId) {
838
- return {
839
- content: [
840
- {
841
- type: 'text',
842
- text: 'āš ļø No active frame to close',
843
- },
844
- ],
845
- };
846
- }
847
- // Log completion event
848
- this.frameManager.addEvent('assistant_message', {
849
- action: 'close_frame',
850
- result,
851
- outputs,
852
- });
853
- this.frameManager.closeFrame(currentFrameId, outputs);
854
- const newStackDepth = this.frameManager.getStackDepth();
855
- return {
856
- content: [
857
- {
858
- type: 'text',
859
- text: `āœ… Closed frame: ${result || 'completed'}\nStack depth: ${newStackDepth}`,
860
- },
861
- ],
862
- };
863
- }
864
- async handleAddAnchor(args) {
865
- const { type, text, priority = 5 } = args;
866
- const anchorId = this.frameManager.addAnchor(type, text, priority);
867
- // Log anchor creation
868
- this.frameManager.addEvent('decision', {
869
- anchor_type: type,
870
- text,
871
- priority,
872
- anchor_id: anchorId,
873
- });
874
- return {
875
- content: [
876
- {
877
- type: 'text',
878
- text: `šŸ“Œ Added ${type}: ${text}\nAnchor ID: ${anchorId}`,
879
- },
880
- ],
881
- };
882
- }
883
- async handleGetHotStack(args) {
884
- const { maxEvents = 20 } = args;
885
- const hotStack = this.frameManager.getHotStackContext(maxEvents);
886
- const activePath = this.frameManager.getActiveFramePath();
887
- if (hotStack.length === 0) {
888
- return {
889
- content: [
890
- {
891
- type: 'text',
892
- text: 'šŸ“š No active frames. Start a frame with start_frame tool.',
893
- },
894
- ],
895
- };
896
- }
897
- let response = 'šŸ“š **Active Call Stack:**\n\n';
898
- activePath.forEach((frame, index) => {
899
- const indent = ' '.repeat(index);
900
- const context = hotStack[index];
901
- response += `${indent}${index + 1}. **${frame.name}** (${frame.type})\n`;
902
- if (context && context.anchors && context.anchors.length > 0) {
903
- response += `${indent} šŸ“Œ ${context.anchors.length} anchors\n`;
904
- }
905
- if (context && context.recentEvents && context.recentEvents.length > 0) {
906
- response += `${indent} šŸ“ ${context.recentEvents.length} recent events\n`;
907
- }
908
- response += '\n';
909
- });
910
- response += `**Total stack depth:** ${hotStack.length}`;
911
- // Log stack access
912
- this.frameManager.addEvent('observation', {
913
- action: 'get_hot_stack',
914
- stack_depth: hotStack.length,
915
- total_anchors: hotStack.reduce((sum, frame) => sum + frame.anchors.length, 0),
916
- total_events: hotStack.reduce((sum, frame) => sum + frame.recentEvents.length, 0),
917
- });
918
- return {
919
- content: [
920
- {
921
- type: 'text',
922
- text: response,
923
- },
924
- ],
925
- };
926
- }
927
- logAttention(query, response) {
928
- // Simple attention logging for analysis
929
- this.db
930
- .prepare(`
931
- INSERT INTO attention_log (query, response)
932
- VALUES (?, ?)
933
- `)
934
- .run(query, response);
935
- }
936
- async handleCreateTask(args) {
937
- const { title, description, priority, estimatedEffort, dependsOn, tags } = args;
938
- const currentFrameId = this.frameManager.getCurrentFrameId();
939
- if (!currentFrameId) {
940
- return {
941
- content: [
942
- {
943
- type: 'text',
944
- text: 'āš ļø No active frame. Start a frame first with start_frame tool.',
945
- },
946
- ],
947
- };
948
- }
949
- const taskId = this.taskStore.createTask({
950
- title,
951
- description,
952
- priority: priority,
953
- frameId: currentFrameId,
954
- dependsOn,
955
- tags,
956
- estimatedEffort,
957
- });
958
- // Log task creation event
959
- this.frameManager.addEvent('decision', {
960
- action: 'create_task',
961
- task_id: taskId,
962
- title,
963
- priority: priority || 'medium',
964
- });
965
- return {
966
- content: [
967
- {
968
- type: 'text',
969
- text: `āœ… Created task: ${title}\nID: ${taskId}\nFrame: ${currentFrameId}\nStored in: .stackmemory/tasks.jsonl`,
970
- },
971
- ],
972
- };
973
- }
974
- async handleUpdateTaskStatus(args) {
975
- const { taskId, status, reason } = args;
976
- try {
977
- this.taskStore.updateTaskStatus(taskId, status, reason);
978
- // Log status change event
979
- this.frameManager.addEvent('observation', {
980
- action: 'update_task_status',
981
- task_id: taskId,
982
- new_status: status,
983
- reason,
984
- });
985
- return {
986
- content: [
987
- {
988
- type: 'text',
989
- text: `āœ… Updated task ${taskId} to ${status}${reason ? `\nReason: ${reason}` : ''}`,
990
- },
991
- ],
992
- };
993
- }
994
- catch (error) {
995
- return {
996
- content: [
997
- {
998
- type: 'text',
999
- text: `āŒ Failed to update task: ${error}`,
1000
- },
1001
- ],
1002
- };
1003
- }
1004
- }
1005
- async handleGetActiveTasks(args) {
1006
- const { frameId, status, priority, search, limit = 20 } = args;
1007
- let tasks = this.taskStore.getActiveTasks(frameId);
1008
- // Apply filters
1009
- if (status) {
1010
- tasks = tasks.filter((t) => t.status === status);
1011
- }
1012
- if (priority) {
1013
- tasks = tasks.filter((t) => t.priority === priority);
1014
- }
1015
- if (search) {
1016
- const searchLower = search.toLowerCase();
1017
- tasks = tasks.filter((t) => t.title.toLowerCase().includes(searchLower) ||
1018
- (t.description && t.description.toLowerCase().includes(searchLower)));
1019
- }
1020
- // Sort by priority (urgent first) then by created_at
1021
- const priorityOrder = { urgent: 0, high: 1, medium: 2, low: 3 };
1022
- tasks.sort((a, b) => {
1023
- const pa = priorityOrder[a.priority] ?? 2;
1024
- const pb = priorityOrder[b.priority] ?? 2;
1025
- if (pa !== pb)
1026
- return pa - pb;
1027
- return b.created_at - a.created_at;
1028
- });
1029
- // Limit results
1030
- tasks = tasks.slice(0, limit);
1031
- if (tasks.length === 0) {
1032
- return {
1033
- content: [
1034
- {
1035
- type: 'text',
1036
- text: search
1037
- ? `šŸ“ No tasks matching "${search}"`
1038
- : 'šŸ“ No active tasks found',
1039
- },
1040
- ],
1041
- };
1042
- }
1043
- let response = `šŸ“ **Tasks** (${tasks.length} found)\n\n`;
1044
- tasks.forEach((task) => {
1045
- const priorityIcon = { urgent: 'šŸ”“', high: '🟠', medium: '🟔', low: '🟢' }[task.priority] ||
1046
- '⚪';
1047
- const statusIcon = {
1048
- pending: 'ā³',
1049
- in_progress: 'šŸ”„',
1050
- completed: 'āœ…',
1051
- blocked: '🚫',
1052
- cancelled: 'āŒ',
1053
- }[task.status] || '⚪';
1054
- const effort = task.estimated_effort
1055
- ? ` (~${task.estimated_effort}m)`
1056
- : '';
1057
- // Extract Linear ID from title if present
1058
- const linearMatch = task.title.match(/\[ENG-\d+\]/);
1059
- const linearId = linearMatch ? linearMatch[0] : '';
1060
- const title = linearId
1061
- ? task.title.replace(linearId, '').trim()
1062
- : task.title;
1063
- response += `${statusIcon} ${priorityIcon} **${linearId || task.id}** ${title}${effort}\n`;
1064
- if (task.description) {
1065
- const desc = task.description.split('\n')[0].slice(0, 100);
1066
- response += ` ${desc}${task.description.length > 100 ? '...' : ''}\n`;
1067
- }
1068
- if (task.tags && task.tags.length > 0) {
1069
- response += ` šŸ·ļø ${task.tags.join(', ')}\n`;
1070
- }
1071
- response += '\n';
1072
- });
1073
- return {
1074
- content: [
1075
- {
1076
- type: 'text',
1077
- text: response,
1078
- },
1079
- ],
1080
- };
1081
- }
1082
- async handleGetTaskMetrics(_args) {
1083
- const metrics = this.taskStore.getMetrics();
1084
- let response = 'šŸ“Š **Task Metrics**\n\n';
1085
- response += `**Total Tasks:** ${metrics.total_tasks}\n`;
1086
- response += `**Completion Rate:** ${(metrics.completion_rate * 100).toFixed(1)}%\n\n`;
1087
- response += '**By Status:**\n';
1088
- Object.entries(metrics.by_status).forEach(([status, count]) => {
1089
- response += `- ${status}: ${count}\n`;
1090
- });
1091
- response += '\n**By Priority:**\n';
1092
- Object.entries(metrics.by_priority).forEach(([priority, count]) => {
1093
- response += `- ${priority}: ${count}\n`;
1094
- });
1095
- if (metrics.blocked_tasks > 0) {
1096
- response += `\nāš ļø **${metrics.blocked_tasks} blocked tasks**`;
1097
- }
1098
- if (metrics.avg_effort_accuracy > 0) {
1099
- response += `\nšŸŽÆ **Effort Accuracy:** ${(metrics.avg_effort_accuracy * 100).toFixed(1)}%`;
1100
- }
1101
- return {
1102
- content: [
1103
- {
1104
- type: 'text',
1105
- text: response,
1106
- },
1107
- ],
1108
- };
1109
- }
1110
- async handleAddTaskDependency(args) {
1111
- const { taskId, dependsOnId } = args;
1112
- try {
1113
- this.taskStore.addDependency(taskId, dependsOnId);
1114
- // Log dependency creation
1115
- this.frameManager.addEvent('decision', {
1116
- action: 'add_task_dependency',
1117
- task_id: taskId,
1118
- depends_on_id: dependsOnId,
1119
- });
1120
- return {
1121
- content: [
1122
- {
1123
- type: 'text',
1124
- text: `šŸ”— Added dependency: ${taskId} depends on ${dependsOnId}`,
1125
- },
1126
- ],
1127
- };
1128
- }
1129
- catch (error) {
1130
- return {
1131
- content: [
1132
- {
1133
- type: 'text',
1134
- text: `āŒ Failed to add dependency: ${error}`,
1135
- },
1136
- ],
1137
- };
1138
- }
1139
- }
1140
- // Linear Integration Handlers
1141
- async handleLinearSync(args) {
1142
- try {
1143
- const tokens = this.linearAuthManager.loadTokens();
1144
- if (!tokens) {
1145
- return {
1146
- content: [
1147
- {
1148
- type: 'text',
1149
- text: 'āŒ Linear not authenticated. Run: stackmemory linear setup',
1150
- },
1151
- ],
1152
- };
1153
- }
1154
- const syncConfig = { ...DEFAULT_SYNC_CONFIG, enabled: true };
1155
- if (args.direction) {
1156
- syncConfig.direction = args.direction;
1157
- }
1158
- // Update sync engine configuration for this sync
1159
- this.linearSync.updateConfig(syncConfig);
1160
- const result = await this.linearSync.sync();
1161
- return {
1162
- content: [
1163
- {
1164
- type: 'text',
1165
- text: `āœ… Linear sync completed\n- To Linear: ${result.synced.toLinear} tasks\n- From Linear: ${result.synced.fromLinear} tasks\n- Updated: ${result.synced.updated} tasks`,
1166
- },
1167
- ],
1168
- };
1169
- }
1170
- catch (error) {
1171
- return {
1172
- content: [
1173
- {
1174
- type: 'text',
1175
- text: `āŒ Linear sync failed: ${error.message}`,
1176
- },
1177
- ],
1178
- };
1179
- }
1180
- }
1181
- async handleLinearUpdateTask(args) {
1182
- try {
1183
- const { LinearClient } = await import('../linear/client.js');
1184
- const tokens = this.linearAuthManager.loadTokens();
1185
- if (!tokens) {
1186
- return {
1187
- content: [
1188
- {
1189
- type: 'text',
1190
- text: 'āŒ Linear not authenticated. Run: stackmemory linear setup',
1191
- },
1192
- ],
1193
- };
1194
- }
1195
- const client = new LinearClient({
1196
- apiKey: tokens.accessToken,
1197
- });
1198
- // Find the issue
1199
- let issue = await client.getIssue(args.issueId);
1200
- if (!issue) {
1201
- issue = await client.findIssueByIdentifier(args.issueId);
1202
- }
1203
- if (!issue) {
1204
- return {
1205
- content: [
1206
- {
1207
- type: 'text',
1208
- text: `āŒ Linear issue ${args.issueId} not found`,
1209
- },
1210
- ],
1211
- };
1212
- }
1213
- const updates = {};
1214
- // Handle status update
1215
- if (args.status) {
1216
- const team = await client.getTeam();
1217
- const states = await client.getWorkflowStates(team.id);
1218
- const statusMap = {
1219
- todo: 'unstarted',
1220
- 'in-progress': 'started',
1221
- done: 'completed',
1222
- canceled: 'cancelled',
1223
- };
1224
- const targetType = statusMap[args.status] || args.status;
1225
- const targetState = states.find((s) => s.type === targetType);
1226
- if (!targetState) {
1227
- return {
1228
- content: [
1229
- {
1230
- type: 'text',
1231
- text: `āŒ Invalid status: ${args.status}`,
1232
- },
1233
- ],
1234
- };
1235
- }
1236
- updates.stateId = targetState.id;
1237
- }
1238
- if (args.title)
1239
- updates.title = args.title;
1240
- if (args.description)
1241
- updates.description = args.description;
1242
- if (args.priority)
1243
- updates.priority = args.priority;
1244
- const updatedIssue = await client.updateIssue(issue.id, updates);
1245
- // Auto-sync to local tasks after update
1246
- this.linearSync.updateConfig({
1247
- ...DEFAULT_SYNC_CONFIG,
1248
- enabled: true,
1249
- direction: 'from_linear',
1250
- });
1251
- const syncResult = await this.linearSync.sync();
1252
- let response = `āœ… Updated ${updatedIssue.identifier}: ${updatedIssue.title}\n`;
1253
- if (args.status) {
1254
- response += `Status: ${updatedIssue.state.name}\n`;
1255
- }
1256
- response += `URL: ${updatedIssue.url}\n`;
1257
- response += `\nšŸ”„ Local sync: ${syncResult.synced.fromLinear} new, ${syncResult.synced.updated} updated`;
1258
- return {
1259
- content: [
1260
- {
1261
- type: 'text',
1262
- text: response,
1263
- },
1264
- ],
1265
- };
1266
- }
1267
- catch (error) {
1268
- return {
1269
- content: [
1270
- {
1271
- type: 'text',
1272
- text: `āŒ Failed to update Linear task: ${error.message}`,
1273
- },
1274
- ],
1275
- };
1276
- }
1277
- }
1278
- async handleLinearGetTasks(args) {
1279
- try {
1280
- const { LinearClient } = await import('../linear/client.js');
1281
- const tokens = this.linearAuthManager.loadTokens();
1282
- if (!tokens) {
1283
- return {
1284
- content: [
1285
- {
1286
- type: 'text',
1287
- text: 'āŒ Linear not authenticated. Run: stackmemory linear setup',
1288
- },
1289
- ],
1290
- };
1291
- }
1292
- const client = new LinearClient({
1293
- apiKey: tokens.accessToken,
1294
- });
1295
- let stateType = undefined;
1296
- if (args.status && args.status !== 'all') {
1297
- const statusMap = {
1298
- todo: 'unstarted',
1299
- 'in-progress': 'started',
1300
- done: 'completed',
1301
- };
1302
- stateType = statusMap[args.status] || args.status;
1303
- }
1304
- const issues = await client.getIssues({
1305
- stateType,
1306
- limit: args.limit || 20,
1307
- });
1308
- if (!issues || issues.length === 0) {
1309
- return {
1310
- content: [
1311
- {
1312
- type: 'text',
1313
- text: 'No Linear tasks found',
1314
- },
1315
- ],
1316
- };
1317
- }
1318
- let response = `šŸ“‹ **Linear Tasks** (${issues.length} items)\n\n`;
1319
- issues.forEach((issue) => {
1320
- const priority = issue.priority ? `P${issue.priority}` : '-';
1321
- response += `- **${issue.identifier}**: ${issue.title}\n`;
1322
- response += ` Status: ${issue.state.name} | Priority: ${priority}\n`;
1323
- if (issue.assignee) {
1324
- response += ` Assignee: ${issue.assignee.name}\n`;
1325
- }
1326
- response += ` ${issue.url}\n\n`;
1327
- });
1328
- return {
1329
- content: [
1330
- {
1331
- type: 'text',
1332
- text: response,
1333
- },
1334
- ],
1335
- };
1336
- }
1337
- catch (error) {
1338
- return {
1339
- content: [
1340
- {
1341
- type: 'text',
1342
- text: `āŒ Failed to get Linear tasks: ${error.message}`,
1343
- },
1344
- ],
1345
- };
1346
- }
1347
- }
1348
- async handleLinearStatus(_args) {
1349
- try {
1350
- const { LinearClient } = await import('../linear/client.js');
1351
- const tokens = this.linearAuthManager.loadTokens();
1352
- if (!tokens) {
1353
- return {
1354
- content: [
1355
- {
1356
- type: 'text',
1357
- text: 'āŒ Linear integration not configured\nRun: stackmemory linear setup',
1358
- },
1359
- ],
1360
- };
1361
- }
1362
- try {
1363
- const client = new LinearClient({
1364
- apiKey: tokens.accessToken,
1365
- });
1366
- const viewer = await client.getViewer();
1367
- const team = await client.getTeam();
1368
- return {
1369
- content: [
1370
- {
1371
- type: 'text',
1372
- text: `āœ… **Linear Integration Status**\n\nConnected as: ${viewer.name} (${viewer.email})\nTeam: ${team.name} (${team.key})\nTokens: Valid`,
1373
- },
1374
- ],
1375
- };
1376
- }
1377
- catch (error) {
1378
- return {
1379
- content: [
1380
- {
1381
- type: 'text',
1382
- text: `āš ļø Linear configured but connection failed: ${error.message}`,
1383
- },
1384
- ],
1385
- };
1386
- }
1387
- }
1388
- catch (error) {
1389
- return {
1390
- content: [
1391
- {
1392
- type: 'text',
1393
- text: `āŒ Linear status check failed: ${error.message}`,
1394
- },
1395
- ],
1396
- };
1397
- }
1398
- }
1399
- async handleGetTraces(args) {
1400
- const { type, minScore, limit = 20 } = args;
1401
- // Flush pending traces first
1402
- this.traceDetector.flush();
1403
- let traces = this.traceDetector.getTraces();
1404
- // Apply filters
1405
- if (type) {
1406
- traces = traces.filter((t) => t.type === type);
1407
- }
1408
- if (minScore !== undefined) {
1409
- traces = traces.filter((t) => t.score >= minScore);
1410
- }
1411
- // Sort by score and limit
1412
- traces = traces.sort((a, b) => b.score - a.score).slice(0, limit);
1413
- // Format traces for display
1414
- const formattedTraces = traces.map((trace) => ({
1415
- id: trace.id,
1416
- type: trace.type,
1417
- score: trace.score.toFixed(2),
1418
- summary: trace.summary,
1419
- toolCount: trace.tools.length,
1420
- duration: `${((trace.metadata.endTime - trace.metadata.startTime) / 1000).toFixed(1)}s`,
1421
- filesModified: trace.metadata.filesModified.length,
1422
- hasErrors: trace.metadata.errorsEncountered.length > 0,
1423
- compressed: !!trace.compressed,
1424
- }));
1425
- return {
1426
- content: [
1427
- {
1428
- type: 'text',
1429
- text: `Found ${formattedTraces.length} traces:\n\n${formattedTraces
1430
- .map((t) => `[${t.type}] Score: ${t.score} | Tools: ${t.toolCount} | Duration: ${t.duration}\n ${t.summary}`)
1431
- .join('\n\n')}`,
1432
- },
1433
- ],
1434
- };
1435
- }
1436
- async handleGetTraceStatistics(args) {
1437
- this.traceDetector.flush();
1438
- const stats = this.traceDetector.getStatistics();
1439
- const typeBreakdown = Object.entries(stats.tracesByType)
1440
- .map(([type, count]) => ` ${type}: ${count}`)
1441
- .join('\n');
1442
- return {
1443
- content: [
1444
- {
1445
- type: 'text',
1446
- text: `**Trace Statistics**\n\nTotal Traces: ${stats.totalTraces}
1447
- Average Score: ${stats.averageScore.toFixed(2)}
1448
- Average Length: ${stats.averageLength.toFixed(1)} tools
1449
- High Importance (>0.7): ${stats.highImportanceCount}
1450
- Compressed: ${stats.compressedCount}
1451
-
1452
- **Trace Types:**
1453
- ${typeBreakdown}`,
1454
- },
1455
- ],
1456
- };
1457
- }
1458
- async handleFlushTraces(args) {
1459
- this.traceDetector.flush();
1460
- return {
1461
- content: [
1462
- {
1463
- type: 'text',
1464
- text: 'Pending traces have been flushed and finalized.',
1465
- },
1466
- ],
1467
- };
1468
- }
1469
- async handleCompressOldTraces(args) {
1470
- const { ageHours = 24 } = args;
1471
- const compressedCount = this.traceDetector.compressOldTraces(ageHours);
1472
- return {
1473
- content: [
1474
- {
1475
- type: 'text',
1476
- text: `Compressed ${compressedCount} traces older than ${ageHours} hours.`,
1477
- },
1478
- ],
1479
- };
1480
- }
1481
- async handleSmartContext(args) {
1482
- const { query, tokenBudget = 4000, forceRefresh = false } = args;
1483
- try {
1484
- const result = await this.contextRetrieval.retrieveContext(query, {
1485
- tokenBudget,
1486
- forceRefresh,
1487
- });
1488
- // Log the retrieval
1489
- const currentFrameId = this.frameManager.getCurrentFrameId();
1490
- if (currentFrameId) {
1491
- this.frameManager.addEvent('observation', {
1492
- action: 'smart_context',
1493
- query,
1494
- framesRetrieved: result.frames.length,
1495
- tokenUsage: result.tokenUsage,
1496
- confidence: result.analysis.confidenceScore,
1497
- });
1498
- }
1499
- // Build response with metadata
1500
- let response = result.context;
1501
- response += `\n\n---\nšŸ“Š **Retrieval Stats**\n`;
1502
- response += `- Frames included: ${result.frames.length}\n`;
1503
- response += `- Tokens used: ${result.tokenUsage.used}/${result.tokenUsage.budget}\n`;
1504
- response += `- Confidence: ${(result.analysis.confidenceScore * 100).toFixed(0)}%\n`;
1505
- response += `- Time: ${result.metadata.retrievalTimeMs}ms`;
1506
- return {
1507
- content: [
1508
- {
1509
- type: 'text',
1510
- text: response,
1511
- },
1512
- ],
1513
- };
1514
- }
1515
- catch (error) {
1516
- return {
1517
- content: [
1518
- {
1519
- type: 'text',
1520
- text: `āŒ Context retrieval failed: ${error.message}`,
1521
- },
1522
- ],
1523
- };
1524
- }
1525
- }
1526
- async handleGetSummary(args) {
1527
- const { forceRefresh = false } = args;
1528
- try {
1529
- const summary = this.contextRetrieval.getSummary(forceRefresh);
1530
- // Format the summary for display
1531
- let response = 'šŸ“‹ **Compressed Memory Summary**\n\n';
1532
- // Recent session
1533
- response += '## Recent Session\n';
1534
- response += `- Frames: ${summary.recentSession.frames.length}\n`;
1535
- response += `- Time range: ${new Date(summary.recentSession.timeRange.start).toLocaleString()} - ${new Date(summary.recentSession.timeRange.end).toLocaleString()}\n`;
1536
- if (summary.recentSession.dominantOperations.length > 0) {
1537
- response += `- Dominant ops: ${summary.recentSession.dominantOperations
1538
- .slice(0, 5)
1539
- .map((o) => `${o.operation}(${o.count})`)
1540
- .join(', ')}\n`;
1541
- }
1542
- if (summary.recentSession.filesTouched.length > 0) {
1543
- response += `- Files touched: ${summary.recentSession.filesTouched
1544
- .slice(0, 5)
1545
- .map((f) => f.path)
1546
- .join(', ')}\n`;
1547
- }
1548
- if (summary.recentSession.errorsEncountered.length > 0) {
1549
- response += `- Errors: ${summary.recentSession.errorsEncountered.length}\n`;
1550
- }
1551
- // Historical patterns
1552
- response += '\n## Historical Patterns\n';
1553
- response += `- Topic counts: ${Object.keys(summary.historicalPatterns.topicFrameCounts).length} topics\n`;
1554
- if (summary.historicalPatterns.keyDecisions.length > 0) {
1555
- response += `\n### Key Decisions (${summary.historicalPatterns.keyDecisions.length})\n`;
1556
- summary.historicalPatterns.keyDecisions.slice(0, 5).forEach((d) => {
1557
- response += `- ${d.text.substring(0, 80)}${d.text.length > 80 ? '...' : ''}\n`;
1558
- });
1559
- }
1560
- if (summary.historicalPatterns.recurringIssues.length > 0) {
1561
- response += `\n### Recurring Issues (${summary.historicalPatterns.recurringIssues.length})\n`;
1562
- summary.historicalPatterns.recurringIssues.slice(0, 3).forEach((i) => {
1563
- response += `- ${i.issueType} (${i.occurrenceCount} times)\n`;
1564
- });
1565
- }
1566
- // Queryable indices
1567
- response += '\n## Available Indices\n';
1568
- response += `- By time: ${Object.keys(summary.queryableIndices.byTimeframe).length} periods\n`;
1569
- response += `- By file: ${Object.keys(summary.queryableIndices.byFile).length} files\n`;
1570
- response += `- By topic: ${Object.keys(summary.queryableIndices.byTopic).length} topics\n`;
1571
- response += `- By error: ${Object.keys(summary.queryableIndices.byErrorType).length} error types\n`;
1572
- // Stats
1573
- response += `\n## Stats\n`;
1574
- response += `- Total frames: ${summary.stats.totalFrames}\n`;
1575
- response += `- Total anchors: ${summary.stats.totalAnchors}\n`;
1576
- response += `- Total events: ${summary.stats.totalEvents}\n`;
1577
- response += `- Generated: ${new Date(summary.generatedAt).toLocaleString()}`;
1578
- return {
1579
- content: [
1580
- {
1581
- type: 'text',
1582
- text: response,
1583
- },
1584
- ],
1585
- };
1586
- }
1587
- catch (error) {
1588
- return {
1589
- content: [
1590
- {
1591
- type: 'text',
1592
- text: `āŒ Failed to get summary: ${error.message}`,
1593
- },
1594
- ],
1595
- };
1596
- }
1597
- }
1598
- async start() {
1599
- const transport = new StdioServerTransport();
1600
- await this.server.connect(transport);
1601
- console.error('StackMemory MCP Server started');
1602
- }
1603
- }
1604
- // Export the class
1605
- export default LocalStackMemoryMCP;
1606
- // Export function to run the server
1607
- export async function runMCPServer() {
1608
- const server = new LocalStackMemoryMCP();
1609
- await server.start();
1610
- }
1611
- // Start the server
1612
- if (import.meta.url === `file://${process.argv[1]}`) {
1613
- const server = new LocalStackMemoryMCP();
1614
- server.start().catch(console.error);
1615
- }
1616
- //# sourceMappingURL=server.js.map