@stackmemoryai/stackmemory 0.5.57 → 0.5.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/bin/codex-smd +6 -0
  2. package/dist/cli/codex-sm-danger.js +21 -0
  3. package/dist/cli/codex-sm-danger.js.map +7 -0
  4. package/dist/cli/commands/handoff.js +33 -3
  5. package/dist/cli/commands/handoff.js.map +2 -2
  6. package/dist/cli/commands/search.js +20 -3
  7. package/dist/cli/commands/search.js.map +2 -2
  8. package/dist/core/database/sqlite-adapter.js +13 -3
  9. package/dist/core/database/sqlite-adapter.js.map +2 -2
  10. package/dist/core/errors/error-utils.js +208 -0
  11. package/dist/core/errors/error-utils.js.map +7 -0
  12. package/dist/core/errors/index.js +13 -4
  13. package/dist/core/errors/index.js.map +2 -2
  14. package/dist/core/merge/unified-merge-resolver.js +303 -0
  15. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  16. package/dist/core/monitoring/logger.js +61 -9
  17. package/dist/core/monitoring/logger.js.map +2 -2
  18. package/dist/core/security/index.js +35 -0
  19. package/dist/core/security/index.js.map +7 -0
  20. package/dist/core/security/input-sanitizer.js +321 -0
  21. package/dist/core/security/input-sanitizer.js.map +7 -0
  22. package/dist/core/session/enhanced-handoff.js +136 -2
  23. package/dist/core/session/enhanced-handoff.js.map +3 -3
  24. package/dist/integrations/linear/client.js +5 -1
  25. package/dist/integrations/linear/client.js.map +2 -2
  26. package/dist/integrations/mcp/remote-server.js +27 -36
  27. package/dist/integrations/mcp/remote-server.js.map +2 -2
  28. package/dist/integrations/mcp/server.js +44 -29
  29. package/dist/integrations/mcp/server.js.map +3 -3
  30. package/dist/scripts/benchmark-performance.js +48 -0
  31. package/dist/scripts/benchmark-performance.js.map +7 -0
  32. package/dist/scripts/check-redis.js +42 -0
  33. package/dist/scripts/check-redis.js.map +7 -0
  34. package/dist/scripts/initialize.js +116 -0
  35. package/dist/scripts/initialize.js.map +7 -0
  36. package/dist/scripts/list-linear-tasks.js +124 -0
  37. package/dist/scripts/list-linear-tasks.js.map +7 -0
  38. package/dist/scripts/measure-handoff-impact.js +340 -0
  39. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  40. package/dist/scripts/query-chromadb.js +160 -0
  41. package/dist/scripts/query-chromadb.js.map +7 -0
  42. package/dist/scripts/show-linear-summary.js +119 -0
  43. package/dist/scripts/show-linear-summary.js.map +7 -0
  44. package/dist/scripts/simple-swarm-demo.js +90 -0
  45. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  46. package/dist/scripts/status.js +155 -0
  47. package/dist/scripts/status.js.map +7 -0
  48. package/dist/scripts/test-chromadb-sync.js +192 -0
  49. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  50. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  51. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  52. package/dist/scripts/test-ralph-iterations.js +121 -0
  53. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  54. package/dist/scripts/test-redis-storage.js +389 -0
  55. package/dist/scripts/test-redis-storage.js.map +7 -0
  56. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  57. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  58. package/dist/scripts/test-swarm-fixes.js +125 -0
  59. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  60. package/dist/scripts/test-swarm-tui.js +23 -0
  61. package/dist/scripts/test-swarm-tui.js.map +7 -0
  62. package/dist/scripts/test-tui-shortcuts.js +52 -0
  63. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  64. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  65. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  66. package/dist/src/agents/core/agent-task-manager.js +527 -0
  67. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  68. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  69. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  70. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  71. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  72. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  73. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  74. package/dist/src/cli/auto-detect.js +321 -0
  75. package/dist/src/cli/auto-detect.js.map +7 -0
  76. package/dist/src/cli/claude-sm-danger.js +21 -0
  77. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  78. package/dist/src/cli/claude-sm.js +1156 -0
  79. package/dist/src/cli/claude-sm.js.map +7 -0
  80. package/dist/src/cli/codex-sm-danger.js +21 -0
  81. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  82. package/dist/src/cli/codex-sm.js +349 -0
  83. package/dist/src/cli/codex-sm.js.map +7 -0
  84. package/dist/src/cli/commands/api.js +232 -0
  85. package/dist/src/cli/commands/api.js.map +7 -0
  86. package/dist/src/cli/commands/auto-background.js +180 -0
  87. package/dist/src/cli/commands/auto-background.js.map +7 -0
  88. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  89. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  90. package/dist/src/cli/commands/clear.js +202 -0
  91. package/dist/src/cli/commands/clear.js.map +7 -0
  92. package/dist/src/cli/commands/config.js +445 -0
  93. package/dist/src/cli/commands/config.js.map +7 -0
  94. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  95. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  96. package/dist/src/cli/commands/context.js +343 -0
  97. package/dist/src/cli/commands/context.js.map +7 -0
  98. package/dist/src/cli/commands/daemon.js +392 -0
  99. package/dist/src/cli/commands/daemon.js.map +7 -0
  100. package/dist/src/cli/commands/dashboard.js +210 -0
  101. package/dist/src/cli/commands/dashboard.js.map +7 -0
  102. package/dist/src/cli/commands/db.js +147 -0
  103. package/dist/src/cli/commands/db.js.map +7 -0
  104. package/dist/src/cli/commands/decision.js +266 -0
  105. package/dist/src/cli/commands/decision.js.map +7 -0
  106. package/dist/src/cli/commands/discovery.js +279 -0
  107. package/dist/src/cli/commands/discovery.js.map +7 -0
  108. package/dist/src/cli/commands/handoff.js +624 -0
  109. package/dist/src/cli/commands/handoff.js.map +7 -0
  110. package/dist/src/cli/commands/hooks.js +298 -0
  111. package/dist/src/cli/commands/hooks.js.map +7 -0
  112. package/dist/src/cli/commands/linear.js +529 -0
  113. package/dist/src/cli/commands/linear.js.map +7 -0
  114. package/dist/src/cli/commands/log.js +169 -0
  115. package/dist/src/cli/commands/log.js.map +7 -0
  116. package/dist/src/cli/commands/login.js +172 -0
  117. package/dist/src/cli/commands/login.js.map +7 -0
  118. package/dist/src/cli/commands/migrate.js +240 -0
  119. package/dist/src/cli/commands/migrate.js.map +7 -0
  120. package/dist/src/cli/commands/model.js +533 -0
  121. package/dist/src/cli/commands/model.js.map +7 -0
  122. package/dist/src/cli/commands/onboard.js +536 -0
  123. package/dist/src/cli/commands/onboard.js.map +7 -0
  124. package/dist/src/cli/commands/projects.js +199 -0
  125. package/dist/src/cli/commands/projects.js.map +7 -0
  126. package/dist/src/cli/commands/ralph.js +909 -0
  127. package/dist/src/cli/commands/ralph.js.map +7 -0
  128. package/dist/src/cli/commands/retrieval.js +248 -0
  129. package/dist/src/cli/commands/retrieval.js.map +7 -0
  130. package/dist/src/cli/commands/search.js +173 -0
  131. package/dist/src/cli/commands/search.js.map +7 -0
  132. package/dist/src/cli/commands/service.js +749 -0
  133. package/dist/src/cli/commands/service.js.map +7 -0
  134. package/dist/src/cli/commands/session.js +200 -0
  135. package/dist/src/cli/commands/session.js.map +7 -0
  136. package/dist/src/cli/commands/settings.js +306 -0
  137. package/dist/src/cli/commands/settings.js.map +7 -0
  138. package/dist/src/cli/commands/setup.js +701 -0
  139. package/dist/src/cli/commands/setup.js.map +7 -0
  140. package/dist/src/cli/commands/shell.js +249 -0
  141. package/dist/src/cli/commands/shell.js.map +7 -0
  142. package/dist/src/cli/commands/signup.js +50 -0
  143. package/dist/src/cli/commands/signup.js.map +7 -0
  144. package/dist/src/cli/commands/skills.js +470 -0
  145. package/dist/src/cli/commands/skills.js.map +7 -0
  146. package/dist/src/cli/commands/sms-notify.js +795 -0
  147. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  148. package/dist/src/cli/commands/storage-tier.js +183 -0
  149. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  150. package/dist/src/cli/commands/sweep.js +249 -0
  151. package/dist/src/cli/commands/sweep.js.map +7 -0
  152. package/dist/src/cli/commands/tasks.js +213 -0
  153. package/dist/src/cli/commands/tasks.js.map +7 -0
  154. package/dist/src/cli/commands/worktree.js +319 -0
  155. package/dist/src/cli/commands/worktree.js.map +7 -0
  156. package/dist/src/cli/index.js +594 -0
  157. package/dist/src/cli/index.js.map +7 -0
  158. package/dist/src/cli/opencode-sm.js +448 -0
  159. package/dist/src/cli/opencode-sm.js.map +7 -0
  160. package/dist/src/cli/utils/viewer.js +96 -0
  161. package/dist/src/cli/utils/viewer.js.map +7 -0
  162. package/dist/src/core/config/config-manager.js +398 -0
  163. package/dist/src/core/config/config-manager.js.map +7 -0
  164. package/dist/src/core/config/feature-flags.js +76 -0
  165. package/dist/src/core/config/feature-flags.js.map +7 -0
  166. package/dist/src/core/config/storage-config.js +115 -0
  167. package/dist/src/core/config/storage-config.js.map +7 -0
  168. package/dist/src/core/config/types.js +144 -0
  169. package/dist/src/core/config/types.js.map +7 -0
  170. package/dist/src/core/context/auto-context.js +80 -0
  171. package/dist/src/core/context/auto-context.js.map +7 -0
  172. package/dist/src/core/context/dual-stack-manager.js +870 -0
  173. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  174. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  175. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  176. package/dist/src/core/context/frame-database.js +479 -0
  177. package/dist/src/core/context/frame-database.js.map +7 -0
  178. package/dist/src/core/context/frame-digest.js +250 -0
  179. package/dist/src/core/context/frame-digest.js.map +7 -0
  180. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  181. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  182. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  183. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  184. package/dist/src/core/context/frame-recovery.js +302 -0
  185. package/dist/src/core/context/frame-recovery.js.map +7 -0
  186. package/dist/src/core/context/frame-stack.js +314 -0
  187. package/dist/src/core/context/frame-stack.js.map +7 -0
  188. package/dist/src/core/context/frame-types.js +5 -0
  189. package/dist/src/core/context/frame-types.js.map +7 -0
  190. package/dist/src/core/context/index.js +25 -0
  191. package/dist/src/core/context/index.js.map +7 -0
  192. package/dist/src/core/context/permission-manager.js +185 -0
  193. package/dist/src/core/context/permission-manager.js.map +7 -0
  194. package/dist/src/core/context/recursive-context-manager.js +592 -0
  195. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  196. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  197. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  198. package/dist/src/core/context/shared-context-layer.js +621 -0
  199. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  200. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  201. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  202. package/dist/src/core/context/validation.js +130 -0
  203. package/dist/src/core/context/validation.js.map +7 -0
  204. package/dist/src/core/database/batch-operations.js +384 -0
  205. package/dist/src/core/database/batch-operations.js.map +7 -0
  206. package/dist/src/core/database/connection-pool.js +330 -0
  207. package/dist/src/core/database/connection-pool.js.map +7 -0
  208. package/dist/src/core/database/database-adapter.js +60 -0
  209. package/dist/src/core/database/database-adapter.js.map +7 -0
  210. package/dist/src/core/database/migration-manager.js +614 -0
  211. package/dist/src/core/database/migration-manager.js.map +7 -0
  212. package/dist/src/core/database/query-cache.js +298 -0
  213. package/dist/src/core/database/query-cache.js.map +7 -0
  214. package/dist/src/core/database/query-router.js +430 -0
  215. package/dist/src/core/database/query-router.js.map +7 -0
  216. package/dist/src/core/database/sqlite-adapter.js +738 -0
  217. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  218. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  219. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  220. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  221. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  222. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  223. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  224. package/dist/src/core/digest/index.js +9 -0
  225. package/dist/src/core/digest/index.js.map +7 -0
  226. package/dist/src/core/digest/types.js +25 -0
  227. package/dist/src/core/digest/types.js.map +7 -0
  228. package/dist/src/core/errors/error-utils.js +208 -0
  229. package/dist/src/core/errors/error-utils.js.map +7 -0
  230. package/dist/src/core/errors/index.js +521 -0
  231. package/dist/src/core/errors/index.js.map +7 -0
  232. package/dist/src/core/errors/recovery.js +269 -0
  233. package/dist/src/core/errors/recovery.js.map +7 -0
  234. package/dist/src/core/execution/parallel-executor.js +258 -0
  235. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  236. package/dist/src/core/frame/workflow-templates.js +319 -0
  237. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  238. package/dist/src/core/merge/conflict-detector.js +431 -0
  239. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  240. package/dist/src/core/merge/index.js +9 -0
  241. package/dist/src/core/merge/index.js.map +7 -0
  242. package/dist/src/core/merge/resolution-engine.js +558 -0
  243. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  244. package/dist/src/core/merge/stack-diff.js +532 -0
  245. package/dist/src/core/merge/stack-diff.js.map +7 -0
  246. package/dist/src/core/merge/types.js +5 -0
  247. package/dist/src/core/merge/types.js.map +7 -0
  248. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  249. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  250. package/dist/src/core/models/fallback-monitor.js +232 -0
  251. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  252. package/dist/src/core/models/model-router.js +340 -0
  253. package/dist/src/core/models/model-router.js.map +7 -0
  254. package/dist/src/core/monitoring/error-handler.js +49 -0
  255. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  256. package/dist/src/core/monitoring/logger.js +202 -0
  257. package/dist/src/core/monitoring/logger.js.map +7 -0
  258. package/dist/src/core/monitoring/metrics.js +172 -0
  259. package/dist/src/core/monitoring/metrics.js.map +7 -0
  260. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  261. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  262. package/dist/src/core/monitoring/session-monitor.js +300 -0
  263. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  264. package/dist/src/core/performance/context-cache.js +273 -0
  265. package/dist/src/core/performance/context-cache.js.map +7 -0
  266. package/dist/src/core/performance/index.js +11 -0
  267. package/dist/src/core/performance/index.js.map +7 -0
  268. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  269. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  270. package/dist/src/core/performance/monitor.js +221 -0
  271. package/dist/src/core/performance/monitor.js.map +7 -0
  272. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  273. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  274. package/dist/src/core/performance/performance-benchmark.js +277 -0
  275. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  276. package/dist/src/core/performance/performance-profiler.js +370 -0
  277. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  278. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  279. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  280. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  281. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  282. package/dist/src/core/projects/project-isolation.js +201 -0
  283. package/dist/src/core/projects/project-isolation.js.map +7 -0
  284. package/dist/src/core/projects/project-manager.js +697 -0
  285. package/dist/src/core/projects/project-manager.js.map +7 -0
  286. package/dist/src/core/query/query-parser.js +370 -0
  287. package/dist/src/core/query/query-parser.js.map +7 -0
  288. package/dist/src/core/query/query-templates.js +321 -0
  289. package/dist/src/core/query/query-templates.js.map +7 -0
  290. package/dist/src/core/retrieval/context-retriever.js +479 -0
  291. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  292. package/dist/src/core/retrieval/index.js +8 -0
  293. package/dist/src/core/retrieval/index.js.map +7 -0
  294. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  295. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  296. package/dist/src/core/retrieval/llm-provider.js +151 -0
  297. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  298. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  299. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  300. package/dist/src/core/retrieval/summary-generator.js +589 -0
  301. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  302. package/dist/src/core/retrieval/types.js +21 -0
  303. package/dist/src/core/retrieval/types.js.map +7 -0
  304. package/dist/src/core/security/index.js +35 -0
  305. package/dist/src/core/security/index.js.map +7 -0
  306. package/dist/src/core/security/input-sanitizer.js +321 -0
  307. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  308. package/dist/src/core/session/clear-survival.js +465 -0
  309. package/dist/src/core/session/clear-survival.js.map +7 -0
  310. package/dist/src/core/session/enhanced-handoff.js +792 -0
  311. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  312. package/dist/src/core/session/handoff-generator.js +343 -0
  313. package/dist/src/core/session/handoff-generator.js.map +7 -0
  314. package/dist/src/core/session/index.js +15 -0
  315. package/dist/src/core/session/index.js.map +7 -0
  316. package/dist/src/core/session/session-manager.js +347 -0
  317. package/dist/src/core/session/session-manager.js.map +7 -0
  318. package/dist/src/core/skills/index.js +7 -0
  319. package/dist/src/core/skills/index.js.map +7 -0
  320. package/dist/src/core/skills/skill-storage.js +764 -0
  321. package/dist/src/core/skills/skill-storage.js.map +7 -0
  322. package/dist/src/core/skills/types.js +193 -0
  323. package/dist/src/core/skills/types.js.map +7 -0
  324. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  325. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  326. package/dist/src/core/storage/infinite-storage.js +510 -0
  327. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  328. package/dist/src/core/storage/remote-storage.js +489 -0
  329. package/dist/src/core/storage/remote-storage.js.map +7 -0
  330. package/dist/src/core/storage/two-tier-storage.js +766 -0
  331. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  332. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  333. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  334. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  335. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  336. package/dist/src/core/trace/debug-trace.js +417 -0
  337. package/dist/src/core/trace/debug-trace.js.map +7 -0
  338. package/dist/src/core/trace/index.js +109 -0
  339. package/dist/src/core/trace/index.js.map +7 -0
  340. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  341. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  342. package/dist/src/core/trace/trace-detector.js +528 -0
  343. package/dist/src/core/trace/trace-detector.js.map +7 -0
  344. package/dist/src/core/trace/trace-store.js +345 -0
  345. package/dist/src/core/trace/trace-store.js.map +7 -0
  346. package/dist/src/core/trace/types.js +77 -0
  347. package/dist/src/core/trace/types.js.map +7 -0
  348. package/dist/src/core/types.js +5 -0
  349. package/dist/src/core/types.js.map +7 -0
  350. package/dist/src/core/utils/async-mutex.js +114 -0
  351. package/dist/src/core/utils/async-mutex.js.map +7 -0
  352. package/dist/src/core/utils/compression.js +83 -0
  353. package/dist/src/core/utils/compression.js.map +7 -0
  354. package/dist/src/core/utils/update-checker.js +218 -0
  355. package/dist/src/core/utils/update-checker.js.map +7 -0
  356. package/dist/src/core/worktree/worktree-manager.js +465 -0
  357. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  358. package/dist/src/daemon/daemon-config.js +149 -0
  359. package/dist/src/daemon/daemon-config.js.map +7 -0
  360. package/dist/src/daemon/services/context-service.js +122 -0
  361. package/dist/src/daemon/services/context-service.js.map +7 -0
  362. package/dist/src/daemon/services/linear-service.js +136 -0
  363. package/dist/src/daemon/services/linear-service.js.map +7 -0
  364. package/dist/src/daemon/session-daemon.js +312 -0
  365. package/dist/src/daemon/session-daemon.js.map +7 -0
  366. package/dist/src/daemon/unified-daemon.js +276 -0
  367. package/dist/src/daemon/unified-daemon.js.map +7 -0
  368. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  369. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  370. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  371. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  372. package/dist/src/features/analytics/index.js +18 -0
  373. package/dist/src/features/analytics/index.js.map +7 -0
  374. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  375. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  376. package/dist/src/features/analytics/types/metrics.js +5 -0
  377. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  378. package/dist/src/features/browser/browser-mcp.js +492 -0
  379. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  380. package/dist/src/features/sweep/index.js +20 -0
  381. package/dist/src/features/sweep/index.js.map +7 -0
  382. package/dist/src/features/sweep/prediction-client.js +155 -0
  383. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  384. package/dist/src/features/sweep/prompt-builder.js +85 -0
  385. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  386. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  387. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  388. package/dist/src/features/sweep/state-watcher.js +87 -0
  389. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  390. package/dist/src/features/sweep/status-bar.js +88 -0
  391. package/dist/src/features/sweep/status-bar.js.map +7 -0
  392. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  393. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  394. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  395. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  396. package/dist/src/features/sweep/types.js +18 -0
  397. package/dist/src/features/sweep/types.js.map +7 -0
  398. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  399. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  400. package/dist/src/features/tasks/task-aware-context.js +410 -0
  401. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  402. package/dist/src/features/tui/simple-monitor.js +116 -0
  403. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  404. package/dist/src/features/tui/swarm-monitor.js +648 -0
  405. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  406. package/dist/src/features/web/client/stores/task-store.js +26 -0
  407. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  408. package/dist/src/features/web/server/index.js +194 -0
  409. package/dist/src/features/web/server/index.js.map +7 -0
  410. package/dist/src/hooks/auto-background.js +151 -0
  411. package/dist/src/hooks/auto-background.js.map +7 -0
  412. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  413. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  414. package/dist/src/hooks/config.js +150 -0
  415. package/dist/src/hooks/config.js.map +7 -0
  416. package/dist/src/hooks/daemon.js +364 -0
  417. package/dist/src/hooks/daemon.js.map +7 -0
  418. package/dist/src/hooks/events.js +58 -0
  419. package/dist/src/hooks/events.js.map +7 -0
  420. package/dist/src/hooks/index.js +12 -0
  421. package/dist/src/hooks/index.js.map +7 -0
  422. package/dist/src/hooks/linear-task-picker.js +186 -0
  423. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  424. package/dist/src/hooks/schemas.js +197 -0
  425. package/dist/src/hooks/schemas.js.map +7 -0
  426. package/dist/src/hooks/secure-fs.js +49 -0
  427. package/dist/src/hooks/secure-fs.js.map +7 -0
  428. package/dist/src/hooks/security-logger.js +155 -0
  429. package/dist/src/hooks/security-logger.js.map +7 -0
  430. package/dist/src/hooks/session-summary.js +222 -0
  431. package/dist/src/hooks/session-summary.js.map +7 -0
  432. package/dist/src/hooks/sms-action-runner.js +371 -0
  433. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  434. package/dist/src/hooks/sms-notify.js +506 -0
  435. package/dist/src/hooks/sms-notify.js.map +7 -0
  436. package/dist/src/hooks/sms-watcher.js +93 -0
  437. package/dist/src/hooks/sms-watcher.js.map +7 -0
  438. package/dist/src/hooks/sms-webhook.js +555 -0
  439. package/dist/src/hooks/sms-webhook.js.map +7 -0
  440. package/dist/src/hooks/whatsapp-commands.js +479 -0
  441. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  442. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  443. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  444. package/dist/src/hooks/whatsapp-sync.js +409 -0
  445. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  446. package/dist/src/index.js +25 -0
  447. package/dist/src/index.js.map +7 -0
  448. package/dist/src/integrations/anthropic/client.js +263 -0
  449. package/dist/src/integrations/anthropic/client.js.map +7 -0
  450. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  451. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  452. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  453. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  454. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  455. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  456. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  457. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  458. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  459. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  460. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  461. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  462. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  463. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  464. package/dist/src/integrations/linear/auth.js +337 -0
  465. package/dist/src/integrations/linear/auth.js.map +7 -0
  466. package/dist/src/integrations/linear/auto-sync.js +258 -0
  467. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  468. package/dist/src/integrations/linear/client.js +634 -0
  469. package/dist/src/integrations/linear/client.js.map +7 -0
  470. package/dist/src/integrations/linear/config.js +130 -0
  471. package/dist/src/integrations/linear/config.js.map +7 -0
  472. package/dist/src/integrations/linear/migration.js +361 -0
  473. package/dist/src/integrations/linear/migration.js.map +7 -0
  474. package/dist/src/integrations/linear/oauth-server.js +454 -0
  475. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  476. package/dist/src/integrations/linear/rest-client.js +213 -0
  477. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  478. package/dist/src/integrations/linear/sync-manager.js +236 -0
  479. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  480. package/dist/src/integrations/linear/sync-service.js +231 -0
  481. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  482. package/dist/src/integrations/linear/sync.js +782 -0
  483. package/dist/src/integrations/linear/sync.js.map +7 -0
  484. package/dist/src/integrations/linear/types.js +5 -0
  485. package/dist/src/integrations/linear/types.js.map +7 -0
  486. package/dist/src/integrations/linear/unified-sync.js +589 -0
  487. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  488. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  489. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  490. package/dist/src/integrations/linear/webhook-server.js +218 -0
  491. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  492. package/dist/src/integrations/linear/webhook.js +291 -0
  493. package/dist/src/integrations/linear/webhook.js.map +7 -0
  494. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  495. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  496. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  497. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  498. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  499. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  500. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  501. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  502. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  503. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  504. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  505. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  506. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  507. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  508. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  509. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  510. package/dist/src/integrations/mcp/index.js +23 -0
  511. package/dist/src/integrations/mcp/index.js.map +7 -0
  512. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  513. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  514. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  515. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  516. package/dist/src/integrations/mcp/remote-server.js +682 -0
  517. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  518. package/dist/src/integrations/mcp/schemas.js +147 -0
  519. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  520. package/dist/src/integrations/mcp/server.js +1975 -0
  521. package/dist/src/integrations/mcp/server.js.map +7 -0
  522. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  523. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  524. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  525. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  526. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  527. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  528. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  529. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  530. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  531. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  532. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  533. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  534. package/dist/src/integrations/ralph/index.js +18 -0
  535. package/dist/src/integrations/ralph/index.js.map +7 -0
  536. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  537. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  538. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  539. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  540. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  541. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  542. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  543. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  544. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  545. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  546. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  547. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  548. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  549. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  550. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  551. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  552. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  553. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  554. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  555. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  556. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  557. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  558. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  559. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  560. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  561. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  562. package/dist/src/integrations/ralph/types.js +5 -0
  563. package/dist/src/integrations/ralph/types.js.map +7 -0
  564. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  565. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  566. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  567. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  568. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  569. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  570. package/dist/src/models/user.model.js +358 -0
  571. package/dist/src/models/user.model.js.map +7 -0
  572. package/dist/src/servers/production/auth-middleware.js +528 -0
  573. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  574. package/dist/src/services/config-service.js +65 -0
  575. package/dist/src/services/config-service.js.map +7 -0
  576. package/dist/src/services/context-service.js +194 -0
  577. package/dist/src/services/context-service.js.map +7 -0
  578. package/dist/src/skills/api-discovery.js +354 -0
  579. package/dist/src/skills/api-discovery.js.map +7 -0
  580. package/dist/src/skills/api-skill.js +475 -0
  581. package/dist/src/skills/api-skill.js.map +7 -0
  582. package/dist/src/skills/claude-skills.js +1061 -0
  583. package/dist/src/skills/claude-skills.js.map +7 -0
  584. package/dist/src/skills/dashboard-launcher.js +216 -0
  585. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  586. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  587. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  588. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  589. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  590. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  591. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  592. package/dist/src/types/task.js +5 -0
  593. package/dist/src/types/task.js.map +7 -0
  594. package/dist/src/utils/env.js +50 -0
  595. package/dist/src/utils/env.js.map +7 -0
  596. package/dist/src/utils/formatting.js +62 -0
  597. package/dist/src/utils/formatting.js.map +7 -0
  598. package/dist/src/utils/process-cleanup.js +136 -0
  599. package/dist/src/utils/process-cleanup.js.map +7 -0
  600. package/package.json +4 -3
  601. package/scripts/create-cleanup-issues.js +302 -0
  602. package/scripts/demos/browser-test.ts +39 -0
  603. package/scripts/demos/ralph-integration-demo.ts +244 -0
  604. package/scripts/demos/trace-demo.ts +214 -0
  605. package/scripts/demos/trace-detector.demo.ts +171 -0
  606. package/scripts/demos/trace-test.ts +67 -0
  607. package/scripts/initialize.ts +16 -7
  608. package/scripts/install.sh +14 -62
  609. package/scripts/status.ts +111 -46
  610. package/scripts/test-claude-config.sh +123 -0
  611. package/scripts/validate-claude-config.sh +155 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/cli/commands/worktree.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * Git Worktree Management CLI Commands\n * Handles multiple StackMemory instances across git worktrees\n */\n\nimport { Command } from 'commander';\nimport { WorktreeManager } from '../../core/worktree/worktree-manager.js';\nimport { ProjectManager } from '../../core/projects/project-manager.js';\nimport { FrameManager } from '../../core/context/index.js';\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport Database from 'better-sqlite3';\nimport { execSync, execFileSync } from 'child_process';\nimport shellEscape from 'shell-escape';\nimport { z } from 'zod';\n\n// Input validation schemas\nconst BranchNameSchema = z.string()\n .min(1, 'Branch name cannot be empty')\n .max(100, 'Branch name too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Branch name contains invalid characters')\n .refine(name => !name.includes('..'), 'Branch name cannot contain \"..\"')\n .refine(name => !name.includes(';'), 'Branch name cannot contain \";\"')\n .refine(name => !name.includes('&'), 'Branch name cannot contain \"&\"')\n .refine(name => !name.includes('|'), 'Branch name cannot contain \"|\"')\n .refine(name => !name.includes('$'), 'Branch name cannot contain \"$\"')\n .refine(name => !name.includes('`'), 'Branch name cannot contain \"`\"');\n\nconst PathSchema = z.string()\n .min(1, 'Path cannot be empty')\n .max(500, 'Path too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Path contains invalid characters')\n .refine(path => !path.includes('..'), 'Path cannot contain \"..\"');\n\nconst CommitSchema = z.string()\n .min(1, 'Commit reference cannot be empty')\n .max(100, 'Commit reference too long')\n .regex(/^[a-zA-Z0-9._/-]+$/, 'Commit reference contains invalid characters');\n\nexport function registerWorktreeCommands(program: Command): void {\n const worktree = program\n .command('worktree')\n .alias('wt')\n .description('Manage StackMemory across git worktrees');\n\n // Enable/disable worktree support\n worktree\n .command('enable')\n .description('Enable worktree support')\n .option(\n '--isolate',\n 'Isolate contexts between worktrees (default: true)',\n true\n )\n .option('--auto-detect', 'Auto-detect worktrees (default: true)', true)\n .option('--sync-interval <minutes>', 'Context sync interval', '15')\n .action(async (options) => {\n const manager = WorktreeManager.getInstance();\n\n manager.saveConfig({\n enabled: true,\n autoDetect: options.autoDetect,\n isolateContexts: options.isolate,\n shareGlobalContext: false,\n syncInterval: parseInt(options.syncInterval),\n });\n\n console.log(chalk.green('\u2713 Worktree support enabled'));\n\n // Auto-detect current worktrees\n const worktrees = manager.detectWorktrees();\n if (worktrees.length > 0) {\n console.log(chalk.cyan(`\\nDetected ${worktrees.length} worktree(s):`));\n worktrees.forEach((wt) => {\n const marker = wt.isMainWorktree ? ' (main)' : '';\n console.log(chalk.gray(` - ${wt.branch}${marker} at ${wt.path}`));\n });\n }\n });\n\n worktree\n .command('disable')\n .description('Disable worktree support')\n .action(() => {\n const manager = WorktreeManager.getInstance();\n manager.setEnabled(false);\n console.log(chalk.yellow('\u26A0 Worktree support disabled'));\n });\n\n // List all worktrees\n worktree\n .command('list')\n .alias('ls')\n .description('List all git worktrees with StackMemory status')\n .option('-v, --verbose', 'Show detailed information')\n .action((options) => {\n const manager = WorktreeManager.getInstance();\n const worktrees = manager.detectWorktrees();\n\n if (worktrees.length === 0) {\n console.log(chalk.yellow('No worktrees found in current repository'));\n return;\n }\n\n const table = new Table({\n head: ['Branch', 'Path', 'Type', 'Context', 'Last Activity'],\n style: { head: ['cyan'] },\n });\n\n for (const wt of worktrees) {\n const type = wt.isMainWorktree\n ? 'Main'\n : wt.isDetached\n ? 'Detached'\n : 'Branch';\n\n // Check for context\n let contextStatus = '\u2014';\n let lastActivity = '\u2014';\n\n try {\n const context = manager.getWorktreeContext(wt.path);\n if (existsSync(context.dbPath)) {\n contextStatus = '\u2713 Active';\n\n // Get last activity\n const db = new Database(context.dbPath);\n const lastEvent = db\n .prepare('SELECT MAX(created_at) as last FROM events')\n .get() as any;\n\n if (lastEvent?.last) {\n const date = new Date(lastEvent.last);\n lastActivity = date.toLocaleDateString();\n }\n\n db.close();\n } else {\n contextStatus = '\u25CB Not initialized';\n }\n } catch (error: unknown) {\n contextStatus = '\u2717 Error';\n }\n\n table.push([\n wt.branch || 'detached',\n options.verbose\n ? wt.path\n : `.../${wt.path.split('/').slice(-2).join('/')}`,\n type,\n contextStatus,\n lastActivity,\n ]);\n }\n\n console.log(chalk.cyan('\\nGit Worktrees:\\n'));\n console.log(table.toString());\n\n if (manager.isEnabled()) {\n console.log(chalk.gray('\\n\u2713 Worktree support is enabled'));\n const config = manager.getConfig();\n if (config.isolateContexts) {\n console.log(\n chalk.gray(' - Contexts are isolated between worktrees')\n );\n }\n if (config.autoDetect) {\n console.log(chalk.gray(' - Auto-detection is enabled'));\n }\n } else {\n console.log(chalk.gray('\\n\u25CB Worktree support is disabled'));\n console.log(\n chalk.gray(' Run \"stackmemory worktree enable\" to activate')\n );\n }\n });\n\n // Status of current worktree\n worktree\n .command('status')\n .description('Show status of current worktree')\n .action(async () => {\n const manager = WorktreeManager.getInstance();\n const currentPath = process.cwd();\n\n // Detect current worktree\n const worktrees = manager.detectWorktrees(currentPath);\n const current = worktrees.find((w: any) =>\n currentPath.startsWith(w.path)\n );\n\n if (!current) {\n console.log(chalk.yellow('Not in a git worktree'));\n return;\n }\n\n console.log(chalk.cyan('Current Worktree:\\n'));\n console.log(chalk.gray(' Branch:'), current.branch || 'detached');\n console.log(chalk.gray(' Path:'), current.path);\n console.log(\n chalk.gray(' Type:'),\n current.isMainWorktree ? 'Main' : 'Branch'\n );\n console.log(chalk.gray(' Commit:'), current.commit.substring(0, 8));\n\n if (manager.isEnabled()) {\n try {\n const context = manager.getWorktreeContext(current.path);\n console.log(chalk.gray(' Context Path:'), context.contextPath);\n\n if (existsSync(context.dbPath)) {\n const db = new Database(context.dbPath);\n\n // Get statistics\n const stats = db\n .prepare(\n `\n SELECT \n (SELECT COUNT(*) FROM frames) as frames,\n (SELECT COUNT(*) FROM events) as events,\n (SELECT COUNT(*) FROM contexts) as contexts\n `\n )\n .get() as any;\n\n console.log(chalk.cyan('\\nContext Statistics:'));\n console.log(chalk.gray(' Frames:'), stats.frames);\n console.log(chalk.gray(' Events:'), stats.events);\n console.log(chalk.gray(' Contexts:'), stats.contexts);\n\n db.close();\n } else {\n console.log(chalk.yellow('\\nContext not initialized'));\n console.log(chalk.gray(' Run \"stackmemory init\" to initialize'));\n }\n } catch (error: unknown) {\n console.log(\n chalk.red('\\nError accessing context:'),\n (error as Error).message\n );\n }\n } else {\n console.log(chalk.gray('\\nWorktree support is disabled'));\n }\n });\n\n // Create new worktree with StackMemory\n worktree\n .command('create <branch>')\n .description('Create new git worktree with StackMemory context')\n .option('-p, --path <path>', 'Worktree path (default: ../repo-branch)')\n .option('--from <commit>', 'Create branch from commit/branch')\n .option('--init', 'Initialize StackMemory immediately')\n .action(async (branch, options) => {\n const manager = WorktreeManager.getInstance();\n const projectManager = ProjectManager.getInstance();\n\n try {\n // Validate and sanitize inputs\n const validatedBranch = BranchNameSchema.parse(branch);\n \n // Get current project info\n const project = await projectManager.detectProject();\n const worktreePath = options.path || `../${project.name}-${validatedBranch}`;\n \n // Validate path if provided\n if (options.path) {\n PathSchema.parse(options.path);\n }\n \n // Validate commit reference if provided\n if (options.from) {\n CommitSchema.parse(options.from);\n }\n\n // Create git worktree using execFileSync for safety\n const gitArgs = ['worktree', 'add', '-b', validatedBranch, worktreePath];\n if (options.from) {\n gitArgs.push(options.from);\n }\n\n console.log(chalk.gray(`Creating worktree: git ${gitArgs.join(' ')}`));\n execFileSync('git', gitArgs, { stdio: 'inherit' });\n\n console.log(chalk.green(`\u2713 Created worktree at ${worktreePath}`));\n\n // Set up StackMemory context if enabled\n if (manager.isEnabled()) {\n const context = manager.getWorktreeContext(worktreePath);\n console.log(\n chalk.green(`\u2713 Created isolated context at ${context.contextPath}`)\n );\n\n if (options.init) {\n // Initialize StackMemory in new worktree\n const db = new Database(context.dbPath);\n new FrameManager(db, project.id);\n db.close();\n\n console.log(chalk.green('\u2713 StackMemory initialized in worktree'));\n }\n }\n\n console.log(chalk.cyan('\\nNext steps:'));\n console.log(chalk.gray(` cd ${worktreePath}`));\n if (!options.init && manager.isEnabled()) {\n console.log(chalk.gray(' stackmemory init'));\n }\n console.log(chalk.gray(' # Start working in isolated context'));\n } catch (error: unknown) {\n if (error instanceof z.ZodError) {\n console.error(chalk.red('Invalid input:'));\n error.errors.forEach(err => {\n console.error(chalk.red(` ${err.path.join('.')}: ${err.message}`));\n });\n } else {\n console.error(\n chalk.red('Failed to create worktree:'),\n (error as Error).message\n );\n }\n process.exit(1);\n }\n });\n\n // Sync contexts between worktrees\n worktree\n .command('sync')\n .description('Sync contexts between worktrees')\n .option('-s, --source <branch>', 'Source worktree branch')\n .option('-t, --target <branch>', 'Target worktree branch')\n .option('--type <type>', 'Sync type: push|pull|merge (default: merge)')\n .action(async (options) => {\n const manager = WorktreeManager.getInstance();\n\n if (!manager.isEnabled()) {\n console.log(chalk.yellow('Worktree support is not enabled'));\n console.log(chalk.gray('Run \"stackmemory worktree enable\" first'));\n return;\n }\n\n const worktrees = manager.detectWorktrees();\n\n // Find source and target\n let source = worktrees.find((w: any) => w.branch === options.source);\n let target = worktrees.find((w: any) => w.branch === options.target);\n\n if (!source || !target) {\n // Interactive selection if not specified\n const inquirer = await import('inquirer');\n\n if (!source) {\n const { sourceBranch } = await inquirer.default.prompt([\n {\n type: 'list',\n name: 'sourceBranch',\n message: 'Select source worktree:',\n choices: worktrees.map((w: any) => ({\n name: `${w.branch} (${w.path})`,\n value: w,\n })),\n },\n ]);\n source = sourceBranch;\n }\n\n if (!target) {\n const { targetBranch } = await inquirer.default.prompt([\n {\n type: 'list',\n name: 'targetBranch',\n message: 'Select target worktree:',\n choices: worktrees\n .filter((w: any) => w.path !== source!.path)\n .map((w: any) => ({\n name: `${w.branch} (${w.path})`,\n value: w,\n })),\n },\n ]);\n target = targetBranch;\n }\n }\n\n console.log(chalk.cyan('Syncing contexts:'));\n console.log(chalk.gray(' Source:'), source!.branch);\n console.log(chalk.gray(' Target:'), target!.branch);\n console.log(chalk.gray(' Type:'), options.type || 'merge');\n\n try {\n await manager.syncContexts(\n source!.path,\n target!.path,\n options.type || 'merge'\n );\n\n console.log(chalk.green('\u2713 Context sync completed'));\n } catch (error: unknown) {\n console.error(chalk.red('Sync failed:'), (error as Error).message);\n process.exit(1);\n }\n });\n\n // Clean up stale worktree contexts\n worktree\n .command('cleanup')\n .description('Clean up stale worktree contexts')\n .option('--dry-run', 'Show what would be cleaned without doing it')\n .action((options) => {\n const manager = WorktreeManager.getInstance();\n\n if (options.dryRun) {\n console.log(chalk.yellow('Dry run - no changes will be made'));\n }\n\n console.log(chalk.cyan('Checking for stale worktree contexts...'));\n\n if (!options.dryRun) {\n manager.cleanupStaleContexts();\n console.log(chalk.green('\u2713 Cleanup completed'));\n } else {\n const active = manager.detectWorktrees();\n const stored = manager.listActiveWorktrees();\n\n const activePaths = new Set(active.map((w: any) => w.path));\n const stale = stored.filter((w: any) => !activePaths.has(w.path));\n\n if (stale.length === 0) {\n console.log(chalk.green('No stale contexts found'));\n } else {\n console.log(chalk.yellow(`Found ${stale.length} stale context(s):`));\n stale.forEach((w) => {\n console.log(chalk.gray(` - ${w.branch} at ${w.path}`));\n });\n }\n }\n });\n\n // Switch to different worktree\n worktree\n .command('switch <branch>')\n .description('Switch to a different worktree')\n .action(async (branch) => {\n const manager = WorktreeManager.getInstance();\n const worktrees = manager.detectWorktrees();\n\n const target = worktrees.find((w: any) => w.branch === branch);\n if (!target) {\n console.log(chalk.red(`Worktree '${branch}' not found`));\n console.log(chalk.gray('\\nAvailable worktrees:'));\n worktrees.forEach((w) => {\n console.log(chalk.gray(` - ${w.branch}`));\n });\n process.exit(1);\n }\n\n console.log(chalk.cyan(`Switching to worktree: ${branch}`));\n console.log(chalk.gray(`Path: ${target.path}`));\n console.log(chalk.gray('\\nRun this command to switch:'));\n console.log(chalk.green(` cd ${target.path}`));\n\n if (manager.isEnabled() && !target.isMainWorktree) {\n console.log(chalk.gray('\\nThis worktree has an isolated context'));\n }\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,594 @@
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
+ process.env["STACKMEMORY_CLI"] = "true";
7
+ import { config as loadDotenv } from "dotenv";
8
+ loadDotenv({ quiet: true });
9
+ import { initializeTracing, trace } from "../core/trace/index.js";
10
+ initializeTracing();
11
+ import { program } from "commander";
12
+ import { logger } from "../core/monitoring/logger.js";
13
+ import { FrameManager } from "../core/context/index.js";
14
+ import { sessionManager, FrameQueryMode } from "../core/session/index.js";
15
+ import { sharedContextLayer } from "../core/context/shared-context-layer.js";
16
+ import { UpdateChecker } from "../core/utils/update-checker.js";
17
+ import { ProgressTracker } from "../core/monitoring/progress-tracker.js";
18
+ import { registerProjectCommands } from "./commands/projects.js";
19
+ import { createSessionCommands } from "./commands/session.js";
20
+ import { isFeatureEnabled, isLocalOnly } from "../core/config/feature-flags.js";
21
+ import { registerWorktreeCommands } from "./commands/worktree.js";
22
+ import { registerOnboardingCommand } from "./commands/onboard.js";
23
+ import { createTaskCommands } from "./commands/tasks.js";
24
+ import { createSearchCommand } from "./commands/search.js";
25
+ import { createLogCommand } from "./commands/log.js";
26
+ import { createContextCommands } from "./commands/context.js";
27
+ import { createConfigCommand } from "./commands/config.js";
28
+ import {
29
+ createCaptureCommand,
30
+ createRestoreCommand,
31
+ createAutoCaptureCommand
32
+ } from "./commands/handoff.js";
33
+ import {
34
+ createDecisionCommand,
35
+ createMemoryCommand
36
+ } from "./commands/decision.js";
37
+ import clearCommand from "./commands/clear.js";
38
+ import serviceCommand from "./commands/service.js";
39
+ import { registerLoginCommand } from "./commands/login.js";
40
+ import { registerSignupCommand } from "./commands/signup.js";
41
+ import { registerLogoutCommand, registerDbCommands } from "./commands/db.js";
42
+ import { createHooksCommand } from "./commands/hooks.js";
43
+ import { createDaemonCommand } from "./commands/daemon.js";
44
+ import { createSweepCommand } from "./commands/sweep.js";
45
+ import { createShellCommand } from "./commands/shell.js";
46
+ import { createAPICommand } from "./commands/api.js";
47
+ import { createCleanupProcessesCommand } from "./commands/cleanup-processes.js";
48
+ import { createAutoBackgroundCommand } from "./commands/auto-background.js";
49
+ import { createSettingsCommand } from "./commands/settings.js";
50
+ import { createRetrievalCommands } from "./commands/retrieval.js";
51
+ import { createDiscoveryCommands } from "./commands/discovery.js";
52
+ import { createModelCommand } from "./commands/model.js";
53
+ import { registerSetupCommands } from "./commands/setup.js";
54
+ import { ProjectManager } from "../core/projects/project-manager.js";
55
+ import Database from "better-sqlite3";
56
+ import { join } from "path";
57
+ import { existsSync, mkdirSync } from "fs";
58
+ import inquirer from "inquirer";
59
+ import chalk from "chalk";
60
+ import { enableChromaDB } from "../core/config/storage-config.js";
61
+ import { spawn } from "child_process";
62
+ import { homedir } from "os";
63
+ import { createRequire } from "module";
64
+ const require2 = createRequire(import.meta.url);
65
+ const pkg = require2("../../package.json");
66
+ const VERSION = pkg.version;
67
+ UpdateChecker.checkForUpdates(VERSION, true).catch(() => {
68
+ });
69
+ async function startNotificationServices() {
70
+ if (isLocalOnly() || !isFeatureEnabled("whatsapp")) return;
71
+ try {
72
+ const { loadSMSConfig } = await import("../hooks/sms-notify.js");
73
+ const config = loadSMSConfig();
74
+ if (!config.enabled) return;
75
+ const WEBHOOK_PORT = 3456;
76
+ let webhookStarted = false;
77
+ let ngrokStarted = false;
78
+ const webhookRunning = await fetch(
79
+ `http://localhost:${WEBHOOK_PORT}/health`
80
+ ).then((r) => r.ok).catch(() => false);
81
+ if (!webhookRunning) {
82
+ const webhookPath = join(__dirname, "../hooks/sms-webhook.js");
83
+ const webhookProcess = spawn("node", [webhookPath], {
84
+ detached: true,
85
+ stdio: "ignore",
86
+ env: { ...process.env, SMS_WEBHOOK_PORT: String(WEBHOOK_PORT) }
87
+ });
88
+ webhookProcess.unref();
89
+ webhookStarted = true;
90
+ }
91
+ const ngrokRunning = await fetch("http://localhost:4040/api/tunnels").then((r) => r.ok).catch(() => false);
92
+ if (!ngrokRunning) {
93
+ const ngrokProcess = spawn("ngrok", ["http", String(WEBHOOK_PORT)], {
94
+ detached: true,
95
+ stdio: "ignore"
96
+ });
97
+ ngrokProcess.unref();
98
+ ngrokStarted = true;
99
+ }
100
+ if (webhookStarted || ngrokStarted) {
101
+ setTimeout(async () => {
102
+ try {
103
+ const tunnels = await fetch("http://localhost:4040/api/tunnels").then(
104
+ (r) => r.json()
105
+ );
106
+ const publicUrl = tunnels?.tunnels?.[0]?.public_url;
107
+ if (publicUrl) {
108
+ const configDir = join(homedir(), ".stackmemory");
109
+ const configPath = join(configDir, "ngrok-url.txt");
110
+ const { writeFileSync, mkdirSync: mkdirSync2, existsSync: existsSync2 } = await import("fs");
111
+ if (!existsSync2(configDir)) {
112
+ mkdirSync2(configDir, { recursive: true });
113
+ }
114
+ writeFileSync(configPath, publicUrl);
115
+ console.log(
116
+ chalk.gray(`[notify] Webhook: ${publicUrl}/sms/incoming`)
117
+ );
118
+ }
119
+ } catch {
120
+ }
121
+ }, 4e3);
122
+ }
123
+ } catch {
124
+ }
125
+ }
126
+ startNotificationServices();
127
+ program.name("stackmemory").description(
128
+ "Lossless memory runtime for AI coding tools - organizes context as a call stack instead of linear chat logs, with team collaboration and infinite retention"
129
+ ).version(VERSION);
130
+ program.command("init").description(
131
+ "Initialize StackMemory in current project (zero-config by default)"
132
+ ).option("-i, --interactive", "Interactive mode with configuration prompts").option(
133
+ "--chromadb",
134
+ "Enable ChromaDB for semantic search (prompts for API key)"
135
+ ).option("--daemon", "Start the background daemon after initialization").action(async (options) => {
136
+ try {
137
+ const projectRoot = process.cwd();
138
+ const dbDir = join(projectRoot, ".stackmemory");
139
+ const alreadyInit = existsSync(join(dbDir, "context.db"));
140
+ if (alreadyInit && !options.interactive) {
141
+ console.log(chalk.yellow("StackMemory already initialized."));
142
+ console.log(chalk.gray("Run with --interactive to reconfigure."));
143
+ return;
144
+ }
145
+ if (!existsSync(dbDir)) {
146
+ mkdirSync(dbDir, { recursive: true });
147
+ }
148
+ if (options.chromadb) {
149
+ await promptAndEnableChromaDB();
150
+ } else if (options.interactive && process.stdin.isTTY) {
151
+ console.log(chalk.cyan("\nStorage Configuration"));
152
+ console.log(
153
+ chalk.gray("SQLite (default) is fast and requires no setup.")
154
+ );
155
+ console.log(
156
+ chalk.gray("ChromaDB adds semantic search but requires an API key.\n")
157
+ );
158
+ const { enableChroma } = await inquirer.prompt([
159
+ {
160
+ type: "confirm",
161
+ name: "enableChroma",
162
+ message: "Enable ChromaDB for semantic search?",
163
+ default: false
164
+ }
165
+ ]);
166
+ if (enableChroma) {
167
+ await promptAndEnableChromaDB();
168
+ }
169
+ }
170
+ const dbPath = join(dbDir, "context.db");
171
+ const db = new Database(dbPath);
172
+ new FrameManager(db, "cli-project");
173
+ logger.info("StackMemory initialized successfully", { projectRoot });
174
+ console.log(chalk.green("\n[OK] StackMemory initialized"));
175
+ console.log(chalk.gray(` Project: ${projectRoot}`));
176
+ console.log(chalk.gray(` Storage: SQLite (local)`));
177
+ db.close();
178
+ if (options.daemon) {
179
+ console.log(chalk.cyan("\nInstalling background service..."));
180
+ try {
181
+ const { installServiceSilent } = await import("./commands/service.js");
182
+ const success = await installServiceSilent();
183
+ if (success) {
184
+ console.log(chalk.green("[OK] Guardian service installed"));
185
+ console.log(chalk.gray(" Auto-starts on login"));
186
+ console.log(
187
+ chalk.gray(" Check status: stackmemory service status")
188
+ );
189
+ } else {
190
+ console.log(chalk.yellow("[WARN] Could not install service"));
191
+ console.log(chalk.gray(" Run: stackmemory service install"));
192
+ }
193
+ } catch {
194
+ console.log(chalk.yellow("[WARN] Could not install service"));
195
+ console.log(chalk.gray(" Run: stackmemory service install"));
196
+ }
197
+ }
198
+ console.log(chalk.cyan("\nNext steps:"));
199
+ console.log(
200
+ chalk.white(" 1. stackmemory setup-mcp") + chalk.gray(" # Configure Claude Code integration")
201
+ );
202
+ console.log(
203
+ chalk.white(" 2. stackmemory status") + chalk.gray(" # Check status")
204
+ );
205
+ console.log(
206
+ chalk.white(" 3. stackmemory doctor") + chalk.gray(" # Diagnose issues")
207
+ );
208
+ } catch (error) {
209
+ logger.error("Failed to initialize StackMemory", error);
210
+ console.error(chalk.red("\n[ERROR] Initialization failed"));
211
+ console.error(chalk.gray(` Reason: ${error.message}`));
212
+ console.error(
213
+ chalk.gray(
214
+ " Fix: Ensure you have write permissions to the current directory"
215
+ )
216
+ );
217
+ console.error(chalk.gray(" Run: stackmemory doctor"));
218
+ process.exit(1);
219
+ }
220
+ });
221
+ async function promptAndEnableChromaDB() {
222
+ const answers = await inquirer.prompt([
223
+ {
224
+ type: "password",
225
+ name: "apiKey",
226
+ message: "Enter your ChromaDB API key:",
227
+ validate: (input) => {
228
+ if (!input || input.trim().length === 0) {
229
+ return "API key is required for ChromaDB";
230
+ }
231
+ return true;
232
+ }
233
+ },
234
+ {
235
+ type: "input",
236
+ name: "apiUrl",
237
+ message: "ChromaDB API URL (press Enter for default):",
238
+ default: "https://api.trychroma.com"
239
+ }
240
+ ]);
241
+ enableChromaDB({
242
+ apiKey: answers.apiKey,
243
+ apiUrl: answers.apiUrl
244
+ });
245
+ console.log(chalk.green("[OK] ChromaDB enabled for semantic search."));
246
+ console.log(
247
+ chalk.gray("API key saved to ~/.stackmemory/storage-config.json")
248
+ );
249
+ }
250
+ program.command("status").description("Show current StackMemory status").option("--all", "Show all active frames across sessions").option("--project", "Show all active frames in current project").option("--session <id>", "Show frames for specific session").action(async (options) => {
251
+ return trace.command("stackmemory-status", options, async () => {
252
+ try {
253
+ const projectRoot = process.cwd();
254
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
255
+ if (!existsSync(dbPath)) {
256
+ console.log(
257
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
258
+ );
259
+ return;
260
+ }
261
+ await UpdateChecker.checkForUpdates(VERSION);
262
+ await sessionManager.initialize();
263
+ await sharedContextLayer.initialize();
264
+ const session = await sessionManager.getOrCreateSession({
265
+ projectPath: projectRoot,
266
+ sessionId: options.session
267
+ });
268
+ const contextDiscovery = await sharedContextLayer.autoDiscoverContext();
269
+ if (contextDiscovery.hasSharedContext && contextDiscovery.sessionCount > 1) {
270
+ console.log(`
271
+ \u{1F4A1} Shared Context Available:`);
272
+ console.log(
273
+ ` ${contextDiscovery.sessionCount} sessions with shared context`
274
+ );
275
+ if (contextDiscovery.recentPatterns.length > 0) {
276
+ console.log(` Recent patterns:`);
277
+ contextDiscovery.recentPatterns.slice(0, 3).forEach((p) => {
278
+ console.log(
279
+ ` \u2022 ${p.type}: ${p.pattern.slice(0, 50)} (${p.frequency}x)`
280
+ );
281
+ });
282
+ }
283
+ if (contextDiscovery.lastDecisions.length > 0) {
284
+ console.log(
285
+ ` Last decision: ${contextDiscovery.lastDecisions[0].decision.slice(0, 60)}`
286
+ );
287
+ }
288
+ }
289
+ const db = new Database(dbPath);
290
+ const frameManager = new FrameManager(db, session.projectId);
291
+ if (options.all) {
292
+ frameManager.setQueryMode(FrameQueryMode.ALL_ACTIVE);
293
+ } else if (options.project) {
294
+ frameManager.setQueryMode(FrameQueryMode.PROJECT_ACTIVE);
295
+ }
296
+ const activeFrames = frameManager.getActiveFramePath();
297
+ const stackDepth = frameManager.getStackDepth();
298
+ const totalStats = db.prepare(
299
+ `
300
+ SELECT
301
+ COUNT(*) as total_frames,
302
+ SUM(CASE WHEN state = 'active' THEN 1 ELSE 0 END) as active_frames,
303
+ SUM(CASE WHEN state = 'closed' THEN 1 ELSE 0 END) as closed_frames,
304
+ COUNT(DISTINCT run_id) as total_sessions
305
+ FROM frames
306
+ WHERE project_id = ?
307
+ `
308
+ ).get(session.projectId);
309
+ const contextCount = db.prepare(
310
+ `
311
+ SELECT COUNT(*) as count FROM contexts
312
+ `
313
+ ).get();
314
+ const eventCount = db.prepare(
315
+ `
316
+ SELECT COUNT(*) as count FROM events e
317
+ JOIN frames f ON e.frame_id = f.frame_id
318
+ WHERE f.project_id = ?
319
+ `
320
+ ).get(session.projectId);
321
+ console.log("\u{1F4CA} StackMemory Status:");
322
+ console.log(
323
+ ` Session: ${session.sessionId.slice(0, 8)} (${session.state}, ${Math.round((Date.now() - session.startedAt) / 1e3 / 60)}min old)`
324
+ );
325
+ console.log(` Project: ${session.projectId}`);
326
+ if (session.branch) {
327
+ console.log(` Branch: ${session.branch}`);
328
+ }
329
+ console.log(`
330
+ Database Statistics (this project):`);
331
+ console.log(
332
+ ` Frames: ${totalStats.total_frames || 0} (${totalStats.active_frames || 0} active, ${totalStats.closed_frames || 0} closed)`
333
+ );
334
+ console.log(` Events: ${eventCount.count || 0}`);
335
+ console.log(` Sessions: ${totalStats.total_sessions || 0}`);
336
+ console.log(
337
+ ` Cached contexts: ${contextCount.count || 0} (global)`
338
+ );
339
+ const recentFrames = db.prepare(
340
+ `
341
+ SELECT name, type, state, datetime(created_at, 'unixepoch') as created
342
+ FROM frames
343
+ WHERE project_id = ?
344
+ ORDER BY created_at DESC
345
+ LIMIT 3
346
+ `
347
+ ).all(session.projectId);
348
+ if (recentFrames.length > 0) {
349
+ console.log(`
350
+ Recent Activity:`);
351
+ recentFrames.forEach((f) => {
352
+ const stateIcon = f.state === "active" ? "\u{1F7E2}" : "\u26AB";
353
+ console.log(
354
+ ` ${stateIcon} ${f.name} [${f.type}] - ${f.created}`
355
+ );
356
+ });
357
+ }
358
+ console.log(`
359
+ Current Session:`);
360
+ console.log(` Stack depth: ${stackDepth}`);
361
+ console.log(` Active frames: ${activeFrames.length}`);
362
+ if (activeFrames.length > 0) {
363
+ activeFrames.forEach((frame, i) => {
364
+ const indent = " " + " ".repeat(frame.depth || i);
365
+ const prefix = i === 0 ? "\u2514\u2500" : " \u2514\u2500";
366
+ console.log(`${indent}${prefix} ${frame.name} [${frame.type}]`);
367
+ });
368
+ }
369
+ if (!options.all && !options.project) {
370
+ const otherSessions = await sessionManager.listSessions({
371
+ projectId: session.projectId,
372
+ state: "active"
373
+ });
374
+ const otherActive = otherSessions.filter(
375
+ (s) => s.sessionId !== session.sessionId
376
+ );
377
+ if (otherActive.length > 0) {
378
+ console.log(`
379
+ Other Active Sessions (same project):`);
380
+ otherActive.forEach((s) => {
381
+ const age = Math.round(
382
+ (Date.now() - s.lastActiveAt) / 1e3 / 60 / 60
383
+ );
384
+ console.log(
385
+ ` - ${s.sessionId.slice(0, 8)}: ${s.branch || "main"}, ${age}h old`
386
+ );
387
+ });
388
+ console.log(`
389
+ Tip: Use --all to see frames across sessions`);
390
+ }
391
+ }
392
+ db.close();
393
+ } catch (error) {
394
+ logger.error("Failed to get status", error);
395
+ console.error("\u274C Status check failed:", error.message);
396
+ process.exit(1);
397
+ }
398
+ });
399
+ });
400
+ program.command("update-check").description("Check for StackMemory updates").action(async () => {
401
+ try {
402
+ console.log("\u{1F50D} Checking for updates...");
403
+ await UpdateChecker.forceCheck(VERSION);
404
+ } catch (error) {
405
+ logger.error("Update check failed", error);
406
+ console.error("\u274C Update check failed:", error.message);
407
+ process.exit(1);
408
+ }
409
+ });
410
+ program.command("progress").description("Show current progress and recent changes").action(async () => {
411
+ try {
412
+ const projectRoot = process.cwd();
413
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
414
+ if (!existsSync(dbPath)) {
415
+ console.log(
416
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
417
+ );
418
+ return;
419
+ }
420
+ const progress = new ProgressTracker(projectRoot);
421
+ console.log(progress.getSummary());
422
+ } catch (error) {
423
+ logger.error("Failed to show progress", error);
424
+ console.error("\u274C Failed to show progress:", error.message);
425
+ process.exit(1);
426
+ }
427
+ });
428
+ program.command("mcp-server").description("Start StackMemory MCP server for Claude Desktop").option("-p, --project <path>", "Project root directory", process.cwd()).action(async (options) => {
429
+ try {
430
+ const { runMCPServer } = await import("../integrations/mcp/server.js");
431
+ process.env["PROJECT_ROOT"] = options.project;
432
+ console.log("\u{1F680} Starting StackMemory MCP Server...");
433
+ console.log(` Project: ${options.project}`);
434
+ console.log(` Version: ${VERSION}`);
435
+ UpdateChecker.checkForUpdates(VERSION, true).catch(() => {
436
+ });
437
+ await runMCPServer();
438
+ } catch (error) {
439
+ logger.error("Failed to start MCP server", error);
440
+ console.error("\u274C MCP server failed:", error.message);
441
+ process.exit(1);
442
+ }
443
+ });
444
+ program.command("mcp-remote").description(
445
+ "Start StackMemory Remote MCP server (HTTP/SSE) for Claude.ai web"
446
+ ).option("-p, --port <number>", "Port to listen on", "3847").option("-d, --project <path>", "Project root directory", process.cwd()).action(async (options) => {
447
+ try {
448
+ const { runRemoteMCPServer } = await import("../integrations/mcp/remote-server.js");
449
+ const port = parseInt(options.port, 10);
450
+ console.log("Starting StackMemory Remote MCP Server...");
451
+ console.log(` Project: ${options.project}`);
452
+ console.log(` Version: ${VERSION}`);
453
+ console.log("");
454
+ await runRemoteMCPServer(port, options.project);
455
+ console.log("");
456
+ console.log("For Claude.ai web connector:");
457
+ console.log(` URL: http://localhost:${port}/sse`);
458
+ console.log("");
459
+ console.log("For external access (ngrok):");
460
+ console.log(` ngrok http ${port}`);
461
+ console.log(" Then use the ngrok URL + /sse in Claude.ai");
462
+ } catch (error) {
463
+ logger.error("Failed to start remote MCP server", error);
464
+ console.error("Remote MCP server failed:", error.message);
465
+ process.exit(1);
466
+ }
467
+ });
468
+ program.command("context:test").description("Test context persistence by creating sample frames").action(async () => {
469
+ try {
470
+ const projectRoot = process.cwd();
471
+ const dbPath = join(projectRoot, ".stackmemory", "context.db");
472
+ if (!existsSync(dbPath)) {
473
+ console.log(
474
+ '\u274C StackMemory not initialized. Run "stackmemory init" first.'
475
+ );
476
+ return;
477
+ }
478
+ const db = new Database(dbPath);
479
+ const frameManager = new FrameManager(db, "cli-project");
480
+ console.log("\u{1F4DD} Creating test context frames...");
481
+ const rootFrame = frameManager.createFrame({
482
+ type: "task",
483
+ name: "Test Session",
484
+ inputs: { test: true, timestamp: (/* @__PURE__ */ new Date()).toISOString() }
485
+ });
486
+ const taskFrame = frameManager.createFrame({
487
+ type: "subtask",
488
+ name: "Sample Task",
489
+ inputs: { description: "Testing context persistence" },
490
+ parentFrameId: rootFrame
491
+ });
492
+ const commandFrame = frameManager.createFrame({
493
+ type: "tool_scope",
494
+ name: "test-command",
495
+ inputs: { args: ["--test"] },
496
+ parentFrameId: taskFrame
497
+ });
498
+ frameManager.addEvent(
499
+ "observation",
500
+ {
501
+ message: "Test event recorded"
502
+ },
503
+ commandFrame
504
+ );
505
+ console.log("\u2705 Test frames created!");
506
+ console.log(`\u{1F4CA} Stack depth: ${frameManager.getStackDepth()}`);
507
+ console.log(
508
+ `\u{1F504} Active frames: ${frameManager.getActiveFramePath().length}`
509
+ );
510
+ frameManager.closeFrame(commandFrame);
511
+ console.log(
512
+ `\u{1F4CA} After closing command frame: depth = ${frameManager.getStackDepth()}`
513
+ );
514
+ db.close();
515
+ } catch (error) {
516
+ logger.error("Test context failed", error);
517
+ console.error("\u274C Test failed:", error.message);
518
+ process.exit(1);
519
+ }
520
+ });
521
+ registerOnboardingCommand(program);
522
+ registerSignupCommand(program);
523
+ registerLoginCommand(program);
524
+ registerLogoutCommand(program);
525
+ registerDbCommands(program);
526
+ registerProjectCommands(program);
527
+ registerWorktreeCommands(program);
528
+ if (isFeatureEnabled("linear")) {
529
+ import("./commands/linear.js").then(({ registerLinearCommands }) => registerLinearCommands(program)).catch(() => {
530
+ });
531
+ }
532
+ program.addCommand(createSessionCommands());
533
+ program.addCommand(createTaskCommands());
534
+ program.addCommand(createSearchCommand());
535
+ program.addCommand(createLogCommand());
536
+ program.addCommand(createContextCommands());
537
+ program.addCommand(createConfigCommand());
538
+ program.addCommand(createCaptureCommand());
539
+ program.addCommand(createRestoreCommand());
540
+ program.addCommand(createAutoCaptureCommand());
541
+ program.addCommand(createDecisionCommand());
542
+ program.addCommand(createMemoryCommand());
543
+ program.addCommand(clearCommand);
544
+ program.addCommand(serviceCommand);
545
+ program.addCommand(createHooksCommand());
546
+ if (isFeatureEnabled("skills")) {
547
+ import("./commands/skills.js").then(
548
+ ({ createSkillsCommand }) => program.addCommand(createSkillsCommand())
549
+ ).catch(() => {
550
+ });
551
+ }
552
+ if (isFeatureEnabled("ralph")) {
553
+ import("./commands/ralph.js").then(
554
+ ({ default: createRalphCommand }) => program.addCommand(createRalphCommand())
555
+ ).catch(() => {
556
+ });
557
+ }
558
+ program.addCommand(createDaemonCommand());
559
+ program.addCommand(createSweepCommand());
560
+ program.addCommand(createShellCommand());
561
+ program.addCommand(createAPICommand());
562
+ program.addCommand(createCleanupProcessesCommand());
563
+ program.addCommand(createAutoBackgroundCommand());
564
+ program.addCommand(createSettingsCommand());
565
+ if (isFeatureEnabled("whatsapp")) {
566
+ import("./commands/sms-notify.js").then(
567
+ ({ createSMSNotifyCommand }) => program.addCommand(createSMSNotifyCommand())
568
+ ).catch(() => {
569
+ });
570
+ }
571
+ program.addCommand(createRetrievalCommands());
572
+ program.addCommand(createDiscoveryCommands());
573
+ program.addCommand(createModelCommand());
574
+ registerSetupCommands(program);
575
+ program.command("dashboard").description("Display monitoring dashboard in terminal").option("-w, --watch", "Auto-refresh dashboard").option("-i, --interval <seconds>", "Refresh interval in seconds", "5").action(async (options) => {
576
+ const { dashboardCommand } = await import("./commands/dashboard.js");
577
+ await dashboardCommand.handler(options);
578
+ });
579
+ if (process.argv.length > 2) {
580
+ try {
581
+ const manager = ProjectManager.getInstance();
582
+ manager.detectProject().catch(() => {
583
+ });
584
+ } catch {
585
+ }
586
+ }
587
+ const isMainModule = import.meta.url === `file://${process.argv[1]}` || process.argv[1]?.endsWith("/stackmemory") || process.argv[1]?.endsWith("index.ts") || process.argv[1]?.includes("tsx");
588
+ if (isMainModule) {
589
+ program.parse();
590
+ }
591
+ export {
592
+ program
593
+ };
594
+ //# sourceMappingURL=index.js.map