@stackmemoryai/stackmemory 0.5.57 → 0.5.59

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 (611) hide show
  1. package/bin/codex-smd +6 -0
  2. package/dist/cli/codex-sm-danger.js +21 -0
  3. package/dist/cli/codex-sm-danger.js.map +7 -0
  4. package/dist/cli/commands/handoff.js +33 -3
  5. package/dist/cli/commands/handoff.js.map +2 -2
  6. package/dist/cli/commands/search.js +20 -3
  7. package/dist/cli/commands/search.js.map +2 -2
  8. package/dist/core/database/sqlite-adapter.js +13 -3
  9. package/dist/core/database/sqlite-adapter.js.map +2 -2
  10. package/dist/core/errors/error-utils.js +208 -0
  11. package/dist/core/errors/error-utils.js.map +7 -0
  12. package/dist/core/errors/index.js +13 -4
  13. package/dist/core/errors/index.js.map +2 -2
  14. package/dist/core/merge/unified-merge-resolver.js +303 -0
  15. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  16. package/dist/core/monitoring/logger.js +61 -9
  17. package/dist/core/monitoring/logger.js.map +2 -2
  18. package/dist/core/security/index.js +35 -0
  19. package/dist/core/security/index.js.map +7 -0
  20. package/dist/core/security/input-sanitizer.js +321 -0
  21. package/dist/core/security/input-sanitizer.js.map +7 -0
  22. package/dist/core/session/enhanced-handoff.js +136 -2
  23. package/dist/core/session/enhanced-handoff.js.map +3 -3
  24. package/dist/integrations/linear/client.js +5 -1
  25. package/dist/integrations/linear/client.js.map +2 -2
  26. package/dist/integrations/mcp/remote-server.js +27 -36
  27. package/dist/integrations/mcp/remote-server.js.map +2 -2
  28. package/dist/integrations/mcp/server.js +44 -29
  29. package/dist/integrations/mcp/server.js.map +3 -3
  30. package/dist/scripts/benchmark-performance.js +48 -0
  31. package/dist/scripts/benchmark-performance.js.map +7 -0
  32. package/dist/scripts/check-redis.js +42 -0
  33. package/dist/scripts/check-redis.js.map +7 -0
  34. package/dist/scripts/initialize.js +116 -0
  35. package/dist/scripts/initialize.js.map +7 -0
  36. package/dist/scripts/list-linear-tasks.js +124 -0
  37. package/dist/scripts/list-linear-tasks.js.map +7 -0
  38. package/dist/scripts/measure-handoff-impact.js +340 -0
  39. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  40. package/dist/scripts/query-chromadb.js +160 -0
  41. package/dist/scripts/query-chromadb.js.map +7 -0
  42. package/dist/scripts/show-linear-summary.js +119 -0
  43. package/dist/scripts/show-linear-summary.js.map +7 -0
  44. package/dist/scripts/simple-swarm-demo.js +90 -0
  45. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  46. package/dist/scripts/status.js +155 -0
  47. package/dist/scripts/status.js.map +7 -0
  48. package/dist/scripts/test-chromadb-sync.js +192 -0
  49. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  50. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  51. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  52. package/dist/scripts/test-ralph-iterations.js +121 -0
  53. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  54. package/dist/scripts/test-redis-storage.js +389 -0
  55. package/dist/scripts/test-redis-storage.js.map +7 -0
  56. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  57. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  58. package/dist/scripts/test-swarm-fixes.js +125 -0
  59. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  60. package/dist/scripts/test-swarm-tui.js +23 -0
  61. package/dist/scripts/test-swarm-tui.js.map +7 -0
  62. package/dist/scripts/test-tui-shortcuts.js +52 -0
  63. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  64. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  65. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  66. package/dist/src/agents/core/agent-task-manager.js +527 -0
  67. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  68. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  69. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  70. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  71. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  72. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  73. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  74. package/dist/src/cli/auto-detect.js +321 -0
  75. package/dist/src/cli/auto-detect.js.map +7 -0
  76. package/dist/src/cli/claude-sm-danger.js +21 -0
  77. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  78. package/dist/src/cli/claude-sm.js +1156 -0
  79. package/dist/src/cli/claude-sm.js.map +7 -0
  80. package/dist/src/cli/codex-sm-danger.js +21 -0
  81. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  82. package/dist/src/cli/codex-sm.js +349 -0
  83. package/dist/src/cli/codex-sm.js.map +7 -0
  84. package/dist/src/cli/commands/api.js +232 -0
  85. package/dist/src/cli/commands/api.js.map +7 -0
  86. package/dist/src/cli/commands/auto-background.js +180 -0
  87. package/dist/src/cli/commands/auto-background.js.map +7 -0
  88. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  89. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  90. package/dist/src/cli/commands/clear.js +202 -0
  91. package/dist/src/cli/commands/clear.js.map +7 -0
  92. package/dist/src/cli/commands/config.js +445 -0
  93. package/dist/src/cli/commands/config.js.map +7 -0
  94. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  95. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  96. package/dist/src/cli/commands/context.js +343 -0
  97. package/dist/src/cli/commands/context.js.map +7 -0
  98. package/dist/src/cli/commands/daemon.js +392 -0
  99. package/dist/src/cli/commands/daemon.js.map +7 -0
  100. package/dist/src/cli/commands/dashboard.js +210 -0
  101. package/dist/src/cli/commands/dashboard.js.map +7 -0
  102. package/dist/src/cli/commands/db.js +147 -0
  103. package/dist/src/cli/commands/db.js.map +7 -0
  104. package/dist/src/cli/commands/decision.js +266 -0
  105. package/dist/src/cli/commands/decision.js.map +7 -0
  106. package/dist/src/cli/commands/discovery.js +279 -0
  107. package/dist/src/cli/commands/discovery.js.map +7 -0
  108. package/dist/src/cli/commands/handoff.js +624 -0
  109. package/dist/src/cli/commands/handoff.js.map +7 -0
  110. package/dist/src/cli/commands/hooks.js +298 -0
  111. package/dist/src/cli/commands/hooks.js.map +7 -0
  112. package/dist/src/cli/commands/linear.js +529 -0
  113. package/dist/src/cli/commands/linear.js.map +7 -0
  114. package/dist/src/cli/commands/log.js +169 -0
  115. package/dist/src/cli/commands/log.js.map +7 -0
  116. package/dist/src/cli/commands/login.js +172 -0
  117. package/dist/src/cli/commands/login.js.map +7 -0
  118. package/dist/src/cli/commands/migrate.js +240 -0
  119. package/dist/src/cli/commands/migrate.js.map +7 -0
  120. package/dist/src/cli/commands/model.js +533 -0
  121. package/dist/src/cli/commands/model.js.map +7 -0
  122. package/dist/src/cli/commands/onboard.js +536 -0
  123. package/dist/src/cli/commands/onboard.js.map +7 -0
  124. package/dist/src/cli/commands/projects.js +199 -0
  125. package/dist/src/cli/commands/projects.js.map +7 -0
  126. package/dist/src/cli/commands/ralph.js +909 -0
  127. package/dist/src/cli/commands/ralph.js.map +7 -0
  128. package/dist/src/cli/commands/retrieval.js +248 -0
  129. package/dist/src/cli/commands/retrieval.js.map +7 -0
  130. package/dist/src/cli/commands/search.js +173 -0
  131. package/dist/src/cli/commands/search.js.map +7 -0
  132. package/dist/src/cli/commands/service.js +749 -0
  133. package/dist/src/cli/commands/service.js.map +7 -0
  134. package/dist/src/cli/commands/session.js +200 -0
  135. package/dist/src/cli/commands/session.js.map +7 -0
  136. package/dist/src/cli/commands/settings.js +306 -0
  137. package/dist/src/cli/commands/settings.js.map +7 -0
  138. package/dist/src/cli/commands/setup.js +701 -0
  139. package/dist/src/cli/commands/setup.js.map +7 -0
  140. package/dist/src/cli/commands/shell.js +249 -0
  141. package/dist/src/cli/commands/shell.js.map +7 -0
  142. package/dist/src/cli/commands/signup.js +50 -0
  143. package/dist/src/cli/commands/signup.js.map +7 -0
  144. package/dist/src/cli/commands/skills.js +470 -0
  145. package/dist/src/cli/commands/skills.js.map +7 -0
  146. package/dist/src/cli/commands/sms-notify.js +795 -0
  147. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  148. package/dist/src/cli/commands/storage-tier.js +183 -0
  149. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  150. package/dist/src/cli/commands/sweep.js +249 -0
  151. package/dist/src/cli/commands/sweep.js.map +7 -0
  152. package/dist/src/cli/commands/tasks.js +213 -0
  153. package/dist/src/cli/commands/tasks.js.map +7 -0
  154. package/dist/src/cli/commands/worktree.js +319 -0
  155. package/dist/src/cli/commands/worktree.js.map +7 -0
  156. package/dist/src/cli/index.js +594 -0
  157. package/dist/src/cli/index.js.map +7 -0
  158. package/dist/src/cli/opencode-sm.js +448 -0
  159. package/dist/src/cli/opencode-sm.js.map +7 -0
  160. package/dist/src/cli/utils/viewer.js +96 -0
  161. package/dist/src/cli/utils/viewer.js.map +7 -0
  162. package/dist/src/core/config/config-manager.js +398 -0
  163. package/dist/src/core/config/config-manager.js.map +7 -0
  164. package/dist/src/core/config/feature-flags.js +76 -0
  165. package/dist/src/core/config/feature-flags.js.map +7 -0
  166. package/dist/src/core/config/storage-config.js +115 -0
  167. package/dist/src/core/config/storage-config.js.map +7 -0
  168. package/dist/src/core/config/types.js +144 -0
  169. package/dist/src/core/config/types.js.map +7 -0
  170. package/dist/src/core/context/auto-context.js +80 -0
  171. package/dist/src/core/context/auto-context.js.map +7 -0
  172. package/dist/src/core/context/dual-stack-manager.js +870 -0
  173. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  174. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  175. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  176. package/dist/src/core/context/frame-database.js +479 -0
  177. package/dist/src/core/context/frame-database.js.map +7 -0
  178. package/dist/src/core/context/frame-digest.js +250 -0
  179. package/dist/src/core/context/frame-digest.js.map +7 -0
  180. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  181. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  182. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  183. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  184. package/dist/src/core/context/frame-recovery.js +302 -0
  185. package/dist/src/core/context/frame-recovery.js.map +7 -0
  186. package/dist/src/core/context/frame-stack.js +314 -0
  187. package/dist/src/core/context/frame-stack.js.map +7 -0
  188. package/dist/src/core/context/frame-types.js +5 -0
  189. package/dist/src/core/context/frame-types.js.map +7 -0
  190. package/dist/src/core/context/index.js +25 -0
  191. package/dist/src/core/context/index.js.map +7 -0
  192. package/dist/src/core/context/permission-manager.js +185 -0
  193. package/dist/src/core/context/permission-manager.js.map +7 -0
  194. package/dist/src/core/context/recursive-context-manager.js +592 -0
  195. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  196. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  197. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  198. package/dist/src/core/context/shared-context-layer.js +621 -0
  199. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  200. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  201. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  202. package/dist/src/core/context/validation.js +130 -0
  203. package/dist/src/core/context/validation.js.map +7 -0
  204. package/dist/src/core/database/batch-operations.js +384 -0
  205. package/dist/src/core/database/batch-operations.js.map +7 -0
  206. package/dist/src/core/database/connection-pool.js +330 -0
  207. package/dist/src/core/database/connection-pool.js.map +7 -0
  208. package/dist/src/core/database/database-adapter.js +60 -0
  209. package/dist/src/core/database/database-adapter.js.map +7 -0
  210. package/dist/src/core/database/migration-manager.js +614 -0
  211. package/dist/src/core/database/migration-manager.js.map +7 -0
  212. package/dist/src/core/database/query-cache.js +298 -0
  213. package/dist/src/core/database/query-cache.js.map +7 -0
  214. package/dist/src/core/database/query-router.js +430 -0
  215. package/dist/src/core/database/query-router.js.map +7 -0
  216. package/dist/src/core/database/sqlite-adapter.js +738 -0
  217. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  218. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  219. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  220. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  221. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  222. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  223. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  224. package/dist/src/core/digest/index.js +9 -0
  225. package/dist/src/core/digest/index.js.map +7 -0
  226. package/dist/src/core/digest/types.js +25 -0
  227. package/dist/src/core/digest/types.js.map +7 -0
  228. package/dist/src/core/errors/error-utils.js +208 -0
  229. package/dist/src/core/errors/error-utils.js.map +7 -0
  230. package/dist/src/core/errors/index.js +521 -0
  231. package/dist/src/core/errors/index.js.map +7 -0
  232. package/dist/src/core/errors/recovery.js +269 -0
  233. package/dist/src/core/errors/recovery.js.map +7 -0
  234. package/dist/src/core/execution/parallel-executor.js +258 -0
  235. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  236. package/dist/src/core/frame/workflow-templates.js +319 -0
  237. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  238. package/dist/src/core/merge/conflict-detector.js +431 -0
  239. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  240. package/dist/src/core/merge/index.js +9 -0
  241. package/dist/src/core/merge/index.js.map +7 -0
  242. package/dist/src/core/merge/resolution-engine.js +558 -0
  243. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  244. package/dist/src/core/merge/stack-diff.js +532 -0
  245. package/dist/src/core/merge/stack-diff.js.map +7 -0
  246. package/dist/src/core/merge/types.js +5 -0
  247. package/dist/src/core/merge/types.js.map +7 -0
  248. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  249. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  250. package/dist/src/core/models/fallback-monitor.js +232 -0
  251. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  252. package/dist/src/core/models/model-router.js +340 -0
  253. package/dist/src/core/models/model-router.js.map +7 -0
  254. package/dist/src/core/monitoring/error-handler.js +49 -0
  255. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  256. package/dist/src/core/monitoring/logger.js +202 -0
  257. package/dist/src/core/monitoring/logger.js.map +7 -0
  258. package/dist/src/core/monitoring/metrics.js +172 -0
  259. package/dist/src/core/monitoring/metrics.js.map +7 -0
  260. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  261. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  262. package/dist/src/core/monitoring/session-monitor.js +300 -0
  263. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  264. package/dist/src/core/performance/context-cache.js +273 -0
  265. package/dist/src/core/performance/context-cache.js.map +7 -0
  266. package/dist/src/core/performance/index.js +11 -0
  267. package/dist/src/core/performance/index.js.map +7 -0
  268. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  269. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  270. package/dist/src/core/performance/monitor.js +221 -0
  271. package/dist/src/core/performance/monitor.js.map +7 -0
  272. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  273. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  274. package/dist/src/core/performance/performance-benchmark.js +277 -0
  275. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  276. package/dist/src/core/performance/performance-profiler.js +370 -0
  277. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  278. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  279. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  280. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  281. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  282. package/dist/src/core/projects/project-isolation.js +201 -0
  283. package/dist/src/core/projects/project-isolation.js.map +7 -0
  284. package/dist/src/core/projects/project-manager.js +697 -0
  285. package/dist/src/core/projects/project-manager.js.map +7 -0
  286. package/dist/src/core/query/query-parser.js +370 -0
  287. package/dist/src/core/query/query-parser.js.map +7 -0
  288. package/dist/src/core/query/query-templates.js +321 -0
  289. package/dist/src/core/query/query-templates.js.map +7 -0
  290. package/dist/src/core/retrieval/context-retriever.js +479 -0
  291. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  292. package/dist/src/core/retrieval/index.js +8 -0
  293. package/dist/src/core/retrieval/index.js.map +7 -0
  294. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  295. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  296. package/dist/src/core/retrieval/llm-provider.js +151 -0
  297. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  298. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  299. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  300. package/dist/src/core/retrieval/summary-generator.js +589 -0
  301. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  302. package/dist/src/core/retrieval/types.js +21 -0
  303. package/dist/src/core/retrieval/types.js.map +7 -0
  304. package/dist/src/core/security/index.js +35 -0
  305. package/dist/src/core/security/index.js.map +7 -0
  306. package/dist/src/core/security/input-sanitizer.js +321 -0
  307. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  308. package/dist/src/core/session/clear-survival.js +465 -0
  309. package/dist/src/core/session/clear-survival.js.map +7 -0
  310. package/dist/src/core/session/enhanced-handoff.js +792 -0
  311. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  312. package/dist/src/core/session/handoff-generator.js +343 -0
  313. package/dist/src/core/session/handoff-generator.js.map +7 -0
  314. package/dist/src/core/session/index.js +15 -0
  315. package/dist/src/core/session/index.js.map +7 -0
  316. package/dist/src/core/session/session-manager.js +347 -0
  317. package/dist/src/core/session/session-manager.js.map +7 -0
  318. package/dist/src/core/skills/index.js +7 -0
  319. package/dist/src/core/skills/index.js.map +7 -0
  320. package/dist/src/core/skills/skill-storage.js +764 -0
  321. package/dist/src/core/skills/skill-storage.js.map +7 -0
  322. package/dist/src/core/skills/types.js +193 -0
  323. package/dist/src/core/skills/types.js.map +7 -0
  324. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  325. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  326. package/dist/src/core/storage/infinite-storage.js +510 -0
  327. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  328. package/dist/src/core/storage/remote-storage.js +489 -0
  329. package/dist/src/core/storage/remote-storage.js.map +7 -0
  330. package/dist/src/core/storage/two-tier-storage.js +766 -0
  331. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  332. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  333. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  334. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  335. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  336. package/dist/src/core/trace/debug-trace.js +417 -0
  337. package/dist/src/core/trace/debug-trace.js.map +7 -0
  338. package/dist/src/core/trace/index.js +109 -0
  339. package/dist/src/core/trace/index.js.map +7 -0
  340. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  341. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  342. package/dist/src/core/trace/trace-detector.js +528 -0
  343. package/dist/src/core/trace/trace-detector.js.map +7 -0
  344. package/dist/src/core/trace/trace-store.js +345 -0
  345. package/dist/src/core/trace/trace-store.js.map +7 -0
  346. package/dist/src/core/trace/types.js +77 -0
  347. package/dist/src/core/trace/types.js.map +7 -0
  348. package/dist/src/core/types.js +5 -0
  349. package/dist/src/core/types.js.map +7 -0
  350. package/dist/src/core/utils/async-mutex.js +114 -0
  351. package/dist/src/core/utils/async-mutex.js.map +7 -0
  352. package/dist/src/core/utils/compression.js +83 -0
  353. package/dist/src/core/utils/compression.js.map +7 -0
  354. package/dist/src/core/utils/update-checker.js +218 -0
  355. package/dist/src/core/utils/update-checker.js.map +7 -0
  356. package/dist/src/core/worktree/worktree-manager.js +465 -0
  357. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  358. package/dist/src/daemon/daemon-config.js +149 -0
  359. package/dist/src/daemon/daemon-config.js.map +7 -0
  360. package/dist/src/daemon/services/context-service.js +122 -0
  361. package/dist/src/daemon/services/context-service.js.map +7 -0
  362. package/dist/src/daemon/services/linear-service.js +136 -0
  363. package/dist/src/daemon/services/linear-service.js.map +7 -0
  364. package/dist/src/daemon/session-daemon.js +312 -0
  365. package/dist/src/daemon/session-daemon.js.map +7 -0
  366. package/dist/src/daemon/unified-daemon.js +276 -0
  367. package/dist/src/daemon/unified-daemon.js.map +7 -0
  368. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  369. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  370. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  371. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  372. package/dist/src/features/analytics/index.js +18 -0
  373. package/dist/src/features/analytics/index.js.map +7 -0
  374. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  375. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  376. package/dist/src/features/analytics/types/metrics.js +5 -0
  377. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  378. package/dist/src/features/browser/browser-mcp.js +492 -0
  379. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  380. package/dist/src/features/sweep/index.js +20 -0
  381. package/dist/src/features/sweep/index.js.map +7 -0
  382. package/dist/src/features/sweep/prediction-client.js +155 -0
  383. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  384. package/dist/src/features/sweep/prompt-builder.js +85 -0
  385. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  386. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  387. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  388. package/dist/src/features/sweep/state-watcher.js +87 -0
  389. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  390. package/dist/src/features/sweep/status-bar.js +88 -0
  391. package/dist/src/features/sweep/status-bar.js.map +7 -0
  392. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  393. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  394. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  395. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  396. package/dist/src/features/sweep/types.js +18 -0
  397. package/dist/src/features/sweep/types.js.map +7 -0
  398. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  399. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  400. package/dist/src/features/tasks/task-aware-context.js +410 -0
  401. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  402. package/dist/src/features/tui/simple-monitor.js +116 -0
  403. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  404. package/dist/src/features/tui/swarm-monitor.js +648 -0
  405. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  406. package/dist/src/features/web/client/stores/task-store.js +26 -0
  407. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  408. package/dist/src/features/web/server/index.js +194 -0
  409. package/dist/src/features/web/server/index.js.map +7 -0
  410. package/dist/src/hooks/auto-background.js +151 -0
  411. package/dist/src/hooks/auto-background.js.map +7 -0
  412. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  413. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  414. package/dist/src/hooks/config.js +150 -0
  415. package/dist/src/hooks/config.js.map +7 -0
  416. package/dist/src/hooks/daemon.js +364 -0
  417. package/dist/src/hooks/daemon.js.map +7 -0
  418. package/dist/src/hooks/events.js +58 -0
  419. package/dist/src/hooks/events.js.map +7 -0
  420. package/dist/src/hooks/index.js +12 -0
  421. package/dist/src/hooks/index.js.map +7 -0
  422. package/dist/src/hooks/linear-task-picker.js +186 -0
  423. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  424. package/dist/src/hooks/schemas.js +197 -0
  425. package/dist/src/hooks/schemas.js.map +7 -0
  426. package/dist/src/hooks/secure-fs.js +49 -0
  427. package/dist/src/hooks/secure-fs.js.map +7 -0
  428. package/dist/src/hooks/security-logger.js +155 -0
  429. package/dist/src/hooks/security-logger.js.map +7 -0
  430. package/dist/src/hooks/session-summary.js +222 -0
  431. package/dist/src/hooks/session-summary.js.map +7 -0
  432. package/dist/src/hooks/sms-action-runner.js +371 -0
  433. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  434. package/dist/src/hooks/sms-notify.js +506 -0
  435. package/dist/src/hooks/sms-notify.js.map +7 -0
  436. package/dist/src/hooks/sms-watcher.js +93 -0
  437. package/dist/src/hooks/sms-watcher.js.map +7 -0
  438. package/dist/src/hooks/sms-webhook.js +555 -0
  439. package/dist/src/hooks/sms-webhook.js.map +7 -0
  440. package/dist/src/hooks/whatsapp-commands.js +479 -0
  441. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  442. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  443. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  444. package/dist/src/hooks/whatsapp-sync.js +409 -0
  445. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  446. package/dist/src/index.js +25 -0
  447. package/dist/src/index.js.map +7 -0
  448. package/dist/src/integrations/anthropic/client.js +263 -0
  449. package/dist/src/integrations/anthropic/client.js.map +7 -0
  450. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  451. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  452. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  453. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  454. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  455. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  456. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  457. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  458. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  459. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  460. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  461. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  462. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  463. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  464. package/dist/src/integrations/linear/auth.js +337 -0
  465. package/dist/src/integrations/linear/auth.js.map +7 -0
  466. package/dist/src/integrations/linear/auto-sync.js +258 -0
  467. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  468. package/dist/src/integrations/linear/client.js +634 -0
  469. package/dist/src/integrations/linear/client.js.map +7 -0
  470. package/dist/src/integrations/linear/config.js +130 -0
  471. package/dist/src/integrations/linear/config.js.map +7 -0
  472. package/dist/src/integrations/linear/migration.js +361 -0
  473. package/dist/src/integrations/linear/migration.js.map +7 -0
  474. package/dist/src/integrations/linear/oauth-server.js +454 -0
  475. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  476. package/dist/src/integrations/linear/rest-client.js +213 -0
  477. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  478. package/dist/src/integrations/linear/sync-manager.js +236 -0
  479. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  480. package/dist/src/integrations/linear/sync-service.js +231 -0
  481. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  482. package/dist/src/integrations/linear/sync.js +782 -0
  483. package/dist/src/integrations/linear/sync.js.map +7 -0
  484. package/dist/src/integrations/linear/types.js +5 -0
  485. package/dist/src/integrations/linear/types.js.map +7 -0
  486. package/dist/src/integrations/linear/unified-sync.js +589 -0
  487. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  488. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  489. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  490. package/dist/src/integrations/linear/webhook-server.js +218 -0
  491. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  492. package/dist/src/integrations/linear/webhook.js +291 -0
  493. package/dist/src/integrations/linear/webhook.js.map +7 -0
  494. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  495. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  496. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  497. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  498. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  499. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  500. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  501. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  502. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  503. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  504. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  505. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  506. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  507. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  508. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  509. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  510. package/dist/src/integrations/mcp/index.js +23 -0
  511. package/dist/src/integrations/mcp/index.js.map +7 -0
  512. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  513. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  514. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  515. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  516. package/dist/src/integrations/mcp/remote-server.js +682 -0
  517. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  518. package/dist/src/integrations/mcp/schemas.js +147 -0
  519. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  520. package/dist/src/integrations/mcp/server.js +1975 -0
  521. package/dist/src/integrations/mcp/server.js.map +7 -0
  522. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  523. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  524. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  525. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  526. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  527. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  528. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  529. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  530. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  531. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  532. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  533. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  534. package/dist/src/integrations/ralph/index.js +18 -0
  535. package/dist/src/integrations/ralph/index.js.map +7 -0
  536. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  537. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  538. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  539. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  540. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  541. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  542. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  543. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  544. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  545. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  546. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  547. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  548. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  549. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  550. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  551. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  552. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  553. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  554. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  555. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  556. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  557. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  558. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  559. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  560. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  561. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  562. package/dist/src/integrations/ralph/types.js +5 -0
  563. package/dist/src/integrations/ralph/types.js.map +7 -0
  564. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  565. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  566. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  567. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  568. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  569. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  570. package/dist/src/models/user.model.js +358 -0
  571. package/dist/src/models/user.model.js.map +7 -0
  572. package/dist/src/servers/production/auth-middleware.js +528 -0
  573. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  574. package/dist/src/services/config-service.js +65 -0
  575. package/dist/src/services/config-service.js.map +7 -0
  576. package/dist/src/services/context-service.js +194 -0
  577. package/dist/src/services/context-service.js.map +7 -0
  578. package/dist/src/skills/api-discovery.js +354 -0
  579. package/dist/src/skills/api-discovery.js.map +7 -0
  580. package/dist/src/skills/api-skill.js +475 -0
  581. package/dist/src/skills/api-skill.js.map +7 -0
  582. package/dist/src/skills/claude-skills.js +1061 -0
  583. package/dist/src/skills/claude-skills.js.map +7 -0
  584. package/dist/src/skills/dashboard-launcher.js +216 -0
  585. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  586. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  587. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  588. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  589. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  590. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  591. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  592. package/dist/src/types/task.js +5 -0
  593. package/dist/src/types/task.js.map +7 -0
  594. package/dist/src/utils/env.js +50 -0
  595. package/dist/src/utils/env.js.map +7 -0
  596. package/dist/src/utils/formatting.js +62 -0
  597. package/dist/src/utils/formatting.js.map +7 -0
  598. package/dist/src/utils/process-cleanup.js +136 -0
  599. package/dist/src/utils/process-cleanup.js.map +7 -0
  600. package/package.json +4 -3
  601. package/scripts/create-cleanup-issues.js +302 -0
  602. package/scripts/demos/browser-test.ts +39 -0
  603. package/scripts/demos/ralph-integration-demo.ts +244 -0
  604. package/scripts/demos/trace-demo.ts +214 -0
  605. package/scripts/demos/trace-detector.demo.ts +171 -0
  606. package/scripts/demos/trace-test.ts +67 -0
  607. package/scripts/initialize.ts +16 -7
  608. package/scripts/install.sh +14 -62
  609. package/scripts/status.ts +111 -46
  610. package/scripts/test-claude-config.sh +123 -0
  611. package/scripts/validate-claude-config.sh +155 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/integrations/mcp/server.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * StackMemory MCP Server - Local Instance\n * This runs locally and provides context to Claude Code\n */\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { z } from 'zod';\nimport Database from 'better-sqlite3';\nimport {\n validateInput,\n StartFrameSchema,\n CloseFrameSchema,\n AddAnchorSchema,\n CreateTaskSchema,\n UpdateTaskStatusSchema,\n AddDecisionSchema,\n GetContextSchema,\n} from './schemas.js';\nimport { readFileSync, existsSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { execSync } from 'child_process';\nimport { FrameManager, FrameType } from '../../core/context/index.js';\nimport { logger } from '../../core/monitoring/logger.js';\nimport { isFeatureEnabled } from '../../core/config/feature-flags.js';\n\n// Linear types - imported dynamically when needed\ntype LinearTaskManager =\n import('../../features/tasks/linear-task-manager.js').LinearTaskManager;\ntype LinearAuthManager = import('../linear/auth.js').LinearAuthManager;\ntype LinearSyncEngine = import('../linear/sync.js').LinearSyncEngine;\n\n// Re-export task types for handlers (these are just enums/types, not runtime deps)\nexport {\n TaskPriority,\n TaskStatus,\n} from '../../features/tasks/linear-task-manager.js';\nimport { BrowserMCPIntegration } from '../../features/browser/browser-mcp.js';\nimport { TraceDetector } from '../../core/trace/trace-detector.js';\nimport { ToolCall, Trace } from '../../core/trace/types.js';\nimport { LLMContextRetrieval } from '../../core/retrieval/index.js';\nimport { DiscoveryHandlers } from './handlers/discovery-handlers.js';\nimport { v4 as uuidv4 } from 'uuid';\n// Type-safe environment variable access\nfunction getEnv(key: string, defaultValue?: string): string {\n const value = process.env[key];\n if (value === undefined) {\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(`Environment variable ${key} is required`);\n }\n return value;\n}\n\nfunction getOptionalEnv(key: string): string | undefined {\n return process.env[key];\n}\n\n// ============================================\n// Simple Local MCP Server\n// ============================================\n\nclass LocalStackMemoryMCP {\n private server: Server;\n private db: Database.Database;\n private projectRoot: string;\n private frameManager: FrameManager;\n private taskStore: LinearTaskManager | null = null;\n private linearAuthManager: LinearAuthManager | null = null;\n private linearSync: LinearSyncEngine | null = null;\n private projectId: string;\n private contexts: Map<string, any> = new Map();\n private browserMCP: BrowserMCPIntegration;\n private traceDetector: TraceDetector;\n private contextRetrieval: LLMContextRetrieval;\n private discoveryHandlers: DiscoveryHandlers;\n\n constructor() {\n // Find project root (where .git is)\n this.projectRoot = this.findProjectRoot();\n this.projectId = this.getProjectId();\n\n // Ensure .stackmemory directory exists\n const dbDir = join(this.projectRoot, '.stackmemory');\n if (!existsSync(dbDir)) {\n mkdirSync(dbDir, { recursive: true });\n }\n\n // Initialize database\n const dbPath = join(dbDir, 'context.db');\n this.db = new Database(dbPath);\n this.initDB();\n\n // Initialize frame manager\n this.frameManager = new FrameManager(this.db, this.projectId);\n\n // Initialize Linear integration (optional - lazy loaded)\n this.initLinearIfEnabled();\n\n // Initialize MCP server\n this.server = new Server(\n {\n name: 'stackmemory-local',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n // Initialize Browser MCP integration\n this.browserMCP = new BrowserMCPIntegration({\n headless: process.env['BROWSER_HEADLESS'] !== 'false',\n defaultViewport: { width: 1280, height: 720 },\n });\n\n // Initialize Trace Detector with database persistence\n this.traceDetector = new TraceDetector({}, undefined, this.db);\n\n // Initialize LLM Context Retrieval\n this.contextRetrieval = new LLMContextRetrieval(\n this.db,\n this.frameManager,\n this.projectId\n );\n\n // Initialize Discovery Handlers\n this.discoveryHandlers = new DiscoveryHandlers({\n frameManager: this.frameManager,\n contextRetrieval: this.contextRetrieval,\n db: this.db,\n projectRoot: this.projectRoot,\n });\n\n this.setupHandlers();\n this.loadInitialContext();\n\n // Initialize Browser MCP with this server\n this.browserMCP.initialize(this.server).catch((error) => {\n logger.error('Failed to initialize Browser MCP', error);\n });\n\n logger.info('StackMemory MCP Server initialized', {\n projectRoot: this.projectRoot,\n projectId: this.projectId,\n });\n }\n\n private findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== '/') {\n if (existsSync(join(dir, '.git'))) {\n return dir;\n }\n dir = dirname(dir);\n }\n return process.cwd();\n }\n\n /**\n * Initialize Linear integration if enabled and credentials available\n */\n private async initLinearIfEnabled(): Promise<void> {\n if (!isFeatureEnabled('linear')) {\n logger.info('Linear integration disabled (no API key or LOCAL mode)');\n return;\n }\n\n try {\n const { LinearTaskManager } =\n await import('../../features/tasks/linear-task-manager.js');\n const { LinearAuthManager } = await import('../linear/auth.js');\n const { LinearSyncEngine, DEFAULT_SYNC_CONFIG } =\n await import('../linear/sync.js');\n\n this.taskStore = new LinearTaskManager(this.projectRoot, this.db);\n this.linearAuthManager = new LinearAuthManager(this.projectRoot);\n this.linearSync = new LinearSyncEngine(\n this.taskStore,\n this.linearAuthManager,\n DEFAULT_SYNC_CONFIG\n );\n\n logger.info('Linear integration initialized');\n } catch (error) {\n logger.warn('Failed to initialize Linear integration', { error });\n }\n }\n\n private initDB() {\n // Note: Don't create frames table here - FrameManager handles the schema\n // with the full run_id, project_id, parent_frame_id columns\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS contexts (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n importance REAL DEFAULT 0.5,\n created_at INTEGER DEFAULT (unixepoch()),\n last_accessed INTEGER DEFAULT (unixepoch()),\n access_count INTEGER DEFAULT 1\n );\n\n CREATE TABLE IF NOT EXISTS attention_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n context_id TEXT,\n query TEXT,\n response TEXT,\n influence_score REAL,\n timestamp INTEGER DEFAULT (unixepoch())\n );\n `);\n }\n\n private loadInitialContext() {\n // Load project information\n const projectInfo = this.getProjectInfo();\n this.addContext(\n 'project',\n `Project: ${projectInfo.name}\\nPath: ${projectInfo.path}`,\n 0.9\n );\n\n // Load recent git commits\n try {\n const recentCommits = execSync('git log --oneline -10', {\n cwd: this.projectRoot,\n }).toString();\n this.addContext('git_history', `Recent commits:\\n${recentCommits}`, 0.6);\n } catch {\n // Not a git repo or git not available\n }\n\n // Load README if exists\n const readmePath = join(this.projectRoot, 'README.md');\n if (existsSync(readmePath)) {\n const readme = readFileSync(readmePath, 'utf-8');\n const summary = readme.substring(0, 500);\n this.addContext('readme', `Project README:\\n${summary}...`, 0.8);\n }\n\n // Load any existing decisions from previous sessions\n this.loadStoredContexts();\n }\n\n private getProjectId(): string {\n // Use git remote or directory path as project ID\n // Algorithm must match session-manager and project-manager\n let identifier: string;\n try {\n identifier = execSync('git config --get remote.origin.url', {\n cwd: this.projectRoot,\n stdio: 'pipe',\n timeout: 5000,\n })\n .toString()\n .trim();\n } catch {\n identifier = this.projectRoot;\n }\n\n // Normalize: remove .git suffix, replace non-alphanumeric with dashes, take last 50 chars\n const cleaned = identifier\n .replace(/\\.git$/, '')\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .toLowerCase();\n\n return cleaned.substring(cleaned.length - 50) || 'unknown';\n }\n\n private getProjectInfo() {\n const packageJsonPath = join(this.projectRoot, 'package.json');\n if (existsSync(packageJsonPath)) {\n const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return {\n name: pkg.name || 'unknown',\n path: this.projectRoot,\n };\n }\n return {\n name: this.projectRoot.split('/').pop() || 'unknown',\n path: this.projectRoot,\n };\n }\n\n private addContext(type: string, content: string, importance: number = 0.5) {\n const id = `${type}_${Date.now()}`;\n\n this.db\n .prepare(\n `\n INSERT OR REPLACE INTO contexts (id, type, content, importance)\n VALUES (?, ?, ?, ?)\n `\n )\n .run(id, type, content, importance);\n\n this.contexts.set(id, { type, content, importance });\n return id;\n }\n\n private loadStoredContexts() {\n const stored = this.db\n .prepare(\n `\n SELECT * FROM contexts \n ORDER BY importance DESC, last_accessed DESC\n LIMIT 50\n `\n )\n .all() as any[];\n\n stored.forEach((ctx) => {\n this.contexts.set(ctx.id, ctx);\n });\n }\n\n private setupHandlers() {\n // Tool listing\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/list'),\n }),\n async () => {\n return {\n tools: [\n {\n name: 'get_context',\n description: 'Get current project context',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'What you want to know',\n },\n limit: {\n type: 'number',\n description: 'Max contexts to return',\n },\n },\n },\n },\n {\n name: 'add_decision',\n description: 'Record a decision or important information',\n inputSchema: {\n type: 'object',\n properties: {\n content: {\n type: 'string',\n description: 'The decision or information',\n },\n type: {\n type: 'string',\n enum: ['decision', 'constraint', 'learning'],\n },\n },\n required: ['content', 'type'],\n },\n },\n {\n name: 'start_frame',\n description: 'Start a new frame (task/subtask) on the call stack',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Frame name/goal' },\n type: {\n type: 'string',\n enum: [\n 'task',\n 'subtask',\n 'tool_scope',\n 'review',\n 'write',\n 'debug',\n ],\n description: 'Frame type',\n },\n constraints: {\n type: 'array',\n items: { type: 'string' },\n description: 'Constraints for this frame',\n },\n },\n required: ['name', 'type'],\n },\n },\n {\n name: 'close_frame',\n description: 'Close current frame and generate digest',\n inputSchema: {\n type: 'object',\n properties: {\n result: {\n type: 'string',\n description: 'Frame completion result',\n },\n outputs: {\n type: 'object',\n description: 'Final outputs from frame',\n },\n },\n },\n },\n {\n name: 'add_anchor',\n description:\n 'Add anchored fact/decision/constraint to current frame',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [\n 'FACT',\n 'DECISION',\n 'CONSTRAINT',\n 'INTERFACE_CONTRACT',\n 'TODO',\n 'RISK',\n ],\n description: 'Anchor type',\n },\n text: { type: 'string', description: 'Anchor content' },\n priority: {\n type: 'number',\n description: 'Priority (0-10)',\n minimum: 0,\n maximum: 10,\n },\n },\n required: ['type', 'text'],\n },\n },\n {\n name: 'get_hot_stack',\n description: 'Get current active frames and context',\n inputSchema: {\n type: 'object',\n properties: {\n maxEvents: {\n type: 'number',\n description: 'Max recent events per frame',\n default: 20,\n },\n },\n },\n },\n {\n name: 'create_task',\n description: 'Create a new task in git-tracked JSONL storage',\n inputSchema: {\n type: 'object',\n properties: {\n title: { type: 'string', description: 'Task title' },\n description: {\n type: 'string',\n description: 'Task description',\n },\n priority: {\n type: 'string',\n enum: ['low', 'medium', 'high', 'urgent'],\n description: 'Task priority',\n },\n estimatedEffort: {\n type: 'number',\n description: 'Estimated effort in minutes',\n },\n dependsOn: {\n type: 'array',\n items: { type: 'string' },\n description: 'Task IDs this depends on',\n },\n tags: {\n type: 'array',\n items: { type: 'string' },\n description: 'Tags for categorization',\n },\n },\n required: ['title'],\n },\n },\n {\n name: 'update_task_status',\n description: 'Update task status with automatic time tracking',\n inputSchema: {\n type: 'object',\n properties: {\n taskId: { type: 'string', description: 'Task ID to update' },\n status: {\n type: 'string',\n enum: [\n 'pending',\n 'in_progress',\n 'completed',\n 'blocked',\n 'cancelled',\n ],\n description: 'New status',\n },\n reason: {\n type: 'string',\n description:\n 'Reason for status change (especially for blocked)',\n },\n },\n required: ['taskId', 'status'],\n },\n },\n {\n name: 'get_active_tasks',\n description: 'Get currently active tasks synced from Linear',\n inputSchema: {\n type: 'object',\n properties: {\n frameId: {\n type: 'string',\n description: 'Filter by specific frame ID',\n },\n status: {\n type: 'string',\n enum: [\n 'pending',\n 'in_progress',\n 'completed',\n 'blocked',\n 'cancelled',\n ],\n description: 'Filter by status',\n },\n priority: {\n type: 'string',\n enum: ['low', 'medium', 'high', 'urgent'],\n description: 'Filter by priority',\n },\n search: {\n type: 'string',\n description: 'Search in task title or description',\n },\n limit: {\n type: 'number',\n description: 'Max number of tasks to return (default: 20)',\n },\n },\n },\n },\n {\n name: 'get_task_metrics',\n description: 'Get project task metrics and analytics',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'add_task_dependency',\n description: 'Add dependency relationship between tasks',\n inputSchema: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'Task that depends on another',\n },\n dependsOnId: {\n type: 'string',\n description: 'Task ID that this depends on',\n },\n },\n required: ['taskId', 'dependsOnId'],\n },\n },\n {\n name: 'linear_sync',\n description: 'Sync tasks with Linear',\n inputSchema: {\n type: 'object',\n properties: {\n direction: {\n type: 'string',\n enum: ['bidirectional', 'to_linear', 'from_linear'],\n description: 'Sync direction',\n },\n },\n },\n },\n {\n name: 'linear_update_task',\n description: 'Update a Linear task status',\n inputSchema: {\n type: 'object',\n properties: {\n issueId: {\n type: 'string',\n description: 'Linear issue ID or identifier (e.g., STA-34)',\n },\n status: {\n type: 'string',\n enum: ['todo', 'in-progress', 'done', 'canceled'],\n description: 'New status for the task',\n },\n title: {\n type: 'string',\n description: 'Update task title (optional)',\n },\n description: {\n type: 'string',\n description: 'Update task description (optional)',\n },\n priority: {\n type: 'number',\n enum: [1, 2, 3, 4],\n description: 'Priority (1=urgent, 2=high, 3=medium, 4=low)',\n },\n },\n required: ['issueId'],\n },\n },\n {\n name: 'linear_get_tasks',\n description: 'Get Linear tasks',\n inputSchema: {\n type: 'object',\n properties: {\n status: {\n type: 'string',\n enum: ['todo', 'in-progress', 'done', 'all'],\n description: 'Filter by status',\n },\n limit: {\n type: 'number',\n description: 'Maximum number of tasks to return',\n },\n },\n },\n },\n {\n name: 'linear_status',\n description: 'Get Linear integration status',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'get_traces',\n description: 'Get detected traces (bundled tool call sequences)',\n inputSchema: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: [\n 'search_driven',\n 'error_recovery',\n 'feature_implementation',\n 'refactoring',\n 'testing',\n 'exploration',\n 'debugging',\n 'documentation',\n 'build_deploy',\n 'unknown',\n ],\n description: 'Filter by trace type',\n },\n minScore: {\n type: 'number',\n description: 'Minimum importance score (0-1)',\n },\n limit: {\n type: 'number',\n description: 'Maximum number of traces to return',\n },\n },\n },\n },\n {\n name: 'get_trace_statistics',\n description: 'Get statistics about detected traces',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'flush_traces',\n description: 'Flush any pending trace and finalize detection',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'compress_old_traces',\n description: 'Compress traces older than specified hours',\n inputSchema: {\n type: 'object',\n properties: {\n ageHours: {\n type: 'number',\n description: 'Age threshold in hours (default: 24)',\n },\n },\n },\n },\n {\n name: 'smart_context',\n description:\n 'LLM-driven context retrieval - intelligently selects relevant frames based on query',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description:\n 'Natural language query describing what context you need',\n },\n tokenBudget: {\n type: 'number',\n description:\n 'Maximum tokens to use for context (default: 4000)',\n },\n forceRefresh: {\n type: 'boolean',\n description: 'Force refresh of cached summaries',\n },\n },\n required: ['query'],\n },\n },\n {\n name: 'get_summary',\n description:\n 'Get compressed summary of project memory for analysis',\n inputSchema: {\n type: 'object',\n properties: {\n forceRefresh: {\n type: 'boolean',\n description: 'Force refresh of cached summary',\n },\n },\n },\n },\n // Discovery tools\n {\n name: 'sm_discover',\n description:\n 'Discover relevant files based on current context. Extracts keywords from active frames and searches codebase.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Optional query to focus the discovery',\n },\n depth: {\n type: 'string',\n enum: ['shallow', 'medium', 'deep'],\n description: 'Search depth',\n },\n maxFiles: {\n type: 'number',\n description: 'Maximum files to return',\n },\n },\n },\n },\n {\n name: 'sm_related_files',\n description: 'Find files related to a specific file or concept',\n inputSchema: {\n type: 'object',\n properties: {\n file: {\n type: 'string',\n description: 'File path to find related files for',\n },\n concept: {\n type: 'string',\n description: 'Concept to search for',\n },\n maxFiles: {\n type: 'number',\n description: 'Maximum files to return',\n },\n },\n },\n },\n {\n name: 'sm_session_summary',\n description:\n 'Get summary of current session with active tasks, files, and decisions',\n inputSchema: {\n type: 'object',\n properties: {\n includeFiles: {\n type: 'boolean',\n description: 'Include recently accessed files',\n },\n includeDecisions: {\n type: 'boolean',\n description: 'Include recent decisions',\n },\n },\n },\n },\n {\n name: 'sm_search',\n description:\n 'Search across StackMemory - frames, events, decisions, tasks',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query',\n },\n scope: {\n type: 'string',\n enum: ['all', 'frames', 'events', 'decisions', 'tasks'],\n description: 'Scope of search',\n },\n limit: {\n type: 'number',\n description: 'Maximum results',\n },\n },\n required: ['query'],\n },\n },\n ],\n };\n }\n );\n\n // Tool execution\n this.server.setRequestHandler(\n z.object({\n method: z.literal('tools/call'),\n params: z.object({\n name: z.string(),\n arguments: z.record(z.unknown()),\n }),\n }),\n async (request) => {\n const { name, arguments: args } = request.params;\n const callId = uuidv4();\n const startTime = Date.now();\n\n // Log tool call event before execution\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('tool_call', {\n tool_name: name,\n arguments: args,\n timestamp: startTime,\n });\n }\n\n // Create ToolCall for trace detection\n const toolCall: ToolCall = {\n id: callId,\n tool: name,\n arguments: args,\n timestamp: startTime,\n };\n\n let result;\n let error;\n\n try {\n switch (name) {\n case 'get_context':\n result = await this.handleGetContext(args);\n break;\n\n case 'add_decision':\n result = await this.handleAddDecision(args);\n break;\n\n case 'start_frame':\n result = await this.handleStartFrame(args);\n break;\n\n case 'close_frame':\n result = await this.handleCloseFrame(args);\n break;\n\n case 'add_anchor':\n result = await this.handleAddAnchor(args);\n break;\n\n case 'get_hot_stack':\n result = await this.handleGetHotStack(args);\n break;\n\n case 'create_task':\n result = await this.handleCreateTask(args);\n break;\n\n case 'update_task_status':\n result = await this.handleUpdateTaskStatus(args);\n break;\n\n case 'get_active_tasks':\n result = await this.handleGetActiveTasks(args);\n break;\n\n case 'get_task_metrics':\n result = await this.handleGetTaskMetrics(args);\n break;\n\n case 'add_task_dependency':\n result = await this.handleAddTaskDependency(args);\n break;\n\n case 'linear_sync':\n result = await this.handleLinearSync(args);\n break;\n\n case 'linear_update_task':\n result = await this.handleLinearUpdateTask(args);\n break;\n\n case 'linear_get_tasks':\n result = await this.handleLinearGetTasks(args);\n break;\n\n case 'linear_status':\n result = await this.handleLinearStatus(args);\n break;\n\n case 'get_traces':\n result = await this.handleGetTraces(args);\n break;\n\n case 'get_trace_statistics':\n result = await this.handleGetTraceStatistics(args);\n break;\n\n case 'flush_traces':\n result = await this.handleFlushTraces(args);\n break;\n\n case 'compress_old_traces':\n result = await this.handleCompressOldTraces(args);\n break;\n\n case 'smart_context':\n result = await this.handleSmartContext(args);\n break;\n\n case 'get_summary':\n result = await this.handleGetSummary(args);\n break;\n\n // Discovery tools\n case 'sm_discover':\n result = await this.handleSmDiscover(args);\n break;\n\n case 'sm_related_files':\n result = await this.handleSmRelatedFiles(args);\n break;\n\n case 'sm_session_summary':\n result = await this.handleSmSessionSummary(args);\n break;\n\n case 'sm_search':\n result = await this.handleSmSearch(args);\n break;\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n } catch (err: unknown) {\n error = err instanceof Error ? err : new Error(String(err));\n toolCall.error = error.message;\n throw err;\n } finally {\n const endTime = Date.now();\n\n // Log tool result event after execution (success or failure)\n // Skip for close_frame since the frame no longer exists after closing\n if (currentFrameId && name !== 'close_frame') {\n try {\n this.frameManager.addEvent('tool_result', {\n tool_name: name,\n success: !error,\n result: error ? { error: error.message } : result,\n timestamp: endTime,\n });\n } catch {\n // Frame may have been closed, ignore logging error\n }\n }\n\n // Update tool call with results and add to trace detector\n toolCall.result = error ? undefined : result;\n toolCall.duration = endTime - startTime;\n\n // Extract files affected if available from result or args\n if (args.file_path || args.path) {\n toolCall.filesAffected = [args.file_path || args.path].filter(\n Boolean\n ) as string[];\n } else if ((result as any)?.files) {\n const files = (result as any).files;\n toolCall.filesAffected = Array.isArray(files) ? files : [files];\n }\n\n // Add to trace detector\n this.traceDetector.addToolCall(toolCall);\n }\n\n return result;\n }\n );\n }\n\n private async handleGetContext(args: any) {\n const { query = '', limit = 10 } = args;\n\n // Get relevant contexts\n const contexts = Array.from(this.contexts.values())\n .sort((a, b) => b.importance - a.importance)\n .slice(0, limit);\n\n // Update access counts\n contexts.forEach((ctx) => {\n this.db\n .prepare(\n `\n UPDATE contexts \n SET last_accessed = unixepoch(), \n access_count = access_count + 1\n WHERE id = ?\n `\n )\n .run(ctx.id);\n });\n\n // Format response\n const response = contexts\n .map(\n (ctx) =>\n `[${ctx.type.toUpperCase()}] (importance: ${ctx.importance.toFixed(2)})\\n${ctx.content}`\n )\n .join('\\n\\n---\\n\\n');\n\n // Log for attention tracking\n this.logAttention(query, response);\n\n return {\n content: [\n {\n type: 'text',\n text:\n response ||\n 'No context available yet. Start adding decisions and information!',\n },\n ],\n };\n }\n\n private async handleAddDecision(args: any) {\n const { content, type = 'decision' } = args;\n\n const id = this.addContext(type, content, 0.8);\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2713 Added ${type}: ${content}\\nID: ${id}`,\n },\n ],\n };\n }\n\n private async handleStartFrame(args: unknown) {\n const { name, type, constraints } = validateInput(\n StartFrameSchema,\n args,\n 'start_frame'\n );\n\n const inputs: Record<string, any> = {};\n if (constraints) {\n inputs.constraints = constraints;\n }\n\n const frameId = this.frameManager.createFrame({\n type: type as FrameType,\n name,\n inputs,\n });\n\n // Log event\n this.frameManager.addEvent('user_message', {\n action: 'start_frame',\n name,\n type,\n constraints,\n });\n\n // Add as context\n this.addContext('active_frame', `Active frame: ${name} (${type})`, 0.9);\n\n const stackDepth = this.frameManager.getStackDepth();\n\n return {\n content: [\n {\n type: 'text',\n text: `\uD83D\uDE80 Started ${type}: ${name}\\nFrame ID: ${frameId}\\nStack depth: ${stackDepth}`,\n },\n ],\n };\n }\n\n private async handleCloseFrame(args: any) {\n const { result, outputs } = args;\n const currentFrameId = this.frameManager.getCurrentFrameId();\n\n if (!currentFrameId) {\n return {\n content: [\n {\n type: 'text',\n text: '\u26A0\uFE0F No active frame to close',\n },\n ],\n };\n }\n\n // Log completion event\n this.frameManager.addEvent('assistant_message', {\n action: 'close_frame',\n result,\n outputs,\n });\n\n this.frameManager.closeFrame(currentFrameId, outputs);\n\n const newStackDepth = this.frameManager.getStackDepth();\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2705 Closed frame: ${result || 'completed'}\\nStack depth: ${newStackDepth}`,\n },\n ],\n };\n }\n\n private async handleAddAnchor(args: unknown) {\n const { type, text, priority } = validateInput(\n AddAnchorSchema,\n args,\n 'add_anchor'\n );\n\n const anchorId = this.frameManager.addAnchor(type, text, priority);\n\n // Log anchor creation\n this.frameManager.addEvent('decision', {\n anchor_type: type,\n text,\n priority,\n anchor_id: anchorId,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `\uD83D\uDCCC Added ${type}: ${text}\\nAnchor ID: ${anchorId}`,\n },\n ],\n };\n }\n\n private async handleGetHotStack(args: any) {\n const { maxEvents = 20 } = args;\n\n const hotStack = this.frameManager.getHotStackContext(maxEvents);\n const activePath = this.frameManager.getActiveFramePath();\n\n if (hotStack.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: '\uD83D\uDCDA No active frames. Start a frame with start_frame tool.',\n },\n ],\n };\n }\n\n let response = '\uD83D\uDCDA **Active Call Stack:**\\n\\n';\n\n activePath.forEach((frame, index) => {\n const indent = ' '.repeat(index);\n const context = hotStack[index];\n\n response += `${indent}${index + 1}. **${frame.name}** (${frame.type})\\n`;\n\n if (context && context.anchors && context.anchors.length > 0) {\n response += `${indent} \uD83D\uDCCC ${context.anchors.length} anchors\\n`;\n }\n\n if (context && context.recentEvents && context.recentEvents.length > 0) {\n response += `${indent} \uD83D\uDCDD ${context.recentEvents.length} recent events\\n`;\n }\n\n response += '\\n';\n });\n\n response += `**Total stack depth:** ${hotStack.length}`;\n\n // Log stack access\n this.frameManager.addEvent('observation', {\n action: 'get_hot_stack',\n stack_depth: hotStack.length,\n total_anchors: hotStack.reduce(\n (sum, frame) => sum + frame.anchors.length,\n 0\n ),\n total_events: hotStack.reduce(\n (sum, frame) => sum + frame.recentEvents.length,\n 0\n ),\n });\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n }\n\n private logAttention(query: string, response: string) {\n // Simple attention logging for analysis\n this.db\n .prepare(\n `\n INSERT INTO attention_log (query, response)\n VALUES (?, ?)\n `\n )\n .run(query, response);\n }\n\n private async handleCreateTask(args: unknown) {\n const validated = validateInput(CreateTaskSchema, args, 'create_task');\n const { title, description, priority, tags } = validated;\n const { estimatedEffort, dependsOn } = args as any; // Legacy fields\n const currentFrameId = this.frameManager.getCurrentFrameId();\n\n if (!currentFrameId) {\n return {\n content: [\n {\n type: 'text',\n text: '\u26A0\uFE0F No active frame. Start a frame first with start_frame tool.',\n },\n ],\n };\n }\n\n const taskId = this.taskStore.createTask({\n title,\n description,\n priority: priority as TaskPriority,\n frameId: currentFrameId,\n dependsOn,\n tags,\n estimatedEffort,\n });\n\n // Log task creation event\n this.frameManager.addEvent('decision', {\n action: 'create_task',\n task_id: taskId,\n title,\n priority: priority || 'medium',\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2705 Created task: ${title}\\nID: ${taskId}\\nFrame: ${currentFrameId}\\nStored in: .stackmemory/tasks.jsonl`,\n },\n ],\n };\n }\n\n private async handleUpdateTaskStatus(args: any) {\n const { taskId, status, reason } = args;\n\n try {\n this.taskStore.updateTaskStatus(taskId, status as TaskStatus, reason);\n\n // Log status change event\n this.frameManager.addEvent('observation', {\n action: 'update_task_status',\n task_id: taskId,\n new_status: status,\n reason,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2705 Updated task ${taskId} to ${status}${reason ? `\\nReason: ${reason}` : ''}`,\n },\n ],\n };\n } catch (error: unknown) {\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Failed to update task: ${error}`,\n },\n ],\n };\n }\n }\n\n private async handleGetActiveTasks(args: any) {\n const { frameId, status, priority, search, limit = 20 } = args;\n let tasks = this.taskStore.getActiveTasks(frameId);\n\n // Apply filters\n if (status) {\n tasks = tasks.filter((t) => t.status === status);\n }\n if (priority) {\n tasks = tasks.filter((t) => t.priority === priority);\n }\n if (search) {\n const searchLower = search.toLowerCase();\n tasks = tasks.filter(\n (t) =>\n t.title.toLowerCase().includes(searchLower) ||\n (t.description && t.description.toLowerCase().includes(searchLower))\n );\n }\n\n // Sort by priority (urgent first) then by created_at\n const priorityOrder = { urgent: 0, high: 1, medium: 2, low: 3 };\n tasks.sort((a, b) => {\n const pa = priorityOrder[a.priority] ?? 2;\n const pb = priorityOrder[b.priority] ?? 2;\n if (pa !== pb) return pa - pb;\n return b.created_at - a.created_at;\n });\n\n // Limit results\n tasks = tasks.slice(0, limit);\n\n if (tasks.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: search\n ? `\uD83D\uDCDD No tasks matching \"${search}\"`\n : '\uD83D\uDCDD No active tasks found',\n },\n ],\n };\n }\n\n let response = `\uD83D\uDCDD **Tasks** (${tasks.length} found)\\n\\n`;\n tasks.forEach((task) => {\n const priorityIcon =\n { urgent: '\uD83D\uDD34', high: '\uD83D\uDFE0', medium: '\uD83D\uDFE1', low: '\uD83D\uDFE2' }[task.priority] ||\n '\u26AA';\n const statusIcon =\n {\n pending: '\u23F3',\n in_progress: '\uD83D\uDD04',\n completed: '\u2705',\n blocked: '\uD83D\uDEAB',\n cancelled: '\u274C',\n }[task.status] || '\u26AA';\n const effort = task.estimated_effort\n ? ` (~${task.estimated_effort}m)`\n : '';\n\n // Extract Linear ID from title if present\n const linearMatch = task.title.match(/\\[ENG-\\d+\\]/);\n const linearId = linearMatch ? linearMatch[0] : '';\n const title = linearId\n ? task.title.replace(linearId, '').trim()\n : task.title;\n\n response += `${statusIcon} ${priorityIcon} **${linearId || task.id}** ${title}${effort}\\n`;\n if (task.description) {\n const desc = task.description.split('\\n')[0].slice(0, 100);\n response += ` ${desc}${task.description.length > 100 ? '...' : ''}\\n`;\n }\n if (task.tags && task.tags.length > 0) {\n response += ` \uD83C\uDFF7\uFE0F ${task.tags.join(', ')}\\n`;\n }\n response += '\\n';\n });\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n }\n\n private async handleGetTaskMetrics(_args: any) {\n const metrics = this.taskStore.getMetrics();\n\n let response = '\uD83D\uDCCA **Task Metrics**\\n\\n';\n response += `**Total Tasks:** ${metrics.total_tasks}\\n`;\n response += `**Completion Rate:** ${(metrics.completion_rate * 100).toFixed(1)}%\\n\\n`;\n\n response += '**By Status:**\\n';\n Object.entries(metrics.by_status).forEach(([status, count]) => {\n response += `- ${status}: ${count}\\n`;\n });\n\n response += '\\n**By Priority:**\\n';\n Object.entries(metrics.by_priority).forEach(([priority, count]) => {\n response += `- ${priority}: ${count}\\n`;\n });\n\n if (metrics.blocked_tasks > 0) {\n response += `\\n\u26A0\uFE0F **${metrics.blocked_tasks} blocked tasks**`;\n }\n\n if (metrics.avg_effort_accuracy > 0) {\n response += `\\n\uD83C\uDFAF **Effort Accuracy:** ${(metrics.avg_effort_accuracy * 100).toFixed(1)}%`;\n }\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n }\n\n private async handleAddTaskDependency(args: any) {\n const { taskId, dependsOnId } = args;\n\n try {\n this.taskStore.addDependency(taskId, dependsOnId);\n\n // Log dependency creation\n this.frameManager.addEvent('decision', {\n action: 'add_task_dependency',\n task_id: taskId,\n depends_on_id: dependsOnId,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `\uD83D\uDD17 Added dependency: ${taskId} depends on ${dependsOnId}`,\n },\n ],\n };\n } catch (error: unknown) {\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Failed to add dependency: ${error}`,\n },\n ],\n };\n }\n }\n\n // Linear Integration Handlers\n private async handleLinearSync(args: any) {\n try {\n const tokens = this.linearAuthManager.loadTokens();\n\n if (!tokens) {\n return {\n content: [\n {\n type: 'text',\n text: '\u274C Linear not authenticated. Run: stackmemory linear setup',\n },\n ],\n };\n }\n\n const syncConfig = { ...DEFAULT_SYNC_CONFIG, enabled: true };\n if (args.direction) {\n syncConfig.direction = args.direction;\n }\n\n // Update sync engine configuration for this sync\n this.linearSync.updateConfig(syncConfig);\n const result = await this.linearSync.sync();\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2705 Linear sync completed\\n- To Linear: ${result.synced.toLinear} tasks\\n- From Linear: ${result.synced.fromLinear} tasks\\n- Updated: ${result.synced.updated} tasks`,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Linear sync failed', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Linear sync failed: ${message}`,\n },\n ],\n };\n }\n }\n\n private async handleLinearUpdateTask(args: any) {\n try {\n const { LinearClient } = await import('../linear/client.js');\n\n const tokens = this.linearAuthManager.loadTokens();\n\n if (!tokens) {\n return {\n content: [\n {\n type: 'text',\n text: '\u274C Linear not authenticated. Run: stackmemory linear setup',\n },\n ],\n };\n }\n\n const client = new LinearClient({\n apiKey: tokens.accessToken,\n useBearer: true,\n onUnauthorized: async () => {\n const refreshed = await this.linearAuthManager.refreshAccessToken();\n return refreshed.accessToken;\n },\n });\n\n // Find the issue\n let issue = await client.getIssue(args.issueId);\n if (!issue) {\n issue = await client.findIssueByIdentifier(args.issueId);\n }\n\n if (!issue) {\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Linear issue ${args.issueId} not found`,\n },\n ],\n };\n }\n\n const updates: any = {};\n\n // Handle status update\n if (args.status) {\n const team = await client.getTeam();\n const states = await client.getWorkflowStates(team.id);\n\n const statusMap: Record<string, string> = {\n todo: 'unstarted',\n 'in-progress': 'started',\n done: 'completed',\n canceled: 'cancelled',\n };\n\n const targetType = statusMap[args.status] || args.status;\n const targetState = states.find((s: any) => s.type === targetType);\n\n if (!targetState) {\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Invalid status: ${args.status}`,\n },\n ],\n };\n }\n\n updates.stateId = targetState.id;\n }\n\n if (args.title) updates.title = args.title;\n if (args.description) updates.description = args.description;\n if (args.priority) updates.priority = args.priority;\n\n const updatedIssue = await client.updateIssue(issue.id, updates);\n\n // Auto-sync to local tasks after update\n this.linearSync.updateConfig({\n ...DEFAULT_SYNC_CONFIG,\n enabled: true,\n direction: 'from_linear',\n });\n const syncResult = await this.linearSync.sync();\n\n let response = `\u2705 Updated ${updatedIssue.identifier}: ${updatedIssue.title}\\n`;\n if (args.status) {\n response += `Status: ${updatedIssue.state.name}\\n`;\n }\n response += `URL: ${updatedIssue.url}\\n`;\n response += `\\n\uD83D\uDD04 Local sync: ${syncResult.synced.fromLinear} new, ${syncResult.synced.updated} updated`;\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Failed to update Linear task', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Failed to update Linear task: ${message}`,\n },\n ],\n };\n }\n }\n\n private async handleLinearGetTasks(args: any) {\n try {\n const { LinearClient } = await import('../linear/client.js');\n\n const tokens = this.linearAuthManager.loadTokens();\n\n if (!tokens) {\n return {\n content: [\n {\n type: 'text',\n text: '\u274C Linear not authenticated. Run: stackmemory linear setup',\n },\n ],\n };\n }\n\n const client = new LinearClient({\n apiKey: tokens.accessToken,\n useBearer: true,\n onUnauthorized: async () => {\n const refreshed = await this.linearAuthManager.refreshAccessToken();\n return refreshed.accessToken;\n },\n });\n\n let stateType: any = undefined;\n if (args.status && args.status !== 'all') {\n const statusMap: Record<string, string> = {\n todo: 'unstarted',\n 'in-progress': 'started',\n done: 'completed',\n };\n stateType = statusMap[args.status] || args.status;\n }\n\n const issues = await client.getIssues({\n stateType,\n limit: args.limit || 20,\n });\n\n if (!issues || issues.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No Linear tasks found',\n },\n ],\n };\n }\n\n let response = `\uD83D\uDCCB **Linear Tasks** (${issues.length} items)\\n\\n`;\n issues.forEach((issue: any) => {\n const priority = issue.priority ? `P${issue.priority}` : '-';\n response += `- **${issue.identifier}**: ${issue.title}\\n`;\n response += ` Status: ${issue.state.name} | Priority: ${priority}\\n`;\n if (issue.assignee) {\n response += ` Assignee: ${issue.assignee.name}\\n`;\n }\n response += ` ${issue.url}\\n\\n`;\n });\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Failed to get Linear tasks', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Failed to get Linear tasks: ${message}`,\n },\n ],\n };\n }\n }\n\n private async handleLinearStatus(_args: any) {\n try {\n const { LinearClient } = await import('../linear/client.js');\n\n const tokens = this.linearAuthManager.loadTokens();\n\n if (!tokens) {\n return {\n content: [\n {\n type: 'text',\n text: '\u274C Linear integration not configured\\nRun: stackmemory linear setup',\n },\n ],\n };\n }\n\n try {\n const client = new LinearClient({\n apiKey: tokens.accessToken,\n useBearer: true,\n onUnauthorized: async () => {\n const refreshed = await this.linearAuthManager.refreshAccessToken();\n return refreshed.accessToken;\n },\n });\n\n const viewer = await client.getViewer();\n const team = await client.getTeam();\n\n return {\n content: [\n {\n type: 'text',\n text: `\u2705 **Linear Integration Status**\\n\\nConnected as: ${viewer.name} (${viewer.email})\\nTeam: ${team.name} (${team.key})\\nTokens: Valid`,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n content: [\n {\n type: 'text',\n text: `\u26A0\uFE0F Linear configured but connection failed: ${message}`,\n },\n ],\n };\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Linear status check failed', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Linear status check failed: ${message}`,\n },\n ],\n };\n }\n }\n\n private async handleGetTraces(args: any) {\n const { type, minScore, limit = 20 } = args;\n\n // Flush pending traces first\n this.traceDetector.flush();\n\n let traces = this.traceDetector.getTraces();\n\n // Apply filters\n if (type) {\n traces = traces.filter((t) => t.type === type);\n }\n\n if (minScore !== undefined) {\n traces = traces.filter((t) => t.score >= minScore);\n }\n\n // Sort by score and limit\n traces = traces.sort((a, b) => b.score - a.score).slice(0, limit);\n\n // Format traces for display\n const formattedTraces = traces.map((trace) => ({\n id: trace.id,\n type: trace.type,\n score: trace.score.toFixed(2),\n summary: trace.summary,\n toolCount: trace.tools.length,\n duration: `${((trace.metadata.endTime - trace.metadata.startTime) / 1000).toFixed(1)}s`,\n filesModified: trace.metadata.filesModified.length,\n hasErrors: trace.metadata.errorsEncountered.length > 0,\n compressed: !!trace.compressed,\n }));\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${formattedTraces.length} traces:\\n\\n${formattedTraces\n .map(\n (t) =>\n `[${t.type}] Score: ${t.score} | Tools: ${t.toolCount} | Duration: ${t.duration}\\n ${t.summary}`\n )\n .join('\\n\\n')}`,\n },\n ],\n };\n }\n\n private async handleGetTraceStatistics(args: any) {\n this.traceDetector.flush();\n const stats = this.traceDetector.getStatistics();\n\n const typeBreakdown = Object.entries(stats.tracesByType)\n .map(([type, count]) => ` ${type}: ${count}`)\n .join('\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `**Trace Statistics**\\n\\nTotal Traces: ${stats.totalTraces}\nAverage Score: ${stats.averageScore.toFixed(2)}\nAverage Length: ${stats.averageLength.toFixed(1)} tools\nHigh Importance (>0.7): ${stats.highImportanceCount}\nCompressed: ${stats.compressedCount}\n\n**Trace Types:**\n${typeBreakdown}`,\n },\n ],\n };\n }\n\n private async handleFlushTraces(args: any) {\n this.traceDetector.flush();\n\n return {\n content: [\n {\n type: 'text',\n text: 'Pending traces have been flushed and finalized.',\n },\n ],\n };\n }\n\n private async handleCompressOldTraces(args: any) {\n const { ageHours = 24 } = args;\n\n const compressedCount = this.traceDetector.compressOldTraces(ageHours);\n\n return {\n content: [\n {\n type: 'text',\n text: `Compressed ${compressedCount} traces older than ${ageHours} hours.`,\n },\n ],\n };\n }\n\n private async handleSmartContext(args: any) {\n const { query, tokenBudget = 4000, forceRefresh = false } = args;\n\n try {\n const result = await this.contextRetrieval.retrieveContext(query, {\n tokenBudget,\n forceRefresh,\n });\n\n // Log the retrieval\n const currentFrameId = this.frameManager.getCurrentFrameId();\n if (currentFrameId) {\n this.frameManager.addEvent('observation', {\n action: 'smart_context',\n query,\n framesRetrieved: result.frames.length,\n tokenUsage: result.tokenUsage,\n confidence: result.analysis.confidenceScore,\n });\n }\n\n // Build response with metadata\n let response = result.context;\n response += `\\n\\n---\\n\uD83D\uDCCA **Retrieval Stats**\\n`;\n response += `- Frames included: ${result.frames.length}\\n`;\n response += `- Tokens used: ${result.tokenUsage.used}/${result.tokenUsage.budget}\\n`;\n response += `- Confidence: ${(result.analysis.confidenceScore * 100).toFixed(0)}%\\n`;\n response += `- Time: ${result.metadata.retrievalTimeMs}ms`;\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Context retrieval failed', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Context retrieval failed: ${message}`,\n },\n ],\n };\n }\n }\n\n private async handleGetSummary(args: any) {\n const { forceRefresh = false } = args;\n\n try {\n const summary = this.contextRetrieval.getSummary(forceRefresh);\n\n // Format the summary for display\n let response = '\uD83D\uDCCB **Compressed Memory Summary**\\n\\n';\n\n // Recent session\n response += '## Recent Session\\n';\n response += `- Frames: ${summary.recentSession.frames.length}\\n`;\n response += `- Time range: ${new Date(summary.recentSession.timeRange.start).toLocaleString()} - ${new Date(summary.recentSession.timeRange.end).toLocaleString()}\\n`;\n\n if (summary.recentSession.dominantOperations.length > 0) {\n response += `- Dominant ops: ${summary.recentSession.dominantOperations\n .slice(0, 5)\n .map((o) => `${o.operation}(${o.count})`)\n .join(', ')}\\n`;\n }\n\n if (summary.recentSession.filesTouched.length > 0) {\n response += `- Files touched: ${summary.recentSession.filesTouched\n .slice(0, 5)\n .map((f) => f.path)\n .join(', ')}\\n`;\n }\n\n if (summary.recentSession.errorsEncountered.length > 0) {\n response += `- Errors: ${summary.recentSession.errorsEncountered.length}\\n`;\n }\n\n // Historical patterns\n response += '\\n## Historical Patterns\\n';\n response += `- Topic counts: ${Object.keys(summary.historicalPatterns.topicFrameCounts).length} topics\\n`;\n\n if (summary.historicalPatterns.keyDecisions.length > 0) {\n response += `\\n### Key Decisions (${summary.historicalPatterns.keyDecisions.length})\\n`;\n summary.historicalPatterns.keyDecisions.slice(0, 5).forEach((d) => {\n response += `- ${d.text.substring(0, 80)}${d.text.length > 80 ? '...' : ''}\\n`;\n });\n }\n\n if (summary.historicalPatterns.recurringIssues.length > 0) {\n response += `\\n### Recurring Issues (${summary.historicalPatterns.recurringIssues.length})\\n`;\n summary.historicalPatterns.recurringIssues.slice(0, 3).forEach((i) => {\n response += `- ${i.issueType} (${i.occurrenceCount} times)\\n`;\n });\n }\n\n // Queryable indices\n response += '\\n## Available Indices\\n';\n response += `- By time: ${Object.keys(summary.queryableIndices.byTimeframe).length} periods\\n`;\n response += `- By file: ${Object.keys(summary.queryableIndices.byFile).length} files\\n`;\n response += `- By topic: ${Object.keys(summary.queryableIndices.byTopic).length} topics\\n`;\n response += `- By error: ${Object.keys(summary.queryableIndices.byErrorType).length} error types\\n`;\n\n // Stats\n response += `\\n## Stats\\n`;\n response += `- Total frames: ${summary.stats.totalFrames}\\n`;\n response += `- Total anchors: ${summary.stats.totalAnchors}\\n`;\n response += `- Total events: ${summary.stats.totalEvents}\\n`;\n response += `- Generated: ${new Date(summary.generatedAt).toLocaleString()}`;\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Failed to get summary', { error: message });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Failed to get summary: ${message}`,\n },\n ],\n };\n }\n }\n\n // ============================================\n // Discovery Tools Handlers\n // ============================================\n\n private async handleSmDiscover(args: any) {\n return this.discoveryHandlers.handleDiscover(args);\n }\n\n private async handleSmRelatedFiles(args: any) {\n return this.discoveryHandlers.handleRelatedFiles(args);\n }\n\n private async handleSmSessionSummary(args: any) {\n return this.discoveryHandlers.handleSessionSummary(args);\n }\n\n private async handleSmSearch(args: any) {\n try {\n const { query, scope = 'all', limit = 20 } = args;\n\n if (!query) {\n throw new Error('Query is required');\n }\n\n const results: any[] = [];\n\n // Search frames\n if (scope === 'all' || scope === 'frames') {\n const frames = this.db\n .prepare(\n `\n SELECT frame_id, name, type, created_at, inputs, outputs\n FROM frames\n WHERE project_id = ? AND (name LIKE ? OR inputs LIKE ? OR outputs LIKE ?)\n ORDER BY created_at DESC\n LIMIT ?\n `\n )\n .all(\n this.projectId,\n `%${query}%`,\n `%${query}%`,\n `%${query}%`,\n limit\n ) as any[];\n\n frames.forEach((f) => {\n results.push({\n type: 'frame',\n id: f.frame_id,\n name: f.name,\n frameType: f.type,\n created: new Date(f.created_at * 1000).toISOString(),\n });\n });\n }\n\n // Search events\n if (scope === 'all' || scope === 'events') {\n const events = this.db\n .prepare(\n `\n SELECT e.event_id, e.type, e.data, e.timestamp, f.name as frame_name\n FROM events e\n JOIN frames f ON e.frame_id = f.frame_id\n WHERE f.project_id = ? AND e.data LIKE ?\n ORDER BY e.timestamp DESC\n LIMIT ?\n `\n )\n .all(this.projectId, `%${query}%`, limit) as any[];\n\n events.forEach((e) => {\n results.push({\n type: 'event',\n id: e.event_id,\n eventType: e.type,\n frame: e.frame_name,\n timestamp: new Date(e.timestamp * 1000).toISOString(),\n });\n });\n }\n\n // Search decisions/anchors\n if (scope === 'all' || scope === 'decisions') {\n const anchors = this.db\n .prepare(\n `\n SELECT a.anchor_id, a.type, a.text, a.priority, a.created_at, f.name as frame_name\n FROM anchors a\n JOIN frames f ON a.frame_id = f.frame_id\n WHERE f.project_id = ? AND a.text LIKE ?\n ORDER BY a.created_at DESC\n LIMIT ?\n `\n )\n .all(this.projectId, `%${query}%`, limit) as any[];\n\n anchors.forEach((a) => {\n results.push({\n type: 'decision',\n id: a.anchor_id,\n decisionType: a.type,\n text: a.text,\n priority: a.priority,\n frame: a.frame_name,\n });\n });\n }\n\n // Search tasks\n if (scope === 'all' || scope === 'tasks') {\n try {\n const tasks = this.db\n .prepare(\n `\n SELECT id, title, description, status, priority\n FROM task_cache\n WHERE title LIKE ? OR description LIKE ?\n ORDER BY created_at DESC\n LIMIT ?\n `\n )\n .all(`%${query}%`, `%${query}%`, limit) as any[];\n\n tasks.forEach((t) => {\n results.push({\n type: 'task',\n id: t.id,\n title: t.title,\n status: t.status,\n priority: t.priority,\n });\n });\n } catch {\n // Task table may not exist\n }\n }\n\n // Format results\n let response = `# Search Results for \"${query}\"\\n\\n`;\n response += `Found ${results.length} results\\n\\n`;\n\n const grouped = results.reduce(\n (acc, r) => {\n if (!acc[r.type]) acc[r.type] = [];\n acc[r.type].push(r);\n return acc;\n },\n {} as Record<string, any[]>\n );\n\n for (const [type, items] of Object.entries(grouped)) {\n response += `## ${type.charAt(0).toUpperCase() + type.slice(1)}s (${items.length})\\n`;\n for (const item of items.slice(0, 10)) {\n if (type === 'frame') {\n response += `- [${item.frameType}] ${item.name}\\n`;\n } else if (type === 'decision') {\n response += `- [${item.decisionType}] ${item.text.slice(0, 60)}...\\n`;\n } else if (type === 'task') {\n response += `- [${item.status}] ${item.title}\\n`;\n } else {\n response += `- ${JSON.stringify(item).slice(0, 80)}...\\n`;\n }\n }\n response += '\\n';\n }\n\n return {\n content: [\n {\n type: 'text',\n text: response,\n },\n ],\n metadata: { results, query, scope },\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error('Search failed', { error: message, query, scope });\n return {\n content: [\n {\n type: 'text',\n text: `\u274C Search failed: ${message}`,\n },\n ],\n };\n }\n }\n\n async start() {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n console.error('StackMemory MCP Server started');\n }\n}\n\n// Export the class\nexport default LocalStackMemoryMCP;\n\n// Export function to run the server\nexport async function runMCPServer(): Promise<void> {\n const server = new LocalStackMemoryMCP();\n await server.start();\n}\n\n// Start the server\nif (import.meta.url === `file://${process.argv[1]}`) {\n const server = new LocalStackMemoryMCP();\n server.start().catch(console.error);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DEFAULT_SYNC_CONFIG", "query", "scope"]
7
+ }
@@ -0,0 +1,125 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ const codeExecutionTools = [
6
+ {
7
+ name: "code.execute",
8
+ description: "Execute Python, JavaScript, or TypeScript code in a sandboxed environment",
9
+ inputSchema: {
10
+ type: "object",
11
+ properties: {
12
+ language: {
13
+ type: "string",
14
+ enum: ["python", "javascript", "typescript"],
15
+ description: "Programming language to execute"
16
+ },
17
+ code: {
18
+ type: "string",
19
+ description: "Code to execute"
20
+ },
21
+ workingDirectory: {
22
+ type: "string",
23
+ description: "Optional working directory for execution"
24
+ },
25
+ timeout: {
26
+ type: "number",
27
+ description: "Execution timeout in milliseconds (default: 30000)"
28
+ },
29
+ force: {
30
+ type: "boolean",
31
+ description: "Force execution even if code validation fails"
32
+ }
33
+ },
34
+ required: ["language", "code"]
35
+ }
36
+ },
37
+ {
38
+ name: "code.validate",
39
+ description: "Validate code for potential security issues",
40
+ inputSchema: {
41
+ type: "object",
42
+ properties: {
43
+ code: {
44
+ type: "string",
45
+ description: "Code to validate"
46
+ }
47
+ },
48
+ required: ["code"]
49
+ }
50
+ },
51
+ {
52
+ name: "code.sandbox_status",
53
+ description: "Get status of the code execution sandbox",
54
+ inputSchema: {
55
+ type: "object",
56
+ properties: {}
57
+ }
58
+ },
59
+ {
60
+ name: "code.clean_sandbox",
61
+ description: "Clean temporary files from the sandbox",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: {}
65
+ }
66
+ }
67
+ ];
68
+ const codeOnlyModeExample = `
69
+ # When in code_only mode, Claude can ONLY execute code
70
+
71
+ ## Example Python execution:
72
+ \`\`\`python
73
+ import numpy as np
74
+ import matplotlib.pyplot as plt
75
+
76
+ # Generate data
77
+ x = np.linspace(0, 10, 100)
78
+ y = np.sin(x)
79
+
80
+ # Create visualization (won't display but will execute)
81
+ plt.plot(x, y)
82
+ plt.title('Sine Wave')
83
+ plt.xlabel('X')
84
+ plt.ylabel('Y')
85
+
86
+ # Calculate statistics
87
+ mean_y = np.mean(y)
88
+ std_y = np.std(y)
89
+ print(f"Mean: {mean_y:.4f}")
90
+ print(f"Std: {std_y:.4f}")
91
+ \`\`\`
92
+
93
+ ## Example JavaScript execution:
94
+ \`\`\`javascript
95
+ // Process data
96
+ const data = Array.from({length: 10}, (_, i) => i ** 2);
97
+
98
+ // Calculate sum
99
+ const sum = data.reduce((a, b) => a + b, 0);
100
+ console.log('Sum of squares:', sum);
101
+
102
+ // Async operation
103
+ async function fetchData() {
104
+ // Simulate API call
105
+ await new Promise(resolve => setTimeout(resolve, 100));
106
+ return { status: 'success', data: [1, 2, 3] };
107
+ }
108
+
109
+ fetchData().then(result => {
110
+ console.log('Async result:', result);
111
+ });
112
+ \`\`\`
113
+
114
+ ## Benefits of code_only mode:
115
+ 1. Safe computational environment
116
+ 2. No file system modifications
117
+ 3. No network access
118
+ 4. Pure problem-solving focus
119
+ 5. Ideal for algorithms, data analysis, and mathematical computations
120
+ `;
121
+ export {
122
+ codeExecutionTools,
123
+ codeOnlyModeExample
124
+ };
125
+ //# sourceMappingURL=tool-definitions-code.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/integrations/mcp/tool-definitions-code.ts"],
4
+ "sourcesContent": ["/**\n * Code Execution Tool Definitions for MCP Server\n */\n\nexport const codeExecutionTools = [\n {\n name: 'code.execute',\n description: 'Execute Python, JavaScript, or TypeScript code in a sandboxed environment',\n inputSchema: {\n type: 'object',\n properties: {\n language: {\n type: 'string',\n enum: ['python', 'javascript', 'typescript'],\n description: 'Programming language to execute',\n },\n code: {\n type: 'string',\n description: 'Code to execute',\n },\n workingDirectory: {\n type: 'string',\n description: 'Optional working directory for execution',\n },\n timeout: {\n type: 'number',\n description: 'Execution timeout in milliseconds (default: 30000)',\n },\n force: {\n type: 'boolean',\n description: 'Force execution even if code validation fails',\n },\n },\n required: ['language', 'code'],\n },\n },\n {\n name: 'code.validate',\n description: 'Validate code for potential security issues',\n inputSchema: {\n type: 'object',\n properties: {\n code: {\n type: 'string',\n description: 'Code to validate',\n },\n },\n required: ['code'],\n },\n },\n {\n name: 'code.sandbox_status',\n description: 'Get status of the code execution sandbox',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'code.clean_sandbox',\n description: 'Clean temporary files from the sandbox',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n];\n\n/**\n * Example of using code execution in restricted mode\n */\nexport const codeOnlyModeExample = `\n# When in code_only mode, Claude can ONLY execute code\n\n## Example Python execution:\n\\`\\`\\`python\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Generate data\nx = np.linspace(0, 10, 100)\ny = np.sin(x)\n\n# Create visualization (won't display but will execute)\nplt.plot(x, y)\nplt.title('Sine Wave')\nplt.xlabel('X')\nplt.ylabel('Y')\n\n# Calculate statistics\nmean_y = np.mean(y)\nstd_y = np.std(y)\nprint(f\"Mean: {mean_y:.4f}\")\nprint(f\"Std: {std_y:.4f}\")\n\\`\\`\\`\n\n## Example JavaScript execution:\n\\`\\`\\`javascript\n// Process data\nconst data = Array.from({length: 10}, (_, i) => i ** 2);\n\n// Calculate sum\nconst sum = data.reduce((a, b) => a + b, 0);\nconsole.log('Sum of squares:', sum);\n\n// Async operation\nasync function fetchData() {\n // Simulate API call\n await new Promise(resolve => setTimeout(resolve, 100));\n return { status: 'success', data: [1, 2, 3] };\n}\n\nfetchData().then(result => {\n console.log('Async result:', result);\n});\n\\`\\`\\`\n\n## Benefits of code_only mode:\n1. Safe computational environment\n2. No file system modifications\n3. No network access\n4. Pure problem-solving focus\n5. Ideal for algorithms, data analysis, and mathematical computations\n`;"],
5
+ "mappings": ";;;;AAIO,MAAM,qBAAqB;AAAA,EAChC;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU;AAAA,UACR,MAAM;AAAA,UACN,MAAM,CAAC,UAAU,cAAc,YAAY;AAAA,UAC3C,aAAa;AAAA,QACf;AAAA,QACA,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,kBAAkB;AAAA,UAChB,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,SAAS;AAAA,UACP,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC,YAAY,MAAM;AAAA,IAC/B;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,CAAC;AAAA,IACf;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,CAAC;AAAA,IACf;AAAA,EACF;AACF;AAKO,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }