@stackmemoryai/stackmemory 0.5.58 → 0.5.61

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 (932) hide show
  1. package/README.md +105 -1
  2. package/dist/scripts/benchmark-performance.js +48 -0
  3. package/dist/scripts/benchmark-performance.js.map +7 -0
  4. package/dist/scripts/check-redis.js +42 -0
  5. package/dist/scripts/check-redis.js.map +7 -0
  6. package/dist/scripts/initialize.js +116 -0
  7. package/dist/scripts/initialize.js.map +7 -0
  8. package/dist/scripts/list-linear-tasks.js +124 -0
  9. package/dist/scripts/list-linear-tasks.js.map +7 -0
  10. package/dist/scripts/measure-handoff-impact.js +340 -0
  11. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  12. package/dist/scripts/query-chromadb.js +160 -0
  13. package/dist/scripts/query-chromadb.js.map +7 -0
  14. package/dist/scripts/show-linear-summary.js +119 -0
  15. package/dist/scripts/show-linear-summary.js.map +7 -0
  16. package/dist/scripts/simple-swarm-demo.js +90 -0
  17. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  18. package/dist/scripts/status.js +155 -0
  19. package/dist/scripts/status.js.map +7 -0
  20. package/dist/scripts/test-chromadb-sync.js +192 -0
  21. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  22. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  23. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  24. package/dist/scripts/test-ralph-iterations.js +121 -0
  25. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  26. package/dist/scripts/test-redis-storage.js +389 -0
  27. package/dist/scripts/test-redis-storage.js.map +7 -0
  28. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  29. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  30. package/dist/scripts/test-swarm-fixes.js +125 -0
  31. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  32. package/dist/scripts/test-swarm-tui.js +23 -0
  33. package/dist/scripts/test-swarm-tui.js.map +7 -0
  34. package/dist/scripts/test-tui-shortcuts.js +52 -0
  35. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  36. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  37. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  38. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  39. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  40. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  41. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  42. package/dist/src/cli/auto-detect.js.map +7 -0
  43. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  44. package/dist/src/cli/claude-sm.js +1236 -0
  45. package/dist/src/cli/claude-sm.js.map +7 -0
  46. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  47. package/dist/src/cli/codex-sm.js.map +7 -0
  48. package/dist/src/cli/commands/api.js.map +7 -0
  49. package/dist/src/cli/commands/auto-background.js.map +7 -0
  50. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  51. package/dist/src/cli/commands/clear.js.map +7 -0
  52. package/dist/src/cli/commands/config.js.map +7 -0
  53. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  54. package/dist/src/cli/commands/context.js.map +7 -0
  55. package/dist/src/cli/commands/daemon.js.map +7 -0
  56. package/dist/src/cli/commands/dashboard.js.map +7 -0
  57. package/dist/src/cli/commands/db.js.map +7 -0
  58. package/dist/src/cli/commands/decision.js.map +7 -0
  59. package/dist/src/cli/commands/discovery.js.map +7 -0
  60. package/dist/src/cli/commands/handoff.js.map +7 -0
  61. package/dist/src/cli/commands/hooks.js.map +7 -0
  62. package/dist/src/cli/commands/linear.js.map +7 -0
  63. package/dist/src/cli/commands/log.js.map +7 -0
  64. package/dist/src/cli/commands/login.js.map +7 -0
  65. package/dist/src/cli/commands/migrate.js.map +7 -0
  66. package/dist/src/cli/commands/model.js.map +7 -0
  67. package/dist/src/cli/commands/onboard.js.map +7 -0
  68. package/dist/src/cli/commands/projects.js.map +7 -0
  69. package/dist/src/cli/commands/ralph.js.map +7 -0
  70. package/dist/src/cli/commands/retrieval.js.map +7 -0
  71. package/dist/src/cli/commands/search.js +173 -0
  72. package/dist/src/cli/commands/search.js.map +7 -0
  73. package/dist/src/cli/commands/service.js.map +7 -0
  74. package/dist/src/cli/commands/session.js.map +7 -0
  75. package/dist/src/cli/commands/settings.js.map +7 -0
  76. package/dist/src/cli/commands/setup.js.map +7 -0
  77. package/dist/src/cli/commands/shell.js.map +7 -0
  78. package/dist/src/cli/commands/signup.js.map +7 -0
  79. package/dist/src/cli/commands/skills.js.map +7 -0
  80. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  81. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  82. package/dist/src/cli/commands/sweep.js.map +7 -0
  83. package/dist/src/cli/commands/tasks.js.map +7 -0
  84. package/dist/src/cli/commands/worktree.js.map +7 -0
  85. package/dist/src/cli/index.js +609 -0
  86. package/dist/src/cli/index.js.map +7 -0
  87. package/dist/src/cli/opencode-sm.js.map +7 -0
  88. package/dist/src/cli/utils/viewer.js.map +7 -0
  89. package/dist/src/core/config/config-manager.js.map +7 -0
  90. package/dist/src/core/config/feature-flags.js.map +7 -0
  91. package/dist/src/core/config/storage-config.js.map +7 -0
  92. package/dist/src/core/config/types.js.map +7 -0
  93. package/dist/src/core/context/auto-context.js.map +7 -0
  94. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  95. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  96. package/dist/src/core/context/frame-database.js.map +7 -0
  97. package/dist/src/core/context/frame-digest.js.map +7 -0
  98. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  99. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  100. package/dist/src/core/context/frame-recovery.js.map +7 -0
  101. package/dist/src/core/context/frame-stack.js.map +7 -0
  102. package/dist/src/core/context/index.js.map +7 -0
  103. package/dist/src/core/context/permission-manager.js.map +7 -0
  104. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  105. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  106. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  107. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  108. package/dist/src/core/context/validation.js.map +7 -0
  109. package/dist/src/core/database/batch-operations.js.map +7 -0
  110. package/dist/src/core/database/connection-pool.js.map +7 -0
  111. package/dist/src/core/database/database-adapter.js.map +7 -0
  112. package/dist/src/core/database/migration-manager.js.map +7 -0
  113. package/dist/src/core/database/query-cache.js.map +7 -0
  114. package/dist/src/core/database/query-router.js.map +7 -0
  115. package/dist/src/core/database/sqlite-adapter.js +738 -0
  116. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  117. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  118. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  119. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  120. package/dist/src/core/digest/index.js.map +7 -0
  121. package/dist/src/core/digest/types.js.map +7 -0
  122. package/dist/src/core/errors/error-utils.js +208 -0
  123. package/dist/src/core/errors/error-utils.js.map +7 -0
  124. package/dist/src/core/errors/index.js +521 -0
  125. package/dist/src/core/errors/index.js.map +7 -0
  126. package/dist/src/core/errors/recovery.js.map +7 -0
  127. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  128. package/dist/src/core/extensions/custom-tools.js +567 -0
  129. package/dist/src/core/extensions/custom-tools.js.map +7 -0
  130. package/dist/src/core/extensions/index.js +55 -0
  131. package/dist/src/core/extensions/index.js.map +7 -0
  132. package/dist/src/core/extensions/loader.js +709 -0
  133. package/dist/src/core/extensions/loader.js.map +7 -0
  134. package/dist/src/core/extensions/plugin-system.js +506 -0
  135. package/dist/src/core/extensions/plugin-system.js.map +7 -0
  136. package/dist/src/core/extensions/provider-adapter.js +617 -0
  137. package/dist/src/core/extensions/provider-adapter.js.map +7 -0
  138. package/dist/src/core/extensions/sandbox-runtime.js +664 -0
  139. package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
  140. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  141. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  142. package/dist/src/core/merge/index.js.map +7 -0
  143. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  144. package/dist/src/core/merge/stack-diff.js.map +7 -0
  145. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  146. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  147. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  148. package/dist/src/core/models/model-router.js.map +7 -0
  149. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  150. package/dist/src/core/monitoring/logger.js +202 -0
  151. package/dist/src/core/monitoring/logger.js.map +7 -0
  152. package/dist/src/core/monitoring/metrics.js.map +7 -0
  153. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  154. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  155. package/dist/src/core/performance/context-cache.js.map +7 -0
  156. package/dist/src/core/performance/index.js.map +7 -0
  157. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  158. package/dist/src/core/performance/monitor.js.map +7 -0
  159. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  160. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  161. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  162. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  163. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  164. package/dist/src/core/projects/project-isolation.js.map +7 -0
  165. package/dist/src/core/projects/project-manager.js.map +7 -0
  166. package/dist/src/core/query/query-parser.js.map +7 -0
  167. package/dist/src/core/query/query-templates.js.map +7 -0
  168. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  169. package/dist/src/core/retrieval/index.js.map +7 -0
  170. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  171. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  172. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  173. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  174. package/dist/src/core/retrieval/types.js.map +7 -0
  175. package/dist/src/core/security/index.js +35 -0
  176. package/dist/src/core/security/index.js.map +7 -0
  177. package/dist/src/core/security/input-sanitizer.js +321 -0
  178. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  179. package/dist/src/core/session/clear-survival.js.map +7 -0
  180. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  181. package/dist/src/core/session/handoff-generator.js.map +7 -0
  182. package/dist/src/core/session/index.js.map +7 -0
  183. package/dist/src/core/session/session-manager.js.map +7 -0
  184. package/dist/src/core/skills/index.js.map +7 -0
  185. package/dist/src/core/skills/skill-storage.js.map +7 -0
  186. package/dist/src/core/skills/types.js.map +7 -0
  187. package/dist/src/core/storage/chromadb-adapter.js +380 -0
  188. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  189. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  190. package/dist/src/core/storage/remote-storage.js.map +7 -0
  191. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  192. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  193. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  194. package/dist/src/core/trace/debug-trace.js.map +7 -0
  195. package/dist/src/core/trace/index.js.map +7 -0
  196. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  197. package/dist/src/core/trace/trace-detector.js.map +7 -0
  198. package/dist/src/core/trace/trace-store.js.map +7 -0
  199. package/dist/src/core/trace/types.js.map +7 -0
  200. package/dist/src/core/utils/async-mutex.js.map +7 -0
  201. package/dist/src/core/utils/compression.js.map +7 -0
  202. package/dist/src/core/utils/update-checker.js.map +7 -0
  203. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  204. package/dist/src/daemon/daemon-config.js.map +7 -0
  205. package/dist/src/daemon/services/context-service.js.map +7 -0
  206. package/dist/src/daemon/services/linear-service.js.map +7 -0
  207. package/dist/src/daemon/session-daemon.js.map +7 -0
  208. package/dist/src/daemon/unified-daemon.js.map +7 -0
  209. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  210. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  211. package/dist/src/features/analytics/index.js.map +7 -0
  212. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  213. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  214. package/dist/src/features/sweep/index.js.map +7 -0
  215. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  216. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  217. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  218. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  219. package/dist/src/features/sweep/status-bar.js.map +7 -0
  220. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  221. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  222. package/dist/src/features/sweep/types.js.map +7 -0
  223. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  224. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  225. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  226. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  227. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  228. package/dist/src/features/web/server/index.js.map +7 -0
  229. package/dist/src/hooks/auto-background.js.map +7 -0
  230. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  231. package/dist/src/hooks/config.js.map +7 -0
  232. package/dist/src/hooks/daemon.js.map +7 -0
  233. package/dist/src/hooks/events.js.map +7 -0
  234. package/dist/src/hooks/index.js.map +7 -0
  235. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  236. package/dist/src/hooks/schemas.js.map +7 -0
  237. package/dist/src/hooks/secure-fs.js.map +7 -0
  238. package/dist/src/hooks/security-logger.js.map +7 -0
  239. package/dist/src/hooks/session-summary.js.map +7 -0
  240. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  241. package/dist/src/hooks/sms-notify.js.map +7 -0
  242. package/dist/src/hooks/sms-watcher.js.map +7 -0
  243. package/dist/src/hooks/sms-webhook.js.map +7 -0
  244. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  245. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  246. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  247. package/dist/src/index.js.map +7 -0
  248. package/dist/src/integrations/anthropic/client.js.map +7 -0
  249. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  250. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  251. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  252. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  253. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  254. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  255. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  256. package/dist/src/integrations/linear/auth.js.map +7 -0
  257. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  258. package/dist/src/integrations/linear/client.js +634 -0
  259. package/dist/src/integrations/linear/client.js.map +7 -0
  260. package/dist/src/integrations/linear/config.js.map +7 -0
  261. package/dist/src/integrations/linear/migration.js.map +7 -0
  262. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  263. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  264. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  265. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  266. package/dist/src/integrations/linear/sync.js.map +7 -0
  267. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  268. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  269. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  270. package/dist/src/integrations/linear/webhook.js.map +7 -0
  271. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  272. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  273. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  274. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  275. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  276. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  277. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  278. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  279. package/dist/src/integrations/mcp/index.js.map +7 -0
  280. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  281. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  282. package/dist/src/integrations/mcp/remote-server.js +682 -0
  283. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  284. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  285. package/dist/src/integrations/mcp/server.js +1975 -0
  286. package/dist/src/integrations/mcp/server.js.map +7 -0
  287. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  288. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  289. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  290. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  291. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  292. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  293. package/dist/src/integrations/ralph/index.js.map +7 -0
  294. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  295. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  296. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  297. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  298. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  299. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  300. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  301. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  302. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  303. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  304. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  305. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  306. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  307. package/dist/src/integrations/ralph/types.js +5 -0
  308. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  309. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  310. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  311. package/dist/src/models/user.model.js.map +7 -0
  312. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  313. package/dist/src/services/config-service.js.map +7 -0
  314. package/dist/src/services/context-service.js.map +7 -0
  315. package/dist/src/skills/api-discovery.js.map +7 -0
  316. package/dist/src/skills/api-skill.js.map +7 -0
  317. package/dist/src/skills/claude-skills.js.map +7 -0
  318. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  319. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  320. package/dist/src/skills/repo-ingestion-skill.js +632 -0
  321. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  322. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  323. package/dist/src/types/task.js.map +7 -0
  324. package/dist/src/utils/env.js.map +7 -0
  325. package/dist/src/utils/formatting.js.map +7 -0
  326. package/dist/src/utils/process-cleanup.js.map +7 -0
  327. package/package.json +13 -9
  328. package/scripts/background-sync-manager.js +145 -83
  329. package/scripts/claude-sm-autostart.js +17 -12
  330. package/scripts/gepa/README.md +275 -0
  331. package/scripts/gepa/config.json +53 -0
  332. package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
  333. package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
  334. package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
  335. package/scripts/gepa/generations/gen-000/baseline.md +124 -0
  336. package/scripts/gepa/hooks/auto-optimize.js +494 -0
  337. package/scripts/gepa/hooks/eval-tracker.js +203 -0
  338. package/scripts/gepa/hooks/reflect.js +311 -0
  339. package/scripts/gepa/optimize.js +611 -0
  340. package/scripts/gepa/state.json +14 -0
  341. package/scripts/initialize.ts +16 -7
  342. package/scripts/install.sh +14 -62
  343. package/scripts/status.ts +111 -46
  344. package/scripts/test-pre-publish-quick.sh +1 -1
  345. package/dist/agents/core/agent-task-manager.js.map +0 -7
  346. package/dist/agents/testing-agent.js +0 -614
  347. package/dist/agents/testing-agent.js.map +0 -7
  348. package/dist/agents/verifiers/base-verifier.js.map +0 -7
  349. package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
  350. package/dist/agents/verifiers/llm-judge.js.map +0 -7
  351. package/dist/cli/auto-detect.js.map +0 -7
  352. package/dist/cli/browser-test.js +0 -33
  353. package/dist/cli/browser-test.js.map +0 -7
  354. package/dist/cli/claude-sm-danger.js.map +0 -7
  355. package/dist/cli/claude-sm.js +0 -1156
  356. package/dist/cli/claude-sm.js.map +0 -7
  357. package/dist/cli/codex-sm-danger.js.map +0 -7
  358. package/dist/cli/codex-sm.js.map +0 -7
  359. package/dist/cli/commands/api.js.map +0 -7
  360. package/dist/cli/commands/auto-background.js.map +0 -7
  361. package/dist/cli/commands/cleanup-processes.js.map +0 -7
  362. package/dist/cli/commands/clear.js.map +0 -7
  363. package/dist/cli/commands/config.js.map +0 -7
  364. package/dist/cli/commands/context-rehydrate.js.map +0 -7
  365. package/dist/cli/commands/context.js.map +0 -7
  366. package/dist/cli/commands/daemon.js.map +0 -7
  367. package/dist/cli/commands/dashboard.js.map +0 -7
  368. package/dist/cli/commands/db.js.map +0 -7
  369. package/dist/cli/commands/decision.js.map +0 -7
  370. package/dist/cli/commands/discovery.js.map +0 -7
  371. package/dist/cli/commands/handoff.js.map +0 -7
  372. package/dist/cli/commands/hooks.js.map +0 -7
  373. package/dist/cli/commands/linear-unified.js +0 -353
  374. package/dist/cli/commands/linear-unified.js.map +0 -7
  375. package/dist/cli/commands/linear.js.map +0 -7
  376. package/dist/cli/commands/log.js.map +0 -7
  377. package/dist/cli/commands/login.js.map +0 -7
  378. package/dist/cli/commands/migrate.js.map +0 -7
  379. package/dist/cli/commands/model.js.map +0 -7
  380. package/dist/cli/commands/monitor.js +0 -313
  381. package/dist/cli/commands/monitor.js.map +0 -7
  382. package/dist/cli/commands/onboard.js.map +0 -7
  383. package/dist/cli/commands/projects.js.map +0 -7
  384. package/dist/cli/commands/quality.js +0 -413
  385. package/dist/cli/commands/quality.js.map +0 -7
  386. package/dist/cli/commands/ralph.js.map +0 -7
  387. package/dist/cli/commands/retrieval.js.map +0 -7
  388. package/dist/cli/commands/search.js +0 -156
  389. package/dist/cli/commands/search.js.map +0 -7
  390. package/dist/cli/commands/service.js.map +0 -7
  391. package/dist/cli/commands/session.js.map +0 -7
  392. package/dist/cli/commands/settings.js.map +0 -7
  393. package/dist/cli/commands/setup.js.map +0 -7
  394. package/dist/cli/commands/shell.js.map +0 -7
  395. package/dist/cli/commands/signup.js.map +0 -7
  396. package/dist/cli/commands/skills.js.map +0 -7
  397. package/dist/cli/commands/sms-notify.js.map +0 -7
  398. package/dist/cli/commands/storage-tier.js.map +0 -7
  399. package/dist/cli/commands/storage.js +0 -360
  400. package/dist/cli/commands/storage.js.map +0 -7
  401. package/dist/cli/commands/sweep.js.map +0 -7
  402. package/dist/cli/commands/tasks.js.map +0 -7
  403. package/dist/cli/commands/test.js +0 -286
  404. package/dist/cli/commands/test.js.map +0 -7
  405. package/dist/cli/commands/workflow.js +0 -142
  406. package/dist/cli/commands/workflow.js.map +0 -7
  407. package/dist/cli/commands/worktree.js.map +0 -7
  408. package/dist/cli/index.js +0 -594
  409. package/dist/cli/index.js.map +0 -7
  410. package/dist/cli/opencode-sm.js.map +0 -7
  411. package/dist/cli/utils/viewer.js.map +0 -7
  412. package/dist/core/analytics/team-analytics.js +0 -378
  413. package/dist/core/analytics/team-analytics.js.map +0 -7
  414. package/dist/core/config/config-manager.js.map +0 -7
  415. package/dist/core/config/feature-flags.js.map +0 -7
  416. package/dist/core/config/storage-config.js.map +0 -7
  417. package/dist/core/config/types.js.map +0 -7
  418. package/dist/core/context/auto-context.js.map +0 -7
  419. package/dist/core/context/dual-stack-manager.js.map +0 -7
  420. package/dist/core/context/enhanced-rehydration.js.map +0 -7
  421. package/dist/core/context/frame-database.js.map +0 -7
  422. package/dist/core/context/frame-digest.js.map +0 -7
  423. package/dist/core/context/frame-handoff-manager.js.map +0 -7
  424. package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
  425. package/dist/core/context/frame-manager.js +0 -1069
  426. package/dist/core/context/frame-manager.js.map +0 -7
  427. package/dist/core/context/frame-recovery.js.map +0 -7
  428. package/dist/core/context/frame-stack.js.map +0 -7
  429. package/dist/core/context/incremental-gc.js +0 -290
  430. package/dist/core/context/incremental-gc.js.map +0 -7
  431. package/dist/core/context/index.js.map +0 -7
  432. package/dist/core/context/model-aware-compaction.js +0 -623
  433. package/dist/core/context/model-aware-compaction.js.map +0 -7
  434. package/dist/core/context/permission-manager.js.map +0 -7
  435. package/dist/core/context/recursive-context-manager.js.map +0 -7
  436. package/dist/core/context/refactored-frame-manager.js.map +0 -7
  437. package/dist/core/context/shared-context-layer.js.map +0 -7
  438. package/dist/core/context/stack-merge-resolver.js.map +0 -7
  439. package/dist/core/context/validation.js.map +0 -7
  440. package/dist/core/database/batch-operations.js.map +0 -7
  441. package/dist/core/database/connection-pool.js.map +0 -7
  442. package/dist/core/database/database-adapter.js.map +0 -7
  443. package/dist/core/database/migration-manager.js.map +0 -7
  444. package/dist/core/database/paradedb-adapter.js +0 -990
  445. package/dist/core/database/paradedb-adapter.js.map +0 -7
  446. package/dist/core/database/query-cache.js.map +0 -7
  447. package/dist/core/database/query-router.js.map +0 -7
  448. package/dist/core/database/sqlite-adapter.js +0 -728
  449. package/dist/core/database/sqlite-adapter.js.map +0 -7
  450. package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
  451. package/dist/core/digest/frame-digest-integration.js.map +0 -7
  452. package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
  453. package/dist/core/digest/index.js.map +0 -7
  454. package/dist/core/digest/types.js.map +0 -7
  455. package/dist/core/errors/index.js +0 -512
  456. package/dist/core/errors/index.js.map +0 -7
  457. package/dist/core/errors/recovery.js.map +0 -7
  458. package/dist/core/execution/parallel-executor.js.map +0 -7
  459. package/dist/core/frame/workflow-templates.js.map +0 -7
  460. package/dist/core/merge/conflict-detector.js.map +0 -7
  461. package/dist/core/merge/index.js.map +0 -7
  462. package/dist/core/merge/resolution-engine.js.map +0 -7
  463. package/dist/core/merge/stack-diff.js.map +0 -7
  464. package/dist/core/models/fallback-monitor.js.map +0 -7
  465. package/dist/core/models/model-router.js.map +0 -7
  466. package/dist/core/monitoring/error-handler.js.map +0 -7
  467. package/dist/core/monitoring/logger.js +0 -150
  468. package/dist/core/monitoring/logger.js.map +0 -7
  469. package/dist/core/monitoring/metrics.js.map +0 -7
  470. package/dist/core/monitoring/progress-tracker.js.map +0 -7
  471. package/dist/core/monitoring/session-monitor.js.map +0 -7
  472. package/dist/core/performance/context-cache.js.map +0 -7
  473. package/dist/core/performance/index.js.map +0 -7
  474. package/dist/core/performance/lazy-context-loader.js.map +0 -7
  475. package/dist/core/performance/monitor.js.map +0 -7
  476. package/dist/core/performance/optimized-frame-context.js.map +0 -7
  477. package/dist/core/performance/performance-benchmark.js.map +0 -7
  478. package/dist/core/performance/performance-profiler.js.map +0 -7
  479. package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
  480. package/dist/core/persistence/postgres-adapter.js.map +0 -7
  481. package/dist/core/projects/project-isolation.js.map +0 -7
  482. package/dist/core/projects/project-manager.js.map +0 -7
  483. package/dist/core/query/query-parser.js.map +0 -7
  484. package/dist/core/query/query-templates.js.map +0 -7
  485. package/dist/core/retrieval/context-retriever.js.map +0 -7
  486. package/dist/core/retrieval/graph-retrieval.js +0 -662
  487. package/dist/core/retrieval/graph-retrieval.js.map +0 -7
  488. package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
  489. package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
  490. package/dist/core/retrieval/index.js.map +0 -7
  491. package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
  492. package/dist/core/retrieval/llm-provider.js.map +0 -7
  493. package/dist/core/retrieval/retrieval-audit.js.map +0 -7
  494. package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
  495. package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
  496. package/dist/core/retrieval/summary-generator.js.map +0 -7
  497. package/dist/core/retrieval/types.js.map +0 -7
  498. package/dist/core/session/clear-survival.js.map +0 -7
  499. package/dist/core/session/enhanced-handoff.js.map +0 -7
  500. package/dist/core/session/handoff-generator.js.map +0 -7
  501. package/dist/core/session/index.js.map +0 -7
  502. package/dist/core/session/session-manager.js.map +0 -7
  503. package/dist/core/skills/index.js.map +0 -7
  504. package/dist/core/skills/skill-storage.js.map +0 -7
  505. package/dist/core/skills/types.js.map +0 -7
  506. package/dist/core/storage/chromadb-adapter.js +0 -354
  507. package/dist/core/storage/chromadb-adapter.js.map +0 -7
  508. package/dist/core/storage/infinite-storage.js.map +0 -7
  509. package/dist/core/storage/railway-optimized-storage.js +0 -591
  510. package/dist/core/storage/railway-optimized-storage.js.map +0 -7
  511. package/dist/core/storage/remote-storage.js.map +0 -7
  512. package/dist/core/storage/two-tier-storage.js.map +0 -7
  513. package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
  514. package/dist/core/trace/db-trace-wrapper.js.map +0 -7
  515. package/dist/core/trace/debug-trace.js.map +0 -7
  516. package/dist/core/trace/index.js.map +0 -7
  517. package/dist/core/trace/linear-api-wrapper.js.map +0 -7
  518. package/dist/core/trace/trace-demo.js +0 -154
  519. package/dist/core/trace/trace-demo.js.map +0 -7
  520. package/dist/core/trace/trace-detector.demo.js +0 -142
  521. package/dist/core/trace/trace-detector.demo.js.map +0 -7
  522. package/dist/core/trace/trace-detector.js.map +0 -7
  523. package/dist/core/trace/trace-store.js.map +0 -7
  524. package/dist/core/trace/types.js.map +0 -7
  525. package/dist/core/utils/async-mutex.js.map +0 -7
  526. package/dist/core/utils/compression.js.map +0 -7
  527. package/dist/core/utils/update-checker.js.map +0 -7
  528. package/dist/core/worktree/worktree-manager.js.map +0 -7
  529. package/dist/daemon/daemon-config.js.map +0 -7
  530. package/dist/daemon/services/context-service.js.map +0 -7
  531. package/dist/daemon/services/linear-service.js.map +0 -7
  532. package/dist/daemon/session-daemon.js.map +0 -7
  533. package/dist/daemon/unified-daemon.js.map +0 -7
  534. package/dist/features/analytics/api/analytics-api.js.map +0 -7
  535. package/dist/features/analytics/core/analytics-service.js.map +0 -7
  536. package/dist/features/analytics/index.js.map +0 -7
  537. package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
  538. package/dist/features/browser/browser-mcp.js.map +0 -7
  539. package/dist/features/sweep/index.js.map +0 -7
  540. package/dist/features/sweep/prediction-client.js.map +0 -7
  541. package/dist/features/sweep/prompt-builder.js.map +0 -7
  542. package/dist/features/sweep/pty-wrapper.js.map +0 -7
  543. package/dist/features/sweep/state-watcher.js.map +0 -7
  544. package/dist/features/sweep/status-bar.js.map +0 -7
  545. package/dist/features/sweep/sweep-server-manager.js.map +0 -7
  546. package/dist/features/sweep/tab-interceptor.js.map +0 -7
  547. package/dist/features/sweep/types.js.map +0 -7
  548. package/dist/features/tasks/linear-task-manager.js.map +0 -7
  549. package/dist/features/tasks/task-aware-context.js.map +0 -7
  550. package/dist/features/tui/simple-monitor.js.map +0 -7
  551. package/dist/features/tui/swarm-monitor.js.map +0 -7
  552. package/dist/features/web/client/stores/task-store.js.map +0 -7
  553. package/dist/features/web/server/index.js.map +0 -7
  554. package/dist/hooks/auto-background.js.map +0 -7
  555. package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
  556. package/dist/hooks/config.js.map +0 -7
  557. package/dist/hooks/daemon.js.map +0 -7
  558. package/dist/hooks/events.js.map +0 -7
  559. package/dist/hooks/index.js.map +0 -7
  560. package/dist/hooks/linear-task-picker.js.map +0 -7
  561. package/dist/hooks/schemas.js.map +0 -7
  562. package/dist/hooks/secure-fs.js.map +0 -7
  563. package/dist/hooks/security-logger.js.map +0 -7
  564. package/dist/hooks/session-summary.js.map +0 -7
  565. package/dist/hooks/sms-action-runner.js.map +0 -7
  566. package/dist/hooks/sms-notify.js.map +0 -7
  567. package/dist/hooks/sms-watcher.js.map +0 -7
  568. package/dist/hooks/sms-webhook.js.map +0 -7
  569. package/dist/hooks/whatsapp-commands.js.map +0 -7
  570. package/dist/hooks/whatsapp-scheduler.js.map +0 -7
  571. package/dist/hooks/whatsapp-sync.js.map +0 -7
  572. package/dist/index.js.map +0 -7
  573. package/dist/integrations/anthropic/client.js.map +0 -7
  574. package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
  575. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
  576. package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
  577. package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
  578. package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
  579. package/dist/integrations/claude-code/subagent-client.js.map +0 -7
  580. package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
  581. package/dist/integrations/linear/auth.js.map +0 -7
  582. package/dist/integrations/linear/auto-sync.js.map +0 -7
  583. package/dist/integrations/linear/client.js +0 -630
  584. package/dist/integrations/linear/client.js.map +0 -7
  585. package/dist/integrations/linear/config.js.map +0 -7
  586. package/dist/integrations/linear/migration.js.map +0 -7
  587. package/dist/integrations/linear/oauth-server.js.map +0 -7
  588. package/dist/integrations/linear/rest-client.js.map +0 -7
  589. package/dist/integrations/linear/sync-manager.js.map +0 -7
  590. package/dist/integrations/linear/sync-service.js.map +0 -7
  591. package/dist/integrations/linear/sync.js.map +0 -7
  592. package/dist/integrations/linear/unified-sync.js.map +0 -7
  593. package/dist/integrations/linear/webhook-handler.js.map +0 -7
  594. package/dist/integrations/linear/webhook-server.js.map +0 -7
  595. package/dist/integrations/linear/webhook.js.map +0 -7
  596. package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
  597. package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
  598. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
  599. package/dist/integrations/mcp/handlers/index.js.map +0 -7
  600. package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
  601. package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
  602. package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
  603. package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
  604. package/dist/integrations/mcp/index.js.map +0 -7
  605. package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
  606. package/dist/integrations/mcp/refactored-server.js.map +0 -7
  607. package/dist/integrations/mcp/remote-server.js +0 -691
  608. package/dist/integrations/mcp/remote-server.js.map +0 -7
  609. package/dist/integrations/mcp/schemas.js.map +0 -7
  610. package/dist/integrations/mcp/server.js +0 -1960
  611. package/dist/integrations/mcp/server.js.map +0 -7
  612. package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
  613. package/dist/integrations/mcp/tool-definitions.js.map +0 -7
  614. package/dist/integrations/mcp/trace-test.js +0 -48
  615. package/dist/integrations/mcp/trace-test.js.map +0 -7
  616. package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
  617. package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
  618. package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
  619. package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
  620. package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
  621. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
  622. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
  623. package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
  624. package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
  625. package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
  626. package/dist/integrations/ralph/index.js.map +0 -7
  627. package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
  628. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
  629. package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
  630. package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
  631. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
  632. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
  633. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
  634. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
  635. package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
  636. package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
  637. package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
  638. package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
  639. package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
  640. package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
  641. package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
  642. package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
  643. package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
  644. package/dist/middleware/exponential-rate-limiter.js.map +0 -7
  645. package/dist/models/user.model.js.map +0 -7
  646. package/dist/servers/production/auth-middleware.js.map +0 -7
  647. package/dist/servers/railway/config.js +0 -55
  648. package/dist/servers/railway/config.js.map +0 -7
  649. package/dist/servers/railway/index-enhanced.js +0 -160
  650. package/dist/servers/railway/index-enhanced.js.map +0 -7
  651. package/dist/servers/railway/index.js +0 -1349
  652. package/dist/servers/railway/index.js.map +0 -7
  653. package/dist/servers/railway/simple.js +0 -64
  654. package/dist/servers/railway/simple.js.map +0 -7
  655. package/dist/servers/railway/storage-test.js +0 -459
  656. package/dist/servers/railway/storage-test.js.map +0 -7
  657. package/dist/services/config-service.js.map +0 -7
  658. package/dist/services/context-service.js.map +0 -7
  659. package/dist/skills/api-discovery.js.map +0 -7
  660. package/dist/skills/api-skill.js.map +0 -7
  661. package/dist/skills/claude-skills.js.map +0 -7
  662. package/dist/skills/dashboard-launcher.js.map +0 -7
  663. package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
  664. package/dist/skills/repo-ingestion-skill.js +0 -609
  665. package/dist/skills/repo-ingestion-skill.js.map +0 -7
  666. package/dist/skills/security-secrets-scanner.js +0 -284
  667. package/dist/skills/security-secrets-scanner.js.map +0 -7
  668. package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
  669. package/dist/utils/env.js.map +0 -7
  670. package/dist/utils/formatting.js.map +0 -7
  671. package/dist/utils/process-cleanup.js.map +0 -7
  672. package/dist/validation/schemas.js +0 -222
  673. package/dist/validation/schemas.js.map +0 -7
  674. /package/dist/{agents → src/agents}/core/agent-task-manager.js +0 -0
  675. /package/dist/{agents → src/agents}/verifiers/base-verifier.js +0 -0
  676. /package/dist/{agents → src/agents}/verifiers/formatter-verifier.js +0 -0
  677. /package/dist/{agents → src/agents}/verifiers/llm-judge.js +0 -0
  678. /package/dist/{cli → src/cli}/auto-detect.js +0 -0
  679. /package/dist/{cli → src/cli}/claude-sm-danger.js +0 -0
  680. /package/dist/{cli → src/cli}/codex-sm-danger.js +0 -0
  681. /package/dist/{cli → src/cli}/codex-sm.js +0 -0
  682. /package/dist/{cli → src/cli}/commands/api.js +0 -0
  683. /package/dist/{cli → src/cli}/commands/auto-background.js +0 -0
  684. /package/dist/{cli → src/cli}/commands/cleanup-processes.js +0 -0
  685. /package/dist/{cli → src/cli}/commands/clear.js +0 -0
  686. /package/dist/{cli → src/cli}/commands/config.js +0 -0
  687. /package/dist/{cli → src/cli}/commands/context-rehydrate.js +0 -0
  688. /package/dist/{cli → src/cli}/commands/context.js +0 -0
  689. /package/dist/{cli → src/cli}/commands/daemon.js +0 -0
  690. /package/dist/{cli → src/cli}/commands/dashboard.js +0 -0
  691. /package/dist/{cli → src/cli}/commands/db.js +0 -0
  692. /package/dist/{cli → src/cli}/commands/decision.js +0 -0
  693. /package/dist/{cli → src/cli}/commands/discovery.js +0 -0
  694. /package/dist/{cli → src/cli}/commands/handoff.js +0 -0
  695. /package/dist/{cli → src/cli}/commands/hooks.js +0 -0
  696. /package/dist/{cli → src/cli}/commands/linear.js +0 -0
  697. /package/dist/{cli → src/cli}/commands/log.js +0 -0
  698. /package/dist/{cli → src/cli}/commands/login.js +0 -0
  699. /package/dist/{cli → src/cli}/commands/migrate.js +0 -0
  700. /package/dist/{cli → src/cli}/commands/model.js +0 -0
  701. /package/dist/{cli → src/cli}/commands/onboard.js +0 -0
  702. /package/dist/{cli → src/cli}/commands/projects.js +0 -0
  703. /package/dist/{cli → src/cli}/commands/ralph.js +0 -0
  704. /package/dist/{cli → src/cli}/commands/retrieval.js +0 -0
  705. /package/dist/{cli → src/cli}/commands/service.js +0 -0
  706. /package/dist/{cli → src/cli}/commands/session.js +0 -0
  707. /package/dist/{cli → src/cli}/commands/settings.js +0 -0
  708. /package/dist/{cli → src/cli}/commands/setup.js +0 -0
  709. /package/dist/{cli → src/cli}/commands/shell.js +0 -0
  710. /package/dist/{cli → src/cli}/commands/signup.js +0 -0
  711. /package/dist/{cli → src/cli}/commands/skills.js +0 -0
  712. /package/dist/{cli → src/cli}/commands/sms-notify.js +0 -0
  713. /package/dist/{cli → src/cli}/commands/storage-tier.js +0 -0
  714. /package/dist/{cli → src/cli}/commands/sweep.js +0 -0
  715. /package/dist/{cli → src/cli}/commands/tasks.js +0 -0
  716. /package/dist/{cli → src/cli}/commands/worktree.js +0 -0
  717. /package/dist/{cli → src/cli}/opencode-sm.js +0 -0
  718. /package/dist/{cli → src/cli}/utils/viewer.js +0 -0
  719. /package/dist/{core → src/core}/config/config-manager.js +0 -0
  720. /package/dist/{core → src/core}/config/feature-flags.js +0 -0
  721. /package/dist/{core → src/core}/config/storage-config.js +0 -0
  722. /package/dist/{core → src/core}/config/types.js +0 -0
  723. /package/dist/{core → src/core}/context/auto-context.js +0 -0
  724. /package/dist/{core → src/core}/context/dual-stack-manager.js +0 -0
  725. /package/dist/{core → src/core}/context/enhanced-rehydration.js +0 -0
  726. /package/dist/{core → src/core}/context/frame-database.js +0 -0
  727. /package/dist/{core → src/core}/context/frame-digest.js +0 -0
  728. /package/dist/{core → src/core}/context/frame-handoff-manager.js +0 -0
  729. /package/dist/{core → src/core}/context/frame-lifecycle-hooks.js +0 -0
  730. /package/dist/{core → src/core}/context/frame-recovery.js +0 -0
  731. /package/dist/{core → src/core}/context/frame-stack.js +0 -0
  732. /package/dist/{core → src/core}/context/frame-types.js +0 -0
  733. /package/dist/{core → src/core}/context/frame-types.js.map +0 -0
  734. /package/dist/{core → src/core}/context/index.js +0 -0
  735. /package/dist/{core → src/core}/context/permission-manager.js +0 -0
  736. /package/dist/{core → src/core}/context/recursive-context-manager.js +0 -0
  737. /package/dist/{core → src/core}/context/refactored-frame-manager.js +0 -0
  738. /package/dist/{core → src/core}/context/shared-context-layer.js +0 -0
  739. /package/dist/{core → src/core}/context/stack-merge-resolver.js +0 -0
  740. /package/dist/{core → src/core}/context/validation.js +0 -0
  741. /package/dist/{core → src/core}/database/batch-operations.js +0 -0
  742. /package/dist/{core → src/core}/database/connection-pool.js +0 -0
  743. /package/dist/{core → src/core}/database/database-adapter.js +0 -0
  744. /package/dist/{core → src/core}/database/migration-manager.js +0 -0
  745. /package/dist/{core → src/core}/database/query-cache.js +0 -0
  746. /package/dist/{core → src/core}/database/query-router.js +0 -0
  747. /package/dist/{core → src/core}/digest/enhanced-hybrid-digest.js +0 -0
  748. /package/dist/{core → src/core}/digest/frame-digest-integration.js +0 -0
  749. /package/dist/{core → src/core}/digest/hybrid-digest-generator.js +0 -0
  750. /package/dist/{core → src/core}/digest/index.js +0 -0
  751. /package/dist/{core → src/core}/digest/types.js +0 -0
  752. /package/dist/{core → src/core}/errors/recovery.js +0 -0
  753. /package/dist/{core → src/core}/execution/parallel-executor.js +0 -0
  754. /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
  755. /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
  756. /package/dist/{core → src/core}/frame/workflow-templates.js +0 -0
  757. /package/dist/{core → src/core}/merge/conflict-detector.js +0 -0
  758. /package/dist/{core → src/core}/merge/index.js +0 -0
  759. /package/dist/{core → src/core}/merge/resolution-engine.js +0 -0
  760. /package/dist/{core → src/core}/merge/stack-diff.js +0 -0
  761. /package/dist/{core → src/core/merge}/types.js +0 -0
  762. /package/dist/{core → src/core/merge}/types.js.map +0 -0
  763. /package/dist/{core → src/core}/models/fallback-monitor.js +0 -0
  764. /package/dist/{core → src/core}/models/model-router.js +0 -0
  765. /package/dist/{core → src/core}/monitoring/error-handler.js +0 -0
  766. /package/dist/{core → src/core}/monitoring/metrics.js +0 -0
  767. /package/dist/{core → src/core}/monitoring/progress-tracker.js +0 -0
  768. /package/dist/{core → src/core}/monitoring/session-monitor.js +0 -0
  769. /package/dist/{core → src/core}/performance/context-cache.js +0 -0
  770. /package/dist/{core → src/core}/performance/index.js +0 -0
  771. /package/dist/{core → src/core}/performance/lazy-context-loader.js +0 -0
  772. /package/dist/{core → src/core}/performance/monitor.js +0 -0
  773. /package/dist/{core → src/core}/performance/optimized-frame-context.js +0 -0
  774. /package/dist/{core → src/core}/performance/performance-benchmark.js +0 -0
  775. /package/dist/{core → src/core}/performance/performance-profiler.js +0 -0
  776. /package/dist/{core → src/core}/performance/streaming-jsonl-parser.js +0 -0
  777. /package/dist/{core → src/core}/persistence/postgres-adapter.js +0 -0
  778. /package/dist/{core → src/core}/projects/project-isolation.js +0 -0
  779. /package/dist/{core → src/core}/projects/project-manager.js +0 -0
  780. /package/dist/{core → src/core}/query/query-parser.js +0 -0
  781. /package/dist/{core → src/core}/query/query-templates.js +0 -0
  782. /package/dist/{core → src/core}/retrieval/context-retriever.js +0 -0
  783. /package/dist/{core → src/core}/retrieval/index.js +0 -0
  784. /package/dist/{core → src/core}/retrieval/llm-context-retrieval.js +0 -0
  785. /package/dist/{core → src/core}/retrieval/llm-provider.js +0 -0
  786. /package/dist/{core → src/core}/retrieval/retrieval-audit.js +0 -0
  787. /package/dist/{core → src/core}/retrieval/summary-generator.js +0 -0
  788. /package/dist/{core → src/core}/retrieval/types.js +0 -0
  789. /package/dist/{core → src/core}/session/clear-survival.js +0 -0
  790. /package/dist/{core → src/core}/session/enhanced-handoff.js +0 -0
  791. /package/dist/{core → src/core}/session/handoff-generator.js +0 -0
  792. /package/dist/{core → src/core}/session/index.js +0 -0
  793. /package/dist/{core → src/core}/session/session-manager.js +0 -0
  794. /package/dist/{core → src/core}/skills/index.js +0 -0
  795. /package/dist/{core → src/core}/skills/skill-storage.js +0 -0
  796. /package/dist/{core → src/core}/skills/types.js +0 -0
  797. /package/dist/{core → src/core}/storage/infinite-storage.js +0 -0
  798. /package/dist/{core → src/core}/storage/remote-storage.js +0 -0
  799. /package/dist/{core → src/core}/storage/two-tier-storage.js +0 -0
  800. /package/dist/{core → src/core}/trace/cli-trace-wrapper.js +0 -0
  801. /package/dist/{core → src/core}/trace/db-trace-wrapper.js +0 -0
  802. /package/dist/{core → src/core}/trace/debug-trace.js +0 -0
  803. /package/dist/{core → src/core}/trace/index.js +0 -0
  804. /package/dist/{core → src/core}/trace/linear-api-wrapper.js +0 -0
  805. /package/dist/{core → src/core}/trace/trace-detector.js +0 -0
  806. /package/dist/{core → src/core}/trace/trace-store.js +0 -0
  807. /package/dist/{core → src/core}/trace/types.js +0 -0
  808. /package/dist/{integrations/linear → src/core}/types.js +0 -0
  809. /package/dist/{integrations/linear → src/core}/types.js.map +0 -0
  810. /package/dist/{core → src/core}/utils/async-mutex.js +0 -0
  811. /package/dist/{core → src/core}/utils/compression.js +0 -0
  812. /package/dist/{core → src/core}/utils/update-checker.js +0 -0
  813. /package/dist/{core → src/core}/worktree/worktree-manager.js +0 -0
  814. /package/dist/{daemon → src/daemon}/daemon-config.js +0 -0
  815. /package/dist/{daemon → src/daemon}/services/context-service.js +0 -0
  816. /package/dist/{daemon → src/daemon}/services/linear-service.js +0 -0
  817. /package/dist/{daemon → src/daemon}/session-daemon.js +0 -0
  818. /package/dist/{daemon → src/daemon}/unified-daemon.js +0 -0
  819. /package/dist/{features → src/features}/analytics/api/analytics-api.js +0 -0
  820. /package/dist/{features → src/features}/analytics/core/analytics-service.js +0 -0
  821. /package/dist/{features → src/features}/analytics/index.js +0 -0
  822. /package/dist/{features → src/features}/analytics/queries/metrics-queries.js +0 -0
  823. /package/dist/{features → src/features}/analytics/types/metrics.js +0 -0
  824. /package/dist/{features → src/features}/analytics/types/metrics.js.map +0 -0
  825. /package/dist/{features → src/features}/browser/browser-mcp.js +0 -0
  826. /package/dist/{features → src/features}/sweep/index.js +0 -0
  827. /package/dist/{features → src/features}/sweep/prediction-client.js +0 -0
  828. /package/dist/{features → src/features}/sweep/prompt-builder.js +0 -0
  829. /package/dist/{features → src/features}/sweep/pty-wrapper.js +0 -0
  830. /package/dist/{features → src/features}/sweep/state-watcher.js +0 -0
  831. /package/dist/{features → src/features}/sweep/status-bar.js +0 -0
  832. /package/dist/{features → src/features}/sweep/sweep-server-manager.js +0 -0
  833. /package/dist/{features → src/features}/sweep/tab-interceptor.js +0 -0
  834. /package/dist/{features → src/features}/sweep/types.js +0 -0
  835. /package/dist/{features → src/features}/tasks/linear-task-manager.js +0 -0
  836. /package/dist/{features → src/features}/tasks/task-aware-context.js +0 -0
  837. /package/dist/{features → src/features}/tui/simple-monitor.js +0 -0
  838. /package/dist/{features → src/features}/tui/swarm-monitor.js +0 -0
  839. /package/dist/{features → src/features}/web/client/stores/task-store.js +0 -0
  840. /package/dist/{features → src/features}/web/server/index.js +0 -0
  841. /package/dist/{hooks → src/hooks}/auto-background.js +0 -0
  842. /package/dist/{hooks → src/hooks}/claude-code-whatsapp-hook.js +0 -0
  843. /package/dist/{hooks → src/hooks}/config.js +0 -0
  844. /package/dist/{hooks → src/hooks}/daemon.js +0 -0
  845. /package/dist/{hooks → src/hooks}/events.js +0 -0
  846. /package/dist/{hooks → src/hooks}/index.js +0 -0
  847. /package/dist/{hooks → src/hooks}/linear-task-picker.js +0 -0
  848. /package/dist/{hooks → src/hooks}/schemas.js +0 -0
  849. /package/dist/{hooks → src/hooks}/secure-fs.js +0 -0
  850. /package/dist/{hooks → src/hooks}/security-logger.js +0 -0
  851. /package/dist/{hooks → src/hooks}/session-summary.js +0 -0
  852. /package/dist/{hooks → src/hooks}/sms-action-runner.js +0 -0
  853. /package/dist/{hooks → src/hooks}/sms-notify.js +0 -0
  854. /package/dist/{hooks → src/hooks}/sms-watcher.js +0 -0
  855. /package/dist/{hooks → src/hooks}/sms-webhook.js +0 -0
  856. /package/dist/{hooks → src/hooks}/whatsapp-commands.js +0 -0
  857. /package/dist/{hooks → src/hooks}/whatsapp-scheduler.js +0 -0
  858. /package/dist/{hooks → src/hooks}/whatsapp-sync.js +0 -0
  859. /package/dist/{index.js → src/index.js} +0 -0
  860. /package/dist/{integrations → src/integrations}/anthropic/client.js +0 -0
  861. /package/dist/{integrations → src/integrations}/claude-code/agent-bridge.js +0 -0
  862. /package/dist/{integrations → src/integrations}/claude-code/enhanced-pre-clear-hooks.js +0 -0
  863. /package/dist/{integrations → src/integrations}/claude-code/lifecycle-hooks.js +0 -0
  864. /package/dist/{integrations → src/integrations}/claude-code/post-task-hooks.js +0 -0
  865. /package/dist/{integrations → src/integrations}/claude-code/subagent-client-stub.js +0 -0
  866. /package/dist/{integrations → src/integrations}/claude-code/subagent-client.js +0 -0
  867. /package/dist/{integrations → src/integrations}/claude-code/task-coordinator.js +0 -0
  868. /package/dist/{integrations → src/integrations}/linear/auth.js +0 -0
  869. /package/dist/{integrations → src/integrations}/linear/auto-sync.js +0 -0
  870. /package/dist/{integrations → src/integrations}/linear/config.js +0 -0
  871. /package/dist/{integrations → src/integrations}/linear/migration.js +0 -0
  872. /package/dist/{integrations → src/integrations}/linear/oauth-server.js +0 -0
  873. /package/dist/{integrations → src/integrations}/linear/rest-client.js +0 -0
  874. /package/dist/{integrations → src/integrations}/linear/sync-manager.js +0 -0
  875. /package/dist/{integrations → src/integrations}/linear/sync-service.js +0 -0
  876. /package/dist/{integrations → src/integrations}/linear/sync.js +0 -0
  877. /package/dist/{integrations/ralph → src/integrations/linear}/types.js +0 -0
  878. /package/dist/{integrations/ralph → src/integrations/linear}/types.js.map +0 -0
  879. /package/dist/{integrations → src/integrations}/linear/unified-sync.js +0 -0
  880. /package/dist/{integrations → src/integrations}/linear/webhook-handler.js +0 -0
  881. /package/dist/{integrations → src/integrations}/linear/webhook-server.js +0 -0
  882. /package/dist/{integrations → src/integrations}/linear/webhook.js +0 -0
  883. /package/dist/{integrations → src/integrations}/mcp/handlers/code-execution-handlers.js +0 -0
  884. /package/dist/{integrations → src/integrations}/mcp/handlers/context-handlers.js +0 -0
  885. /package/dist/{integrations → src/integrations}/mcp/handlers/discovery-handlers.js +0 -0
  886. /package/dist/{integrations → src/integrations}/mcp/handlers/index.js +0 -0
  887. /package/dist/{integrations → src/integrations}/mcp/handlers/linear-handlers.js +0 -0
  888. /package/dist/{integrations → src/integrations}/mcp/handlers/skill-handlers.js +0 -0
  889. /package/dist/{integrations → src/integrations}/mcp/handlers/task-handlers.js +0 -0
  890. /package/dist/{integrations → src/integrations}/mcp/handlers/trace-handlers.js +0 -0
  891. /package/dist/{integrations → src/integrations}/mcp/index.js +0 -0
  892. /package/dist/{integrations → src/integrations}/mcp/middleware/tool-scoring.js +0 -0
  893. /package/dist/{integrations → src/integrations}/mcp/refactored-server.js +0 -0
  894. /package/dist/{integrations → src/integrations}/mcp/schemas.js +0 -0
  895. /package/dist/{integrations → src/integrations}/mcp/tool-definitions-code.js +0 -0
  896. /package/dist/{integrations → src/integrations}/mcp/tool-definitions.js +0 -0
  897. /package/dist/{integrations → src/integrations}/ralph/bridge/ralph-stackmemory-bridge.js +0 -0
  898. /package/dist/{integrations → src/integrations}/ralph/context/context-budget-manager.js +0 -0
  899. /package/dist/{integrations → src/integrations}/ralph/context/stackmemory-context-loader.js +0 -0
  900. /package/dist/{integrations → src/integrations}/ralph/coordination/enhanced-coordination.js +0 -0
  901. /package/dist/{integrations → src/integrations}/ralph/index.js +0 -0
  902. /package/dist/{integrations → src/integrations}/ralph/learning/pattern-learner.js +0 -0
  903. /package/dist/{integrations → src/integrations}/ralph/lifecycle/iteration-lifecycle.js +0 -0
  904. /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-dashboard.js +0 -0
  905. /package/dist/{integrations → src/integrations}/ralph/monitoring/swarm-registry.js +0 -0
  906. /package/dist/{integrations → src/integrations}/ralph/orchestration/multi-loop-orchestrator.js +0 -0
  907. /package/dist/{integrations → src/integrations}/ralph/patterns/compounding-engineering-pattern.js +0 -0
  908. /package/dist/{integrations → src/integrations}/ralph/patterns/extended-coherence-sessions.js +0 -0
  909. /package/dist/{integrations → src/integrations}/ralph/patterns/oracle-worker-pattern.js +0 -0
  910. /package/dist/{integrations → src/integrations}/ralph/performance/performance-optimizer.js +0 -0
  911. /package/dist/{integrations → src/integrations}/ralph/recovery/crash-recovery.js +0 -0
  912. /package/dist/{integrations → src/integrations}/ralph/state/state-reconciler.js +0 -0
  913. /package/dist/{integrations → src/integrations}/ralph/swarm/git-workflow-manager.js +0 -0
  914. /package/dist/{integrations → src/integrations}/ralph/swarm/swarm-coordinator.js +0 -0
  915. /package/dist/{types/task.js.map → src/integrations/ralph/types.js.map} +0 -0
  916. /package/dist/{integrations → src/integrations}/ralph/visualization/ralph-debugger.js +0 -0
  917. /package/dist/{mcp → src/mcp}/stackmemory-mcp-server.js +0 -0
  918. /package/dist/{middleware → src/middleware}/exponential-rate-limiter.js +0 -0
  919. /package/dist/{models → src/models}/user.model.js +0 -0
  920. /package/dist/{servers → src/servers}/production/auth-middleware.js +0 -0
  921. /package/dist/{services → src/services}/config-service.js +0 -0
  922. /package/dist/{services → src/services}/context-service.js +0 -0
  923. /package/dist/{skills → src/skills}/api-discovery.js +0 -0
  924. /package/dist/{skills → src/skills}/api-skill.js +0 -0
  925. /package/dist/{skills → src/skills}/claude-skills.js +0 -0
  926. /package/dist/{skills → src/skills}/dashboard-launcher.js +0 -0
  927. /package/dist/{skills → src/skills}/recursive-agent-orchestrator.js +0 -0
  928. /package/dist/{skills → src/skills}/unified-rlm-orchestrator.js +0 -0
  929. /package/dist/{types → src/types}/task.js +0 -0
  930. /package/dist/{utils → src/utils}/env.js +0 -0
  931. /package/dist/{utils → src/utils}/formatting.js +0 -0
  932. /package/dist/{utils → src/utils}/process-cleanup.js +0 -0
