@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,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/retrieval.ts"],
4
- "sourcesContent": ["/**\n * Retrieval CLI Commands\n * View and manage LLM-driven context retrieval settings and audit logs\n */\n\nimport { Command } from 'commander';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport chalk from 'chalk';\nimport { RetrievalAuditStore } from '../../core/retrieval/retrieval-audit.js';\n\nexport function createRetrievalCommands(): Command {\n const retrieval = new Command('retrieval')\n .alias('ret')\n .description('Manage LLM-driven context retrieval');\n\n // Audit subcommand\n retrieval\n .command('audit')\n .description('View retrieval audit log')\n .option('-l, --limit <n>', 'Number of entries to show', '10')\n .option('-q, --query <text>', 'Filter by query text')\n .option('-v, --verbose', 'Show full details')\n .action(async (options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n chalk.red('StackMemory not initialized in this directory.')\n );\n console.log(chalk.gray('Run \"stackmemory init\" first.'));\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n // Get project ID\n let projectId = 'default';\n try {\n const row = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (row?.value) projectId = row.value;\n } catch {\n // Use default\n }\n\n const auditStore = new RetrievalAuditStore(db, projectId);\n\n let entries;\n if (options.query) {\n entries = auditStore.searchByQuery(\n options.query,\n parseInt(options.limit)\n );\n console.log(\n chalk.blue(\n `\\nRetrieval audit entries matching \"${options.query}\":\\n`\n )\n );\n } else {\n entries = auditStore.getRecent(parseInt(options.limit));\n console.log(chalk.blue('\\nRecent retrieval audit entries:\\n'));\n }\n\n if (entries.length === 0) {\n console.log(chalk.gray('No audit entries found.'));\n console.log(\n chalk.gray(\n '\\nRetrieval audit records decisions made by the LLM-driven'\n )\n );\n console.log(\n chalk.gray(\n 'context retrieval system. Run some queries to generate entries.'\n )\n );\n return;\n }\n\n for (const entry of entries) {\n const date = new Date(entry.timestamp).toLocaleString();\n const providerIcon =\n entry.provider === 'anthropic'\n ? chalk.green('LLM')\n : entry.provider === 'cached'\n ? chalk.yellow('CACHE')\n : chalk.gray('HEUR');\n\n console.log(\n `${chalk.cyan(entry.id.slice(0, 8))} ${chalk.gray(date)} [${providerIcon}]`\n );\n console.log(\n ` Query: ${chalk.white(entry.query.slice(0, 60))}${entry.query.length > 60 ? '...' : ''}`\n );\n console.log(\n ` Confidence: ${formatConfidence(entry.confidenceScore)} | ` +\n `Tokens: ${entry.tokensUsed}/${entry.tokenBudget} | ` +\n `Time: ${entry.analysisTimeMs}ms | ` +\n `Complexity: ${entry.queryComplexity}`\n );\n\n if (options.verbose) {\n console.log(\n ` Frames: ${entry.framesRetrieved.join(', ') || 'none'}`\n );\n console.log(\n ` Reasoning: ${chalk.gray(entry.reasoning.slice(0, 200))}${entry.reasoning.length > 200 ? '...' : ''}`\n );\n }\n\n console.log('');\n }\n } finally {\n db.close();\n }\n });\n\n // Stats subcommand\n retrieval\n .command('stats')\n .description('Show retrieval statistics')\n .action(async () => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n chalk.red('StackMemory not initialized in this directory.')\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const row = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (row?.value) projectId = row.value;\n } catch {\n // Use default\n }\n\n const auditStore = new RetrievalAuditStore(db, projectId);\n const stats = auditStore.getStats();\n\n console.log(chalk.blue('\\nRetrieval Statistics\\n'));\n\n console.log(`Total retrievals: ${chalk.white(stats.totalRetrievals)}`);\n console.log(\n `Average confidence: ${formatConfidence(stats.avgConfidence)}`\n );\n console.log(\n `Average tokens used: ${chalk.white(Math.round(stats.avgTokensUsed))}`\n );\n console.log(\n `Average analysis time: ${chalk.white(Math.round(stats.avgAnalysisTime))}ms`\n );\n\n console.log('\\nProvider breakdown:');\n for (const [provider, count] of Object.entries(\n stats.providerBreakdown\n )) {\n const pct =\n stats.totalRetrievals > 0\n ? ((count / stats.totalRetrievals) * 100).toFixed(1)\n : '0';\n const icon =\n provider === 'anthropic'\n ? chalk.green('LLM')\n : provider === 'cached'\n ? chalk.yellow('CACHE')\n : chalk.gray('HEUR');\n console.log(` ${icon}: ${count} (${pct}%)`);\n }\n\n console.log('');\n } finally {\n db.close();\n }\n });\n\n // Reasoning subcommand - show detailed reasoning for a specific entry\n retrieval\n .command('reasoning <id>')\n .description('Show detailed reasoning for a retrieval decision')\n .action(async (id) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n chalk.red('StackMemory not initialized in this directory.')\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const row = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (row?.value) projectId = row.value;\n } catch {\n // Use default\n }\n\n const auditStore = new RetrievalAuditStore(db, projectId);\n\n // Try to find entry by partial ID\n const entries = auditStore.getRecent(100);\n const entry = entries.find((e) => e.id.startsWith(id));\n\n if (!entry) {\n console.log(\n chalk.red(`No audit entry found with ID starting with \"${id}\"`)\n );\n return;\n }\n\n console.log(chalk.blue('\\nRetrieval Decision Details\\n'));\n\n console.log(`ID: ${chalk.white(entry.id)}`);\n console.log(\n `Time: ${chalk.white(new Date(entry.timestamp).toLocaleString())}`\n );\n console.log(`Provider: ${chalk.white(entry.provider)}`);\n console.log(`Query: ${chalk.white(entry.query)}`);\n console.log(`Complexity: ${chalk.white(entry.queryComplexity)}`);\n console.log(`Confidence: ${formatConfidence(entry.confidenceScore)}`);\n console.log(\n `Tokens: ${chalk.white(`${entry.tokensUsed}/${entry.tokenBudget}`)}`\n );\n console.log(\n `Analysis Time: ${chalk.white(`${entry.analysisTimeMs}ms`)}`\n );\n\n console.log(chalk.blue('\\nReasoning:'));\n console.log(entry.reasoning);\n\n console.log(chalk.blue('\\nFrames Retrieved:'));\n if (entry.framesRetrieved.length === 0) {\n console.log(chalk.gray(' (none)'));\n } else {\n for (const frameId of entry.framesRetrieved) {\n console.log(` - ${frameId}`);\n }\n }\n\n console.log('');\n } finally {\n db.close();\n }\n });\n\n // Cleanup subcommand\n retrieval\n .command('cleanup')\n .description('Remove old audit entries')\n .option('-d, --days <n>', 'Keep entries from last N days', '7')\n .action(async (options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n chalk.red('StackMemory not initialized in this directory.')\n );\n return;\n }\n\n const db = new Database(dbPath);\n\n try {\n let projectId = 'default';\n try {\n const row = db\n .prepare(`SELECT value FROM metadata WHERE key = 'project_id'`)\n .get() as any;\n if (row?.value) projectId = row.value;\n } catch {\n // Use default\n }\n\n const auditStore = new RetrievalAuditStore(db, projectId);\n const days = parseInt(options.days);\n const maxAgeMs = days * 24 * 60 * 60 * 1000;\n const deleted = auditStore.cleanup(maxAgeMs);\n\n console.log(\n chalk.green(\n `Cleaned up ${deleted} old audit entries (older than ${days} days)`\n )\n );\n } finally {\n db.close();\n }\n });\n\n // Status subcommand - show current retrieval configuration\n retrieval\n .command('status')\n .description('Show current retrieval system status')\n .action(async () => {\n const hasApiKey = !!process.env['ANTHROPIC_API_KEY'];\n const model = process.env['ANTHROPIC_MODEL'] || 'claude-3-haiku-20240307';\n\n console.log(chalk.blue('\\nRetrieval System Status\\n'));\n\n if (hasApiKey) {\n console.log(`LLM Provider: ${chalk.green('Anthropic (active)')}`);\n console.log(`Model: ${chalk.white(model)}`);\n } else {\n console.log(\n `LLM Provider: ${chalk.yellow('Heuristic fallback (no API key)')}`\n );\n console.log(\n chalk.gray('Set ANTHROPIC_API_KEY to enable LLM-driven retrieval')\n );\n }\n\n console.log(`Default Token Budget: ${chalk.white('8000')}`);\n console.log(`Confidence Threshold: ${chalk.white('0.6')}`);\n console.log(`Cache TTL: ${chalk.white('5 minutes')}`);\n\n console.log('');\n });\n\n return retrieval;\n}\n\nfunction formatConfidence(score: number): string {\n if (score >= 0.8) return chalk.green(`${(score * 100).toFixed(0)}%`);\n if (score >= 0.6) return chalk.yellow(`${(score * 100).toFixed(0)}%`);\n return chalk.red(`${(score * 100).toFixed(0)}%`);\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,156 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- import { Command } from "commander";
6
- import Database from "better-sqlite3";
7
- import { join } from "path";
8
- import { existsSync } from "fs";
9
- function createSearchCommand() {
10
- const search = new Command("search").alias("find").description("Search across tasks and context").argument("<query>", "Search query").option("-t, --tasks", "Search only tasks").option("-c, --context", "Search only context").option("-l, --limit <n>", "Limit results", "20").action(async (query, options) => {
11
- const projectRoot = process.cwd();
12
- const dbPath = join(projectRoot, ".stackmemory", "context.db");
13
- if (!existsSync(dbPath)) {
14
- console.log(
15
- '\u274C StackMemory not initialized. Run "stackmemory init" first.'
16
- );
17
- return;
18
- }
19
- const db = new Database(dbPath);
20
- const limit = parseInt(options.limit);
21
- const searchTasks = !options.context || options.tasks;
22
- const searchContext = !options.tasks || options.context;
23
- console.log(`
24
- \u{1F50D} Searching for "${query}"...
25
- `);
26
- let totalResults = 0;
27
- if (searchTasks) {
28
- try {
29
- const tasks = db.prepare(
30
- `
31
- SELECT id, title, description, status, priority, created_at
32
- FROM task_cache
33
- WHERE title LIKE ? OR description LIKE ?
34
- ORDER BY created_at DESC
35
- LIMIT ?
36
- `
37
- ).all(`%${query}%`, `%${query}%`, limit);
38
- if (tasks.length > 0) {
39
- console.log(`\u{1F4CB} Tasks (${tasks.length})
40
- `);
41
- const priorityIcon = {
42
- urgent: "\u{1F534}",
43
- high: "\u{1F7E0}",
44
- medium: "\u{1F7E1}",
45
- low: "\u{1F7E2}"
46
- };
47
- const statusIcon = {
48
- pending: "\u23F3",
49
- in_progress: "\u{1F504}",
50
- completed: "\u2705",
51
- blocked: "\u{1F6AB}"
52
- };
53
- tasks.forEach((task) => {
54
- const pIcon = priorityIcon[task.priority] || "\u26AA";
55
- const sIcon = statusIcon[task.status] || "\u26AA";
56
- console.log(`${sIcon} ${pIcon} ${task.title}`);
57
- if (task.description) {
58
- const desc = task.description.split("\n")[0];
59
- const matchIdx = desc.toLowerCase().indexOf(query.toLowerCase());
60
- if (matchIdx >= 0) {
61
- const start = Math.max(0, matchIdx - 20);
62
- const end = Math.min(
63
- desc.length,
64
- matchIdx + query.length + 20
65
- );
66
- const snippet = (start > 0 ? "..." : "") + desc.slice(start, end) + (end < desc.length ? "..." : "");
67
- console.log(` ${snippet}`);
68
- }
69
- }
70
- });
71
- console.log("");
72
- totalResults += tasks.length;
73
- }
74
- } catch (error) {
75
- }
76
- }
77
- if (searchContext) {
78
- try {
79
- const contexts = db.prepare(
80
- `
81
- SELECT id, type, name, metadata, created_at
82
- FROM frames
83
- WHERE name LIKE ? OR metadata LIKE ?
84
- ORDER BY created_at DESC
85
- LIMIT ?
86
- `
87
- ).all(`%${query}%`, `%${query}%`, limit);
88
- if (contexts.length > 0) {
89
- console.log(`\u{1F4C1} Context Frames (${contexts.length})
90
- `);
91
- const typeIcon = {
92
- session: "\u{1F537}",
93
- task: "\u{1F4CB}",
94
- command: "\u26A1",
95
- file: "\u{1F4C4}",
96
- decision: "\u{1F4A1}"
97
- };
98
- contexts.forEach((ctx) => {
99
- const icon = typeIcon[ctx.type] || "\u{1F4E6}";
100
- const date = new Date(ctx.created_at * 1e3).toLocaleDateString();
101
- console.log(
102
- `${icon} [${ctx.type}] ${ctx.name || ctx.id.slice(0, 10)}`
103
- );
104
- console.log(` Created: ${date}`);
105
- });
106
- console.log("");
107
- totalResults += contexts.length;
108
- }
109
- } catch (error) {
110
- }
111
- }
112
- if (searchContext) {
113
- try {
114
- const events = db.prepare(
115
- `
116
- SELECT id, type, data, timestamp
117
- FROM events
118
- WHERE data LIKE ?
119
- ORDER BY timestamp DESC
120
- LIMIT ?
121
- `
122
- ).all(`%${query}%`, limit);
123
- if (events.length > 0) {
124
- console.log(`\u{1F4DD} Events (${events.length})
125
- `);
126
- events.forEach((evt) => {
127
- const date = new Date(evt.timestamp * 1e3).toLocaleDateString();
128
- let data = {};
129
- try {
130
- data = JSON.parse(evt.data);
131
- } catch {
132
- }
133
- const summary = data.content || data.message || data.decision || evt.type;
134
- console.log(`\u26A1 [${evt.type}] ${String(summary).slice(0, 60)}`);
135
- console.log(` ${date}`);
136
- });
137
- console.log("");
138
- totalResults += events.length;
139
- }
140
- } catch (error) {
141
- }
142
- }
143
- db.close();
144
- if (totalResults === 0) {
145
- console.log("No results found.\n");
146
- } else {
147
- console.log(`Found ${totalResults} results.
148
- `);
149
- }
150
- });
151
- return search;
152
- }
153
- export {
154
- createSearchCommand
155
- };
156
- //# sourceMappingURL=search.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/search.ts"],
4
- "sourcesContent": ["/**\n * Search Command for StackMemory CLI\n * Search across tasks and context\n */\n\nimport { Command } from 'commander';\nimport Database from 'better-sqlite3';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\n\nexport function createSearchCommand(): Command {\n const search = new Command('search')\n .alias('find')\n .description('Search across tasks and context')\n .argument('<query>', 'Search query')\n .option('-t, --tasks', 'Search only tasks')\n .option('-c, --context', 'Search only context')\n .option('-l, --limit <n>', 'Limit results', '20')\n .action(async (query, options) => {\n const projectRoot = process.cwd();\n const dbPath = join(projectRoot, '.stackmemory', 'context.db');\n\n if (!existsSync(dbPath)) {\n console.log(\n '\u274C StackMemory not initialized. Run \"stackmemory init\" first.'\n );\n return;\n }\n\n const db = new Database(dbPath);\n const limit = parseInt(options.limit);\n const searchTasks = !options.context || options.tasks;\n const searchContext = !options.tasks || options.context;\n\n console.log(`\\n\uD83D\uDD0D Searching for \"${query}\"...\\n`);\n\n let totalResults = 0;\n\n // Search tasks\n if (searchTasks) {\n try {\n const tasks = db\n .prepare(\n `\n SELECT id, title, description, status, priority, created_at\n FROM task_cache \n WHERE title LIKE ? OR description LIKE ?\n ORDER BY created_at DESC\n LIMIT ?\n `\n )\n .all(`%${query}%`, `%${query}%`, limit) as any[];\n\n if (tasks.length > 0) {\n console.log(`\uD83D\uDCCB Tasks (${tasks.length})\\n`);\n\n const priorityIcon: Record<string, string> = {\n urgent: '\uD83D\uDD34',\n high: '\uD83D\uDFE0',\n medium: '\uD83D\uDFE1',\n low: '\uD83D\uDFE2',\n };\n const statusIcon: Record<string, string> = {\n pending: '\u23F3',\n in_progress: '\uD83D\uDD04',\n completed: '\u2705',\n blocked: '\uD83D\uDEAB',\n };\n\n tasks.forEach((task) => {\n const pIcon = priorityIcon[task.priority] || '\u26AA';\n const sIcon = statusIcon[task.status] || '\u26AA';\n console.log(`${sIcon} ${pIcon} ${task.title}`);\n\n // Highlight match in description\n if (task.description) {\n const desc = task.description.split('\\n')[0];\n const matchIdx = desc\n .toLowerCase()\n .indexOf(query.toLowerCase());\n if (matchIdx >= 0) {\n const start = Math.max(0, matchIdx - 20);\n const end = Math.min(\n desc.length,\n matchIdx + query.length + 20\n );\n const snippet =\n (start > 0 ? '...' : '') +\n desc.slice(start, end) +\n (end < desc.length ? '...' : '');\n console.log(` ${snippet}`);\n }\n }\n });\n console.log('');\n totalResults += tasks.length;\n }\n } catch (error: unknown) {\n // Task table might not exist\n }\n }\n\n // Search context/frames\n if (searchContext) {\n try {\n const contexts = db\n .prepare(\n `\n SELECT id, type, name, metadata, created_at\n FROM frames \n WHERE name LIKE ? OR metadata LIKE ?\n ORDER BY created_at DESC\n LIMIT ?\n `\n )\n .all(`%${query}%`, `%${query}%`, limit) as any[];\n\n if (contexts.length > 0) {\n console.log(`\uD83D\uDCC1 Context Frames (${contexts.length})\\n`);\n\n const typeIcon: Record<string, string> = {\n session: '\uD83D\uDD37',\n task: '\uD83D\uDCCB',\n command: '\u26A1',\n file: '\uD83D\uDCC4',\n decision: '\uD83D\uDCA1',\n };\n\n contexts.forEach((ctx) => {\n const icon = typeIcon[ctx.type] || '\uD83D\uDCE6';\n const date = new Date(ctx.created_at * 1000).toLocaleDateString();\n console.log(\n `${icon} [${ctx.type}] ${ctx.name || ctx.id.slice(0, 10)}`\n );\n console.log(` Created: ${date}`);\n });\n console.log('');\n totalResults += contexts.length;\n }\n } catch (error: unknown) {\n // Frames table might not exist\n }\n }\n\n // Search decisions/observations in events\n if (searchContext) {\n try {\n const events = db\n .prepare(\n `\n SELECT id, type, data, timestamp\n FROM events \n WHERE data LIKE ?\n ORDER BY timestamp DESC\n LIMIT ?\n `\n )\n .all(`%${query}%`, limit) as any[];\n\n if (events.length > 0) {\n console.log(`\uD83D\uDCDD Events (${events.length})\\n`);\n\n events.forEach((evt) => {\n const date = new Date(evt.timestamp * 1000).toLocaleDateString();\n let data: any = {};\n try {\n data = JSON.parse(evt.data);\n } catch {}\n\n const summary =\n data.content || data.message || data.decision || evt.type;\n console.log(`\u26A1 [${evt.type}] ${String(summary).slice(0, 60)}`);\n console.log(` ${date}`);\n });\n console.log('');\n totalResults += events.length;\n }\n } catch (error: unknown) {\n // Events table might not exist\n }\n }\n\n db.close();\n\n if (totalResults === 0) {\n console.log('No results found.\\n');\n } else {\n console.log(`Found ${totalResults} results.\\n`);\n }\n });\n\n return search;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/service.ts"],
4
- "sourcesContent": ["/**\n * Service command for StackMemory\n * Manages OS-level service installation for the guardian daemon\n *\n * The guardian service monitors ~/.stackmemory/sessions/ for active sessions\n * and starts context sync when activity is detected.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { spawn, execSync } from 'child_process';\nimport { existsSync, readFileSync } from 'fs';\nimport { SystemError, ErrorCode } from '../../core/errors/index.js';\n\ninterface ServiceConfig {\n platform: 'darwin' | 'linux' | 'unsupported';\n serviceDir: string;\n serviceName: string;\n serviceFile: string;\n logDir: string;\n}\n\nfunction getServiceConfig(): ServiceConfig {\n const home = process.env.HOME || '';\n const platform = process.platform;\n\n if (platform === 'darwin') {\n return {\n platform: 'darwin',\n serviceDir: path.join(home, 'Library', 'LaunchAgents'),\n serviceName: 'com.stackmemory.guardian',\n serviceFile: path.join(\n home,\n 'Library',\n 'LaunchAgents',\n 'com.stackmemory.guardian.plist'\n ),\n logDir: path.join(home, '.stackmemory', 'logs'),\n };\n } else if (platform === 'linux') {\n return {\n platform: 'linux',\n serviceDir: path.join(home, '.config', 'systemd', 'user'),\n serviceName: 'stackmemory-guardian',\n serviceFile: path.join(\n home,\n '.config',\n 'systemd',\n 'user',\n 'stackmemory-guardian.service'\n ),\n logDir: path.join(home, '.stackmemory', 'logs'),\n };\n }\n\n return {\n platform: 'unsupported',\n serviceDir: '',\n serviceName: '',\n serviceFile: '',\n logDir: path.join(home, '.stackmemory', 'logs'),\n };\n}\n\nfunction _getStackMemoryBinPath(): string {\n const localBin = path.join(process.cwd(), 'dist', 'cli', 'index.js');\n if (existsSync(localBin)) {\n return localBin;\n }\n const globalBin = path.join(\n process.env.HOME || '',\n '.stackmemory',\n 'bin',\n 'stackmemory'\n );\n if (existsSync(globalBin)) {\n return globalBin;\n }\n return 'npx stackmemory';\n}\nvoid _getStackMemoryBinPath;\n\nfunction getNodePath(): string {\n try {\n const nodePath = execSync('which node', { encoding: 'utf-8' }).trim();\n return nodePath;\n } catch {\n return '/usr/local/bin/node';\n }\n}\n\nfunction generateMacOSPlist(config: ServiceConfig): string {\n const home = process.env.HOME || '';\n const nodePath = getNodePath();\n const guardianScript = path.join(home, '.stackmemory', 'guardian.js');\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${config.serviceName}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${nodePath}</string>\n <string>${guardianScript}</string>\n </array>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>WorkingDirectory</key>\n <string>${home}/.stackmemory</string>\n\n <key>StandardOutPath</key>\n <string>${config.logDir}/guardian.log</string>\n\n <key>StandardErrorPath</key>\n <string>${config.logDir}/guardian.error.log</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n <key>HOME</key>\n <string>${home}</string>\n <key>PATH</key>\n <string>/usr/local/bin:/usr/bin:/bin</string>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>30</integer>\n</dict>\n</plist>`;\n}\n\nfunction generateLinuxSystemdService(config: ServiceConfig): string {\n const home = process.env.HOME || '';\n const nodePath = getNodePath();\n const guardianScript = path.join(home, '.stackmemory', 'guardian.js');\n\n return `[Unit]\nDescription=StackMemory Guardian Service\nDocumentation=https://github.com/stackmemoryai/stackmemory\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=${nodePath} ${guardianScript}\nRestart=on-failure\nRestartSec=30\nWorkingDirectory=${home}/.stackmemory\n\nEnvironment=HOME=${home}\nEnvironment=PATH=/usr/local/bin:/usr/bin:/bin\n\nStandardOutput=append:${config.logDir}/guardian.log\nStandardError=append:${config.logDir}/guardian.error.log\n\n[Install]\nWantedBy=default.target`;\n}\n\nfunction generateGuardianScript(): string {\n return `#!/usr/bin/env node\n/**\n * StackMemory Guardian Service\n * Monitors ~/.stackmemory/sessions/ for active sessions\n * and manages context sync accordingly.\n */\n\nconst fs = require('fs');\nconst path = require('path');\nconst { spawn } = require('child_process');\n\nconst HOME = process.env.HOME || '';\nconst SESSIONS_DIR = path.join(HOME, '.stackmemory', 'sessions');\nconst STATE_FILE = path.join(HOME, '.stackmemory', 'guardian.state');\nconst IDLE_TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes\n\nclass Guardian {\n constructor() {\n this.syncProcess = null;\n this.lastActivityTime = Date.now();\n this.activeSessions = new Set();\n this.checkInterval = null;\n }\n\n log(message, level = 'INFO') {\n const timestamp = new Date().toISOString();\n console.log('[' + timestamp + '] [' + level + '] ' + message);\n }\n\n async getActiveSessions() {\n const sessions = new Set();\n\n try {\n if (!fs.existsSync(SESSIONS_DIR)) {\n return sessions;\n }\n\n const files = fs.readdirSync(SESSIONS_DIR);\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const filePath = path.join(SESSIONS_DIR, file);\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n const session = JSON.parse(content);\n\n // Check if session is active (updated within last 5 minutes)\n const lastUpdate = new Date(session.lastActiveAt || session.startedAt).getTime();\n const fiveMinutesAgo = Date.now() - (5 * 60 * 1000);\n\n if (session.state === 'active' && lastUpdate > fiveMinutesAgo) {\n sessions.add(session.sessionId);\n }\n } catch (err) {\n // Skip invalid session files\n }\n }\n } catch (err) {\n this.log('Error reading sessions: ' + err.message, 'ERROR');\n }\n\n return sessions;\n }\n\n startContextSync() {\n if (this.syncProcess) {\n this.log('Context sync already running');\n return;\n }\n\n this.log('Starting context sync...');\n\n // Find stackmemory binary\n const stackmemoryPaths = [\n path.join(HOME, '.stackmemory', 'bin', 'stackmemory'),\n 'npx'\n ];\n\n let binPath = null;\n for (const p of stackmemoryPaths) {\n if (p === 'npx' || fs.existsSync(p)) {\n binPath = p;\n break;\n }\n }\n\n if (!binPath) {\n this.log('Cannot find stackmemory binary', 'ERROR');\n return;\n }\n\n const args = binPath === 'npx'\n ? ['stackmemory', 'monitor', '--daemon']\n : ['monitor', '--daemon'];\n\n this.syncProcess = spawn(binPath, args, {\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe']\n });\n\n this.syncProcess.stdout.on('data', (data) => {\n this.log('sync: ' + data.toString().trim());\n });\n\n this.syncProcess.stderr.on('data', (data) => {\n this.log('sync error: ' + data.toString().trim(), 'WARN');\n });\n\n this.syncProcess.on('exit', (code) => {\n this.log('Context sync exited with code: ' + code);\n this.syncProcess = null;\n });\n\n this.log('Context sync started');\n }\n\n stopContextSync() {\n if (!this.syncProcess) {\n return;\n }\n\n this.log('Stopping context sync...');\n\n try {\n this.syncProcess.kill('SIGTERM');\n this.syncProcess = null;\n this.log('Context sync stopped');\n } catch (err) {\n this.log('Error stopping sync: ' + err.message, 'ERROR');\n }\n }\n\n saveState() {\n const state = {\n lastCheck: new Date().toISOString(),\n activeSessions: Array.from(this.activeSessions),\n syncRunning: this.syncProcess !== null,\n lastActivity: new Date(this.lastActivityTime).toISOString()\n };\n\n try {\n fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));\n } catch (err) {\n this.log('Error saving state: ' + err.message, 'ERROR');\n }\n }\n\n async check() {\n const currentSessions = await this.getActiveSessions();\n const hadActivity = currentSessions.size > 0;\n\n if (hadActivity) {\n this.lastActivityTime = Date.now();\n }\n\n // Detect session changes\n const newSessions = [...currentSessions].filter(s => !this.activeSessions.has(s));\n const closedSessions = [...this.activeSessions].filter(s => !currentSessions.has(s));\n\n if (newSessions.length > 0) {\n this.log('New sessions detected: ' + newSessions.join(', '));\n if (!this.syncProcess) {\n this.startContextSync();\n }\n }\n\n if (closedSessions.length > 0) {\n this.log('Sessions closed: ' + closedSessions.join(', '));\n }\n\n this.activeSessions = currentSessions;\n\n // Check idle timeout\n const idleTime = Date.now() - this.lastActivityTime;\n if (this.syncProcess && currentSessions.size === 0 && idleTime > IDLE_TIMEOUT_MS) {\n this.log('No activity for 30 minutes, stopping sync');\n this.stopContextSync();\n }\n\n this.saveState();\n }\n\n async start() {\n this.log('StackMemory Guardian starting...');\n this.log('Monitoring: ' + SESSIONS_DIR);\n\n // Ensure directories exist\n const dirs = [\n SESSIONS_DIR,\n path.join(HOME, '.stackmemory', 'logs')\n ];\n\n for (const dir of dirs) {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n // Initial check\n await this.check();\n\n // Start monitoring loop (every 30 seconds)\n this.checkInterval = setInterval(() => this.check(), 30 * 1000);\n\n this.log('Guardian started successfully');\n\n // Handle shutdown signals\n process.on('SIGTERM', () => this.stop());\n process.on('SIGINT', () => this.stop());\n }\n\n stop() {\n this.log('Guardian stopping...');\n\n if (this.checkInterval) {\n clearInterval(this.checkInterval);\n }\n\n this.stopContextSync();\n\n // Clean up state file\n try {\n if (fs.existsSync(STATE_FILE)) {\n fs.unlinkSync(STATE_FILE);\n }\n } catch (err) {\n // Ignore\n }\n\n this.log('Guardian stopped');\n process.exit(0);\n }\n}\n\nconst guardian = new Guardian();\nguardian.start().catch(err => {\n console.error('Guardian failed to start:', err);\n process.exit(1);\n});\n`;\n}\n\nasync function installService(\n config: ServiceConfig,\n spinner: ora.Ora\n): Promise<void> {\n const home = process.env.HOME || '';\n\n // Create directories\n await fs.mkdir(config.serviceDir, { recursive: true });\n await fs.mkdir(config.logDir, { recursive: true });\n\n // Write guardian script\n const guardianPath = path.join(home, '.stackmemory', 'guardian.js');\n await fs.writeFile(guardianPath, generateGuardianScript(), 'utf-8');\n await fs.chmod(guardianPath, 0o755);\n\n if (config.platform === 'darwin') {\n // Write launchd plist\n const plistContent = generateMacOSPlist(config);\n await fs.writeFile(config.serviceFile, plistContent, 'utf-8');\n\n spinner.text = 'Loading service...';\n\n // Load the service\n try {\n execSync(`launchctl load -w \"${config.serviceFile}\"`, { stdio: 'pipe' });\n } catch {\n // Service might already be loaded, try unload first\n try {\n execSync(`launchctl unload \"${config.serviceFile}\"`, { stdio: 'pipe' });\n execSync(`launchctl load -w \"${config.serviceFile}\"`, {\n stdio: 'pipe',\n });\n } catch {\n throw new SystemError(\n 'Failed to load launchd service',\n ErrorCode.SERVICE_UNAVAILABLE,\n { platform: 'darwin', serviceFile: config.serviceFile }\n );\n }\n }\n\n spinner.succeed(chalk.green('Guardian service installed and started'));\n console.log(chalk.gray(`Service file: ${config.serviceFile}`));\n console.log(chalk.gray(`Guardian script: ${guardianPath}`));\n console.log(chalk.gray(`Logs: ${config.logDir}/guardian.log`));\n } else if (config.platform === 'linux') {\n // Write systemd service\n const serviceContent = generateLinuxSystemdService(config);\n await fs.writeFile(config.serviceFile, serviceContent, 'utf-8');\n\n spinner.text = 'Enabling service...';\n\n // Reload systemd and enable service\n try {\n execSync('systemctl --user daemon-reload', { stdio: 'pipe' });\n execSync(`systemctl --user enable ${config.serviceName}`, {\n stdio: 'pipe',\n });\n execSync(`systemctl --user start ${config.serviceName}`, {\n stdio: 'pipe',\n });\n } catch {\n throw new SystemError(\n 'Failed to enable systemd service. Make sure systemd user session is available.',\n ErrorCode.SERVICE_UNAVAILABLE,\n { platform: 'linux', serviceName: config.serviceName }\n );\n }\n\n spinner.succeed(chalk.green('Guardian service installed and started'));\n console.log(chalk.gray(`Service file: ${config.serviceFile}`));\n console.log(chalk.gray(`Guardian script: ${guardianPath}`));\n console.log(chalk.gray(`Logs: ${config.logDir}/guardian.log`));\n }\n}\n\nasync function uninstallService(\n config: ServiceConfig,\n spinner: ora.Ora\n): Promise<void> {\n const home = process.env.HOME || '';\n const guardianPath = path.join(home, '.stackmemory', 'guardian.js');\n\n if (config.platform === 'darwin') {\n spinner.text = 'Unloading service...';\n\n try {\n execSync(`launchctl unload \"${config.serviceFile}\"`, { stdio: 'pipe' });\n } catch {\n // Service might not be loaded\n }\n\n // Remove plist file\n try {\n await fs.unlink(config.serviceFile);\n } catch {\n // File might not exist\n }\n\n // Remove guardian script\n try {\n await fs.unlink(guardianPath);\n } catch {\n // File might not exist\n }\n\n spinner.succeed(chalk.green('Guardian service uninstalled'));\n } else if (config.platform === 'linux') {\n spinner.text = 'Stopping service...';\n\n try {\n execSync(`systemctl --user stop ${config.serviceName}`, {\n stdio: 'pipe',\n });\n execSync(`systemctl --user disable ${config.serviceName}`, {\n stdio: 'pipe',\n });\n } catch {\n // Service might not be running\n }\n\n // Remove service file\n try {\n await fs.unlink(config.serviceFile);\n } catch {\n // File might not exist\n }\n\n // Remove guardian script\n try {\n await fs.unlink(guardianPath);\n } catch {\n // File might not exist\n }\n\n // Reload systemd\n try {\n execSync('systemctl --user daemon-reload', { stdio: 'pipe' });\n } catch {\n // Ignore\n }\n\n spinner.succeed(chalk.green('Guardian service uninstalled'));\n }\n}\n\nasync function showServiceStatus(config: ServiceConfig): Promise<void> {\n const home = process.env.HOME || '';\n const stateFile = path.join(home, '.stackmemory', 'guardian.state');\n\n console.log(chalk.bold('\\nStackMemory Guardian Service Status\\n'));\n\n if (config.platform === 'unsupported') {\n console.log(chalk.red('Platform not supported for service installation'));\n console.log(\n chalk.gray('Supported platforms: macOS (launchd), Linux (systemd)')\n );\n return;\n }\n\n // Check if service file exists\n if (!existsSync(config.serviceFile)) {\n console.log(chalk.yellow('Service not installed'));\n console.log(chalk.gray('Install with: stackmemory service install'));\n return;\n }\n\n let isRunning = false;\n let serviceOutput = '';\n\n if (config.platform === 'darwin') {\n try {\n serviceOutput = execSync(`launchctl list | grep ${config.serviceName}`, {\n encoding: 'utf-8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n isRunning = serviceOutput.includes(config.serviceName);\n } catch {\n isRunning = false;\n }\n } else if (config.platform === 'linux') {\n try {\n serviceOutput = execSync(\n `systemctl --user is-active ${config.serviceName}`,\n { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }\n ).trim();\n isRunning = serviceOutput === 'active';\n } catch {\n isRunning = false;\n }\n }\n\n if (isRunning) {\n console.log(chalk.green('Status: Running'));\n } else {\n console.log(chalk.yellow('Status: Stopped'));\n }\n\n console.log(chalk.gray(`Platform: ${config.platform}`));\n console.log(chalk.gray(`Service: ${config.serviceName}`));\n console.log(chalk.gray(`Config: ${config.serviceFile}`));\n\n // Try to read guardian state\n if (existsSync(stateFile)) {\n try {\n const state = JSON.parse(readFileSync(stateFile, 'utf-8'));\n console.log(chalk.bold('\\nGuardian State:'));\n console.log(` Last check: ${state.lastCheck}`);\n console.log(` Active sessions: ${state.activeSessions?.length || 0}`);\n console.log(` Sync running: ${state.syncRunning ? 'Yes' : 'No'}`);\n console.log(` Last activity: ${state.lastActivity}`);\n } catch {\n // Invalid state file\n }\n }\n}\n\nasync function showServiceLogs(\n config: ServiceConfig,\n lines: number\n): Promise<void> {\n console.log(\n chalk.bold(`\\nStackMemory Guardian Logs (last ${lines} lines)\\n`)\n );\n\n const logFile = path.join(config.logDir, 'guardian.log');\n\n if (!existsSync(logFile)) {\n console.log(chalk.yellow('No logs found'));\n console.log(chalk.gray(`Expected at: ${logFile}`));\n return;\n }\n\n try {\n const content = readFileSync(logFile, 'utf-8');\n const logLines = content.split('\\n').filter(Boolean);\n const lastLines = logLines.slice(-lines);\n\n lastLines.forEach((line) => {\n if (line.includes('[ERROR]')) {\n console.log(chalk.red(line));\n } else if (line.includes('[WARN]')) {\n console.log(chalk.yellow(line));\n } else {\n console.log(chalk.gray(line));\n }\n });\n\n console.log(chalk.gray(`\\nFull log: ${logFile}`));\n } catch (err) {\n console.log(chalk.red(`Failed to read logs: ${(err as Error).message}`));\n }\n}\n\n/**\n * Install service silently (for use by init --daemon)\n * Returns true on success, false on failure\n */\nexport async function installServiceSilent(): Promise<boolean> {\n try {\n const config = getServiceConfig();\n\n if (config.platform === 'unsupported') {\n return false;\n }\n\n const home = process.env.HOME || '';\n\n // Create directories\n await fs.mkdir(config.serviceDir, { recursive: true });\n await fs.mkdir(config.logDir, { recursive: true });\n\n // Write guardian script\n const guardianPath = path.join(home, '.stackmemory', 'guardian.js');\n await fs.writeFile(guardianPath, generateGuardianScript(), 'utf-8');\n await fs.chmod(guardianPath, 0o755);\n\n if (config.platform === 'darwin') {\n const plistContent = generateMacOSPlist(config);\n await fs.writeFile(config.serviceFile, plistContent, 'utf-8');\n\n try {\n execSync(`launchctl load -w \"${config.serviceFile}\"`, {\n stdio: 'pipe',\n });\n } catch {\n try {\n execSync(`launchctl unload \"${config.serviceFile}\"`, {\n stdio: 'pipe',\n });\n execSync(`launchctl load -w \"${config.serviceFile}\"`, {\n stdio: 'pipe',\n });\n } catch {\n return false;\n }\n }\n return true;\n } else if (config.platform === 'linux') {\n const serviceContent = generateLinuxSystemdService(config);\n await fs.writeFile(config.serviceFile, serviceContent, 'utf-8');\n\n try {\n execSync('systemctl --user daemon-reload', { stdio: 'pipe' });\n execSync(`systemctl --user enable ${config.serviceName}`, {\n stdio: 'pipe',\n });\n execSync(`systemctl --user start ${config.serviceName}`, {\n stdio: 'pipe',\n });\n } catch {\n return false;\n }\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\nexport function createServiceCommand(): Command {\n const cmd = new Command('service')\n .description('Manage StackMemory guardian OS service (auto-start on login)')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory service install Install and start the guardian service\n stackmemory service uninstall Remove the guardian service\n stackmemory service status Show service status\n stackmemory service logs Show recent service logs\n stackmemory service logs -n 50 Show last 50 log lines\n\nThe guardian service:\n - Monitors ~/.stackmemory/sessions/ for active sessions\n - Starts context sync when an active session is detected\n - Stops gracefully after 30 minutes of inactivity\n - Runs automatically on system login (opt-in)\n`\n );\n\n cmd\n .command('install')\n .description('Install the guardian service (starts on login)')\n .action(async () => {\n const spinner = ora('Installing guardian service...').start();\n\n try {\n const config = getServiceConfig();\n\n if (config.platform === 'unsupported') {\n spinner.fail(chalk.red('Platform not supported'));\n console.log(\n chalk.gray('Supported: macOS (launchd), Linux (systemd)')\n );\n process.exit(1);\n }\n\n await installService(config, spinner);\n\n console.log(chalk.bold('\\nGuardian service will:'));\n console.log(' - Start automatically on login');\n console.log(' - Monitor for active StackMemory sessions');\n console.log(' - Manage context sync based on activity');\n console.log(' - Stop gracefully after 30 min idle');\n } catch (err) {\n spinner.fail(\n chalk.red(`Installation failed: ${(err as Error).message}`)\n );\n process.exit(1);\n }\n });\n\n cmd\n .command('uninstall')\n .description('Remove the guardian service')\n .action(async () => {\n const spinner = ora('Uninstalling guardian service...').start();\n\n try {\n const config = getServiceConfig();\n\n if (config.platform === 'unsupported') {\n spinner.fail(chalk.red('Platform not supported'));\n process.exit(1);\n }\n\n await uninstallService(config, spinner);\n } catch (err) {\n spinner.fail(\n chalk.red(`Uninstallation failed: ${(err as Error).message}`)\n );\n process.exit(1);\n }\n });\n\n cmd\n .command('status')\n .description('Show guardian service status')\n .action(async () => {\n try {\n const config = getServiceConfig();\n await showServiceStatus(config);\n } catch (err) {\n console.error(\n chalk.red(`Status check failed: ${(err as Error).message}`)\n );\n process.exit(1);\n }\n });\n\n cmd\n .command('logs')\n .description('Show recent guardian service logs')\n .option('-n, --lines <number>', 'Number of log lines to show', '20')\n .option('-f, --follow', 'Follow log output (tail -f style)')\n .action(async (options) => {\n try {\n const config = getServiceConfig();\n const lines = parseInt(options.lines) || 20;\n\n if (options.follow) {\n // Use tail -f for live following\n const logFile = path.join(config.logDir, 'guardian.log');\n console.log(chalk.bold(`Following ${logFile} (Ctrl+C to stop)\\n`));\n\n const tail = spawn('tail', ['-f', '-n', lines.toString(), logFile], {\n stdio: 'inherit',\n });\n\n process.on('SIGINT', () => {\n tail.kill();\n process.exit(0);\n });\n } else {\n await showServiceLogs(config, lines);\n }\n } catch (err) {\n console.error(\n chalk.red(`Failed to show logs: ${(err as Error).message}`)\n );\n process.exit(1);\n }\n });\n\n // Default action - show status\n cmd.action(async () => {\n try {\n const config = getServiceConfig();\n await showServiceStatus(config);\n } catch (err) {\n console.error(\n chalk.red(`Status check failed: ${(err as Error).message}`)\n );\n process.exit(1);\n }\n });\n\n return cmd;\n}\n\nexport default createServiceCommand();\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/session.ts"],
4
- "sourcesContent": ["/**\n * Session Management CLI Commands\n * Provides commands for managing StackMemory sessions\n */\n\nimport { Command } from 'commander';\nimport { sessionManager } from '../../core/session/index.js';\nimport { logger } from '../../core/monitoring/logger.js';\nimport chalk from 'chalk';\n\nexport function createSessionCommands(): Command {\n const sessionCommand = new Command('session').description(\n 'Manage StackMemory sessions'\n );\n\n sessionCommand\n .command('list')\n .description('List all sessions')\n .option('--project', 'Show only sessions for current project')\n .option('--active', 'Show only active sessions')\n .option('--all', 'Show all sessions including closed')\n .action(async (options) => {\n try {\n await sessionManager.initialize();\n\n const filter: any = {};\n if (options.project) {\n const projectHash = await getProjectHash();\n filter.projectId = projectHash;\n }\n if (options.active && !options.all) {\n filter.state = 'active';\n }\n\n const sessions = await sessionManager.listSessions(filter);\n\n if (sessions.length === 0) {\n console.log('No sessions found');\n return;\n }\n\n console.log(chalk.bold('\\n\uD83D\uDCCB StackMemory Sessions:\\n'));\n\n sessions.forEach((session) => {\n const age = formatAge(Date.now() - session.lastActiveAt);\n const status =\n session.state === 'active'\n ? chalk.green('\u25CF')\n : session.state === 'suspended'\n ? chalk.yellow('\u25CF')\n : chalk.gray('\u25CF');\n\n console.log(`${status} ${chalk.bold(session.sessionId.slice(0, 8))}`);\n console.log(` Project: ${session.projectId}`);\n if (session.branch) {\n console.log(` Branch: ${session.branch}`);\n }\n console.log(` State: ${session.state}`);\n console.log(` Last active: ${age} ago`);\n console.log('');\n });\n\n console.log(chalk.gray(`Total: ${sessions.length} session(s)`));\n } catch (error: unknown) {\n logger.error('Failed to list sessions', error as Error);\n console.error('\u274C Failed to list sessions:', (error as Error).message);\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('current')\n .description('Show current session information')\n .action(async () => {\n try {\n await sessionManager.initialize();\n const session = sessionManager.getCurrentSession();\n\n if (!session) {\n console.log('No active session');\n return;\n }\n\n const duration = formatDuration(Date.now() - session.startedAt);\n\n console.log(chalk.bold('\\n\uD83D\uDD0D Current Session:\\n'));\n console.log(`Session ID: ${chalk.cyan(session.sessionId)}`);\n console.log(`Run ID: ${session.runId}`);\n console.log(`Project: ${session.projectId}`);\n if (session.branch) {\n console.log(`Branch: ${session.branch}`);\n }\n console.log(`State: ${session.state}`);\n console.log(`Duration: ${duration}`);\n\n if (session.metadata.user) {\n console.log(`User: ${session.metadata.user}`);\n }\n if (session.metadata.tags && session.metadata.tags.length > 0) {\n console.log(`Tags: ${session.metadata.tags.join(', ')}`);\n }\n } catch (error: unknown) {\n logger.error('Failed to show current session', error as Error);\n console.error(\n '\u274C Failed to show current session:',\n (error as Error).message\n );\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('switch <sessionId>')\n .description('Switch to a different session')\n .action(async (sessionId) => {\n try {\n await sessionManager.initialize();\n\n // Suspend current session\n const current = sessionManager.getCurrentSession();\n if (current) {\n await sessionManager.suspendSession();\n console.log(`Suspended session: ${current.sessionId.slice(0, 8)}`);\n }\n\n // Resume target session\n const session = await sessionManager.resumeSession(sessionId);\n console.log(\n chalk.green(\n `\u2705 Switched to session: ${session.sessionId.slice(0, 8)}`\n )\n );\n console.log(` Project: ${session.projectId}`);\n if (session.branch) {\n console.log(` Branch: ${session.branch}`);\n }\n } catch (error: unknown) {\n logger.error('Failed to switch session', error as Error);\n console.error('\u274C Failed to switch session:', (error as Error).message);\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('suspend [sessionId]')\n .description('Suspend a session (current if not specified)')\n .action(async (sessionId) => {\n try {\n await sessionManager.initialize();\n await sessionManager.suspendSession(sessionId);\n\n const id = sessionId || sessionManager.getCurrentSession()?.sessionId;\n console.log(chalk.yellow(`\u23F8\uFE0F Suspended session: ${id?.slice(0, 8)}`));\n } catch (error: unknown) {\n logger.error('Failed to suspend session', error as Error);\n console.error(\n '\u274C Failed to suspend session:',\n (error as Error).message\n );\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('resume <sessionId>')\n .description('Resume a suspended session')\n .action(async (sessionId) => {\n try {\n await sessionManager.initialize();\n const session = await sessionManager.resumeSession(sessionId);\n\n console.log(\n chalk.green(`\u25B6\uFE0F Resumed session: ${session.sessionId.slice(0, 8)}`)\n );\n console.log(` Project: ${session.projectId}`);\n if (session.branch) {\n console.log(` Branch: ${session.branch}`);\n }\n } catch (error: unknown) {\n logger.error('Failed to resume session', error as Error);\n console.error('\u274C Failed to resume session:', (error as Error).message);\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('merge <sourceId> <targetId>')\n .description('Merge two sessions')\n .action(async (sourceId, targetId) => {\n try {\n await sessionManager.initialize();\n const merged = await sessionManager.mergeSessions(sourceId, targetId);\n\n console.log(chalk.green(`\u2705 Merged sessions successfully`));\n console.log(` Target: ${merged.sessionId.slice(0, 8)}`);\n console.log(` Source ${sourceId.slice(0, 8)} has been closed`);\n } catch (error: unknown) {\n logger.error('Failed to merge sessions', error as Error);\n console.error('\u274C Failed to merge sessions:', (error as Error).message);\n process.exit(1);\n }\n });\n\n sessionCommand\n .command('cleanup')\n .description('Clean up old closed sessions')\n .option('--days <days>', 'Remove sessions older than N days', '30')\n .action(async (options) => {\n try {\n await sessionManager.initialize();\n\n const days = parseInt(options.days);\n const maxAge = days * 24 * 60 * 60 * 1000;\n const cleaned = await sessionManager.cleanupStaleSessions(maxAge);\n\n console.log(chalk.green(`\u2705 Cleaned up ${cleaned} old session(s)`));\n } catch (error: unknown) {\n logger.error('Failed to cleanup sessions', error as Error);\n console.error(\n '\u274C Failed to cleanup sessions:',\n (error as Error).message\n );\n process.exit(1);\n }\n });\n\n return sessionCommand;\n}\n\n// Helper functions\nasync function getProjectHash(): Promise<string> {\n const crypto = await import('crypto');\n const cwd = process.cwd();\n const hash = crypto.createHash('sha256');\n hash.update(cwd);\n return hash.digest('hex').substring(0, 12);\n}\n\nfunction formatAge(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n\n if (days > 0) return `${days}d`;\n if (hours > 0) return `${hours}h`;\n if (minutes > 0) return `${minutes}m`;\n return `${seconds}s`;\n}\n\nfunction formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n const h = hours;\n const m = minutes % 60;\n const s = seconds % 60;\n\n if (h > 0) return `${h}h ${m}m ${s}s`;\n if (m > 0) return `${m}m ${s}s`;\n return `${s}s`;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/settings.ts"],
4
- "sourcesContent": ["/**\n * CLI command for viewing and configuring StackMemory settings\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { existsSync, writeFileSync, mkdirSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport {\n loadSMSConfig,\n saveSMSConfig,\n getMissingConfig,\n type MessageChannel,\n} from '../../hooks/sms-notify.js';\n\nexport function createSettingsCommand(): Command {\n const cmd = new Command('settings')\n .description('View and configure StackMemory settings')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory settings Show all settings and missing config\n stackmemory settings notifications Configure notifications interactively\n stackmemory settings env Show required environment variables\n`\n );\n\n cmd\n .command('show')\n .description('Show current settings and what is missing')\n .action(() => {\n showSettings();\n });\n\n cmd\n .command('notifications')\n .alias('notify')\n .description('Configure notifications interactively')\n .action(async () => {\n await configureNotifications();\n });\n\n cmd\n .command('env')\n .description('Show required environment variables')\n .action(() => {\n showEnvVars();\n });\n\n // Default action - show settings\n cmd.action(() => {\n showSettings();\n });\n\n return cmd;\n}\n\nfunction showSettings(): void {\n console.log(chalk.blue.bold('\\nStackMemory Settings\\n'));\n\n // Notification settings\n const config = loadSMSConfig();\n const { missing, configured, ready } = getMissingConfig();\n\n console.log(chalk.cyan('Notifications:'));\n console.log(\n ` ${chalk.gray('Enabled:')} ${config.enabled ? chalk.green('yes') : chalk.yellow('no')}`\n );\n console.log(\n ` ${chalk.gray('Channel:')} ${config.channel === 'whatsapp' ? chalk.cyan('WhatsApp') : chalk.blue('SMS')}`\n );\n console.log(\n ` ${chalk.gray('Ready:')} ${ready ? chalk.green('yes') : chalk.red('no')}`\n );\n\n if (configured.length > 0) {\n console.log(`\\n ${chalk.green('Configured:')}`);\n configured.forEach((item) => {\n console.log(` ${chalk.green('\u2713')} ${item}`);\n });\n }\n\n if (missing.length > 0) {\n console.log(`\\n ${chalk.red('Missing:')}`);\n missing.forEach((item) => {\n console.log(` ${chalk.red('\u2717')} ${item}`);\n });\n\n console.log(\n chalk.yellow('\\n Run \"stackmemory settings notifications\" to configure')\n );\n }\n\n // Show ngrok URL if available\n const ngrokUrlPath = join(homedir(), '.stackmemory', 'ngrok-url.txt');\n if (existsSync(ngrokUrlPath)) {\n const ngrokUrl = readFileSync(ngrokUrlPath, 'utf8').trim();\n console.log(`\\n ${chalk.gray('Webhook URL:')} ${ngrokUrl}/sms/incoming`);\n }\n\n console.log();\n}\n\nfunction showEnvVars(): void {\n console.log(chalk.blue.bold('\\nRequired Environment Variables\\n'));\n\n const { missing, configured } = getMissingConfig();\n const config = loadSMSConfig();\n\n console.log(chalk.cyan('Twilio Credentials (required):'));\n console.log(\n ` ${configured.includes('TWILIO_ACCOUNT_SID') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_ACCOUNT_SID`\n );\n console.log(\n ` ${configured.includes('TWILIO_AUTH_TOKEN') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_AUTH_TOKEN`\n );\n\n console.log(\n chalk.cyan(\n `\\n${config.channel === 'whatsapp' ? 'WhatsApp' : 'SMS'} Numbers:`\n )\n );\n if (config.channel === 'whatsapp') {\n console.log(\n ` ${configured.includes('TWILIO_WHATSAPP_FROM') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_WHATSAPP_FROM`\n );\n console.log(\n ` ${configured.includes('TWILIO_WHATSAPP_TO') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_WHATSAPP_TO`\n );\n } else {\n console.log(\n ` ${configured.includes('TWILIO_SMS_FROM') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_SMS_FROM`\n );\n console.log(\n ` ${configured.includes('TWILIO_SMS_TO') ? chalk.green('\u2713') : chalk.red('\u2717')} TWILIO_SMS_TO`\n );\n }\n\n if (missing.length > 0) {\n console.log(chalk.yellow('\\nAdd to your .env file or shell profile:'));\n console.log(chalk.gray('\u2500'.repeat(50)));\n\n if (missing.includes('TWILIO_ACCOUNT_SID')) {\n console.log('export TWILIO_ACCOUNT_SID=\"your_account_sid\"');\n }\n if (missing.includes('TWILIO_AUTH_TOKEN')) {\n console.log('export TWILIO_AUTH_TOKEN=\"your_auth_token\"');\n }\n if (missing.includes('TWILIO_WHATSAPP_FROM')) {\n console.log(\n 'export TWILIO_WHATSAPP_FROM=\"+14155238886\" # Twilio sandbox'\n );\n }\n if (missing.includes('TWILIO_WHATSAPP_TO')) {\n console.log('export TWILIO_WHATSAPP_TO=\"+1234567890\" # Your phone');\n }\n if (missing.includes('TWILIO_SMS_FROM')) {\n console.log('export TWILIO_SMS_FROM=\"+1234567890\" # Twilio number');\n }\n if (missing.includes('TWILIO_SMS_TO')) {\n console.log('export TWILIO_SMS_TO=\"+1234567890\" # Your phone');\n }\n\n console.log(chalk.gray('\u2500'.repeat(50)));\n }\n\n console.log();\n}\n\nasync function configureNotifications(): Promise<void> {\n console.log(chalk.blue.bold('\\nNotification Setup\\n'));\n\n const config = loadSMSConfig();\n const { missing } = getMissingConfig();\n\n // Ask if they want to enable\n const { enable } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'enable',\n message: 'Enable SMS/WhatsApp notifications?',\n default: config.enabled,\n },\n ]);\n\n if (!enable) {\n config.enabled = false;\n saveSMSConfig(config);\n console.log(chalk.yellow('Notifications disabled'));\n return;\n }\n\n // Choose channel\n const { channel } = await inquirer.prompt([\n {\n type: 'list',\n name: 'channel',\n message: 'Which channel do you want to use?',\n choices: [\n {\n name: 'WhatsApp (recommended - cheaper for conversations)',\n value: 'whatsapp',\n },\n { name: 'SMS (requires A2P 10DLC registration for US)', value: 'sms' },\n ],\n default: config.channel,\n },\n ]);\n\n config.channel = channel as MessageChannel;\n\n // Check for missing credentials\n if (\n missing.includes('TWILIO_ACCOUNT_SID') ||\n missing.includes('TWILIO_AUTH_TOKEN')\n ) {\n console.log(chalk.yellow('\\nTwilio credentials not found in environment.'));\n\n const { hasAccount } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'hasAccount',\n message: 'Do you have a Twilio account?',\n default: true,\n },\n ]);\n\n if (!hasAccount) {\n console.log(chalk.cyan('\\nCreate a free Twilio account:'));\n console.log(' https://www.twilio.com/try-twilio\\n');\n console.log('Then run this command again.');\n return;\n }\n\n const { saveToEnv } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'saveToEnv',\n message: 'Would you like to save credentials to ~/.stackmemory/.env?',\n default: true,\n },\n ]);\n\n if (saveToEnv) {\n const { accountSid, authToken } = await inquirer.prompt([\n {\n type: 'input',\n name: 'accountSid',\n message: 'Twilio Account SID:',\n validate: (input: string) =>\n input.startsWith('AC') ? true : 'Account SID should start with AC',\n },\n {\n type: 'password',\n name: 'authToken',\n message: 'Twilio Auth Token:',\n mask: '*',\n },\n ]);\n\n saveToEnvFile({\n TWILIO_ACCOUNT_SID: accountSid,\n TWILIO_AUTH_TOKEN: authToken,\n });\n console.log(chalk.green('Credentials saved to ~/.stackmemory/.env'));\n }\n }\n\n // Get phone numbers\n if (channel === 'whatsapp') {\n console.log(chalk.cyan('\\nWhatsApp Setup:'));\n console.log(\n ' 1. Go to: https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn'\n );\n console.log(' 2. Note the sandbox number (e.g., +14155238886)');\n console.log(' 3. Send the join code from your phone\\n');\n\n const { whatsappFrom, whatsappTo } = await inquirer.prompt([\n {\n type: 'input',\n name: 'whatsappFrom',\n message: 'Twilio WhatsApp number (sandbox):',\n default: config.whatsappFromNumber || '+14155238886',\n },\n {\n type: 'input',\n name: 'whatsappTo',\n message: 'Your phone number:',\n default: config.whatsappToNumber,\n validate: (input: string) =>\n input.startsWith('+')\n ? true\n : 'Include country code (e.g., +1234567890)',\n },\n ]);\n\n saveToEnvFile({\n TWILIO_WHATSAPP_FROM: whatsappFrom,\n TWILIO_WHATSAPP_TO: whatsappTo,\n TWILIO_CHANNEL: 'whatsapp',\n });\n } else {\n console.log(chalk.cyan('\\nSMS Setup:'));\n console.log(\n chalk.yellow(' Note: US carriers require A2P 10DLC registration')\n );\n console.log(\n ' Register at: https://console.twilio.com/us1/develop/sms/settings/compliance\\n'\n );\n\n const { smsFrom, smsTo } = await inquirer.prompt([\n {\n type: 'input',\n name: 'smsFrom',\n message: 'Twilio SMS number:',\n default: config.smsFromNumber,\n },\n {\n type: 'input',\n name: 'smsTo',\n message: 'Your phone number:',\n default: config.smsToNumber,\n validate: (input: string) =>\n input.startsWith('+')\n ? true\n : 'Include country code (e.g., +1234567890)',\n },\n ]);\n\n saveToEnvFile({\n TWILIO_SMS_FROM: smsFrom,\n TWILIO_SMS_TO: smsTo,\n TWILIO_CHANNEL: 'sms',\n });\n }\n\n config.enabled = true;\n saveSMSConfig(config);\n\n console.log(chalk.green('\\nNotifications configured!'));\n console.log(chalk.gray('Test with: stackmemory notify test'));\n}\n\nfunction saveToEnvFile(vars: Record<string, string>): void {\n const envDir = join(homedir(), '.stackmemory');\n const envPath = join(envDir, '.env');\n\n if (!existsSync(envDir)) {\n mkdirSync(envDir, { recursive: true });\n }\n\n let content = '';\n if (existsSync(envPath)) {\n content = readFileSync(envPath, 'utf8');\n }\n\n for (const [key, value] of Object.entries(vars)) {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n const line = `${key}=\"${value}\"`;\n\n if (regex.test(content)) {\n content = content.replace(regex, line);\n } else {\n content += `${content.endsWith('\\n') || content === '' ? '' : '\\n'}${line}\\n`;\n }\n }\n\n writeFileSync(envPath, content);\n}\n\nexport default createSettingsCommand;\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/setup.ts"],
4
- "sourcesContent": ["/**\n * Setup commands for StackMemory onboarding\n * - setup-mcp: Auto-configure Claude Code MCP integration\n * - doctor: Diagnose common issues\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { execSync } from 'child_process';\n\n// Claude config paths\nconst CLAUDE_DIR = join(homedir(), '.claude');\nconst CLAUDE_CONFIG_FILE = join(CLAUDE_DIR, 'config.json');\nconst MCP_CONFIG_FILE = join(CLAUDE_DIR, 'stackmemory-mcp.json');\nconst HOOKS_JSON = join(CLAUDE_DIR, 'hooks.json');\n\ninterface DiagnosticResult {\n name: string;\n status: 'ok' | 'warn' | 'error';\n message: string;\n fix?: string;\n}\n\n/**\n * Create setup-mcp command\n */\nexport function createSetupMCPCommand(): Command {\n return new Command('setup-mcp')\n .description('Auto-configure Claude Code MCP integration')\n .option('--dry-run', 'Show what would be configured without making changes')\n .option('--reset', 'Reset MCP configuration to defaults')\n .action(async (options) => {\n console.log(chalk.cyan('\\nStackMemory MCP Setup\\n'));\n\n if (options.dryRun) {\n console.log(chalk.yellow('[DRY RUN] No changes will be made.\\n'));\n }\n\n // Step 1: Ensure Claude directory exists\n if (!existsSync(CLAUDE_DIR)) {\n if (options.dryRun) {\n console.log(chalk.gray(`Would create: ${CLAUDE_DIR}`));\n } else {\n mkdirSync(CLAUDE_DIR, { recursive: true });\n console.log(chalk.green('[OK]') + ' Created ~/.claude directory');\n }\n }\n\n // Step 2: Create MCP server configuration\n const mcpConfig = {\n mcpServers: {\n stackmemory: {\n command: 'stackmemory',\n args: ['mcp-server'],\n env: {\n NODE_ENV: 'production',\n },\n },\n },\n };\n\n if (options.dryRun) {\n console.log(\n chalk.gray(`Would write MCP config to: ${MCP_CONFIG_FILE}`)\n );\n console.log(chalk.gray(JSON.stringify(mcpConfig, null, 2)));\n } else {\n writeFileSync(MCP_CONFIG_FILE, JSON.stringify(mcpConfig, null, 2));\n console.log(chalk.green('[OK]') + ' Created MCP server configuration');\n }\n\n // Step 3: Update Claude config.json to reference MCP config\n let claudeConfig: Record<string, unknown> = {};\n if (existsSync(CLAUDE_CONFIG_FILE)) {\n try {\n claudeConfig = JSON.parse(readFileSync(CLAUDE_CONFIG_FILE, 'utf8'));\n } catch {\n console.log(\n chalk.yellow('[WARN]') +\n ' Could not parse existing config.json, creating new'\n );\n }\n }\n\n // Ensure mcp.configFiles array includes our config\n if (!claudeConfig.mcp) {\n claudeConfig.mcp = {};\n }\n const mcp = claudeConfig.mcp as Record<string, unknown>;\n if (!mcp.configFiles) {\n mcp.configFiles = [];\n }\n const configFiles = mcp.configFiles as string[];\n if (!configFiles.includes(MCP_CONFIG_FILE)) {\n configFiles.push(MCP_CONFIG_FILE);\n }\n\n if (options.dryRun) {\n console.log(chalk.gray(`Would update: ${CLAUDE_CONFIG_FILE}`));\n } else {\n writeFileSync(\n CLAUDE_CONFIG_FILE,\n JSON.stringify(claudeConfig, null, 2)\n );\n console.log(chalk.green('[OK]') + ' Updated Claude config.json');\n }\n\n // Step 4: Validate configuration\n console.log(chalk.cyan('\\nValidating configuration...'));\n\n // Check stackmemory command is available\n try {\n execSync('stackmemory --version', { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' stackmemory CLI is installed');\n } catch {\n console.log(chalk.yellow('[WARN]') + ' stackmemory CLI not in PATH');\n console.log(chalk.gray(' You may need to restart your terminal'));\n }\n\n // Check Claude Code is available\n try {\n execSync('claude --version', { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' Claude Code is installed');\n } catch {\n console.log(chalk.yellow('[WARN]') + ' Claude Code not found');\n console.log(chalk.gray(' Install from: https://claude.ai/code'));\n }\n\n // Final instructions\n if (!options.dryRun) {\n console.log(chalk.green('\\nMCP setup complete!'));\n console.log(chalk.cyan('\\nNext steps:'));\n console.log(chalk.white(' 1. Restart Claude Code'));\n console.log(\n chalk.white(\n ' 2. The StackMemory MCP tools will be available automatically'\n )\n );\n console.log(\n chalk.gray(\n '\\nTo verify: Run \"stackmemory doctor\" to check all integrations'\n )\n );\n }\n });\n}\n\n/**\n * Create doctor command for diagnostics\n */\nexport function createDoctorCommand(): Command {\n return new Command('doctor')\n .description('Diagnose StackMemory configuration and common issues')\n .option('--fix', 'Attempt to automatically fix issues')\n .action(async (options) => {\n console.log(chalk.cyan('\\nStackMemory Doctor\\n'));\n console.log(chalk.gray('Checking configuration and dependencies...\\n'));\n\n const results: DiagnosticResult[] = [];\n\n // 1. Check project initialization\n const projectDir = join(process.cwd(), '.stackmemory');\n const dbPath = join(projectDir, 'context.db');\n if (existsSync(dbPath)) {\n results.push({\n name: 'Project Initialization',\n status: 'ok',\n message: 'StackMemory is initialized in this project',\n });\n } else if (existsSync(projectDir)) {\n results.push({\n name: 'Project Initialization',\n status: 'warn',\n message: '.stackmemory directory exists but database not found',\n fix: 'Run: stackmemory init',\n });\n } else {\n results.push({\n name: 'Project Initialization',\n status: 'error',\n message: 'StackMemory not initialized in this project',\n fix: 'Run: stackmemory init',\n });\n }\n\n // 2. Check database integrity\n if (existsSync(dbPath)) {\n try {\n const Database = (await import('better-sqlite3')).default;\n const db = new Database(dbPath, { readonly: true });\n const tables = db\n .prepare(\"SELECT name FROM sqlite_master WHERE type='table'\")\n .all() as { name: string }[];\n db.close();\n\n const hasFrames = tables.some((t) => t.name === 'frames');\n if (hasFrames) {\n results.push({\n name: 'Database Integrity',\n status: 'ok',\n message: `Database has ${tables.length} tables`,\n });\n } else {\n results.push({\n name: 'Database Integrity',\n status: 'warn',\n message: 'Database exists but missing expected tables',\n fix: 'Run: stackmemory init --interactive',\n });\n }\n } catch (error) {\n results.push({\n name: 'Database Integrity',\n status: 'error',\n message: `Database error: ${(error as Error).message}`,\n fix: 'Remove .stackmemory/context.db and run: stackmemory init',\n });\n }\n }\n\n // 3. Check MCP configuration\n if (existsSync(MCP_CONFIG_FILE)) {\n try {\n const config = JSON.parse(readFileSync(MCP_CONFIG_FILE, 'utf8'));\n if (config.mcpServers?.stackmemory) {\n results.push({\n name: 'MCP Configuration',\n status: 'ok',\n message: 'MCP server configured',\n });\n } else {\n results.push({\n name: 'MCP Configuration',\n status: 'warn',\n message:\n 'MCP config file exists but stackmemory server not configured',\n fix: 'Run: stackmemory setup-mcp',\n });\n }\n } catch {\n results.push({\n name: 'MCP Configuration',\n status: 'error',\n message: 'Invalid MCP configuration file',\n fix: 'Run: stackmemory setup-mcp --reset',\n });\n }\n } else {\n results.push({\n name: 'MCP Configuration',\n status: 'warn',\n message: 'MCP not configured for Claude Code',\n fix: 'Run: stackmemory setup-mcp',\n });\n }\n\n // 4. Check Claude hooks\n if (existsSync(HOOKS_JSON)) {\n try {\n const hooks = JSON.parse(readFileSync(HOOKS_JSON, 'utf8'));\n const hasTraceHook = !!hooks['tool-use-approval'];\n if (hasTraceHook) {\n results.push({\n name: 'Claude Hooks',\n status: 'ok',\n message: 'Tool tracing hook installed',\n });\n } else {\n results.push({\n name: 'Claude Hooks',\n status: 'warn',\n message: 'Hooks file exists but tracing not configured',\n fix: 'Run: stackmemory hooks install',\n });\n }\n } catch {\n results.push({\n name: 'Claude Hooks',\n status: 'warn',\n message: 'Could not read hooks.json',\n });\n }\n } else {\n results.push({\n name: 'Claude Hooks',\n status: 'warn',\n message: 'Claude hooks not installed (optional)',\n fix: 'Run: stackmemory hooks install',\n });\n }\n\n // 5. Check environment variables\n const envChecks = [\n { key: 'LINEAR_API_KEY', name: 'Linear API Key', optional: true },\n { key: 'TWILIO_ACCOUNT_SID', name: 'Twilio Account', optional: true },\n ];\n\n for (const check of envChecks) {\n const value = process.env[check.key];\n if (value) {\n results.push({\n name: check.name,\n status: 'ok',\n message: 'Environment variable set',\n });\n } else if (!check.optional) {\n results.push({\n name: check.name,\n status: 'error',\n message: 'Required environment variable not set',\n fix: `Set ${check.key} in your .env file`,\n });\n }\n // Skip optional env vars that aren't set\n }\n\n // 6. Check file permissions\n const homeStackmemory = join(homedir(), '.stackmemory');\n if (existsSync(homeStackmemory)) {\n try {\n const testFile = join(homeStackmemory, '.write-test');\n writeFileSync(testFile, 'test');\n const { unlinkSync } = await import('fs');\n unlinkSync(testFile);\n results.push({\n name: 'File Permissions',\n status: 'ok',\n message: '~/.stackmemory is writable',\n });\n } catch {\n results.push({\n name: 'File Permissions',\n status: 'error',\n message: '~/.stackmemory is not writable',\n fix: 'Run: chmod 700 ~/.stackmemory',\n });\n }\n }\n\n // Display results\n let hasErrors = false;\n let hasWarnings = false;\n\n for (const result of results) {\n const icon =\n result.status === 'ok'\n ? chalk.green('[OK]')\n : result.status === 'warn'\n ? chalk.yellow('[WARN]')\n : chalk.red('[ERROR]');\n\n console.log(`${icon} ${result.name}`);\n console.log(chalk.gray(` ${result.message}`));\n\n if (result.fix) {\n console.log(chalk.cyan(` Fix: ${result.fix}`));\n\n if (options.fix && result.status !== 'ok') {\n // Auto-fix logic for specific issues\n if (result.fix.includes('stackmemory setup-mcp')) {\n console.log(chalk.gray(' Attempting auto-fix...'));\n try {\n execSync('stackmemory setup-mcp', { stdio: 'inherit' });\n } catch {\n console.log(chalk.red(' Auto-fix failed'));\n }\n }\n }\n }\n\n if (result.status === 'error') hasErrors = true;\n if (result.status === 'warn') hasWarnings = true;\n }\n\n // Summary\n console.log('');\n if (hasErrors) {\n console.log(\n chalk.red('Some issues need attention. Run suggested fixes above.')\n );\n process.exit(1);\n } else if (hasWarnings) {\n console.log(\n chalk.yellow(\n 'StackMemory is working but some optional features are not configured.'\n )\n );\n } else {\n console.log(\n chalk.green('All checks passed! StackMemory is properly configured.')\n );\n }\n });\n}\n\n/**\n * Create setup-plugins command\n */\nexport function createSetupPluginsCommand(): Command {\n const cmd = new Command('setup-plugins');\n\n cmd\n .description('Install StackMemory plugins for Claude Code')\n .option('--force', 'Overwrite existing plugins')\n .action(async (options) => {\n console.log(\n chalk.cyan('Installing StackMemory plugins for Claude Code...\\n')\n );\n\n const pluginsDir = join(CLAUDE_DIR, 'plugins');\n\n // Ensure plugins directory exists\n if (!existsSync(pluginsDir)) {\n mkdirSync(pluginsDir, { recursive: true });\n console.log(chalk.gray(`Created: ${pluginsDir}`));\n }\n\n // Find the plugins source directory\n // Check multiple locations: local dev, global npm, local npm\n const possiblePaths = [\n join(process.cwd(), 'plugins'),\n join(__dirname, '..', '..', '..', 'plugins'),\n join(homedir(), '.stackmemory', 'plugins'),\n ];\n\n // Try to find via npm root\n try {\n const globalRoot = execSync('npm root -g', {\n encoding: 'utf-8',\n }).trim();\n possiblePaths.push(\n join(globalRoot, '@stackmemoryai', 'stackmemory', 'plugins')\n );\n } catch {\n // npm not available or failed\n }\n\n let sourcePluginsDir: string | undefined;\n for (const p of possiblePaths) {\n if (existsSync(p) && existsSync(join(p, 'stackmemory'))) {\n sourcePluginsDir = p;\n break;\n }\n }\n\n if (!sourcePluginsDir) {\n console.log(chalk.red('Could not find StackMemory plugins directory'));\n console.log(chalk.gray('Searched:'));\n possiblePaths.forEach((p) => console.log(chalk.gray(` - ${p}`)));\n process.exit(1);\n }\n\n console.log(chalk.gray(`Source: ${sourcePluginsDir}\\n`));\n\n // List of plugins to install\n const plugins = ['stackmemory', 'ralph-wiggum'];\n let installed = 0;\n\n for (const plugin of plugins) {\n const sourcePath = join(sourcePluginsDir, plugin);\n const targetPath = join(pluginsDir, plugin);\n\n if (!existsSync(sourcePath)) {\n console.log(chalk.yellow(` [SKIP] ${plugin} - not found in source`));\n continue;\n }\n\n if (existsSync(targetPath)) {\n if (options.force) {\n // Remove existing\n try {\n execSync(`rm -rf \"${targetPath}\"`, { encoding: 'utf-8' });\n } catch {\n console.log(\n chalk.red(` [ERROR] ${plugin} - could not remove existing`)\n );\n continue;\n }\n } else {\n console.log(\n chalk.gray(` [EXISTS] ${plugin} - use --force to overwrite`)\n );\n continue;\n }\n }\n\n // Create symlink\n try {\n execSync(`ln -s \"${sourcePath}\" \"${targetPath}\"`, {\n encoding: 'utf-8',\n });\n console.log(chalk.green(` [OK] ${plugin}`));\n installed++;\n } catch (err) {\n console.log(\n chalk.red(` [ERROR] ${plugin} - ${(err as Error).message}`)\n );\n }\n }\n\n console.log('');\n if (installed > 0) {\n console.log(chalk.green(`Installed ${installed} plugin(s)`));\n console.log(chalk.gray('\\nAvailable commands in Claude Code:'));\n console.log(\n chalk.white(' /sm-status ') +\n chalk.gray('Show StackMemory status')\n );\n console.log(\n chalk.white(' /sm-capture ') +\n chalk.gray('Capture work for handoff')\n );\n console.log(\n chalk.white(' /sm-restore ') +\n chalk.gray('Restore from last handoff')\n );\n console.log(\n chalk.white(' /sm-decision ') + chalk.gray('Record a decision')\n );\n console.log(\n chalk.white(' /sm-help ') + chalk.gray('Show all commands')\n );\n console.log(\n chalk.white(' /ralph-loop ') +\n chalk.gray('Start Ralph iteration loop')\n );\n } else {\n console.log(chalk.yellow('No plugins installed'));\n }\n });\n\n return cmd;\n}\n\n/**\n * Create setup-remote command for remote MCP server auto-start\n */\nexport function createSetupRemoteCommand(): Command {\n const cmd = new Command('setup-remote');\n\n cmd\n .description('Configure remote MCP server to auto-start on boot')\n .option('--port <number>', 'Port for remote server', '3847')\n .option('--project <path>', 'Project root directory')\n .option('--uninstall', 'Remove the auto-start service')\n .option('--status', 'Check service status')\n .action(async (options) => {\n const home = homedir();\n const platform = process.platform;\n\n // Service configuration\n const serviceName =\n platform === 'darwin'\n ? 'com.stackmemory.remote-mcp'\n : 'stackmemory-remote-mcp';\n const serviceDir =\n platform === 'darwin'\n ? join(home, 'Library', 'LaunchAgents')\n : join(home, '.config', 'systemd', 'user');\n const serviceFile =\n platform === 'darwin'\n ? join(serviceDir, `${serviceName}.plist`)\n : join(serviceDir, `${serviceName}.service`);\n const logDir = join(home, '.stackmemory', 'logs');\n const pidFile = join(home, '.stackmemory', 'remote-mcp.pid');\n\n // Handle status check\n if (options.status) {\n console.log(chalk.cyan('\\nRemote MCP Server Status\\n'));\n\n if (platform === 'darwin') {\n try {\n const result = execSync(\n `launchctl list | grep ${serviceName} || true`,\n { encoding: 'utf-8' }\n );\n if (result.includes(serviceName)) {\n console.log(chalk.green('[RUNNING]') + ' Service is active');\n try {\n const health = execSync(\n `curl -s http://localhost:${options.port}/health 2>/dev/null`,\n { encoding: 'utf-8' }\n );\n const data = JSON.parse(health);\n console.log(chalk.gray(` Project: ${data.projectId}`));\n console.log(\n chalk.gray(` URL: http://localhost:${options.port}/sse`)\n );\n } catch {\n console.log(\n chalk.yellow(' Server not responding to health check')\n );\n }\n } else {\n console.log(chalk.yellow('[STOPPED]') + ' Service not running');\n }\n } catch {\n console.log(chalk.yellow('[UNKNOWN]') + ' Could not check status');\n }\n } else if (platform === 'linux') {\n try {\n execSync(`systemctl --user is-active ${serviceName}`, {\n stdio: 'pipe',\n });\n console.log(chalk.green('[RUNNING]') + ' Service is active');\n } catch {\n console.log(chalk.yellow('[STOPPED]') + ' Service not running');\n }\n }\n\n console.log(chalk.gray(`\\nService file: ${serviceFile}`));\n console.log(chalk.gray(`Logs: ${logDir}/remote-mcp.log`));\n return;\n }\n\n // Handle uninstall\n if (options.uninstall) {\n console.log(chalk.cyan('\\nUninstalling Remote MCP Server Service\\n'));\n\n if (platform === 'darwin') {\n try {\n execSync(`launchctl unload \"${serviceFile}\"`, { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' Service unloaded');\n } catch {\n console.log(chalk.gray('[SKIP]') + ' Service was not loaded');\n }\n\n if (existsSync(serviceFile)) {\n const fs = await import('fs/promises');\n await fs.unlink(serviceFile);\n console.log(chalk.green('[OK]') + ' Service file removed');\n }\n } else if (platform === 'linux') {\n try {\n execSync(`systemctl --user stop ${serviceName}`, { stdio: 'pipe' });\n execSync(`systemctl --user disable ${serviceName}`, {\n stdio: 'pipe',\n });\n console.log(chalk.green('[OK]') + ' Service stopped and disabled');\n } catch {\n console.log(chalk.gray('[SKIP]') + ' Service was not running');\n }\n\n if (existsSync(serviceFile)) {\n const fs = await import('fs/promises');\n await fs.unlink(serviceFile);\n execSync('systemctl --user daemon-reload', { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' Service file removed');\n }\n }\n\n console.log(chalk.green('\\nRemote MCP service uninstalled'));\n return;\n }\n\n // Install service\n console.log(chalk.cyan('\\nSetting up Remote MCP Server Auto-Start\\n'));\n\n if (platform !== 'darwin' && platform !== 'linux') {\n console.log(\n chalk.red('Auto-start is only supported on macOS and Linux')\n );\n console.log(chalk.gray('\\nManual start: stackmemory mcp-remote'));\n return;\n }\n\n // Create directories\n if (!existsSync(serviceDir)) {\n mkdirSync(serviceDir, { recursive: true });\n }\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true });\n }\n\n // Find node and stackmemory paths\n let nodePath: string;\n try {\n nodePath = execSync('which node', { encoding: 'utf-8' }).trim();\n } catch {\n nodePath = '/usr/local/bin/node';\n }\n\n // Find stackmemory CLI path\n let stackmemoryPath: string;\n try {\n stackmemoryPath = execSync('which stackmemory', {\n encoding: 'utf-8',\n }).trim();\n } catch {\n // Try npm global path\n try {\n const npmRoot = execSync('npm root -g', { encoding: 'utf-8' }).trim();\n stackmemoryPath = join(\n npmRoot,\n '@stackmemoryai',\n 'stackmemory',\n 'dist',\n 'cli',\n 'index.js'\n );\n } catch {\n stackmemoryPath = 'npx stackmemory';\n }\n }\n\n const projectPath = options.project || home;\n const port = options.port || '3847';\n\n if (platform === 'darwin') {\n // Generate macOS launchd plist\n const plist = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>Label</key>\n <string>${serviceName}</string>\n\n <key>ProgramArguments</key>\n <array>\n <string>${stackmemoryPath.includes('npx') ? 'npx' : nodePath}</string>\n ${stackmemoryPath.includes('npx') ? '<string>stackmemory</string>' : `<string>${stackmemoryPath}</string>`}\n <string>mcp-remote</string>\n <string>--port</string>\n <string>${port}</string>\n <string>--project</string>\n <string>${projectPath}</string>\n </array>\n\n <key>RunAtLoad</key>\n <true/>\n\n <key>KeepAlive</key>\n <dict>\n <key>SuccessfulExit</key>\n <false/>\n </dict>\n\n <key>WorkingDirectory</key>\n <string>${projectPath}</string>\n\n <key>StandardOutPath</key>\n <string>${logDir}/remote-mcp.log</string>\n\n <key>StandardErrorPath</key>\n <string>${logDir}/remote-mcp.error.log</string>\n\n <key>EnvironmentVariables</key>\n <dict>\n <key>HOME</key>\n <string>${home}</string>\n <key>PATH</key>\n <string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>\n <key>NODE_ENV</key>\n <string>production</string>\n </dict>\n\n <key>ThrottleInterval</key>\n <integer>10</integer>\n</dict>\n</plist>`;\n\n writeFileSync(serviceFile, plist);\n console.log(chalk.green('[OK]') + ' Created launchd service file');\n\n // Unload if already loaded\n try {\n execSync(`launchctl unload \"${serviceFile}\" 2>/dev/null`, {\n stdio: 'pipe',\n });\n } catch {\n // Not loaded, ignore\n }\n\n // Load the service\n try {\n execSync(`launchctl load -w \"${serviceFile}\"`, { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' Service loaded and started');\n } catch (err) {\n console.log(chalk.red('[ERROR]') + ` Failed to load service: ${err}`);\n return;\n }\n } else if (platform === 'linux') {\n // Generate systemd service\n const service = `[Unit]\nDescription=StackMemory Remote MCP Server\nDocumentation=https://github.com/stackmemoryai/stackmemory\nAfter=network.target\n\n[Service]\nType=simple\nExecStart=${stackmemoryPath.includes('npx') ? 'npx stackmemory' : `${nodePath} ${stackmemoryPath}`} mcp-remote --port ${port} --project ${projectPath}\nRestart=on-failure\nRestartSec=10\nWorkingDirectory=${projectPath}\n\nEnvironment=HOME=${home}\nEnvironment=PATH=/usr/local/bin:/usr/bin:/bin\nEnvironment=NODE_ENV=production\n\nStandardOutput=append:${logDir}/remote-mcp.log\nStandardError=append:${logDir}/remote-mcp.error.log\n\n[Install]\nWantedBy=default.target`;\n\n writeFileSync(serviceFile, service);\n console.log(chalk.green('[OK]') + ' Created systemd service file');\n\n try {\n execSync('systemctl --user daemon-reload', { stdio: 'pipe' });\n execSync(`systemctl --user enable ${serviceName}`, { stdio: 'pipe' });\n execSync(`systemctl --user start ${serviceName}`, { stdio: 'pipe' });\n console.log(chalk.green('[OK]') + ' Service enabled and started');\n } catch (err) {\n console.log(\n chalk.red('[ERROR]') + ` Failed to start service: ${err}`\n );\n return;\n }\n }\n\n // Verify it's running\n console.log(chalk.cyan('\\nVerifying server...\\n'));\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n try {\n const health = execSync(\n `curl -s http://localhost:${port}/health 2>/dev/null`,\n { encoding: 'utf-8' }\n );\n const data = JSON.parse(health);\n console.log(chalk.green('[OK]') + ' Server is running');\n console.log(chalk.gray(` Project: ${data.projectId}`));\n } catch {\n console.log(\n chalk.yellow('[WARN]') +\n ' Server not responding yet (may still be starting)'\n );\n }\n\n console.log(\n chalk.green('\\nRemote MCP Server configured for auto-start!')\n );\n console.log(chalk.cyan('\\nConnection info:'));\n console.log(chalk.white(` URL: http://localhost:${port}/sse`));\n console.log(chalk.white(` Health: http://localhost:${port}/health`));\n console.log(chalk.gray(`\\nLogs: ${logDir}/remote-mcp.log`));\n console.log(chalk.gray(`Service: ${serviceFile}`));\n console.log(chalk.cyan('\\nFor external access (ngrok):'));\n console.log(chalk.white(` ngrok http ${port}`));\n console.log(chalk.gray(' Then use the ngrok URL + /sse in Claude.ai'));\n });\n\n return cmd;\n}\n\n/**\n * Register setup commands\n */\nexport function registerSetupCommands(program: Command): void {\n program.addCommand(createSetupMCPCommand());\n program.addCommand(createDoctorCommand());\n program.addCommand(createSetupPluginsCommand());\n program.addCommand(createSetupRemoteCommand());\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/shell.ts"],
4
- "sourcesContent": ["/**\n * Shell Integration CLI Command\n * Install Sweep-powered completions for zsh/bash\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n copyFileSync,\n chmodSync,\n appendFileSync,\n} from 'fs';\nimport { join } from 'path';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\nfunction getShellType(): 'zsh' | 'bash' | 'unknown' {\n const shell = process.env.SHELL || '';\n if (shell.includes('zsh')) return 'zsh';\n if (shell.includes('bash')) return 'bash';\n return 'unknown';\n}\n\nfunction getShellRcFile(): string {\n const home = process.env.HOME || '';\n const shell = getShellType();\n\n if (shell === 'zsh') {\n return join(home, '.zshrc');\n } else if (shell === 'bash') {\n const bashrc = join(home, '.bashrc');\n const profile = join(home, '.bash_profile');\n return existsSync(bashrc) ? bashrc : profile;\n }\n\n return join(home, '.profile');\n}\n\nfunction findTemplateFile(filename: string): string | null {\n const locations = [\n join(process.cwd(), 'templates', 'shell', filename),\n join(\n process.cwd(),\n 'node_modules',\n '@stackmemoryai',\n 'stackmemory',\n 'templates',\n 'shell',\n filename\n ),\n join(dirname(dirname(dirname(__dirname))), 'templates', 'shell', filename),\n ];\n\n for (const loc of locations) {\n if (existsSync(loc)) {\n return loc;\n }\n }\n return null;\n}\n\nexport function createShellCommand(): Command {\n const cmd = new Command('shell')\n .description('Shell integration for Sweep-powered completions')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory shell install Install shell completions\n stackmemory shell status Check installation status\n stackmemory shell uninstall Remove shell integration\n\nAfter installation:\n - Ctrl+] Request suggestion\n - Shift+Tab Accept suggestion\n - sweep_status Check status\n - sweep_toggle Enable/disable\n`\n );\n\n cmd\n .command('install')\n .description('Install Sweep-powered shell completions')\n .option('--shell <type>', 'Shell type (zsh or bash)', getShellType())\n .action(async (options) => {\n const spinner = ora('Installing shell integration...').start();\n\n const home = process.env.HOME || '';\n const shellDir = join(home, '.stackmemory', 'shell');\n const shell = options.shell as 'zsh' | 'bash';\n\n if (shell === 'unknown') {\n spinner.fail(chalk.red('Could not detect shell type'));\n console.log(chalk.gray('Use --shell zsh or --shell bash'));\n process.exit(1);\n }\n\n try {\n mkdirSync(shellDir, { recursive: true });\n\n const zshSource = findTemplateFile('sweep-complete.zsh');\n const suggestSource = findTemplateFile('sweep-suggest.js');\n\n if (!zshSource || !suggestSource) {\n spinner.fail(chalk.red('Template files not found'));\n console.log(chalk.gray('Ensure stackmemory is installed correctly'));\n process.exit(1);\n }\n\n const zshDest = join(shellDir, 'sweep-complete.zsh');\n const suggestDest = join(shellDir, 'sweep-suggest.js');\n\n copyFileSync(zshSource, zshDest);\n copyFileSync(suggestSource, suggestDest);\n chmodSync(suggestDest, '755');\n\n spinner.text = 'Updating shell configuration...';\n\n const rcFile = getShellRcFile();\n const sourceCmd =\n shell === 'zsh'\n ? `source \"${zshDest}\"`\n : `source \"${shellDir}/sweep-complete.bash\"`;\n\n const marker = '# StackMemory Sweep Completion';\n\n if (existsSync(rcFile)) {\n const content = readFileSync(rcFile, 'utf-8');\n\n if (content.includes(marker)) {\n spinner.succeed(chalk.green('Shell integration already installed'));\n console.log(\n chalk.gray('Restart your shell or run: source ' + rcFile)\n );\n return;\n }\n\n const addition = `\n${marker}\nif [[ -f \"${zshDest}\" ]]; then\n ${sourceCmd}\nfi\n`;\n appendFileSync(rcFile, addition);\n } else {\n writeFileSync(\n rcFile,\n `${marker}\\nif [[ -f \"${zshDest}\" ]]; then\\n ${sourceCmd}\\nfi\\n`\n );\n }\n\n spinner.succeed(chalk.green('Shell integration installed'));\n console.log('');\n console.log(chalk.bold('Files installed:'));\n console.log(chalk.gray(` ${zshDest}`));\n console.log(chalk.gray(` ${suggestDest}`));\n console.log('');\n console.log(chalk.bold('To activate:'));\n console.log(` source ${rcFile}`);\n console.log(' OR restart your terminal');\n console.log('');\n console.log(chalk.bold('Usage:'));\n console.log(' Ctrl+] Request suggestion');\n console.log(' Shift+Tab Accept suggestion');\n console.log(' sweep_status Check status');\n console.log(' sweep_toggle Enable/disable');\n } catch (error) {\n spinner.fail(chalk.red('Installation failed'));\n console.log(chalk.gray((error as Error).message));\n process.exit(1);\n }\n });\n\n cmd\n .command('status')\n .description('Check shell integration status')\n .action(() => {\n const home = process.env.HOME || '';\n const shellDir = join(home, '.stackmemory', 'shell');\n const zshFile = join(shellDir, 'sweep-complete.zsh');\n const suggestFile = join(shellDir, 'sweep-suggest.js');\n const rcFile = getShellRcFile();\n\n console.log(chalk.bold('\\nShell Integration Status\\n'));\n\n console.log(`Shell: ${chalk.cyan(getShellType())}`);\n console.log(`RC file: ${chalk.gray(rcFile)}`);\n console.log('');\n\n const zshInstalled = existsSync(zshFile);\n const suggestInstalled = existsSync(suggestFile);\n\n console.log(\n `Completion script: ${zshInstalled ? chalk.green('Installed') : chalk.yellow('Not installed')}`\n );\n console.log(\n `Suggest script: ${suggestInstalled ? chalk.green('Installed') : chalk.yellow('Not installed')}`\n );\n\n if (existsSync(rcFile)) {\n const content = readFileSync(rcFile, 'utf-8');\n const configured = content.includes('StackMemory Sweep Completion');\n console.log(\n `RC configured: ${configured ? chalk.green('Yes') : chalk.yellow('No')}`\n );\n } else {\n console.log(`RC configured: ${chalk.yellow('No RC file')}`);\n }\n\n const sweepState = join(home, '.stackmemory', 'sweep-state.json');\n if (existsSync(sweepState)) {\n try {\n const state = JSON.parse(readFileSync(sweepState, 'utf-8'));\n console.log('');\n console.log(chalk.bold('Sweep Context:'));\n console.log(\n chalk.gray(` Recent diffs: ${state.recentDiffs?.length || 0}`)\n );\n if (state.lastPrediction) {\n const age = Date.now() - state.lastPrediction.timestamp;\n const ageStr =\n age < 60000\n ? `${Math.round(age / 1000)}s ago`\n : `${Math.round(age / 60000)}m ago`;\n console.log(chalk.gray(` Last prediction: ${ageStr}`));\n }\n } catch {\n // Ignore\n }\n }\n\n if (!zshInstalled || !suggestInstalled) {\n console.log('');\n console.log(chalk.bold('To install: stackmemory shell install'));\n }\n });\n\n cmd\n .command('uninstall')\n .description('Remove shell integration')\n .action(() => {\n const rcFile = getShellRcFile();\n\n if (existsSync(rcFile)) {\n let content = readFileSync(rcFile, 'utf-8');\n\n const marker = '# StackMemory Sweep Completion';\n const markerIndex = content.indexOf(marker);\n\n if (markerIndex !== -1) {\n const endPattern = /\\nfi\\n/;\n const afterMarker = content.slice(markerIndex);\n const endMatch = afterMarker.match(endPattern);\n\n if (endMatch && endMatch.index !== undefined) {\n const endIndex = markerIndex + endMatch.index + endMatch[0].length;\n content = content.slice(0, markerIndex) + content.slice(endIndex);\n writeFileSync(rcFile, content);\n console.log(\n chalk.green('Shell integration removed from ' + rcFile)\n );\n }\n } else {\n console.log(chalk.yellow('No shell integration found in ' + rcFile));\n }\n }\n\n console.log(\n chalk.gray('\\nRestart your shell to complete uninstallation')\n );\n });\n\n cmd.action(() => {\n const home = process.env.HOME || '';\n const zshFile = join(home, '.stackmemory', 'shell', 'sweep-complete.zsh');\n const installed = existsSync(zshFile);\n\n console.log(chalk.bold('\\nStackMemory Shell Integration\\n'));\n console.log(\n `Status: ${installed ? chalk.green('Installed') : chalk.yellow('Not installed')}`\n );\n\n if (!installed) {\n console.log('');\n console.log(chalk.bold('Install with:'));\n console.log(' stackmemory shell install');\n } else {\n console.log('');\n console.log(chalk.bold('Commands:'));\n console.log(' stackmemory shell status Check status');\n console.log(' stackmemory shell uninstall Remove integration');\n }\n });\n\n return cmd;\n}\n\nexport default createShellCommand();\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/commands/signup.ts"],
4
- "sourcesContent": ["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport open from 'open';\nimport inquirer from 'inquirer';\n\nexport function registerSignupCommand(program: Command): void {\n program\n .command('signup')\n .alias('register')\n .description('Sign up for StackMemory hosted service')\n .option('--no-open', 'Do not automatically open browser')\n .action(async (options) => {\n console.log(chalk.cyan('\uD83D\uDE80 StackMemory Hosted Service Signup\\n'));\n\n const signupUrl = 'https://stackmemory.ai/signup';\n \n if (options.open !== false) {\n console.log(chalk.gray('Opening signup page in your browser...'));\n try {\n await open(signupUrl);\n console.log(chalk.green('\u2713 Opened: ') + chalk.cyan(signupUrl));\n } catch (error) {\n console.log(chalk.yellow('Could not open browser automatically.'));\n console.log(chalk.gray('Please visit: ') + chalk.cyan(signupUrl));\n }\n } else {\n console.log(chalk.gray('Visit this URL to sign up:'));\n console.log(chalk.cyan(signupUrl));\n }\n\n console.log(chalk.gray('\\nAfter signing up, you can login with:'));\n console.log(chalk.cyan(' stackmemory login'));\n\n // Optional: Ask if they want to login now\n const { proceed } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Have you completed signup and want to login now?',\n default: false,\n },\n ]);\n\n if (proceed) {\n // Import and run login command\n const { registerLoginCommand } = await import('./login.js');\n const loginCmd = new Command();\n registerLoginCommand(loginCmd);\n \n // Execute login\n console.log(chalk.cyan('\\n\uD83D\uDD10 Proceeding to login...\\n'));\n await loginCmd.parseAsync(['node', 'stackmemory', 'login']);\n } else {\n console.log(chalk.gray('\\nWhen ready, run: ') + chalk.cyan('stackmemory login'));\n }\n });\n}"],
5
- "mappings": ";;;;AAAA,SAAS,eAAe;AACxB,OAAO,WAAW;AAClB,OAAO,UAAU;AACjB,OAAO,cAAc;AAEd,SAAS,sBAAsB,SAAwB;AAC5D,UACG,QAAQ,QAAQ,EAChB,MAAM,UAAU,EAChB,YAAY,wCAAwC,EACpD,OAAO,aAAa,mCAAmC,EACvD,OAAO,OAAO,YAAY;AACzB,YAAQ,IAAI,MAAM,KAAK,+CAAwC,CAAC;AAEhE,UAAM,YAAY;AAElB,QAAI,QAAQ,SAAS,OAAO;AAC1B,cAAQ,IAAI,MAAM,KAAK,wCAAwC,CAAC;AAChE,UAAI;AACF,cAAM,KAAK,SAAS;AACpB,gBAAQ,IAAI,MAAM,MAAM,iBAAY,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA,MAC/D,SAAS,OAAO;AACd,gBAAQ,IAAI,MAAM,OAAO,uCAAuC,CAAC;AACjE,gBAAQ,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA,MAClE;AAAA,IACF,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,4BAA4B,CAAC;AACpD,cAAQ,IAAI,MAAM,KAAK,SAAS,CAAC;AAAA,IACnC;AAEA,YAAQ,IAAI,MAAM,KAAK,yCAAyC,CAAC;AACjE,YAAQ,IAAI,MAAM,KAAK,qBAAqB,CAAC;AAG7C,UAAM,EAAE,QAAQ,IAAI,MAAM,SAAS,OAAO;AAAA,MACxC;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAED,QAAI,SAAS;AAEX,YAAM,EAAE,qBAAqB,IAAI,MAAM,OAAO,YAAY;AAC1D,YAAM,WAAW,IAAI,QAAQ;AAC7B,2BAAqB,QAAQ;AAG7B,cAAQ,IAAI,MAAM,KAAK,sCAA+B,CAAC;AACvD,YAAM,SAAS,WAAW,CAAC,QAAQ,eAAe,OAAO,CAAC;AAAA,IAC5D,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,qBAAqB,IAAI,MAAM,KAAK,mBAAmB,CAAC;AAAA,IACjF;AAAA,EACF,CAAC;AACL;",
6
- "names": []
7
- }