@@ -1,1960 +0,0 @@
1
- #!/usr/bin/env node
2
- import { fileURLToPath as __fileURLToPath } from 'url';
3
- import { dirname as __pathDirname } from 'path';
4
- const __filename = __fileURLToPath(import.meta.url);
5
- const __dirname = __pathDirname(__filename);
6
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
7
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
- import { z } from "zod";
9
- import Database from "better-sqlite3";
10
- import {
11
- validateInput,
12
- StartFrameSchema,
13
- AddAnchorSchema,
14
- CreateTaskSchema
15
- } from "./schemas.js";
16
- import { readFileSync, existsSync, mkdirSync } from "fs";
17
- import { join, dirname } from "path";
18
- import { execSync } from "child_process";
19
- import { FrameManager } from "../../core/context/index.js";
20
- import { logger } from "../../core/monitoring/logger.js";
21
- import { isFeatureEnabled } from "../../core/config/feature-flags.js";
22
- import {
23
- TaskPriority,
24
- TaskStatus
25
- } from "../../features/tasks/linear-task-manager.js";
26
- import { BrowserMCPIntegration } from "../../features/browser/browser-mcp.js";
27
- import { TraceDetector } from "../../core/trace/trace-detector.js";
28
- import { LLMContextRetrieval } from "../../core/retrieval/index.js";
29
- import { DiscoveryHandlers } from "./handlers/discovery-handlers.js";
30
- import { v4 as uuidv4 } from "uuid";
31
- function getEnv(key, defaultValue) {
32
- const value = process.env[key];
33
- if (value === void 0) {
34
- if (defaultValue !== void 0) return defaultValue;
35
- throw new Error(`Environment variable ${key} is required`);
36
- }
37
- return value;
38
- }
39
- function getOptionalEnv(key) {
40
- return process.env[key];
41
- }
42
- class LocalStackMemoryMCP {
43
- server;
44
- db;
45
- projectRoot;
46
- frameManager;
47
- taskStore = null;
48
- linearAuthManager = null;
49
- linearSync = null;
50
- projectId;
51
- contexts = /* @__PURE__ */ new Map();
52
- browserMCP;
53
- traceDetector;
54
- contextRetrieval;
55
- discoveryHandlers;
56
- constructor() {
57
- this.projectRoot = this.findProjectRoot();
58
- this.projectId = this.getProjectId();
59
- const dbDir = join(this.projectRoot, ".stackmemory");
60
- if (!existsSync(dbDir)) {
61
- mkdirSync(dbDir, { recursive: true });
62
- }
63
- const dbPath = join(dbDir, "context.db");
64
- this.db = new Database(dbPath);
65
- this.initDB();
66
- this.frameManager = new FrameManager(this.db, this.projectId);
67
- this.initLinearIfEnabled();
68
- this.server = new Server(
69
- {
70
- name: "stackmemory-local",
71
- version: "0.1.0"
72
- },
73
- {
74
- capabilities: {
75
- tools: {}
76
- }
77
- }
78
- );
79
- this.browserMCP = new BrowserMCPIntegration({
80
- headless: process.env["BROWSER_HEADLESS"] !== "false",
81
- defaultViewport: { width: 1280, height: 720 }
82
- });
83
- this.traceDetector = new TraceDetector({}, void 0, this.db);
84
- this.contextRetrieval = new LLMContextRetrieval(
85
- this.db,
86
- this.frameManager,
87
- this.projectId
88
- );
89
- this.discoveryHandlers = new DiscoveryHandlers({
90
- frameManager: this.frameManager,
91
- contextRetrieval: this.contextRetrieval,
92
- db: this.db,
93
- projectRoot: this.projectRoot
94
- });
95
- this.setupHandlers();
96
- this.loadInitialContext();
97
- this.browserMCP.initialize(this.server).catch((error) => {
98
- logger.error("Failed to initialize Browser MCP", error);
99
- });
100
- logger.info("StackMemory MCP Server initialized", {
101
- projectRoot: this.projectRoot,
102
- projectId: this.projectId
103
- });
104
- }
105
- findProjectRoot() {
106
- let dir = process.cwd();
107
- while (dir !== "/") {
108
- if (existsSync(join(dir, ".git"))) {
109
- return dir;
110
- }
111
- dir = dirname(dir);
112
- }
113
- return process.cwd();
114
- }
115
- /**
116
- * Initialize Linear integration if enabled and credentials available
117
- */
118
- async initLinearIfEnabled() {
119
- if (!isFeatureEnabled("linear")) {
120
- logger.info("Linear integration disabled (no API key or LOCAL mode)");
121
- return;
122
- }
123
- try {
124
- const { LinearTaskManager } = await import("../../features/tasks/linear-task-manager.js");
125
- const { LinearAuthManager } = await import("../linear/auth.js");
126
- const { LinearSyncEngine, DEFAULT_SYNC_CONFIG: DEFAULT_SYNC_CONFIG2 } = await import("../linear/sync.js");
127
- this.taskStore = new LinearTaskManager(this.projectRoot, this.db);
128
- this.linearAuthManager = new LinearAuthManager(this.projectRoot);
129
- this.linearSync = new LinearSyncEngine(
130
- this.taskStore,
131
- this.linearAuthManager,
132
- DEFAULT_SYNC_CONFIG2
133
- );
134
- logger.info("Linear integration initialized");
135
- } catch (error) {
136
- logger.warn("Failed to initialize Linear integration", { error });
137
- }
138
- }
139
- initDB() {
140
- this.db.exec(`
141
- CREATE TABLE IF NOT EXISTS contexts (
142
- id TEXT PRIMARY KEY,
143
- type TEXT NOT NULL,
144
- content TEXT NOT NULL,
145
- importance REAL DEFAULT 0.5,
146
- created_at INTEGER DEFAULT (unixepoch()),
147
- last_accessed INTEGER DEFAULT (unixepoch()),
148
- access_count INTEGER DEFAULT 1
149
- );
150
-
151
- CREATE TABLE IF NOT EXISTS attention_log (
152
- id INTEGER PRIMARY KEY AUTOINCREMENT,
153
- context_id TEXT,
154
- query TEXT,
155
- response TEXT,
156
- influence_score REAL,
157
- timestamp INTEGER DEFAULT (unixepoch())
158
- );
159
- `);
160
- }
161
- loadInitialContext() {
162
- const projectInfo = this.getProjectInfo();
163
- this.addContext(
164
- "project",
165
- `Project: ${projectInfo.name}
166
- Path: ${projectInfo.path}`,
167
- 0.9
168
- );
169
- try {
170
- const recentCommits = execSync("git log --oneline -10", {
171
- cwd: this.projectRoot
172
- }).toString();
173
- this.addContext("git_history", `Recent commits:
174
- ${recentCommits}`, 0.6);
175
- } catch {
176
- }
177
- const readmePath = join(this.projectRoot, "README.md");
178
- if (existsSync(readmePath)) {
179
- const readme = readFileSync(readmePath, "utf-8");
180
- const summary = readme.substring(0, 500);
181
- this.addContext("readme", `Project README:
182
- ${summary}...`, 0.8);
183
- }
184
- this.loadStoredContexts();
185
- }
186
- getProjectId() {
187
- let identifier;
188
- try {
189
- identifier = execSync("git config --get remote.origin.url", {
190
- cwd: this.projectRoot,
191
- stdio: "pipe",
192
- timeout: 5e3
193
- }).toString().trim();
194
- } catch {
195
- identifier = this.projectRoot;
196
- }
197
- const cleaned = identifier.replace(/\.git$/, "").replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
198
- return cleaned.substring(cleaned.length - 50) || "unknown";
199
- }
200
- getProjectInfo() {
201
- const packageJsonPath = join(this.projectRoot, "package.json");
202
- if (existsSync(packageJsonPath)) {
203
- const pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
204
- return {
205
- name: pkg.name || "unknown",
206
- path: this.projectRoot
207
- };
208
- }
209
- return {
210
- name: this.projectRoot.split("/").pop() || "unknown",
211
- path: this.projectRoot
212
- };
213
- }
214
- addContext(type, content, importance = 0.5) {
215
- const id = `${type}_${Date.now()}`;
216
- this.db.prepare(
217
- `
218
- INSERT OR REPLACE INTO contexts (id, type, content, importance)
219
- VALUES (?, ?, ?, ?)
220
- `
221
- ).run(id, type, content, importance);
222
- this.contexts.set(id, { type, content, importance });
223
- return id;
224
- }
225
- loadStoredContexts() {
226
- const stored = this.db.prepare(
227
- `
228
- SELECT * FROM contexts
229
- ORDER BY importance DESC, last_accessed DESC
230
- LIMIT 50
231
- `
232
- ).all();
233
- stored.forEach((ctx) => {
234
- this.contexts.set(ctx.id, ctx);
235
- });
236
- }
237
- setupHandlers() {
238
- this.server.setRequestHandler(
239
- z.object({
240
- method: z.literal("tools/list")
241
- }),
242
- async () => {
243
- return {
244
- tools: [
245
- {
246
- name: "get_context",
247
- description: "Get current project context",
248
- inputSchema: {
249
- type: "object",
250
- properties: {
251
- query: {
252
- type: "string",
253
- description: "What you want to know"
254
- },
255
- limit: {
256
- type: "number",
257
- description: "Max contexts to return"
258
- }
259
- }
260
- }
261
- },
262
- {
263
- name: "add_decision",
264
- description: "Record a decision or important information",
265
- inputSchema: {
266
- type: "object",
267
- properties: {
268
- content: {
269
- type: "string",
270
- description: "The decision or information"
271
- },
272
- type: {
273
- type: "string",
274
- enum: ["decision", "constraint", "learning"]
275
- }
276
- },
277
- required: ["content", "type"]
278
- }
279
- },
280
- {
281
- name: "start_frame",
282
- description: "Start a new frame (task/subtask) on the call stack",
283
- inputSchema: {
284
- type: "object",
285
- properties: {
286
- name: { type: "string", description: "Frame name/goal" },
287
- type: {
288
- type: "string",
289
- enum: [
290
- "task",
291
- "subtask",
292
- "tool_scope",
293
- "review",
294
- "write",
295
- "debug"
296
- ],
297
- description: "Frame type"
298
- },
299
- constraints: {
300
- type: "array",
301
- items: { type: "string" },
302
- description: "Constraints for this frame"
303
- }
304
- },
305
- required: ["name", "type"]
306
- }
307
- },
308
- {
309
- name: "close_frame",
310
- description: "Close current frame and generate digest",
311
- inputSchema: {
312
- type: "object",
313
- properties: {
314
- result: {
315
- type: "string",
316
- description: "Frame completion result"
317
- },
318
- outputs: {
319
- type: "object",
320
- description: "Final outputs from frame"
321
- }
322
- }
323
- }
324
- },
325
- {
326
- name: "add_anchor",
327
- description: "Add anchored fact/decision/constraint to current frame",
328
- inputSchema: {
329
- type: "object",
330
- properties: {
331
- type: {
332
- type: "string",
333
- enum: [
334
- "FACT",
335
- "DECISION",
336
- "CONSTRAINT",
337
- "INTERFACE_CONTRACT",
338
- "TODO",
339
- "RISK"
340
- ],
341
- description: "Anchor type"
342
- },
343
- text: { type: "string", description: "Anchor content" },
344
- priority: {
345
- type: "number",
346
- description: "Priority (0-10)",
347
- minimum: 0,
348
- maximum: 10
349
- }
350
- },
351
- required: ["type", "text"]
352
- }
353
- },
354
- {
355
- name: "get_hot_stack",
356
- description: "Get current active frames and context",
357
- inputSchema: {
358
- type: "object",
359
- properties: {
360
- maxEvents: {
361
- type: "number",
362
- description: "Max recent events per frame",
363
- default: 20
364
- }
365
- }
366
- }
367
- },
368
- {
369
- name: "create_task",
370
- description: "Create a new task in git-tracked JSONL storage",
371
- inputSchema: {
372
- type: "object",
373
- properties: {
374
- title: { type: "string", description: "Task title" },
375
- description: {
376
- type: "string",
377
- description: "Task description"
378
- },
379
- priority: {
380
- type: "string",
381
- enum: ["low", "medium", "high", "urgent"],
382
- description: "Task priority"
383
- },
384
- estimatedEffort: {
385
- type: "number",
386
- description: "Estimated effort in minutes"
387
- },
388
- dependsOn: {
389
- type: "array",
390
- items: { type: "string" },
391
- description: "Task IDs this depends on"
392
- },
393
- tags: {
394
- type: "array",
395
- items: { type: "string" },
396
- description: "Tags for categorization"
397
- }
398
- },
399
- required: ["title"]
400
- }
401
- },
402
- {
403
- name: "update_task_status",
404
- description: "Update task status with automatic time tracking",
405
- inputSchema: {
406
- type: "object",
407
- properties: {
408
- taskId: { type: "string", description: "Task ID to update" },
409
- status: {
410
- type: "string",
411
- enum: [
412
- "pending",
413
- "in_progress",
414
- "completed",
415
- "blocked",
416
- "cancelled"
417
- ],
418
- description: "New status"
419
- },
420
- reason: {
421
- type: "string",
422
- description: "Reason for status change (especially for blocked)"
423
- }
424
- },
425
- required: ["taskId", "status"]
426
- }
427
- },
428
- {
429
- name: "get_active_tasks",
430
- description: "Get currently active tasks synced from Linear",
431
- inputSchema: {
432
- type: "object",
433
- properties: {
434
- frameId: {
435
- type: "string",
436
- description: "Filter by specific frame ID"
437
- },
438
- status: {
439
- type: "string",
440
- enum: [
441
- "pending",
442
- "in_progress",
443
- "completed",
444
- "blocked",
445
- "cancelled"
446
- ],
447
- description: "Filter by status"
448
- },
449
- priority: {
450
- type: "string",
451
- enum: ["low", "medium", "high", "urgent"],
452
- description: "Filter by priority"
453
- },
454
- search: {
455
- type: "string",
456
- description: "Search in task title or description"
457
- },
458
- limit: {
459
- type: "number",
460
- description: "Max number of tasks to return (default: 20)"
461
- }
462
- }
463
- }
464
- },
465
- {
466
- name: "get_task_metrics",
467
- description: "Get project task metrics and analytics",
468
- inputSchema: {
469
- type: "object",
470
- properties: {}
471
- }
472
- },
473
- {
474
- name: "add_task_dependency",
475
- description: "Add dependency relationship between tasks",
476
- inputSchema: {
477
- type: "object",
478
- properties: {
479
- taskId: {
480
- type: "string",
481
- description: "Task that depends on another"
482
- },
483
- dependsOnId: {
484
- type: "string",
485
- description: "Task ID that this depends on"
486
- }
487
- },
488
- required: ["taskId", "dependsOnId"]
489
- }
490
- },
491
- {
492
- name: "linear_sync",
493
- description: "Sync tasks with Linear",
494
- inputSchema: {
495
- type: "object",
496
- properties: {
497
- direction: {
498
- type: "string",
499
- enum: ["bidirectional", "to_linear", "from_linear"],
500
- description: "Sync direction"
501
- }
502
- }
503
- }
504
- },
505
- {
506
- name: "linear_update_task",
507
- description: "Update a Linear task status",
508
- inputSchema: {
509
- type: "object",
510
- properties: {
511
- issueId: {
512
- type: "string",
513
- description: "Linear issue ID or identifier (e.g., STA-34)"
514
- },
515
- status: {
516
- type: "string",
517
- enum: ["todo", "in-progress", "done", "canceled"],
518
- description: "New status for the task"
519
- },
520
- title: {
521
- type: "string",
522
- description: "Update task title (optional)"
523
- },
524
- description: {
525
- type: "string",
526
- description: "Update task description (optional)"
527
- },
528
- priority: {
529
- type: "number",
530
- enum: [1, 2, 3, 4],
531
- description: "Priority (1=urgent, 2=high, 3=medium, 4=low)"
532
- }
533
- },
534
- required: ["issueId"]
535
- }
536
- },
537
- {
538
- name: "linear_get_tasks",
539
- description: "Get Linear tasks",
540
- inputSchema: {
541
- type: "object",
542
- properties: {
543
- status: {
544
- type: "string",
545
- enum: ["todo", "in-progress", "done", "all"],
546
- description: "Filter by status"
547
- },
548
- limit: {
549
- type: "number",
550
- description: "Maximum number of tasks to return"
551
- }
552
- }
553
- }
554
- },
555
- {
556
- name: "linear_status",
557
- description: "Get Linear integration status",
558
- inputSchema: {
559
- type: "object",
560
- properties: {}
561
- }
562
- },
563
- {
564
- name: "get_traces",
565
- description: "Get detected traces (bundled tool call sequences)",
566
- inputSchema: {
567
- type: "object",
568
- properties: {
569
- type: {
570
- type: "string",
571
- enum: [
572
- "search_driven",
573
- "error_recovery",
574
- "feature_implementation",
575
- "refactoring",
576
- "testing",
577
- "exploration",
578
- "debugging",
579
- "documentation",
580
- "build_deploy",
581
- "unknown"
582
- ],
583
- description: "Filter by trace type"
584
- },
585
- minScore: {
586
- type: "number",
587
- description: "Minimum importance score (0-1)"
588
- },
589
- limit: {
590
- type: "number",
591
- description: "Maximum number of traces to return"
592
- }
593
- }
594
- }
595
- },
596
- {
597
- name: "get_trace_statistics",
598
- description: "Get statistics about detected traces",
599
- inputSchema: {
600
- type: "object",
601
- properties: {}
602
- }
603
- },
604
- {
605
- name: "flush_traces",
606
- description: "Flush any pending trace and finalize detection",
607
- inputSchema: {
608
- type: "object",
609
- properties: {}
610
- }
611
- },
612
- {
613
- name: "compress_old_traces",
614
- description: "Compress traces older than specified hours",
615
- inputSchema: {
616
- type: "object",
617
- properties: {
618
- ageHours: {
619
- type: "number",
620
- description: "Age threshold in hours (default: 24)"
621
- }
622
- }
623
- }
624
- },
625
- {
626
- name: "smart_context",
627
- description: "LLM-driven context retrieval - intelligently selects relevant frames based on query",
628
- inputSchema: {
629
- type: "object",
630
- properties: {
631
- query: {
632
- type: "string",
633
- description: "Natural language query describing what context you need"
634
- },
635
- tokenBudget: {
636
- type: "number",
637
- description: "Maximum tokens to use for context (default: 4000)"
638
- },
639
- forceRefresh: {
640
- type: "boolean",
641
- description: "Force refresh of cached summaries"
642
- }
643
- },
644
- required: ["query"]
645
- }
646
- },
647
- {
648
- name: "get_summary",
649
- description: "Get compressed summary of project memory for analysis",
650
- inputSchema: {
651
- type: "object",
652
- properties: {
653
- forceRefresh: {
654
- type: "boolean",
655
- description: "Force refresh of cached summary"
656
- }
657
- }
658
- }
659
- },
660
- // Discovery tools
661
- {
662
- name: "sm_discover",
663
- description: "Discover relevant files based on current context. Extracts keywords from active frames and searches codebase.",
664
- inputSchema: {
665
- type: "object",
666
- properties: {
667
- query: {
668
- type: "string",
669
- description: "Optional query to focus the discovery"
670
- },
671
- depth: {
672
- type: "string",
673
- enum: ["shallow", "medium", "deep"],
674
- description: "Search depth"
675
- },
676
- maxFiles: {
677
- type: "number",
678
- description: "Maximum files to return"
679
- }
680
- }
681
- }
682
- },
683
- {
684
- name: "sm_related_files",
685
- description: "Find files related to a specific file or concept",
686
- inputSchema: {
687
- type: "object",
688
- properties: {
689
- file: {
690
- type: "string",
691
- description: "File path to find related files for"
692
- },
693
- concept: {
694
- type: "string",
695
- description: "Concept to search for"
696
- },
697
- maxFiles: {
698
- type: "number",
699
- description: "Maximum files to return"
700
- }
701
- }
702
- }
703
- },
704
- {
705
- name: "sm_session_summary",
706
- description: "Get summary of current session with active tasks, files, and decisions",
707
- inputSchema: {
708
- type: "object",
709
- properties: {
710
- includeFiles: {
711
- type: "boolean",
712
- description: "Include recently accessed files"
713
- },
714
- includeDecisions: {
715
- type: "boolean",
716
- description: "Include recent decisions"
717
- }
718
- }
719
- }
720
- },
721
- {
722
- name: "sm_search",
723
- description: "Search across StackMemory - frames, events, decisions, tasks",
724
- inputSchema: {
725
- type: "object",
726
- properties: {
727
- query: {
728
- type: "string",
729
- description: "Search query"
730
- },
731
- scope: {
732
- type: "string",
733
- enum: ["all", "frames", "events", "decisions", "tasks"],
734
- description: "Scope of search"
735
- },
736
- limit: {
737
- type: "number",
738
- description: "Maximum results"
739
- }
740
- },
741
- required: ["query"]
742
- }
743
- }
744
- ]
745
- };
746
- }
747
- );
748
- this.server.setRequestHandler(
749
- z.object({
750
- method: z.literal("tools/call"),
751
- params: z.object({
752
- name: z.string(),
753
- arguments: z.record(z.unknown())
754
- })
755
- }),
756
- async (request) => {
757
- const { name, arguments: args } = request.params;
758
- const callId = uuidv4();
759
- const startTime = Date.now();
760
- const currentFrameId = this.frameManager.getCurrentFrameId();
761
- if (currentFrameId) {
762
- this.frameManager.addEvent("tool_call", {
763
- tool_name: name,
764
- arguments: args,
765
- timestamp: startTime
766
- });
767
- }
768
- const toolCall = {
769
- id: callId,
770
- tool: name,
771
- arguments: args,
772
- timestamp: startTime
773
- };
774
- let result;
775
- let error;
776
- try {
777
- switch (name) {
778
- case "get_context":
779
- result = await this.handleGetContext(args);
780
- break;
781
- case "add_decision":
782
- result = await this.handleAddDecision(args);
783
- break;
784
- case "start_frame":
785
- result = await this.handleStartFrame(args);
786
- break;
787
- case "close_frame":
788
- result = await this.handleCloseFrame(args);
789
- break;
790
- case "add_anchor":
791
- result = await this.handleAddAnchor(args);
792
- break;
793
- case "get_hot_stack":
794
- result = await this.handleGetHotStack(args);
795
- break;
796
- case "create_task":
797
- result = await this.handleCreateTask(args);
798
- break;
799
- case "update_task_status":
800
- result = await this.handleUpdateTaskStatus(args);
801
- break;
802
- case "get_active_tasks":
803
- result = await this.handleGetActiveTasks(args);
804
- break;
805
- case "get_task_metrics":
806
- result = await this.handleGetTaskMetrics(args);
807
- break;
808
- case "add_task_dependency":
809
- result = await this.handleAddTaskDependency(args);
810
- break;
811
- case "linear_sync":
812
- result = await this.handleLinearSync(args);
813
- break;
814
- case "linear_update_task":
815
- result = await this.handleLinearUpdateTask(args);
816
- break;
817
- case "linear_get_tasks":
818
- result = await this.handleLinearGetTasks(args);
819
- break;
820
- case "linear_status":
821
- result = await this.handleLinearStatus(args);
822
- break;
823
- case "get_traces":
824
- result = await this.handleGetTraces(args);
825
- break;
826
- case "get_trace_statistics":
827
- result = await this.handleGetTraceStatistics(args);
828
- break;
829
- case "flush_traces":
830
- result = await this.handleFlushTraces(args);
831
- break;
832
- case "compress_old_traces":
833
- result = await this.handleCompressOldTraces(args);
834
- break;
835
- case "smart_context":
836
- result = await this.handleSmartContext(args);
837
- break;
838
- case "get_summary":
839
- result = await this.handleGetSummary(args);
840
- break;
841
- // Discovery tools
842
- case "sm_discover":
843
- result = await this.handleSmDiscover(args);
844
- break;
845
- case "sm_related_files":
846
- result = await this.handleSmRelatedFiles(args);
847
- break;
848
- case "sm_session_summary":
849
- result = await this.handleSmSessionSummary(args);
850
- break;
851
- case "sm_search":
852
- result = await this.handleSmSearch(args);
853
- break;
854
- default:
855
- throw new Error(`Unknown tool: ${name}`);
856
- }
857
- } catch (err) {
858
- error = err instanceof Error ? err : new Error(String(err));
859
- toolCall.error = error.message;
860
- throw err;
861
- } finally {
862
- const endTime = Date.now();
863
- if (currentFrameId && name !== "close_frame") {
864
- try {
865
- this.frameManager.addEvent("tool_result", {
866
- tool_name: name,
867
- success: !error,
868
- result: error ? { error: error.message } : result,
869
- timestamp: endTime
870
- });
871
- } catch {
872
- }
873
- }
874
- toolCall.result = error ? void 0 : result;
875
- toolCall.duration = endTime - startTime;
876
- if (args.file_path || args.path) {
877
- toolCall.filesAffected = [args.file_path || args.path].filter(
878
- Boolean
879
- );
880
- } else if (result?.files) {
881
- const files = result.files;
882
- toolCall.filesAffected = Array.isArray(files) ? files : [files];
883
- }
884
- this.traceDetector.addToolCall(toolCall);
885
- }
886
- return result;
887
- }
888
- );
889
- }
890
- async handleGetContext(args) {
891
- const { query = "", limit = 10 } = args;
892
- const contexts = Array.from(this.contexts.values()).sort((a, b) => b.importance - a.importance).slice(0, limit);
893
- contexts.forEach((ctx) => {
894
- this.db.prepare(
895
- `
896
- UPDATE contexts
897
- SET last_accessed = unixepoch(),
898
- access_count = access_count + 1
899
- WHERE id = ?
900
- `
901
- ).run(ctx.id);
902
- });
903
- const response = contexts.map(
904
- (ctx) => `[${ctx.type.toUpperCase()}] (importance: ${ctx.importance.toFixed(2)})
905
- ${ctx.content}`
906
- ).join("\n\n---\n\n");
907
- this.logAttention(query, response);
908
- return {
909
- content: [
910
- {
911
- type: "text",
912
- text: response || "No context available yet. Start adding decisions and information!"
913
- }
914
- ]
915
- };
916
- }
917
- async handleAddDecision(args) {
918
- const { content, type = "decision" } = args;
919
- const id = this.addContext(type, content, 0.8);
920
- return {
921
- content: [
922
- {
923
- type: "text",
924
- text: `\u2713 Added ${type}: ${content}
925
- ID: ${id}`
926
- }
927
- ]
928
- };
929
- }
930
- async handleStartFrame(args) {
931
- const { name, type, constraints } = validateInput(
932
- StartFrameSchema,
933
- args,
934
- "start_frame"
935
- );
936
- const inputs = {};
937
- if (constraints) {
938
- inputs.constraints = constraints;
939
- }
940
- const frameId = this.frameManager.createFrame({
941
- type,
942
- name,
943
- inputs
944
- });
945
- this.frameManager.addEvent("user_message", {
946
- action: "start_frame",
947
- name,
948
- type,
949
- constraints
950
- });
951
- this.addContext("active_frame", `Active frame: ${name} (${type})`, 0.9);
952
- const stackDepth = this.frameManager.getStackDepth();
953
- return {
954
- content: [
955
- {
956
- type: "text",
957
- text: `\u{1F680} Started ${type}: ${name}
958
- Frame ID: ${frameId}
959
- Stack depth: ${stackDepth}`
960
- }
961
- ]
962
- };
963
- }
964
- async handleCloseFrame(args) {
965
- const { result, outputs } = args;
966
- const currentFrameId = this.frameManager.getCurrentFrameId();
967
- if (!currentFrameId) {
968
- return {
969
- content: [
970
- {
971
- type: "text",
972
- text: "\u26A0\uFE0F No active frame to close"
973
- }
974
- ]
975
- };
976
- }
977
- this.frameManager.addEvent("assistant_message", {
978
- action: "close_frame",
979
- result,
980
- outputs
981
- });
982
- this.frameManager.closeFrame(currentFrameId, outputs);
983
- const newStackDepth = this.frameManager.getStackDepth();
984
- return {
985
- content: [
986
- {
987
- type: "text",
988
- text: `\u2705 Closed frame: ${result || "completed"}
989
- Stack depth: ${newStackDepth}`
990
- }
991
- ]
992
- };
993
- }
994
- async handleAddAnchor(args) {
995
- const { type, text, priority } = validateInput(
996
- AddAnchorSchema,
997
- args,
998
- "add_anchor"
999
- );
1000
- const anchorId = this.frameManager.addAnchor(type, text, priority);
1001
- this.frameManager.addEvent("decision", {
1002
- anchor_type: type,
1003
- text,
1004
- priority,
1005
- anchor_id: anchorId
1006
- });
1007
- return {
1008
- content: [
1009
- {
1010
- type: "text",
1011
- text: `\u{1F4CC} Added ${type}: ${text}
1012
- Anchor ID: ${anchorId}`
1013
- }
1014
- ]
1015
- };
1016
- }
1017
- async handleGetHotStack(args) {
1018
- const { maxEvents = 20 } = args;
1019
- const hotStack = this.frameManager.getHotStackContext(maxEvents);
1020
- const activePath = this.frameManager.getActiveFramePath();
1021
- if (hotStack.length === 0) {
1022
- return {
1023
- content: [
1024
- {
1025
- type: "text",
1026
- text: "\u{1F4DA} No active frames. Start a frame with start_frame tool."
1027
- }
1028
- ]
1029
- };
1030
- }
1031
- let response = "\u{1F4DA} **Active Call Stack:**\n\n";
1032
- activePath.forEach((frame, index) => {
1033
- const indent = " ".repeat(index);
1034
- const context = hotStack[index];
1035
- response += `${indent}${index + 1}. **${frame.name}** (${frame.type})
1036
- `;
1037
- if (context && context.anchors && context.anchors.length > 0) {
1038
- response += `${indent} \u{1F4CC} ${context.anchors.length} anchors
1039
- `;
1040
- }
1041
- if (context && context.recentEvents && context.recentEvents.length > 0) {
1042
- response += `${indent} \u{1F4DD} ${context.recentEvents.length} recent events
1043
- `;
1044
- }
1045
- response += "\n";
1046
- });
1047
- response += `**Total stack depth:** ${hotStack.length}`;
1048
- this.frameManager.addEvent("observation", {
1049
- action: "get_hot_stack",
1050
- stack_depth: hotStack.length,
1051
- total_anchors: hotStack.reduce(
1052
- (sum, frame) => sum + frame.anchors.length,
1053
- 0
1054
- ),
1055
- total_events: hotStack.reduce(
1056
- (sum, frame) => sum + frame.recentEvents.length,
1057
- 0
1058
- )
1059
- });
1060
- return {
1061
- content: [
1062
- {
1063
- type: "text",
1064
- text: response
1065
- }
1066
- ]
1067
- };
1068
- }
1069
- logAttention(query, response) {
1070
- this.db.prepare(
1071
- `
1072
- INSERT INTO attention_log (query, response)
1073
- VALUES (?, ?)
1074
- `
1075
- ).run(query, response);
1076
- }
1077
- async handleCreateTask(args) {
1078
- const validated = validateInput(CreateTaskSchema, args, "create_task");
1079
- const { title, description, priority, tags } = validated;
1080
- const { estimatedEffort, dependsOn } = args;
1081
- const currentFrameId = this.frameManager.getCurrentFrameId();
1082
- if (!currentFrameId) {
1083
- return {
1084
- content: [
1085
- {
1086
- type: "text",
1087
- text: "\u26A0\uFE0F No active frame. Start a frame first with start_frame tool."
1088
- }
1089
- ]
1090
- };
1091
- }
1092
- const taskId = this.taskStore.createTask({
1093
- title,
1094
- description,
1095
- priority,
1096
- frameId: currentFrameId,
1097
- dependsOn,
1098
- tags,
1099
- estimatedEffort
1100
- });
1101
- this.frameManager.addEvent("decision", {
1102
- action: "create_task",
1103
- task_id: taskId,
1104
- title,
1105
- priority: priority || "medium"
1106
- });
1107
- return {
1108
- content: [
1109
- {
1110
- type: "text",
1111
- text: `\u2705 Created task: ${title}
1112
- ID: ${taskId}
1113
- Frame: ${currentFrameId}
1114
- Stored in: .stackmemory/tasks.jsonl`
1115
- }
1116
- ]
1117
- };
1118
- }
1119
- async handleUpdateTaskStatus(args) {
1120
- const { taskId, status, reason } = args;
1121
- try {
1122
- this.taskStore.updateTaskStatus(taskId, status, reason);
1123
- this.frameManager.addEvent("observation", {
1124
- action: "update_task_status",
1125
- task_id: taskId,
1126
- new_status: status,
1127
- reason
1128
- });
1129
- return {
1130
- content: [
1131
- {
1132
- type: "text",
1133
- text: `\u2705 Updated task ${taskId} to ${status}${reason ? `
1134
- Reason: ${reason}` : ""}`
1135
- }
1136
- ]
1137
- };
1138
- } catch (error) {
1139
- return {
1140
- content: [
1141
- {
1142
- type: "text",
1143
- text: `\u274C Failed to update task: ${error}`
1144
- }
1145
- ]
1146
- };
1147
- }
1148
- }
1149
- async handleGetActiveTasks(args) {
1150
- const { frameId, status, priority, search, limit = 20 } = args;
1151
- let tasks = this.taskStore.getActiveTasks(frameId);
1152
- if (status) {
1153
- tasks = tasks.filter((t) => t.status === status);
1154
- }
1155
- if (priority) {
1156
- tasks = tasks.filter((t) => t.priority === priority);
1157
- }
1158
- if (search) {
1159
- const searchLower = search.toLowerCase();
1160
- tasks = tasks.filter(
1161
- (t) => t.title.toLowerCase().includes(searchLower) || t.description && t.description.toLowerCase().includes(searchLower)
1162
- );
1163
- }
1164
- const priorityOrder = { urgent: 0, high: 1, medium: 2, low: 3 };
1165
- tasks.sort((a, b) => {
1166
- const pa = priorityOrder[a.priority] ?? 2;
1167
- const pb = priorityOrder[b.priority] ?? 2;
1168
- if (pa !== pb) return pa - pb;
1169
- return b.created_at - a.created_at;
1170
- });
1171
- tasks = tasks.slice(0, limit);
1172
- if (tasks.length === 0) {
1173
- return {
1174
- content: [
1175
- {
1176
- type: "text",
1177
- text: search ? `\u{1F4DD} No tasks matching "${search}"` : "\u{1F4DD} No active tasks found"
1178
- }
1179
- ]
1180
- };
1181
- }
1182
- let response = `\u{1F4DD} **Tasks** (${tasks.length} found)
1183
-
1184
- `;
1185
- tasks.forEach((task) => {
1186
- const priorityIcon = { urgent: "\u{1F534}", high: "\u{1F7E0}", medium: "\u{1F7E1}", low: "\u{1F7E2}" }[task.priority] || "\u26AA";
1187
- const statusIcon = {
1188
- pending: "\u23F3",
1189
- in_progress: "\u{1F504}",
1190
- completed: "\u2705",
1191
- blocked: "\u{1F6AB}",
1192
- cancelled: "\u274C"
1193
- }[task.status] || "\u26AA";
1194
- const effort = task.estimated_effort ? ` (~${task.estimated_effort}m)` : "";
1195
- const linearMatch = task.title.match(/\[ENG-\d+\]/);
1196
- const linearId = linearMatch ? linearMatch[0] : "";
1197
- const title = linearId ? task.title.replace(linearId, "").trim() : task.title;
1198
- response += `${statusIcon} ${priorityIcon} **${linearId || task.id}** ${title}${effort}
1199
- `;
1200
- if (task.description) {
1201
- const desc = task.description.split("\n")[0].slice(0, 100);
1202
- response += ` ${desc}${task.description.length > 100 ? "..." : ""}
1203
- `;
1204
- }
1205
- if (task.tags && task.tags.length > 0) {
1206
- response += ` \u{1F3F7}\uFE0F ${task.tags.join(", ")}
1207
- `;
1208
- }
1209
- response += "\n";
1210
- });
1211
- return {
1212
- content: [
1213
- {
1214
- type: "text",
1215
- text: response
1216
- }
1217
- ]
1218
- };
1219
- }
1220
- async handleGetTaskMetrics(_args) {
1221
- const metrics = this.taskStore.getMetrics();
1222
- let response = "\u{1F4CA} **Task Metrics**\n\n";
1223
- response += `**Total Tasks:** ${metrics.total_tasks}
1224
- `;
1225
- response += `**Completion Rate:** ${(metrics.completion_rate * 100).toFixed(1)}%
1226
-
1227
- `;
1228
- response += "**By Status:**\n";
1229
- Object.entries(metrics.by_status).forEach(([status, count]) => {
1230
- response += `- ${status}: ${count}
1231
- `;
1232
- });
1233
- response += "\n**By Priority:**\n";
1234
- Object.entries(metrics.by_priority).forEach(([priority, count]) => {
1235
- response += `- ${priority}: ${count}
1236
- `;
1237
- });
1238
- if (metrics.blocked_tasks > 0) {
1239
- response += `
1240
- \u26A0\uFE0F **${metrics.blocked_tasks} blocked tasks**`;
1241
- }
1242
- if (metrics.avg_effort_accuracy > 0) {
1243
- response += `
1244
- \u{1F3AF} **Effort Accuracy:** ${(metrics.avg_effort_accuracy * 100).toFixed(1)}%`;
1245
- }
1246
- return {
1247
- content: [
1248
- {
1249
- type: "text",
1250
- text: response
1251
- }
1252
- ]
1253
- };
1254
- }
1255
- async handleAddTaskDependency(args) {
1256
- const { taskId, dependsOnId } = args;
1257
- try {
1258
- this.taskStore.addDependency(taskId, dependsOnId);
1259
- this.frameManager.addEvent("decision", {
1260
- action: "add_task_dependency",
1261
- task_id: taskId,
1262
- depends_on_id: dependsOnId
1263
- });
1264
- return {
1265
- content: [
1266
- {
1267
- type: "text",
1268
- text: `\u{1F517} Added dependency: ${taskId} depends on ${dependsOnId}`
1269
- }
1270
- ]
1271
- };
1272
- } catch (error) {
1273
- return {
1274
- content: [
1275
- {
1276
- type: "text",
1277
- text: `\u274C Failed to add dependency: ${error}`
1278
- }
1279
- ]
1280
- };
1281
- }
1282
- }
1283
- // Linear Integration Handlers
1284
- async handleLinearSync(args) {
1285
- try {
1286
- const tokens = this.linearAuthManager.loadTokens();
1287
- if (!tokens) {
1288
- return {
1289
- content: [
1290
- {
1291
- type: "text",
1292
- text: "\u274C Linear not authenticated. Run: stackmemory linear setup"
1293
- }
1294
- ]
1295
- };
1296
- }
1297
- const syncConfig = { ...DEFAULT_SYNC_CONFIG, enabled: true };
1298
- if (args.direction) {
1299
- syncConfig.direction = args.direction;
1300
- }
1301
- this.linearSync.updateConfig(syncConfig);
1302
- const result = await this.linearSync.sync();
1303
- return {
1304
- content: [
1305
- {
1306
- type: "text",
1307
- text: `\u2705 Linear sync completed
1308
- - To Linear: ${result.synced.toLinear} tasks
1309
- - From Linear: ${result.synced.fromLinear} tasks
1310
- - Updated: ${result.synced.updated} tasks`
1311
- }
1312
- ]
1313
- };
1314
- } catch (error) {
1315
- return {
1316
- content: [
1317
- {
1318
- type: "text",
1319
- text: `\u274C Linear sync failed: ${error.message}`
1320
- }
1321
- ]
1322
- };
1323
- }
1324
- }
1325
- async handleLinearUpdateTask(args) {
1326
- try {
1327
- const { LinearClient } = await import("../linear/client.js");
1328
- const tokens = this.linearAuthManager.loadTokens();
1329
- if (!tokens) {
1330
- return {
1331
- content: [
1332
- {
1333
- type: "text",
1334
- text: "\u274C Linear not authenticated. Run: stackmemory linear setup"
1335
- }
1336
- ]
1337
- };
1338
- }
1339
- const client = new LinearClient({
1340
- apiKey: tokens.accessToken,
1341
- useBearer: true,
1342
- onUnauthorized: async () => {
1343
- const refreshed = await this.linearAuthManager.refreshAccessToken();
1344
- return refreshed.accessToken;
1345
- }
1346
- });
1347
- let issue = await client.getIssue(args.issueId);
1348
- if (!issue) {
1349
- issue = await client.findIssueByIdentifier(args.issueId);
1350
- }
1351
- if (!issue) {
1352
- return {
1353
- content: [
1354
- {
1355
- type: "text",
1356
- text: `\u274C Linear issue ${args.issueId} not found`
1357
- }
1358
- ]
1359
- };
1360
- }
1361
- const updates = {};
1362
- if (args.status) {
1363
- const team = await client.getTeam();
1364
- const states = await client.getWorkflowStates(team.id);
1365
- const statusMap = {
1366
- todo: "unstarted",
1367
- "in-progress": "started",
1368
- done: "completed",
1369
- canceled: "cancelled"
1370
- };
1371
- const targetType = statusMap[args.status] || args.status;
1372
- const targetState = states.find((s) => s.type === targetType);
1373
- if (!targetState) {
1374
- return {
1375
- content: [
1376
- {
1377
- type: "text",
1378
- text: `\u274C Invalid status: ${args.status}`
1379
- }
1380
- ]
1381
- };
1382
- }
1383
- updates.stateId = targetState.id;
1384
- }
1385
- if (args.title) updates.title = args.title;
1386
- if (args.description) updates.description = args.description;
1387
- if (args.priority) updates.priority = args.priority;
1388
- const updatedIssue = await client.updateIssue(issue.id, updates);
1389
- this.linearSync.updateConfig({
1390
- ...DEFAULT_SYNC_CONFIG,
1391
- enabled: true,
1392
- direction: "from_linear"
1393
- });
1394
- const syncResult = await this.linearSync.sync();
1395
- let response = `\u2705 Updated ${updatedIssue.identifier}: ${updatedIssue.title}
1396
- `;
1397
- if (args.status) {
1398
- response += `Status: ${updatedIssue.state.name}
1399
- `;
1400
- }
1401
- response += `URL: ${updatedIssue.url}
1402
- `;
1403
- response += `
1404
- \u{1F504} Local sync: ${syncResult.synced.fromLinear} new, ${syncResult.synced.updated} updated`;
1405
- return {
1406
- content: [
1407
- {
1408
- type: "text",
1409
- text: response
1410
- }
1411
- ]
1412
- };
1413
- } catch (error) {
1414
- return {
1415
- content: [
1416
- {
1417
- type: "text",
1418
- text: `\u274C Failed to update Linear task: ${error.message}`
1419
- }
1420
- ]
1421
- };
1422
- }
1423
- }
1424
- async handleLinearGetTasks(args) {
1425
- try {
1426
- const { LinearClient } = await import("../linear/client.js");
1427
- const tokens = this.linearAuthManager.loadTokens();
1428
- if (!tokens) {
1429
- return {
1430
- content: [
1431
- {
1432
- type: "text",
1433
- text: "\u274C Linear not authenticated. Run: stackmemory linear setup"
1434
- }
1435
- ]
1436
- };
1437
- }
1438
- const client = new LinearClient({
1439
- apiKey: tokens.accessToken,
1440
- useBearer: true,
1441
- onUnauthorized: async () => {
1442
- const refreshed = await this.linearAuthManager.refreshAccessToken();
1443
- return refreshed.accessToken;
1444
- }
1445
- });
1446
- let stateType = void 0;
1447
- if (args.status && args.status !== "all") {
1448
- const statusMap = {
1449
- todo: "unstarted",
1450
- "in-progress": "started",
1451
- done: "completed"
1452
- };
1453
- stateType = statusMap[args.status] || args.status;
1454
- }
1455
- const issues = await client.getIssues({
1456
- stateType,
1457
- limit: args.limit || 20
1458
- });
1459
- if (!issues || issues.length === 0) {
1460
- return {
1461
- content: [
1462
- {
1463
- type: "text",
1464
- text: "No Linear tasks found"
1465
- }
1466
- ]
1467
- };
1468
- }
1469
- let response = `\u{1F4CB} **Linear Tasks** (${issues.length} items)
1470
-
1471
- `;
1472
- issues.forEach((issue) => {
1473
- const priority = issue.priority ? `P${issue.priority}` : "-";
1474
- response += `- **${issue.identifier}**: ${issue.title}
1475
- `;
1476
- response += ` Status: ${issue.state.name} | Priority: ${priority}
1477
- `;
1478
- if (issue.assignee) {
1479
- response += ` Assignee: ${issue.assignee.name}
1480
- `;
1481
- }
1482
- response += ` ${issue.url}
1483
-
1484
- `;
1485
- });
1486
- return {
1487
- content: [
1488
- {
1489
- type: "text",
1490
- text: response
1491
- }
1492
- ]
1493
- };
1494
- } catch (error) {
1495
- return {
1496
- content: [
1497
- {
1498
- type: "text",
1499
- text: `\u274C Failed to get Linear tasks: ${error.message}`
1500
- }
1501
- ]
1502
- };
1503
- }
1504
- }
1505
- async handleLinearStatus(_args) {
1506
- try {
1507
- const { LinearClient } = await import("../linear/client.js");
1508
- const tokens = this.linearAuthManager.loadTokens();
1509
- if (!tokens) {
1510
- return {
1511
- content: [
1512
- {
1513
- type: "text",
1514
- text: "\u274C Linear integration not configured\nRun: stackmemory linear setup"
1515
- }
1516
- ]
1517
- };
1518
- }
1519
- try {
1520
- const client = new LinearClient({
1521
- apiKey: tokens.accessToken,
1522
- useBearer: true,
1523
- onUnauthorized: async () => {
1524
- const refreshed = await this.linearAuthManager.refreshAccessToken();
1525
- return refreshed.accessToken;
1526
- }
1527
- });
1528
- const viewer = await client.getViewer();
1529
- const team = await client.getTeam();
1530
- return {
1531
- content: [
1532
- {
1533
- type: "text",
1534
- text: `\u2705 **Linear Integration Status**
1535
-
1536
- Connected as: ${viewer.name} (${viewer.email})
1537
- Team: ${team.name} (${team.key})
1538
- Tokens: Valid`
1539
- }
1540
- ]
1541
- };
1542
- } catch (error) {
1543
- return {
1544
- content: [
1545
- {
1546
- type: "text",
1547
- text: `\u26A0\uFE0F Linear configured but connection failed: ${error.message}`
1548
- }
1549
- ]
1550
- };
1551
- }
1552
- } catch (error) {
1553
- return {
1554
- content: [
1555
- {
1556
- type: "text",
1557
- text: `\u274C Linear status check failed: ${error.message}`
1558
- }
1559
- ]
1560
- };
1561
- }
1562
- }
1563
- async handleGetTraces(args) {
1564
- const { type, minScore, limit = 20 } = args;
1565
- this.traceDetector.flush();
1566
- let traces = this.traceDetector.getTraces();
1567
- if (type) {
1568
- traces = traces.filter((t) => t.type === type);
1569
- }
1570
- if (minScore !== void 0) {
1571
- traces = traces.filter((t) => t.score >= minScore);
1572
- }
1573
- traces = traces.sort((a, b) => b.score - a.score).slice(0, limit);
1574
- const formattedTraces = traces.map((trace) => ({
1575
- id: trace.id,
1576
- type: trace.type,
1577
- score: trace.score.toFixed(2),
1578
- summary: trace.summary,
1579
- toolCount: trace.tools.length,
1580
- duration: `${((trace.metadata.endTime - trace.metadata.startTime) / 1e3).toFixed(1)}s`,
1581
- filesModified: trace.metadata.filesModified.length,
1582
- hasErrors: trace.metadata.errorsEncountered.length > 0,
1583
- compressed: !!trace.compressed
1584
- }));
1585
- return {
1586
- content: [
1587
- {
1588
- type: "text",
1589
- text: `Found ${formattedTraces.length} traces:
1590
-
1591
- ${formattedTraces.map(
1592
- (t) => `[${t.type}] Score: ${t.score} | Tools: ${t.toolCount} | Duration: ${t.duration}
1593
- ${t.summary}`
1594
- ).join("\n\n")}`
1595
- }
1596
- ]
1597
- };
1598
- }
1599
- async handleGetTraceStatistics(args) {
1600
- this.traceDetector.flush();
1601
- const stats = this.traceDetector.getStatistics();
1602
- const typeBreakdown = Object.entries(stats.tracesByType).map(([type, count]) => ` ${type}: ${count}`).join("\n");
1603
- return {
1604
- content: [
1605
- {
1606
- type: "text",
1607
- text: `**Trace Statistics**
1608
-
1609
- Total Traces: ${stats.totalTraces}
1610
- Average Score: ${stats.averageScore.toFixed(2)}
1611
- Average Length: ${stats.averageLength.toFixed(1)} tools
1612
- High Importance (>0.7): ${stats.highImportanceCount}
1613
- Compressed: ${stats.compressedCount}
1614
-
1615
- **Trace Types:**
1616
- ${typeBreakdown}`
1617
- }
1618
- ]
1619
- };
1620
- }
1621
- async handleFlushTraces(args) {
1622
- this.traceDetector.flush();
1623
- return {
1624
- content: [
1625
- {
1626
- type: "text",
1627
- text: "Pending traces have been flushed and finalized."
1628
- }
1629
- ]
1630
- };
1631
- }
1632
- async handleCompressOldTraces(args) {
1633
- const { ageHours = 24 } = args;
1634
- const compressedCount = this.traceDetector.compressOldTraces(ageHours);
1635
- return {
1636
- content: [
1637
- {
1638
- type: "text",
1639
- text: `Compressed ${compressedCount} traces older than ${ageHours} hours.`
1640
- }
1641
- ]
1642
- };
1643
- }
1644
- async handleSmartContext(args) {
1645
- const { query, tokenBudget = 4e3, forceRefresh = false } = args;
1646
- try {
1647
- const result = await this.contextRetrieval.retrieveContext(query, {
1648
- tokenBudget,
1649
- forceRefresh
1650
- });
1651
- const currentFrameId = this.frameManager.getCurrentFrameId();
1652
- if (currentFrameId) {
1653
- this.frameManager.addEvent("observation", {
1654
- action: "smart_context",
1655
- query,
1656
- framesRetrieved: result.frames.length,
1657
- tokenUsage: result.tokenUsage,
1658
- confidence: result.analysis.confidenceScore
1659
- });
1660
- }
1661
- let response = result.context;
1662
- response += `
1663
-
1664
- ---
1665
- \u{1F4CA} **Retrieval Stats**
1666
- `;
1667
- response += `- Frames included: ${result.frames.length}
1668
- `;
1669
- response += `- Tokens used: ${result.tokenUsage.used}/${result.tokenUsage.budget}
1670
- `;
1671
- response += `- Confidence: ${(result.analysis.confidenceScore * 100).toFixed(0)}%
1672
- `;
1673
- response += `- Time: ${result.metadata.retrievalTimeMs}ms`;
1674
- return {
1675
- content: [
1676
- {
1677
- type: "text",
1678
- text: response
1679
- }
1680
- ]
1681
- };
1682
- } catch (error) {
1683
- return {
1684
- content: [
1685
- {
1686
- type: "text",
1687
- text: `\u274C Context retrieval failed: ${error.message}`
1688
- }
1689
- ]
1690
- };
1691
- }
1692
- }
1693
- async handleGetSummary(args) {
1694
- const { forceRefresh = false } = args;
1695
- try {
1696
- const summary = this.contextRetrieval.getSummary(forceRefresh);
1697
- let response = "\u{1F4CB} **Compressed Memory Summary**\n\n";
1698
- response += "## Recent Session\n";
1699
- response += `- Frames: ${summary.recentSession.frames.length}
1700
- `;
1701
- response += `- Time range: ${new Date(summary.recentSession.timeRange.start).toLocaleString()} - ${new Date(summary.recentSession.timeRange.end).toLocaleString()}
1702
- `;
1703
- if (summary.recentSession.dominantOperations.length > 0) {
1704
- response += `- Dominant ops: ${summary.recentSession.dominantOperations.slice(0, 5).map((o) => `${o.operation}(${o.count})`).join(", ")}
1705
- `;
1706
- }
1707
- if (summary.recentSession.filesTouched.length > 0) {
1708
- response += `- Files touched: ${summary.recentSession.filesTouched.slice(0, 5).map((f) => f.path).join(", ")}
1709
- `;
1710
- }
1711
- if (summary.recentSession.errorsEncountered.length > 0) {
1712
- response += `- Errors: ${summary.recentSession.errorsEncountered.length}
1713
- `;
1714
- }
1715
- response += "\n## Historical Patterns\n";
1716
- response += `- Topic counts: ${Object.keys(summary.historicalPatterns.topicFrameCounts).length} topics
1717
- `;
1718
- if (summary.historicalPatterns.keyDecisions.length > 0) {
1719
- response += `
1720
- ### Key Decisions (${summary.historicalPatterns.keyDecisions.length})
1721
- `;
1722
- summary.historicalPatterns.keyDecisions.slice(0, 5).forEach((d) => {
1723
- response += `- ${d.text.substring(0, 80)}${d.text.length > 80 ? "..." : ""}
1724
- `;
1725
- });
1726
- }
1727
- if (summary.historicalPatterns.recurringIssues.length > 0) {
1728
- response += `
1729
- ### Recurring Issues (${summary.historicalPatterns.recurringIssues.length})
1730
- `;
1731
- summary.historicalPatterns.recurringIssues.slice(0, 3).forEach((i) => {
1732
- response += `- ${i.issueType} (${i.occurrenceCount} times)
1733
- `;
1734
- });
1735
- }
1736
- response += "\n## Available Indices\n";
1737
- response += `- By time: ${Object.keys(summary.queryableIndices.byTimeframe).length} periods
1738
- `;
1739
- response += `- By file: ${Object.keys(summary.queryableIndices.byFile).length} files
1740
- `;
1741
- response += `- By topic: ${Object.keys(summary.queryableIndices.byTopic).length} topics
1742
- `;
1743
- response += `- By error: ${Object.keys(summary.queryableIndices.byErrorType).length} error types
1744
- `;
1745
- response += `
1746
- ## Stats
1747
- `;
1748
- response += `- Total frames: ${summary.stats.totalFrames}
1749
- `;
1750
- response += `- Total anchors: ${summary.stats.totalAnchors}
1751
- `;
1752
- response += `- Total events: ${summary.stats.totalEvents}
1753
- `;
1754
- response += `- Generated: ${new Date(summary.generatedAt).toLocaleString()}`;
1755
- return {
1756
- content: [
1757
- {
1758
- type: "text",
1759
- text: response
1760
- }
1761
- ]
1762
- };
1763
- } catch (error) {
1764
- return {
1765
- content: [
1766
- {
1767
- type: "text",
1768
- text: `\u274C Failed to get summary: ${error.message}`
1769
- }
1770
- ]
1771
- };
1772
- }
1773
- }
1774
- // ============================================
1775
- // Discovery Tools Handlers
1776
- // ============================================
1777
- async handleSmDiscover(args) {
1778
- return this.discoveryHandlers.handleDiscover(args);
1779
- }
1780
- async handleSmRelatedFiles(args) {
1781
- return this.discoveryHandlers.handleRelatedFiles(args);
1782
- }
1783
- async handleSmSessionSummary(args) {
1784
- return this.discoveryHandlers.handleSessionSummary(args);
1785
- }
1786
- async handleSmSearch(args) {
1787
- try {
1788
- const { query, scope = "all", limit = 20 } = args;
1789
- if (!query) {
1790
- throw new Error("Query is required");
1791
- }
1792
- const results = [];
1793
- if (scope === "all" || scope === "frames") {
1794
- const frames = this.db.prepare(
1795
- `
1796
- SELECT frame_id, name, type, created_at, inputs, outputs
1797
- FROM frames
1798
- WHERE project_id = ? AND (name LIKE ? OR inputs LIKE ? OR outputs LIKE ?)
1799
- ORDER BY created_at DESC
1800
- LIMIT ?
1801
- `
1802
- ).all(
1803
- this.projectId,
1804
- `%${query}%`,
1805
- `%${query}%`,
1806
- `%${query}%`,
1807
- limit
1808
- );
1809
- frames.forEach((f) => {
1810
- results.push({
1811
- type: "frame",
1812
- id: f.frame_id,
1813
- name: f.name,
1814
- frameType: f.type,
1815
- created: new Date(f.created_at * 1e3).toISOString()
1816
- });
1817
- });
1818
- }
1819
- if (scope === "all" || scope === "events") {
1820
- const events = this.db.prepare(
1821
- `
1822
- SELECT e.event_id, e.type, e.data, e.timestamp, f.name as frame_name
1823
- FROM events e
1824
- JOIN frames f ON e.frame_id = f.frame_id
1825
- WHERE f.project_id = ? AND e.data LIKE ?
1826
- ORDER BY e.timestamp DESC
1827
- LIMIT ?
1828
- `
1829
- ).all(this.projectId, `%${query}%`, limit);
1830
- events.forEach((e) => {
1831
- results.push({
1832
- type: "event",
1833
- id: e.event_id,
1834
- eventType: e.type,
1835
- frame: e.frame_name,
1836
- timestamp: new Date(e.timestamp * 1e3).toISOString()
1837
- });
1838
- });
1839
- }
1840
- if (scope === "all" || scope === "decisions") {
1841
- const anchors = this.db.prepare(
1842
- `
1843
- SELECT a.anchor_id, a.type, a.text, a.priority, a.created_at, f.name as frame_name
1844
- FROM anchors a
1845
- JOIN frames f ON a.frame_id = f.frame_id
1846
- WHERE f.project_id = ? AND a.text LIKE ?
1847
- ORDER BY a.created_at DESC
1848
- LIMIT ?
1849
- `
1850
- ).all(this.projectId, `%${query}%`, limit);
1851
- anchors.forEach((a) => {
1852
- results.push({
1853
- type: "decision",
1854
- id: a.anchor_id,
1855
- decisionType: a.type,
1856
- text: a.text,
1857
- priority: a.priority,
1858
- frame: a.frame_name
1859
- });
1860
- });
1861
- }
1862
- if (scope === "all" || scope === "tasks") {
1863
- try {
1864
- const tasks = this.db.prepare(
1865
- `
1866
- SELECT id, title, description, status, priority
1867
- FROM task_cache
1868
- WHERE title LIKE ? OR description LIKE ?
1869
- ORDER BY created_at DESC
1870
- LIMIT ?
1871
- `
1872
- ).all(`%${query}%`, `%${query}%`, limit);
1873
- tasks.forEach((t) => {
1874
- results.push({
1875
- type: "task",
1876
- id: t.id,
1877
- title: t.title,
1878
- status: t.status,
1879
- priority: t.priority
1880
- });
1881
- });
1882
- } catch {
1883
- }
1884
- }
1885
- let response = `# Search Results for "${query}"
1886
-
1887
- `;
1888
- response += `Found ${results.length} results
1889
-
1890
- `;
1891
- const grouped = results.reduce(
1892
- (acc, r) => {
1893
- if (!acc[r.type]) acc[r.type] = [];
1894
- acc[r.type].push(r);
1895
- return acc;
1896
- },
1897
- {}
1898
- );
1899
- for (const [type, items] of Object.entries(grouped)) {
1900
- response += `## ${type.charAt(0).toUpperCase() + type.slice(1)}s (${items.length})
1901
- `;
1902
- for (const item of items.slice(0, 10)) {
1903
- if (type === "frame") {
1904
- response += `- [${item.frameType}] ${item.name}
1905
- `;
1906
- } else if (type === "decision") {
1907
- response += `- [${item.decisionType}] ${item.text.slice(0, 60)}...
1908
- `;
1909
- } else if (type === "task") {
1910
- response += `- [${item.status}] ${item.title}
1911
- `;
1912
- } else {
1913
- response += `- ${JSON.stringify(item).slice(0, 80)}...
1914
- `;
1915
- }
1916
- }
1917
- response += "\n";
1918
- }
1919
- return {
1920
- content: [
1921
- {
1922
- type: "text",
1923
- text: response
1924
- }
1925
- ],
1926
- metadata: { results, query, scope }
1927
- };
1928
- } catch (error) {
1929
- return {
1930
- content: [
1931
- {
1932
- type: "text",
1933
- text: `\u274C Search failed: ${error.message}`
1934
- }
1935
- ]
1936
- };
1937
- }
1938
- }
1939
- async start() {
1940
- const transport = new StdioServerTransport();
1941
- await this.server.connect(transport);
1942
- console.error("StackMemory MCP Server started");
1943
- }
1944
- }
1945
- var server_default = LocalStackMemoryMCP;
1946
- async function runMCPServer() {
1947
- const server = new LocalStackMemoryMCP();
1948
- await server.start();
1949
- }
1950
- if (import.meta.url === `file://${process.argv[1]}`) {
1951
- const server = new LocalStackMemoryMCP();
1952
- server.start().catch(console.error);
1953
- }
1954
- export {
1955
- TaskPriority,
1956
- TaskStatus,
1957
- server_default as default,
1958
- runMCPServer
1959
- };
1960
- //# sourceMappingURL=server.js.map