@stackmemoryai/stackmemory 0.8.0 → 1.0.0

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 (793) hide show
  1. package/LICENSE +64 -0
  2. package/README.md +54 -4
  3. package/dist/src/agents/core/agent-task-manager.js +0 -1
  4. package/dist/src/agents/verifiers/base-verifier.js +0 -1
  5. package/dist/src/agents/verifiers/formatter-verifier.js +0 -1
  6. package/dist/src/agents/verifiers/llm-judge.js +0 -1
  7. package/dist/src/cli/auto-detect.js +0 -1
  8. package/dist/src/cli/claude-sm-danger.js +0 -1
  9. package/dist/src/cli/claude-sm.js +69 -373
  10. package/dist/src/cli/codex-sm-danger.js +0 -1
  11. package/dist/src/cli/codex-sm.js +28 -1
  12. package/dist/src/cli/commands/api.js +0 -1
  13. package/dist/src/cli/commands/auto-background.js +0 -1
  14. package/dist/src/cli/commands/cleanup-processes.js +0 -1
  15. package/dist/src/cli/commands/clear.js +0 -1
  16. package/dist/src/cli/commands/config.js +0 -1
  17. package/dist/src/cli/commands/context-rehydrate.js +0 -1
  18. package/dist/src/cli/commands/context.js +0 -1
  19. package/dist/src/cli/commands/daemon.js +0 -1
  20. package/dist/src/cli/commands/dashboard.js +4 -5
  21. package/dist/src/cli/commands/db.js +0 -1
  22. package/dist/src/cli/commands/decision.js +0 -1
  23. package/dist/src/cli/commands/discovery.js +0 -1
  24. package/dist/src/cli/commands/handoff.js +0 -1
  25. package/dist/src/cli/commands/hooks.js +0 -1
  26. package/dist/src/cli/commands/linear.js +0 -1
  27. package/dist/src/cli/commands/log.js +0 -1
  28. package/dist/src/cli/commands/login.js +0 -1
  29. package/dist/src/cli/commands/migrate.js +0 -1
  30. package/dist/src/cli/commands/model.js +0 -1
  31. package/dist/src/cli/commands/onboard.js +22 -7
  32. package/dist/src/cli/commands/ping.js +0 -1
  33. package/dist/src/cli/commands/projects.js +0 -1
  34. package/dist/src/cli/commands/ralph.js +0 -1
  35. package/dist/src/cli/commands/retrieval.js +0 -1
  36. package/dist/src/cli/commands/search.js +0 -1
  37. package/dist/src/cli/commands/service.js +0 -1
  38. package/dist/src/cli/commands/session.js +0 -1
  39. package/dist/src/cli/commands/setup.js +1 -6
  40. package/dist/src/cli/commands/shell.js +0 -1
  41. package/dist/src/cli/commands/signup.js +0 -1
  42. package/dist/src/cli/commands/skills.js +4 -3
  43. package/dist/src/cli/commands/storage-tier.js +0 -1
  44. package/dist/src/cli/commands/sweep.js +0 -1
  45. package/dist/src/cli/commands/tasks.js +0 -1
  46. package/dist/src/cli/commands/worktree.js +10 -5
  47. package/dist/src/cli/index.js +9 -76
  48. package/dist/src/cli/opencode-sm.js +28 -1
  49. package/dist/src/cli/utils/viewer.js +0 -1
  50. package/dist/src/core/config/config-manager.js +0 -1
  51. package/dist/src/core/config/feature-flags.js +1 -14
  52. package/dist/src/core/config/storage-config.js +0 -1
  53. package/dist/src/core/config/types.js +0 -1
  54. package/dist/src/core/context/auto-context.js +0 -1
  55. package/dist/src/core/context/dual-stack-manager.js +0 -1
  56. package/dist/src/core/context/enhanced-rehydration.js +0 -2
  57. package/dist/src/core/context/frame-database.js +60 -6
  58. package/dist/src/core/context/frame-digest.js +0 -1
  59. package/dist/src/core/context/frame-handoff-manager.js +0 -1
  60. package/dist/src/core/context/frame-lifecycle-hooks.js +0 -1
  61. package/dist/src/core/context/frame-recovery.js +0 -1
  62. package/dist/src/core/context/frame-stack.js +0 -1
  63. package/dist/src/core/context/frame-types.js +0 -1
  64. package/dist/src/core/context/index.js +0 -1
  65. package/dist/src/core/context/permission-manager.js +0 -1
  66. package/dist/src/core/context/recursive-context-manager.js +3 -2
  67. package/dist/src/core/context/refactored-frame-manager.js +0 -1
  68. package/dist/src/core/context/shared-context-layer.js +0 -1
  69. package/dist/src/core/context/stack-merge-resolver.js +0 -1
  70. package/dist/src/core/context/validation.js +0 -1
  71. package/dist/src/core/database/batch-operations.js +0 -1
  72. package/dist/src/core/database/connection-pool.js +0 -1
  73. package/dist/src/core/database/database-adapter.js +0 -1
  74. package/dist/src/core/database/embedding-provider-factory.js +0 -1
  75. package/dist/src/core/database/embedding-provider.js +0 -1
  76. package/dist/src/core/database/migration-manager.js +0 -1
  77. package/dist/src/core/database/ollama-embedding-provider.js +0 -1
  78. package/dist/src/core/database/openai-embedding-provider.js +0 -1
  79. package/dist/src/core/database/query-cache.js +0 -1
  80. package/dist/src/core/database/query-router.js +0 -1
  81. package/dist/src/core/database/sqlite-adapter.js +18 -108
  82. package/dist/src/core/database/transformers-embedding-provider.js +0 -1
  83. package/dist/src/core/digest/enhanced-hybrid-digest.js +0 -1
  84. package/dist/src/core/digest/frame-digest-integration.js +0 -1
  85. package/dist/src/core/digest/hybrid-digest-generator.js +0 -1
  86. package/dist/src/core/digest/index.js +0 -1
  87. package/dist/src/core/digest/types.js +0 -1
  88. package/dist/src/core/errors/error-utils.js +0 -1
  89. package/dist/src/core/errors/index.js +0 -1
  90. package/dist/src/core/errors/recovery.js +0 -1
  91. package/dist/src/core/execution/parallel-executor.js +0 -1
  92. package/dist/src/core/extensions/custom-tools.js +0 -1
  93. package/dist/src/core/extensions/index.js +0 -1
  94. package/dist/src/core/extensions/loader.js +0 -1
  95. package/dist/src/core/extensions/plugin-system.js +0 -1
  96. package/dist/src/core/extensions/provider-adapter.js +0 -1
  97. package/dist/src/core/extensions/sandbox-runtime.js +0 -1
  98. package/dist/src/core/extensions/types.js +0 -1
  99. package/dist/src/core/frame/workflow-templates.js +0 -1
  100. package/dist/src/core/merge/conflict-detector.js +0 -1
  101. package/dist/src/core/merge/index.js +0 -1
  102. package/dist/src/core/merge/resolution-engine.js +0 -1
  103. package/dist/src/core/merge/stack-diff.js +0 -1
  104. package/dist/src/core/merge/types.js +0 -1
  105. package/dist/src/core/merge/unified-merge-resolver.js +0 -1
  106. package/dist/src/core/models/fallback-monitor.js +0 -1
  107. package/dist/src/core/models/model-router.js +0 -1
  108. package/dist/src/core/monitoring/error-handler.js +0 -1
  109. package/dist/src/core/monitoring/logger.js +0 -1
  110. package/dist/src/core/monitoring/metrics.js +0 -1
  111. package/dist/src/core/monitoring/progress-tracker.js +0 -1
  112. package/dist/src/core/monitoring/session-monitor.js +0 -1
  113. package/dist/src/core/performance/context-cache.js +0 -1
  114. package/dist/src/core/performance/index.js +0 -1
  115. package/dist/src/core/performance/lazy-context-loader.js +3 -8
  116. package/dist/src/core/performance/monitor.js +0 -1
  117. package/dist/src/core/performance/optimized-frame-context.js +0 -1
  118. package/dist/src/core/performance/performance-benchmark.js +0 -1
  119. package/dist/src/core/performance/performance-profiler.js +0 -1
  120. package/dist/src/core/performance/streaming-jsonl-parser.js +0 -1
  121. package/dist/src/core/persistence/postgres-adapter.js +0 -1
  122. package/dist/src/core/projects/project-isolation.js +0 -1
  123. package/dist/src/core/projects/project-manager.js +0 -1
  124. package/dist/src/core/query/query-parser.js +0 -1
  125. package/dist/src/core/query/query-templates.js +0 -1
  126. package/dist/src/core/retrieval/context-retriever.js +0 -1
  127. package/dist/src/core/retrieval/index.js +0 -1
  128. package/dist/src/core/retrieval/llm-context-retrieval.js +0 -1
  129. package/dist/src/core/retrieval/llm-provider.js +0 -1
  130. package/dist/src/core/retrieval/privacy-filter.js +0 -1
  131. package/dist/src/core/retrieval/retrieval-audit.js +0 -1
  132. package/dist/src/core/retrieval/summary-generator.js +15 -6
  133. package/dist/src/core/retrieval/types.js +0 -1
  134. package/dist/src/core/retrieval/unified-context-assembler.js +0 -1
  135. package/dist/src/core/security/index.js +0 -1
  136. package/dist/src/core/security/input-sanitizer.js +0 -1
  137. package/dist/src/core/session/clear-survival.js +0 -1
  138. package/dist/src/core/session/enhanced-handoff.js +0 -1
  139. package/dist/src/core/session/handoff-generator.js +0 -1
  140. package/dist/src/core/session/index.js +0 -1
  141. package/dist/src/core/session/session-manager.js +0 -1
  142. package/dist/src/core/skills/index.js +0 -1
  143. package/dist/src/core/skills/skill-storage.js +0 -1
  144. package/dist/src/core/skills/types.js +0 -1
  145. package/dist/src/core/storage/chromadb-adapter.js +0 -1
  146. package/dist/src/core/storage/infinite-storage.js +0 -1
  147. package/dist/src/core/storage/project-registry.js +0 -1
  148. package/dist/src/core/storage/remote-storage.js +4 -2
  149. package/dist/src/core/storage/storage-tier-manager.js +0 -1
  150. package/dist/src/core/storage/two-tier-storage.js +0 -1
  151. package/dist/src/core/trace/cli-trace-wrapper.js +0 -1
  152. package/dist/src/core/trace/db-trace-wrapper.js +0 -1
  153. package/dist/src/core/trace/debug-trace.js +0 -1
  154. package/dist/src/core/trace/index.js +0 -1
  155. package/dist/src/core/trace/linear-api-wrapper.js +0 -1
  156. package/dist/src/core/trace/trace-detector.js +0 -1
  157. package/dist/src/core/trace/trace-store.js +4 -5
  158. package/dist/src/core/trace/types.js +0 -1
  159. package/dist/src/core/types.js +0 -1
  160. package/dist/src/core/utils/async-mutex.js +0 -1
  161. package/dist/src/core/utils/compression.js +0 -1
  162. package/dist/src/core/utils/update-checker.js +0 -1
  163. package/dist/src/core/worktree/worktree-manager.js +0 -1
  164. package/dist/src/daemon/daemon-config.js +0 -1
  165. package/dist/src/daemon/services/context-service.js +0 -1
  166. package/dist/src/daemon/services/linear-service.js +0 -1
  167. package/dist/src/daemon/services/maintenance-service.js +0 -1
  168. package/dist/src/daemon/services/memory-service.js +0 -1
  169. package/dist/src/daemon/session-daemon.js +0 -1
  170. package/dist/src/daemon/unified-daemon.js +0 -1
  171. package/dist/src/features/analytics/api/analytics-api.js +0 -1
  172. package/dist/src/features/analytics/core/analytics-service.js +1 -2
  173. package/dist/src/features/analytics/index.js +0 -1
  174. package/dist/src/features/analytics/queries/metrics-queries.js +8 -9
  175. package/dist/src/features/analytics/types/metrics.js +0 -1
  176. package/dist/src/features/browser/browser-mcp.js +0 -1
  177. package/dist/src/features/sweep/index.js +0 -1
  178. package/dist/src/features/sweep/prediction-client.js +0 -1
  179. package/dist/src/features/sweep/prompt-builder.js +0 -1
  180. package/dist/src/features/sweep/pty-wrapper.js +11 -2
  181. package/dist/src/features/sweep/state-watcher.js +0 -1
  182. package/dist/src/features/sweep/status-bar.js +0 -1
  183. package/dist/src/features/sweep/sweep-server-manager.js +0 -1
  184. package/dist/src/features/sweep/tab-interceptor.js +0 -1
  185. package/dist/src/features/sweep/types.js +0 -1
  186. package/dist/src/features/tasks/linear-task-manager.js +0 -1
  187. package/dist/src/features/tasks/task-aware-context.js +0 -1
  188. package/dist/src/features/tui/simple-monitor.js +0 -1
  189. package/dist/src/features/tui/swarm-monitor.js +0 -1
  190. package/dist/src/features/web/client/stores/task-store.js +0 -1
  191. package/dist/src/features/web/server/index.js +0 -1
  192. package/dist/src/features/workers/tmux-manager.js +0 -1
  193. package/dist/src/features/workers/worker-registry.js +0 -1
  194. package/dist/src/hooks/auto-background.js +0 -1
  195. package/dist/src/hooks/config.js +0 -1
  196. package/dist/src/hooks/daemon.js +0 -1
  197. package/dist/src/hooks/diffmem-hooks.js +0 -1
  198. package/dist/src/hooks/events.js +0 -1
  199. package/dist/src/hooks/index.js +0 -4
  200. package/dist/src/hooks/linear-task-picker.js +0 -1
  201. package/dist/src/hooks/schemas.js +0 -118
  202. package/dist/src/hooks/secure-fs.js +0 -1
  203. package/dist/src/hooks/security-logger.js +0 -1
  204. package/dist/src/hooks/session-summary.js +0 -1
  205. package/dist/src/index.js +0 -1
  206. package/dist/src/integrations/anthropic/client.js +0 -1
  207. package/dist/src/integrations/claude-code/agent-bridge.js +0 -1
  208. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -1
  209. package/dist/src/integrations/claude-code/lifecycle-hooks.js +0 -1
  210. package/dist/src/integrations/claude-code/post-task-hooks.js +0 -1
  211. package/dist/src/integrations/claude-code/subagent-client-stub.js +0 -1
  212. package/dist/src/integrations/claude-code/subagent-client.js +0 -1
  213. package/dist/src/integrations/claude-code/task-coordinator.js +0 -1
  214. package/dist/src/integrations/diffmem/client.js +0 -1
  215. package/dist/src/integrations/diffmem/config.js +0 -1
  216. package/dist/src/integrations/diffmem/index.js +0 -1
  217. package/dist/src/integrations/diffmem/types.js +0 -1
  218. package/dist/src/integrations/linear/auth.js +0 -1
  219. package/dist/src/integrations/linear/auto-sync.js +0 -1
  220. package/dist/src/integrations/linear/client.js +0 -1
  221. package/dist/src/integrations/linear/config.js +0 -1
  222. package/dist/src/integrations/linear/migration.js +0 -1
  223. package/dist/src/integrations/linear/oauth-server.js +0 -1
  224. package/dist/src/integrations/linear/rest-client.js +0 -1
  225. package/dist/src/integrations/linear/sync-manager.js +0 -1
  226. package/dist/src/integrations/linear/sync-service.js +0 -1
  227. package/dist/src/integrations/linear/sync.js +0 -1
  228. package/dist/src/integrations/linear/types.js +0 -1
  229. package/dist/src/integrations/linear/unified-sync.js +0 -1
  230. package/dist/src/integrations/linear/webhook-handler.js +0 -1
  231. package/dist/src/integrations/linear/webhook-server.js +0 -1
  232. package/dist/src/integrations/linear/webhook.js +0 -1
  233. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +0 -1
  234. package/dist/src/integrations/mcp/handlers/context-handlers.js +43 -30
  235. package/dist/src/integrations/mcp/handlers/diffmem-handlers.js +0 -1
  236. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +0 -1
  237. package/dist/src/integrations/mcp/handlers/index.js +1 -3
  238. package/dist/src/integrations/mcp/handlers/linear-handlers.js +24 -61
  239. package/dist/src/integrations/mcp/handlers/skill-handlers.js +0 -1
  240. package/dist/src/integrations/mcp/handlers/task-handlers.js +0 -1
  241. package/dist/src/integrations/mcp/handlers/trace-handlers.js +0 -1
  242. package/dist/src/integrations/mcp/index.js +0 -1
  243. package/dist/src/integrations/mcp/middleware/tool-scoring.js +3 -2
  244. package/dist/src/integrations/mcp/pending-utils.js +0 -1
  245. package/dist/src/integrations/mcp/refactored-server.js +0 -1
  246. package/dist/src/integrations/mcp/remote-server.js +0 -1
  247. package/dist/src/integrations/mcp/schemas.js +0 -1
  248. package/dist/src/integrations/mcp/server.js +20 -24
  249. package/dist/src/integrations/mcp/tool-definitions-code.js +0 -1
  250. package/dist/src/integrations/mcp/tool-definitions.js +0 -1
  251. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -1
  252. package/dist/src/integrations/ralph/context/context-budget-manager.js +0 -1
  253. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +0 -1
  254. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +0 -1
  255. package/dist/src/integrations/ralph/index.js +0 -1
  256. package/dist/src/integrations/ralph/learning/pattern-learner.js +0 -1
  257. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +5 -5
  258. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +0 -1
  259. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +0 -1
  260. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -1
  261. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -1
  262. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +0 -1
  263. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +0 -1
  264. package/dist/src/integrations/ralph/performance/performance-optimizer.js +0 -1
  265. package/dist/src/integrations/ralph/recovery/crash-recovery.js +0 -1
  266. package/dist/src/integrations/ralph/state/state-reconciler.js +25 -9
  267. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +0 -1
  268. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +0 -1
  269. package/dist/src/integrations/ralph/types.js +0 -1
  270. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +0 -1
  271. package/dist/src/mcp/stackmemory-mcp-server.js +0 -1
  272. package/dist/src/middleware/exponential-rate-limiter.js +0 -1
  273. package/dist/src/models/user.model.js +0 -1
  274. package/dist/src/orchestrators/multimodal/constants.js +0 -1
  275. package/dist/src/orchestrators/multimodal/harness.js +0 -1
  276. package/dist/src/orchestrators/multimodal/providers.js +0 -1
  277. package/dist/src/orchestrators/multimodal/types.js +0 -1
  278. package/dist/src/orchestrators/multimodal/utils.js +0 -1
  279. package/dist/src/servers/production/auth-middleware.js +0 -1
  280. package/dist/src/services/config-service.js +0 -1
  281. package/dist/src/services/context-service.js +0 -1
  282. package/dist/src/skills/api-discovery.js +0 -1
  283. package/dist/src/skills/api-skill.js +0 -1
  284. package/dist/src/skills/claude-skills.js +0 -1
  285. package/dist/src/skills/dashboard-launcher.js +0 -1
  286. package/dist/src/skills/linear-task-runner.js +0 -1
  287. package/dist/src/skills/recursive-agent-orchestrator.js +0 -1
  288. package/dist/src/skills/repo-ingestion-skill.js +0 -1
  289. package/dist/src/skills/spec-generator-skill.js +0 -1
  290. package/dist/src/skills/unified-rlm-orchestrator.js +0 -1
  291. package/dist/src/types/task.js +0 -1
  292. package/dist/src/utils/env.js +0 -1
  293. package/dist/src/utils/formatting.js +0 -1
  294. package/dist/src/utils/process-cleanup.js +0 -1
  295. package/package.json +33 -8
  296. package/scripts/smoke-init-db.sh +77 -0
  297. package/dist/scripts/benchmark-performance.js +0 -48
  298. package/dist/scripts/benchmark-performance.js.map +0 -7
  299. package/dist/scripts/check-redis.js +0 -42
  300. package/dist/scripts/check-redis.js.map +0 -7
  301. package/dist/scripts/initialize.js +0 -183
  302. package/dist/scripts/initialize.js.map +0 -7
  303. package/dist/scripts/list-linear-tasks.js +0 -124
  304. package/dist/scripts/list-linear-tasks.js.map +0 -7
  305. package/dist/scripts/measure-handoff-impact.js +0 -340
  306. package/dist/scripts/measure-handoff-impact.js.map +0 -7
  307. package/dist/scripts/query-chromadb.js +0 -160
  308. package/dist/scripts/query-chromadb.js.map +0 -7
  309. package/dist/scripts/show-linear-summary.js +0 -119
  310. package/dist/scripts/show-linear-summary.js.map +0 -7
  311. package/dist/scripts/simple-swarm-demo.js +0 -90
  312. package/dist/scripts/simple-swarm-demo.js.map +0 -7
  313. package/dist/scripts/status.js +0 -155
  314. package/dist/scripts/status.js.map +0 -7
  315. package/dist/scripts/test-chromadb-sync.js +0 -192
  316. package/dist/scripts/test-chromadb-sync.js.map +0 -7
  317. package/dist/scripts/test-ralph-iteration-fix.js +0 -86
  318. package/dist/scripts/test-ralph-iteration-fix.js.map +0 -7
  319. package/dist/scripts/test-ralph-iterations.js +0 -121
  320. package/dist/scripts/test-ralph-iterations.js.map +0 -7
  321. package/dist/scripts/test-redis-storage.js +0 -389
  322. package/dist/scripts/test-redis-storage.js.map +0 -7
  323. package/dist/scripts/test-simple-ralph-state-sync.js +0 -115
  324. package/dist/scripts/test-simple-ralph-state-sync.js.map +0 -7
  325. package/dist/scripts/test-swarm-fixes.js +0 -125
  326. package/dist/scripts/test-swarm-fixes.js.map +0 -7
  327. package/dist/scripts/test-swarm-tui.js +0 -23
  328. package/dist/scripts/test-swarm-tui.js.map +0 -7
  329. package/dist/scripts/test-tui-shortcuts.js +0 -52
  330. package/dist/scripts/test-tui-shortcuts.js.map +0 -7
  331. package/dist/scripts/validate-tui-shortcuts.js +0 -60
  332. package/dist/scripts/validate-tui-shortcuts.js.map +0 -7
  333. package/dist/src/agents/core/agent-task-manager.js.map +0 -7
  334. package/dist/src/agents/verifiers/base-verifier.js.map +0 -7
  335. package/dist/src/agents/verifiers/formatter-verifier.js.map +0 -7
  336. package/dist/src/agents/verifiers/llm-judge.js.map +0 -7
  337. package/dist/src/cli/auto-detect.js.map +0 -7
  338. package/dist/src/cli/claude-sm-danger.js.map +0 -7
  339. package/dist/src/cli/claude-sm.js.map +0 -7
  340. package/dist/src/cli/codex-sm-danger.js.map +0 -7
  341. package/dist/src/cli/codex-sm.js.map +0 -7
  342. package/dist/src/cli/commands/api.js.map +0 -7
  343. package/dist/src/cli/commands/auto-background.js.map +0 -7
  344. package/dist/src/cli/commands/cleanup-processes.js.map +0 -7
  345. package/dist/src/cli/commands/clear.js.map +0 -7
  346. package/dist/src/cli/commands/config.js.map +0 -7
  347. package/dist/src/cli/commands/context-rehydrate.js.map +0 -7
  348. package/dist/src/cli/commands/context.js.map +0 -7
  349. package/dist/src/cli/commands/daemon.js.map +0 -7
  350. package/dist/src/cli/commands/dashboard.js.map +0 -7
  351. package/dist/src/cli/commands/db.js.map +0 -7
  352. package/dist/src/cli/commands/decision.js.map +0 -7
  353. package/dist/src/cli/commands/discovery.js.map +0 -7
  354. package/dist/src/cli/commands/handoff.js.map +0 -7
  355. package/dist/src/cli/commands/hooks.js.map +0 -7
  356. package/dist/src/cli/commands/linear.js.map +0 -7
  357. package/dist/src/cli/commands/log.js.map +0 -7
  358. package/dist/src/cli/commands/login.js.map +0 -7
  359. package/dist/src/cli/commands/migrate.js.map +0 -7
  360. package/dist/src/cli/commands/model.js.map +0 -7
  361. package/dist/src/cli/commands/onboard.js.map +0 -7
  362. package/dist/src/cli/commands/ping.js.map +0 -7
  363. package/dist/src/cli/commands/projects.js.map +0 -7
  364. package/dist/src/cli/commands/ralph.js.map +0 -7
  365. package/dist/src/cli/commands/retrieval.js.map +0 -7
  366. package/dist/src/cli/commands/search.js.map +0 -7
  367. package/dist/src/cli/commands/service.js.map +0 -7
  368. package/dist/src/cli/commands/session.js.map +0 -7
  369. package/dist/src/cli/commands/settings.js +0 -306
  370. package/dist/src/cli/commands/settings.js.map +0 -7
  371. package/dist/src/cli/commands/setup.js.map +0 -7
  372. package/dist/src/cli/commands/shell.js.map +0 -7
  373. package/dist/src/cli/commands/signup.js.map +0 -7
  374. package/dist/src/cli/commands/skills.js.map +0 -7
  375. package/dist/src/cli/commands/sms-notify.js +0 -795
  376. package/dist/src/cli/commands/sms-notify.js.map +0 -7
  377. package/dist/src/cli/commands/storage-tier.js.map +0 -7
  378. package/dist/src/cli/commands/sweep.js.map +0 -7
  379. package/dist/src/cli/commands/tasks.js.map +0 -7
  380. package/dist/src/cli/commands/worktree.js.map +0 -7
  381. package/dist/src/cli/index.js.map +0 -7
  382. package/dist/src/cli/opencode-sm.js.map +0 -7
  383. package/dist/src/cli/utils/viewer.js.map +0 -7
  384. package/dist/src/core/config/config-manager.js.map +0 -7
  385. package/dist/src/core/config/feature-flags.js.map +0 -7
  386. package/dist/src/core/config/storage-config.js.map +0 -7
  387. package/dist/src/core/config/types.js.map +0 -7
  388. package/dist/src/core/context/auto-context.js.map +0 -7
  389. package/dist/src/core/context/dual-stack-manager.js.map +0 -7
  390. package/dist/src/core/context/enhanced-rehydration.js.map +0 -7
  391. package/dist/src/core/context/frame-database.js.map +0 -7
  392. package/dist/src/core/context/frame-digest.js.map +0 -7
  393. package/dist/src/core/context/frame-handoff-manager.js.map +0 -7
  394. package/dist/src/core/context/frame-lifecycle-hooks.js.map +0 -7
  395. package/dist/src/core/context/frame-recovery.js.map +0 -7
  396. package/dist/src/core/context/frame-stack.js.map +0 -7
  397. package/dist/src/core/context/frame-types.js.map +0 -7
  398. package/dist/src/core/context/index.js.map +0 -7
  399. package/dist/src/core/context/permission-manager.js.map +0 -7
  400. package/dist/src/core/context/recursive-context-manager.js.map +0 -7
  401. package/dist/src/core/context/refactored-frame-manager.js.map +0 -7
  402. package/dist/src/core/context/shared-context-layer.js.map +0 -7
  403. package/dist/src/core/context/stack-merge-resolver.js.map +0 -7
  404. package/dist/src/core/context/validation.js.map +0 -7
  405. package/dist/src/core/database/batch-operations.js.map +0 -7
  406. package/dist/src/core/database/connection-pool.js.map +0 -7
  407. package/dist/src/core/database/database-adapter.js.map +0 -7
  408. package/dist/src/core/database/embedding-provider-factory.js.map +0 -7
  409. package/dist/src/core/database/embedding-provider.js.map +0 -7
  410. package/dist/src/core/database/migration-manager.js.map +0 -7
  411. package/dist/src/core/database/ollama-embedding-provider.js.map +0 -7
  412. package/dist/src/core/database/openai-embedding-provider.js.map +0 -7
  413. package/dist/src/core/database/query-cache.js.map +0 -7
  414. package/dist/src/core/database/query-router.js.map +0 -7
  415. package/dist/src/core/database/sqlite-adapter.js.map +0 -7
  416. package/dist/src/core/database/transformers-embedding-provider.js.map +0 -7
  417. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +0 -7
  418. package/dist/src/core/digest/frame-digest-integration.js.map +0 -7
  419. package/dist/src/core/digest/hybrid-digest-generator.js.map +0 -7
  420. package/dist/src/core/digest/index.js.map +0 -7
  421. package/dist/src/core/digest/types.js.map +0 -7
  422. package/dist/src/core/errors/error-utils.js.map +0 -7
  423. package/dist/src/core/errors/index.js.map +0 -7
  424. package/dist/src/core/errors/recovery.js.map +0 -7
  425. package/dist/src/core/execution/parallel-executor.js.map +0 -7
  426. package/dist/src/core/extensions/custom-tools.js.map +0 -7
  427. package/dist/src/core/extensions/index.js.map +0 -7
  428. package/dist/src/core/extensions/loader.js.map +0 -7
  429. package/dist/src/core/extensions/plugin-system.js.map +0 -7
  430. package/dist/src/core/extensions/provider-adapter.js.map +0 -7
  431. package/dist/src/core/extensions/sandbox-runtime.js.map +0 -7
  432. package/dist/src/core/extensions/types.js.map +0 -7
  433. package/dist/src/core/frame/workflow-templates.js.map +0 -7
  434. package/dist/src/core/merge/conflict-detector.js.map +0 -7
  435. package/dist/src/core/merge/index.js.map +0 -7
  436. package/dist/src/core/merge/resolution-engine.js.map +0 -7
  437. package/dist/src/core/merge/stack-diff.js.map +0 -7
  438. package/dist/src/core/merge/types.js.map +0 -7
  439. package/dist/src/core/merge/unified-merge-resolver.js.map +0 -7
  440. package/dist/src/core/models/fallback-monitor.js.map +0 -7
  441. package/dist/src/core/models/model-router.js.map +0 -7
  442. package/dist/src/core/monitoring/error-handler.js.map +0 -7
  443. package/dist/src/core/monitoring/logger.js.map +0 -7
  444. package/dist/src/core/monitoring/metrics.js.map +0 -7
  445. package/dist/src/core/monitoring/progress-tracker.js.map +0 -7
  446. package/dist/src/core/monitoring/session-monitor.js.map +0 -7
  447. package/dist/src/core/performance/context-cache.js.map +0 -7
  448. package/dist/src/core/performance/index.js.map +0 -7
  449. package/dist/src/core/performance/lazy-context-loader.js.map +0 -7
  450. package/dist/src/core/performance/monitor.js.map +0 -7
  451. package/dist/src/core/performance/optimized-frame-context.js.map +0 -7
  452. package/dist/src/core/performance/performance-benchmark.js.map +0 -7
  453. package/dist/src/core/performance/performance-profiler.js.map +0 -7
  454. package/dist/src/core/performance/streaming-jsonl-parser.js.map +0 -7
  455. package/dist/src/core/persistence/postgres-adapter.js.map +0 -7
  456. package/dist/src/core/projects/project-isolation.js.map +0 -7
  457. package/dist/src/core/projects/project-manager.js.map +0 -7
  458. package/dist/src/core/query/query-parser.js.map +0 -7
  459. package/dist/src/core/query/query-templates.js.map +0 -7
  460. package/dist/src/core/retrieval/context-retriever.js.map +0 -7
  461. package/dist/src/core/retrieval/index.js.map +0 -7
  462. package/dist/src/core/retrieval/llm-context-retrieval.js.map +0 -7
  463. package/dist/src/core/retrieval/llm-provider.js.map +0 -7
  464. package/dist/src/core/retrieval/privacy-filter.js.map +0 -7
  465. package/dist/src/core/retrieval/retrieval-audit.js.map +0 -7
  466. package/dist/src/core/retrieval/summary-generator.js.map +0 -7
  467. package/dist/src/core/retrieval/types.js.map +0 -7
  468. package/dist/src/core/retrieval/unified-context-assembler.js.map +0 -7
  469. package/dist/src/core/security/index.js.map +0 -7
  470. package/dist/src/core/security/input-sanitizer.js.map +0 -7
  471. package/dist/src/core/session/clear-survival.js.map +0 -7
  472. package/dist/src/core/session/enhanced-handoff.js.map +0 -7
  473. package/dist/src/core/session/handoff-generator.js.map +0 -7
  474. package/dist/src/core/session/index.js.map +0 -7
  475. package/dist/src/core/session/session-manager.js.map +0 -7
  476. package/dist/src/core/skills/index.js.map +0 -7
  477. package/dist/src/core/skills/skill-storage.js.map +0 -7
  478. package/dist/src/core/skills/types.js.map +0 -7
  479. package/dist/src/core/storage/chromadb-adapter.js.map +0 -7
  480. package/dist/src/core/storage/infinite-storage.js.map +0 -7
  481. package/dist/src/core/storage/project-registry.js.map +0 -7
  482. package/dist/src/core/storage/remote-storage.js.map +0 -7
  483. package/dist/src/core/storage/storage-tier-manager.js.map +0 -7
  484. package/dist/src/core/storage/two-tier-storage.js.map +0 -7
  485. package/dist/src/core/trace/cli-trace-wrapper.js.map +0 -7
  486. package/dist/src/core/trace/db-trace-wrapper.js.map +0 -7
  487. package/dist/src/core/trace/debug-trace.js.map +0 -7
  488. package/dist/src/core/trace/index.js.map +0 -7
  489. package/dist/src/core/trace/linear-api-wrapper.js.map +0 -7
  490. package/dist/src/core/trace/trace-detector.js.map +0 -7
  491. package/dist/src/core/trace/trace-store.js.map +0 -7
  492. package/dist/src/core/trace/types.js.map +0 -7
  493. package/dist/src/core/types.js.map +0 -7
  494. package/dist/src/core/utils/async-mutex.js.map +0 -7
  495. package/dist/src/core/utils/compression.js.map +0 -7
  496. package/dist/src/core/utils/update-checker.js.map +0 -7
  497. package/dist/src/core/worktree/worktree-manager.js.map +0 -7
  498. package/dist/src/daemon/daemon-config.js.map +0 -7
  499. package/dist/src/daemon/services/context-service.js.map +0 -7
  500. package/dist/src/daemon/services/linear-service.js.map +0 -7
  501. package/dist/src/daemon/services/maintenance-service.js.map +0 -7
  502. package/dist/src/daemon/services/memory-service.js.map +0 -7
  503. package/dist/src/daemon/session-daemon.js.map +0 -7
  504. package/dist/src/daemon/unified-daemon.js.map +0 -7
  505. package/dist/src/features/analytics/api/analytics-api.js.map +0 -7
  506. package/dist/src/features/analytics/core/analytics-service.js.map +0 -7
  507. package/dist/src/features/analytics/index.js.map +0 -7
  508. package/dist/src/features/analytics/queries/metrics-queries.js.map +0 -7
  509. package/dist/src/features/analytics/types/metrics.js.map +0 -7
  510. package/dist/src/features/browser/browser-mcp.js.map +0 -7
  511. package/dist/src/features/sweep/index.js.map +0 -7
  512. package/dist/src/features/sweep/prediction-client.js.map +0 -7
  513. package/dist/src/features/sweep/prompt-builder.js.map +0 -7
  514. package/dist/src/features/sweep/pty-wrapper.js.map +0 -7
  515. package/dist/src/features/sweep/state-watcher.js.map +0 -7
  516. package/dist/src/features/sweep/status-bar.js.map +0 -7
  517. package/dist/src/features/sweep/sweep-server-manager.js.map +0 -7
  518. package/dist/src/features/sweep/tab-interceptor.js.map +0 -7
  519. package/dist/src/features/sweep/types.js.map +0 -7
  520. package/dist/src/features/tasks/linear-task-manager.js.map +0 -7
  521. package/dist/src/features/tasks/task-aware-context.js.map +0 -7
  522. package/dist/src/features/tui/simple-monitor.js.map +0 -7
  523. package/dist/src/features/tui/swarm-monitor.js.map +0 -7
  524. package/dist/src/features/web/client/stores/task-store.js.map +0 -7
  525. package/dist/src/features/web/server/index.js.map +0 -7
  526. package/dist/src/features/workers/tmux-manager.js.map +0 -7
  527. package/dist/src/features/workers/worker-registry.js.map +0 -7
  528. package/dist/src/hooks/auto-background.js.map +0 -7
  529. package/dist/src/hooks/claude-code-whatsapp-hook.js +0 -197
  530. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +0 -7
  531. package/dist/src/hooks/config.js.map +0 -7
  532. package/dist/src/hooks/daemon.js.map +0 -7
  533. package/dist/src/hooks/diffmem-hooks.js.map +0 -7
  534. package/dist/src/hooks/events.js.map +0 -7
  535. package/dist/src/hooks/index.js.map +0 -7
  536. package/dist/src/hooks/linear-task-picker.js.map +0 -7
  537. package/dist/src/hooks/schemas.js.map +0 -7
  538. package/dist/src/hooks/secure-fs.js.map +0 -7
  539. package/dist/src/hooks/security-logger.js.map +0 -7
  540. package/dist/src/hooks/session-summary.js.map +0 -7
  541. package/dist/src/hooks/sms-action-runner.js +0 -371
  542. package/dist/src/hooks/sms-action-runner.js.map +0 -7
  543. package/dist/src/hooks/sms-notify.js +0 -506
  544. package/dist/src/hooks/sms-notify.js.map +0 -7
  545. package/dist/src/hooks/sms-watcher.js +0 -93
  546. package/dist/src/hooks/sms-watcher.js.map +0 -7
  547. package/dist/src/hooks/sms-webhook.js +0 -555
  548. package/dist/src/hooks/sms-webhook.js.map +0 -7
  549. package/dist/src/hooks/whatsapp-commands.js +0 -479
  550. package/dist/src/hooks/whatsapp-commands.js.map +0 -7
  551. package/dist/src/hooks/whatsapp-scheduler.js +0 -317
  552. package/dist/src/hooks/whatsapp-scheduler.js.map +0 -7
  553. package/dist/src/hooks/whatsapp-sync.js +0 -409
  554. package/dist/src/hooks/whatsapp-sync.js.map +0 -7
  555. package/dist/src/index.js.map +0 -7
  556. package/dist/src/integrations/anthropic/client.js.map +0 -7
  557. package/dist/src/integrations/claude-code/agent-bridge.js.map +0 -7
  558. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
  559. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +0 -7
  560. package/dist/src/integrations/claude-code/post-task-hooks.js.map +0 -7
  561. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +0 -7
  562. package/dist/src/integrations/claude-code/subagent-client.js.map +0 -7
  563. package/dist/src/integrations/claude-code/task-coordinator.js.map +0 -7
  564. package/dist/src/integrations/diffmem/client.js.map +0 -7
  565. package/dist/src/integrations/diffmem/config.js.map +0 -7
  566. package/dist/src/integrations/diffmem/index.js.map +0 -7
  567. package/dist/src/integrations/diffmem/types.js.map +0 -7
  568. package/dist/src/integrations/linear/auth.js.map +0 -7
  569. package/dist/src/integrations/linear/auto-sync.js.map +0 -7
  570. package/dist/src/integrations/linear/client.js.map +0 -7
  571. package/dist/src/integrations/linear/config.js.map +0 -7
  572. package/dist/src/integrations/linear/migration.js.map +0 -7
  573. package/dist/src/integrations/linear/oauth-server.js.map +0 -7
  574. package/dist/src/integrations/linear/rest-client.js.map +0 -7
  575. package/dist/src/integrations/linear/sync-manager.js.map +0 -7
  576. package/dist/src/integrations/linear/sync-service.js.map +0 -7
  577. package/dist/src/integrations/linear/sync.js.map +0 -7
  578. package/dist/src/integrations/linear/types.js.map +0 -7
  579. package/dist/src/integrations/linear/unified-sync.js.map +0 -7
  580. package/dist/src/integrations/linear/webhook-handler.js.map +0 -7
  581. package/dist/src/integrations/linear/webhook-server.js.map +0 -7
  582. package/dist/src/integrations/linear/webhook.js.map +0 -7
  583. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
  584. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +0 -7
  585. package/dist/src/integrations/mcp/handlers/diffmem-handlers.js.map +0 -7
  586. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
  587. package/dist/src/integrations/mcp/handlers/index.js.map +0 -7
  588. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +0 -7
  589. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +0 -7
  590. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +0 -7
  591. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +0 -7
  592. package/dist/src/integrations/mcp/index.js.map +0 -7
  593. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +0 -7
  594. package/dist/src/integrations/mcp/pending-utils.js.map +0 -7
  595. package/dist/src/integrations/mcp/refactored-server.js.map +0 -7
  596. package/dist/src/integrations/mcp/remote-server.js.map +0 -7
  597. package/dist/src/integrations/mcp/schemas.js.map +0 -7
  598. package/dist/src/integrations/mcp/server.js.map +0 -7
  599. package/dist/src/integrations/mcp/tool-definitions-code.js.map +0 -7
  600. package/dist/src/integrations/mcp/tool-definitions.js.map +0 -7
  601. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
  602. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +0 -7
  603. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
  604. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
  605. package/dist/src/integrations/ralph/index.js.map +0 -7
  606. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +0 -7
  607. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
  608. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
  609. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
  610. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
  611. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
  612. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
  613. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
  614. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +0 -7
  615. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +0 -7
  616. package/dist/src/integrations/ralph/state/state-reconciler.js.map +0 -7
  617. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
  618. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
  619. package/dist/src/integrations/ralph/types.js.map +0 -7
  620. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
  621. package/dist/src/mcp/stackmemory-mcp-server.js.map +0 -7
  622. package/dist/src/middleware/exponential-rate-limiter.js.map +0 -7
  623. package/dist/src/models/user.model.js.map +0 -7
  624. package/dist/src/orchestrators/multimodal/constants.js.map +0 -7
  625. package/dist/src/orchestrators/multimodal/harness.js.map +0 -7
  626. package/dist/src/orchestrators/multimodal/providers.js.map +0 -7
  627. package/dist/src/orchestrators/multimodal/types.js.map +0 -7
  628. package/dist/src/orchestrators/multimodal/utils.js.map +0 -7
  629. package/dist/src/servers/production/auth-middleware.js.map +0 -7
  630. package/dist/src/services/config-service.js.map +0 -7
  631. package/dist/src/services/context-service.js.map +0 -7
  632. package/dist/src/skills/api-discovery.js.map +0 -7
  633. package/dist/src/skills/api-skill.js.map +0 -7
  634. package/dist/src/skills/claude-skills.js.map +0 -7
  635. package/dist/src/skills/dashboard-launcher.js.map +0 -7
  636. package/dist/src/skills/linear-task-runner.js.map +0 -7
  637. package/dist/src/skills/recursive-agent-orchestrator.js.map +0 -7
  638. package/dist/src/skills/repo-ingestion-skill.js.map +0 -7
  639. package/dist/src/skills/spec-generator-skill.js.map +0 -7
  640. package/dist/src/skills/unified-rlm-orchestrator.js.map +0 -7
  641. package/dist/src/types/task.js.map +0 -7
  642. package/dist/src/utils/env.js.map +0 -7
  643. package/dist/src/utils/formatting.js.map +0 -7
  644. package/dist/src/utils/process-cleanup.js.map +0 -7
  645. package/scripts/README-TESTING.md +0 -186
  646. package/scripts/analyze-cli-security.js +0 -288
  647. package/scripts/archive/add-phase-tasks-to-linear.js +0 -163
  648. package/scripts/archive/analyze-linear-duplicates.js +0 -214
  649. package/scripts/archive/analyze-remaining-duplicates.js +0 -230
  650. package/scripts/archive/analyze-sta-duplicates.js +0 -292
  651. package/scripts/archive/analyze-sta-graphql.js +0 -399
  652. package/scripts/archive/cancel-duplicate-tasks.ts +0 -246
  653. package/scripts/archive/check-all-duplicates.ts +0 -419
  654. package/scripts/archive/clean-duplicate-tasks.js +0 -114
  655. package/scripts/archive/cleanup-duplicate-tasks.ts +0 -286
  656. package/scripts/archive/create-phase-tasks.js +0 -387
  657. package/scripts/archive/delete-linear-duplicates.js +0 -182
  658. package/scripts/archive/delete-remaining-duplicates.js +0 -158
  659. package/scripts/archive/delete-sta-duplicates.js +0 -201
  660. package/scripts/archive/delete-sta-oauth.js +0 -201
  661. package/scripts/archive/export-sta-tasks.js +0 -62
  662. package/scripts/archive/install-auto-sync.js +0 -266
  663. package/scripts/archive/install-chromadb-hooks.sh +0 -133
  664. package/scripts/archive/install-enhanced-clear-hooks.sh +0 -431
  665. package/scripts/archive/install-post-task-hooks.sh +0 -289
  666. package/scripts/archive/install-stackmemory-hooks.sh +0 -420
  667. package/scripts/archive/merge-linear-duplicates-safe.ts +0 -362
  668. package/scripts/archive/merge-linear-duplicates.ts +0 -182
  669. package/scripts/archive/remove-sta-tasks.js +0 -70
  670. package/scripts/archive/setup-background-sync.sh +0 -168
  671. package/scripts/archive/setup-claude-auto-triggers.sh +0 -181
  672. package/scripts/archive/setup-claude-autostart.sh +0 -305
  673. package/scripts/archive/setup-git-hooks.sh +0 -25
  674. package/scripts/archive/setup-linear-oauth.sh +0 -46
  675. package/scripts/archive/setup-mcp.sh +0 -113
  676. package/scripts/archive/setup-railway-deployment.sh +0 -81
  677. package/scripts/auto-handoff.sh +0 -262
  678. package/scripts/background-sync-manager.js +0 -478
  679. package/scripts/benchmark-performance.ts +0 -57
  680. package/scripts/check-redis.ts +0 -48
  681. package/scripts/chromadb-auto-loader.sh +0 -128
  682. package/scripts/chromadb-context-loader.js +0 -479
  683. package/scripts/claude-chromadb-hook.js +0 -460
  684. package/scripts/claude-linear-skill.js +0 -455
  685. package/scripts/claude-pre-commit.sh +0 -302
  686. package/scripts/claude-sm-autostart.js +0 -579
  687. package/scripts/claude-with-chromadb.sh +0 -69
  688. package/scripts/clean-linear-backlog.js +0 -273
  689. package/scripts/cleanup-old-sessions.sh +0 -57
  690. package/scripts/create-cleanup-issues.js +0 -302
  691. package/scripts/create-sandbox.sh +0 -269
  692. package/scripts/debug-linear-update.js +0 -174
  693. package/scripts/delete-linear-tasks.js +0 -167
  694. package/scripts/demos/browser-test.ts +0 -39
  695. package/scripts/demos/ralph-integration-demo.ts +0 -245
  696. package/scripts/demos/trace-demo.ts +0 -200
  697. package/scripts/demos/trace-detector.demo.ts +0 -171
  698. package/scripts/demos/trace-test.ts +0 -79
  699. package/scripts/deploy-ralph-swarm.sh +0 -365
  700. package/scripts/deploy.sh +0 -89
  701. package/scripts/deployment/test-deployment.js +0 -194
  702. package/scripts/detect-and-rehydrate.js +0 -162
  703. package/scripts/detect-and-rehydrate.mjs +0 -165
  704. package/scripts/development/create-demo-tasks.js +0 -143
  705. package/scripts/development/debug-frame-test.js +0 -16
  706. package/scripts/development/demo-auto-sync.js +0 -128
  707. package/scripts/development/fix-all-imports.js +0 -213
  708. package/scripts/development/fix-imports.js +0 -229
  709. package/scripts/development/fix-lint-loop.cjs +0 -103
  710. package/scripts/development/fix-project-id.ts +0 -161
  711. package/scripts/development/fix-strict-mode-issues.ts +0 -291
  712. package/scripts/development/reorganize-structure.sh +0 -228
  713. package/scripts/development/test-persistence-direct.js +0 -148
  714. package/scripts/development/test-persistence.js +0 -114
  715. package/scripts/development/test-tasks.js +0 -93
  716. package/scripts/development/update-imports.js +0 -212
  717. package/scripts/fetch-linear-status.js +0 -125
  718. package/scripts/initialize.ts +0 -220
  719. package/scripts/install-notify-hook.sh +0 -84
  720. package/scripts/linear-auto-sync.js +0 -262
  721. package/scripts/linear-auto-sync.sh +0 -161
  722. package/scripts/linear-sync-daemon.js +0 -150
  723. package/scripts/linear-task-review.js +0 -237
  724. package/scripts/list-linear-tasks.ts +0 -178
  725. package/scripts/mcp-proxy.js +0 -66
  726. package/scripts/measure-handoff-impact.mjs +0 -395
  727. package/scripts/measure-handoff-impact.ts +0 -450
  728. package/scripts/publish-local.js +0 -74
  729. package/scripts/query-chromadb.ts +0 -201
  730. package/scripts/ralph-integration-test.js +0 -274
  731. package/scripts/reconcile-local-tasks.js +0 -170
  732. package/scripts/recreate-frames-db.js +0 -89
  733. package/scripts/setup-notify-webhook.sh +0 -103
  734. package/scripts/show-linear-summary.ts +0 -172
  735. package/scripts/simple-swarm-demo.ts +0 -114
  736. package/scripts/stackmemory-auto-handoff.sh +0 -231
  737. package/scripts/start-linear-sync-daemon.sh +0 -141
  738. package/scripts/start-temporal-paradox.sh +0 -214
  739. package/scripts/status.ts +0 -224
  740. package/scripts/stop-notify-webhook.sh +0 -19
  741. package/scripts/swarm-monitor.js +0 -509
  742. package/scripts/sync-and-clean-tasks.js +0 -258
  743. package/scripts/sync-linear-graphql.js +0 -303
  744. package/scripts/sync-linear-tasks.js +0 -186
  745. package/scripts/test-auto-triggers.sh +0 -57
  746. package/scripts/test-browser-mcp.js +0 -74
  747. package/scripts/test-chromadb-full.js +0 -115
  748. package/scripts/test-chromadb-hooks.sh +0 -28
  749. package/scripts/test-chromadb-sync.ts +0 -245
  750. package/scripts/test-claude-config.sh +0 -123
  751. package/scripts/test-cli-security.js +0 -293
  752. package/scripts/test-code-execution.js +0 -143
  753. package/scripts/test-hooks-persistence.sh +0 -220
  754. package/scripts/test-installation-scenarios.sh +0 -359
  755. package/scripts/test-installation.sh +0 -224
  756. package/scripts/test-mcp.js +0 -163
  757. package/scripts/test-parallel-swarms.js +0 -443
  758. package/scripts/test-pre-publish-quick.sh +0 -77
  759. package/scripts/test-quality-gates.sh +0 -263
  760. package/scripts/test-ralph-iteration-fix.ts +0 -118
  761. package/scripts/test-ralph-iterations.ts +0 -164
  762. package/scripts/test-redis-storage.ts +0 -490
  763. package/scripts/test-rlm-basic.sh +0 -122
  764. package/scripts/test-rlm-comprehensive.sh +0 -260
  765. package/scripts/test-rlm-e2e.sh +0 -268
  766. package/scripts/test-rlm-simple.js +0 -90
  767. package/scripts/test-rlm.js +0 -110
  768. package/scripts/test-session-handoff.sh +0 -165
  769. package/scripts/test-setup-e2e.sh +0 -154
  770. package/scripts/test-shell-integration.sh +0 -275
  771. package/scripts/test-simple-ralph-state-sync.ts +0 -178
  772. package/scripts/test-swarm-fixes.ts +0 -161
  773. package/scripts/test-swarm-git-workflow.js +0 -338
  774. package/scripts/test-swarm-tui.ts +0 -34
  775. package/scripts/test-tui-shortcuts.ts +0 -66
  776. package/scripts/testing/ab-test-runner.ts +0 -510
  777. package/scripts/testing/collect-metrics.ts +0 -457
  778. package/scripts/testing/quick-effectiveness-demo.js +0 -187
  779. package/scripts/testing/ralph-cli-test.js +0 -88
  780. package/scripts/testing/ralph-integration-validation.js +0 -727
  781. package/scripts/testing/ralph-swarm-test-scenarios.js +0 -613
  782. package/scripts/testing/real-performance-test.js +0 -422
  783. package/scripts/testing/results/real-performance-results.json +0 -90
  784. package/scripts/testing/run-effectiveness-tests.sh +0 -176
  785. package/scripts/testing/simple-effectiveness-test.js +0 -310
  786. package/scripts/testing/test-tier-migration.js +0 -100
  787. package/scripts/update-linear-status.js +0 -268
  788. package/scripts/update-linear-tasks-fixed.js +0 -284
  789. package/scripts/validate-claude-config.sh +0 -155
  790. package/scripts/validate-swarm-implementation.js +0 -467
  791. package/scripts/validate-tui-shortcuts.ts +0 -83
  792. package/templates/claude-hooks/notify-review-hook.js +0 -360
  793. package/templates/claude-hooks/sms-response-handler.js +0 -174
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/agents/verifiers/base-verifier.ts"],
4
- "sourcesContent": ["/**\n * Base Verifier Interface - Spotify-inspired verification infrastructure\n *\n * Implements the strong verification loop pattern from Spotify's approach:\n * - Component-aware activation\n * - Incremental feedback\n * - Abstract complexity from agents\n */\n\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport type VerifierSeverity = 'error' | 'warning' | 'info';\nexport type VerifierType =\n | 'syntax'\n | 'semantic'\n | 'performance'\n | 'security'\n | 'style';\n\nexport interface VerifierContext {\n filePath?: string;\n language?: string;\n framework?: string;\n hasTests?: boolean;\n hasDocumentation?: boolean;\n isProduction?: boolean;\n customRules?: Record<string, any>;\n}\n\nexport interface VerifierResult {\n verifierId: string;\n verifierType: VerifierType;\n passed: boolean;\n message: string;\n severity: VerifierSeverity;\n timestamp: Date;\n details?: VerifierDetails;\n autoFix?: VerifierAutoFix;\n confidence?: number; // 0-1, for probabilistic verifiers like LLM judge\n}\n\nexport interface VerifierDetails {\n location?: {\n file?: string;\n line?: number;\n column?: number;\n };\n code?: string;\n expected?: string;\n actual?: string;\n suggestion?: string;\n relatedLinks?: string[];\n}\n\nexport interface VerifierAutoFix {\n command: string;\n description: string;\n safe: boolean; // Whether fix can be applied automatically\n confidence: number; // 0-1\n}\n\nexport interface VerifierConfig {\n id: string;\n name: string;\n type: VerifierType;\n enabled: boolean;\n stopOnError: boolean; // Spotify's stop hook pattern\n maxRetries?: number;\n timeout?: number; // milliseconds\n customConfig?: Record<string, any>;\n}\n\n/**\n * Abstract base class for all verifiers\n */\nexport abstract class BaseVerifier {\n protected config: VerifierConfig;\n protected retryCount: Map<string, number> = new Map();\n\n constructor(config: VerifierConfig) {\n this.config = config;\n }\n\n /**\n * Check if verifier should be activated for given context\n * Implements Spotify's context-aware activation\n */\n abstract shouldActivate(context: VerifierContext): boolean;\n\n /**\n * Run verification on the given input\n */\n abstract verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult>;\n\n /**\n * Extract most relevant error messages (Spotify pattern)\n */\n protected extractRelevantErrors(\n output: string,\n patterns: RegExp[]\n ): string[] {\n const errors: string[] = [];\n const lines = output.split('\\n');\n\n for (const line of lines) {\n for (const pattern of patterns) {\n const match = line.match(pattern);\n if (match) {\n errors.push(match[0]);\n break;\n }\n }\n }\n\n // Limit to most relevant errors (Spotify's approach)\n return errors.slice(0, 5);\n }\n\n /**\n * Generate incremental feedback\n */\n protected generateFeedback(\n errors: string[],\n context: VerifierContext\n ): string {\n if (errors.length === 0) {\n return `${this.config.name} verification passed`;\n }\n\n const prefix = context.filePath ? `In ${context.filePath}: ` : '';\n const errorList = errors.map((e) => ` - ${e}`).join('\\n');\n\n return `${prefix}${this.config.name} found ${errors.length} issue(s):\\n${errorList}`;\n }\n\n /**\n * Retry logic for transient failures\n */\n protected async withRetry<T>(\n operation: () => Promise<T>,\n key: string\n ): Promise<T> {\n const maxRetries = this.config.maxRetries || 0;\n const currentRetries = this.retryCount.get(key) || 0;\n\n try {\n const result = await operation();\n this.retryCount.delete(key); // Clear on success\n return result;\n } catch (error: unknown) {\n if (currentRetries < maxRetries) {\n this.retryCount.set(key, currentRetries + 1);\n logger.warn(`Retrying ${this.config.name} verification`, {\n attempt: currentRetries + 1,\n maxRetries,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Exponential backoff\n await this.delay(Math.pow(2, currentRetries) * 1000);\n return this.withRetry(operation, key);\n }\n\n this.retryCount.delete(key);\n throw error;\n }\n }\n\n /**\n * Apply timeout to verification\n */\n protected async withTimeout<T>(operation: () => Promise<T>): Promise<T> {\n if (!this.config.timeout) {\n return operation();\n }\n\n return Promise.race([\n operation(),\n new Promise<T>((_, reject) =>\n setTimeout(\n () =>\n reject(\n new Error(\n `${this.config.name} timeout after ${this.config.timeout}ms`\n )\n ),\n this.config.timeout\n )\n ),\n ]);\n }\n\n /**\n * Helper to create a standard result\n */\n protected createResult(\n passed: boolean,\n message: string,\n severity: VerifierSeverity = 'info',\n details?: VerifierDetails,\n autoFix?: VerifierAutoFix\n ): VerifierResult {\n return {\n verifierId: this.config.id,\n verifierType: this.config.type,\n passed,\n message,\n severity,\n timestamp: new Date(),\n details: details || undefined,\n autoFix: autoFix || undefined,\n };\n }\n\n /**\n * Delay helper for retries\n */\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Get verifier configuration\n */\n getConfig(): VerifierConfig {\n return { ...this.config };\n }\n\n /**\n * Check if verifier should stop execution on error\n */\n shouldStopOnError(): boolean {\n return this.config.stopOnError;\n }\n\n /**\n * Update verifier configuration\n */\n updateConfig(updates: Partial<VerifierConfig>): void {\n this.config = { ...this.config, ...updates };\n logger.info(`Updated ${this.config.name} configuration`, {\n updates,\n });\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/agents/verifiers/formatter-verifier.ts"],
4
- "sourcesContent": ["/**\n * Formatter Verifier - Code formatting verification\n * Based on Spotify's formatting verifier pattern\n */\n\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport {\n BaseVerifier,\n VerifierContext,\n VerifierResult,\n VerifierConfig,\n} from './base-verifier.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport class FormatterVerifier extends BaseVerifier {\n private formatters: Map<string, FormatterCommand> = new Map();\n\n constructor(config?: Partial<VerifierConfig>) {\n super({\n id: 'formatter',\n name: 'Code Formatter',\n type: 'style',\n enabled: true,\n stopOnError: false,\n timeout: 10000,\n ...config,\n });\n\n this.initializeFormatters();\n }\n\n private initializeFormatters() {\n // Common formatters for different languages\n this.formatters.set('typescript', {\n checkCommand: 'npx prettier --check',\n fixCommand: 'npx prettier --write',\n patterns: [/\\[error\\]/gi, /File not formatted/gi],\n });\n\n this.formatters.set('javascript', {\n checkCommand: 'npx prettier --check',\n fixCommand: 'npx prettier --write',\n patterns: [/\\[error\\]/gi, /File not formatted/gi],\n });\n\n this.formatters.set('python', {\n checkCommand: 'black --check',\n fixCommand: 'black',\n patterns: [/would reformat/gi, /File not formatted/gi],\n });\n\n this.formatters.set('rust', {\n checkCommand: 'cargo fmt -- --check',\n fixCommand: 'cargo fmt',\n patterns: [/Diff in/gi, /File not formatted/gi],\n });\n\n this.formatters.set('go', {\n checkCommand: 'gofmt -l',\n fixCommand: 'gofmt -w',\n patterns: [/.+\\.go$/gm], // gofmt lists unformatted files\n });\n }\n\n shouldActivate(context: VerifierContext): boolean {\n // Activate for supported languages with code files\n if (!context.language || !context.filePath) {\n return false;\n }\n\n return this.formatters.has(context.language.toLowerCase());\n }\n\n async verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult> {\n if (!context.language || !context.filePath) {\n return this.createResult(\n false,\n 'Missing language or file path in context',\n 'error'\n );\n }\n\n const formatter = this.formatters.get(context.language.toLowerCase());\n if (!formatter) {\n return this.createResult(\n true,\n `No formatter configured for ${context.language}`,\n 'info'\n );\n }\n\n try {\n return await this.withTimeout(async () => {\n return await this.withRetry(\n () => this.runFormatter(formatter, context),\n context.filePath!\n );\n });\n } catch (error: unknown) {\n logger.error(\n 'Formatter verification failed',\n error instanceof Error ? error : undefined\n );\n return this.createResult(\n false,\n `Formatter error: ${error instanceof Error ? error.message : String(error)}`,\n 'error'\n );\n }\n }\n\n private async runFormatter(\n formatter: FormatterCommand,\n context: VerifierContext\n ): Promise<VerifierResult> {\n const command = `${formatter.checkCommand} \"${context.filePath}\"`;\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd: process.cwd(),\n timeout: this.config.timeout,\n });\n\n // Formatter passed\n return this.createResult(true, 'Code is properly formatted', 'info');\n } catch (error: any) {\n // Check if it's a formatting issue (exit code 1) vs actual error\n if (error.code === 1) {\n const output = error.stdout + error.stderr;\n const errors = this.extractRelevantErrors(output, formatter.patterns);\n\n return this.createResult(\n false,\n this.generateFeedback(errors, context),\n 'warning',\n {\n code: output.substring(0, 500),\n suggestion: 'Run formatter to fix issues',\n },\n {\n command: `${formatter.fixCommand} \"${context.filePath}\"`,\n description: 'Auto-format the file',\n safe: true,\n confidence: 0.95,\n }\n );\n }\n\n // Actual error running formatter\n throw error;\n }\n }\n}\n\ninterface FormatterCommand {\n checkCommand: string;\n fixCommand: string;\n patterns: RegExp[];\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/agents/verifiers/llm-judge.ts"],
4
- "sourcesContent": ["/**\n * LLM Judge - Semantic validation using LLM\n * Implements Spotify's LLM judge pattern that \"vetoes about a quarter of agent sessions\"\n */\n\nimport {\n BaseVerifier,\n VerifierContext,\n VerifierResult,\n VerifierConfig,\n} from './base-verifier.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\nexport interface LLMJudgeContext extends VerifierContext {\n originalPrompt: string;\n proposedChanges: string;\n acceptanceCriteria?: string[];\n previousFeedback?: string[];\n}\n\nexport interface JudgementCriteria {\n adherenceToRequirements: number; // 0-1\n codeQuality: number; // 0-1\n safety: number; // 0-1\n completeness: number; // 0-1\n semanticCorrectness: number; // 0-1\n}\n\nexport class LLMJudge extends BaseVerifier {\n // Spotify reports ~75% pass rate (25% veto rate)\n private readonly VETO_THRESHOLD = 0.7;\n private readonly CRITERIA_WEIGHTS = {\n adherenceToRequirements: 0.3,\n codeQuality: 0.2,\n safety: 0.2,\n completeness: 0.15,\n semanticCorrectness: 0.15,\n };\n\n constructor(config?: Partial<VerifierConfig>) {\n super({\n id: 'llm-judge',\n name: 'LLM Semantic Judge',\n type: 'semantic',\n enabled: true,\n stopOnError: true, // Stop on semantic failures (Spotify pattern)\n timeout: 30000,\n ...config,\n });\n }\n\n shouldActivate(context: VerifierContext): boolean {\n // Always activate for semantic validation (Spotify always includes this)\n return true;\n }\n\n async verify(\n input: string | Buffer,\n context: VerifierContext\n ): Promise<VerifierResult> {\n const llmContext = context as LLMJudgeContext;\n\n if (!llmContext.originalPrompt) {\n return this.createResult(\n false,\n 'Missing original prompt for semantic validation',\n 'error'\n );\n }\n\n try {\n return await this.withTimeout(async () => {\n const judgement = await this.performJudgement(\n input.toString(),\n llmContext\n );\n return this.createJudgementResult(judgement, llmContext);\n });\n } catch (error: unknown) {\n logger.error(\n 'LLM Judge failed',\n error instanceof Error ? error : undefined\n );\n return this.createResult(\n false,\n `Semantic validation error: ${error instanceof Error ? error.message : String(error)}`,\n 'error'\n );\n }\n }\n\n private async performJudgement(\n proposedChanges: string,\n context: LLMJudgeContext\n ): Promise<JudgementCriteria> {\n // In production, this would call an actual LLM API\n // For now, simulate judgement with realistic patterns\n\n const criteria: JudgementCriteria = {\n adherenceToRequirements: this.evaluateAdherence(proposedChanges, context),\n codeQuality: this.evaluateCodeQuality(proposedChanges),\n safety: this.evaluateSafety(proposedChanges),\n completeness: this.evaluateCompleteness(proposedChanges, context),\n semanticCorrectness: this.evaluateSemanticCorrectness(\n proposedChanges,\n context\n ),\n };\n\n // Log judgement for analysis (Spotify's trace collection)\n logger.info('LLM Judge evaluation', {\n criteria,\n overallScore: this.calculateOverallScore(criteria),\n willVeto: this.calculateOverallScore(criteria) < this.VETO_THRESHOLD,\n });\n\n return criteria;\n }\n\n private evaluateAdherence(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Simulate checking if changes match original requirements\n const hasKeywords = context.originalPrompt\n .toLowerCase()\n .split(' ')\n .filter((word) => word.length > 4)\n .some((keyword) => proposedChanges.toLowerCase().includes(keyword));\n\n // Check acceptance criteria if provided\n if (context.acceptanceCriteria) {\n const metCriteria = context.acceptanceCriteria.filter((criterion) =>\n this.checkCriterion(criterion, proposedChanges)\n ).length;\n const criteriaScore = metCriteria / context.acceptanceCriteria.length;\n return hasKeywords ? Math.min(1, criteriaScore + 0.2) : criteriaScore;\n }\n\n // Simulate realistic pass rate (~75%)\n return hasKeywords ? 0.75 + Math.random() * 0.2 : 0.4 + Math.random() * 0.3;\n }\n\n private evaluateCodeQuality(proposedChanges: string): number {\n // Simple heuristics for code quality\n const indicators = {\n hasComments:\n proposedChanges.includes('//') || proposedChanges.includes('/*'),\n hasErrorHandling:\n proposedChanges.includes('try') || proposedChanges.includes('catch'),\n hasTests:\n proposedChanges.includes('test') || proposedChanges.includes('expect'),\n properNaming: !/[a-z]{20,}|[A-Z]{10,}/.test(proposedChanges), // No extremely long names\n reasonable_length:\n proposedChanges.length > 50 && proposedChanges.length < 5000,\n };\n\n const score =\n Object.values(indicators).filter(Boolean).length /\n Object.keys(indicators).length;\n return Math.min(1, score + 0.2); // Boost slightly\n }\n\n private evaluateSafety(proposedChanges: string): number {\n // Check for dangerous patterns\n const dangerousPatterns = [\n /eval\\s*\\(/,\n /exec\\s*\\(/,\n /rm\\s+-rf/,\n /DROP\\s+TABLE/i,\n /DELETE\\s+FROM/i,\n /<script>/i,\n /document\\.write/,\n /innerHTML\\s*=/,\n ];\n\n const hasDangerousPattern = dangerousPatterns.some((pattern) =>\n pattern.test(proposedChanges)\n );\n\n return hasDangerousPattern ? 0.3 : 0.9 + Math.random() * 0.1;\n }\n\n private evaluateCompleteness(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Check if the solution seems complete\n const hasImplementation = proposedChanges.length > 100;\n const hasStructure =\n proposedChanges.includes('function') ||\n proposedChanges.includes('class') ||\n proposedChanges.includes('const') ||\n proposedChanges.includes('def');\n\n if (context.acceptanceCriteria) {\n const addressedCriteria = context.acceptanceCriteria.filter((criterion) =>\n proposedChanges\n .toLowerCase()\n .includes(criterion.toLowerCase().split(' ')[0])\n ).length;\n return addressedCriteria / context.acceptanceCriteria.length;\n }\n\n return hasImplementation && hasStructure ? 0.8 + Math.random() * 0.15 : 0.4;\n }\n\n private evaluateSemanticCorrectness(\n proposedChanges: string,\n context: LLMJudgeContext\n ): number {\n // Simulate semantic analysis\n // In production, this would use embeddings and semantic similarity\n\n // Check if previous feedback was addressed\n if (context.previousFeedback && context.previousFeedback.length > 0) {\n const addressedFeedback = context.previousFeedback.filter((feedback) => {\n const keywords = feedback\n .toLowerCase()\n .split(' ')\n .filter((w) => w.length > 4);\n return keywords.some((keyword) =>\n proposedChanges.toLowerCase().includes(keyword)\n );\n }).length;\n\n if (addressedFeedback > 0) {\n return Math.min(\n 1,\n 0.7 + (addressedFeedback / context.previousFeedback.length) * 0.3\n );\n }\n }\n\n // Default semantic score (realistic distribution)\n return 0.65 + Math.random() * 0.25;\n }\n\n private checkCriterion(criterion: string, proposedChanges: string): boolean {\n // Simple keyword matching for criteria\n const keywords = criterion\n .toLowerCase()\n .split(' ')\n .filter((word) => word.length > 3);\n const matchedKeywords = keywords.filter((keyword) =>\n proposedChanges.toLowerCase().includes(keyword)\n );\n return matchedKeywords.length >= keywords.length * 0.5;\n }\n\n private calculateOverallScore(criteria: JudgementCriteria): number {\n let score = 0;\n for (const [key, weight] of Object.entries(this.CRITERIA_WEIGHTS)) {\n score += criteria[key as keyof JudgementCriteria] * weight;\n }\n return score;\n }\n\n private createJudgementResult(\n criteria: JudgementCriteria,\n context: LLMJudgeContext\n ): VerifierResult {\n const overallScore = this.calculateOverallScore(criteria);\n const passed = overallScore >= this.VETO_THRESHOLD;\n\n // Generate detailed feedback\n const feedback = this.generateJudgementFeedback(\n criteria,\n overallScore,\n context\n );\n\n // Determine severity based on score\n const severity =\n overallScore < 0.5\n ? 'error'\n : overallScore < this.VETO_THRESHOLD\n ? 'warning'\n : 'info';\n\n return this.createResult(\n passed,\n feedback,\n severity,\n {\n expected: 'Changes that fully address the original requirements',\n actual: `Score: ${(overallScore * 100).toFixed(1)}%`,\n suggestion: this.generateSuggestions(criteria),\n },\n passed\n ? undefined\n : {\n command: 'Review and adjust approach based on feedback',\n description: 'Manual review required',\n safe: false,\n confidence: overallScore,\n }\n );\n }\n\n private generateJudgementFeedback(\n criteria: JudgementCriteria,\n overallScore: number,\n context: LLMJudgeContext\n ): string {\n if (overallScore >= this.VETO_THRESHOLD) {\n return (\n `Semantic validation PASSED (${(overallScore * 100).toFixed(1)}% confidence). ` +\n `Changes adequately address the requirements.`\n );\n }\n\n // Identify weakest areas\n const weakAreas: string[] = [];\n if (criteria.adherenceToRequirements < 0.6) {\n weakAreas.push('requirements adherence');\n }\n if (criteria.codeQuality < 0.6) {\n weakAreas.push('code quality');\n }\n if (criteria.safety < 0.7) {\n weakAreas.push('safety concerns');\n }\n if (criteria.completeness < 0.6) {\n weakAreas.push('completeness');\n }\n if (criteria.semanticCorrectness < 0.6) {\n weakAreas.push('semantic correctness');\n }\n\n return (\n `Semantic validation VETOED (${(overallScore * 100).toFixed(1)}% confidence). ` +\n `Issues found with: ${weakAreas.join(', ')}. ` +\n `Agent should course-correct based on this feedback.`\n );\n }\n\n private generateSuggestions(criteria: JudgementCriteria): string {\n const suggestions: string[] = [];\n\n if (criteria.adherenceToRequirements < 0.7) {\n suggestions.push(\n 'Review original requirements and ensure all are addressed'\n );\n }\n if (criteria.codeQuality < 0.7) {\n suggestions.push(\n 'Improve code structure, add error handling and comments'\n );\n }\n if (criteria.safety < 0.8) {\n suggestions.push(\n 'Review code for security vulnerabilities and unsafe patterns'\n );\n }\n if (criteria.completeness < 0.7) {\n suggestions.push('Ensure solution is complete and handles edge cases');\n }\n if (criteria.semanticCorrectness < 0.7) {\n suggestions.push('Verify logic correctness and alignment with intent');\n }\n\n return suggestions.length > 0\n ? suggestions.join('; ')\n : 'Continue with current approach';\n }\n\n /**\n * Get veto statistics (for monitoring)\n */\n getVetoRate(): number {\n // In production, this would track actual veto rate\n // Spotify reports ~25% veto rate\n return 0.25;\n }\n\n /**\n * Check if agent can course-correct after veto\n * Spotify: \"When vetoed, agents can course correct half the time\"\n */\n canCourseCorrect(previousAttempts: number): boolean {\n // 50% chance of successful course correction\n return previousAttempts < 2 && Math.random() > 0.5;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/auto-detect.ts"],
4
- "sourcesContent": ["/**\n * Auto-detection utilities for Claude-SM\n * Automatically detects when worktree isolation is needed\n */\n\nimport { execSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport interface DetectionResult {\n shouldUseWorktree: boolean;\n reasons: string[];\n confidence: 'high' | 'medium' | 'low';\n suggestions: string[];\n}\n\nexport class ClaudeAutoDetect {\n private projectRoot: string;\n\n constructor(projectRoot: string = process.cwd()) {\n this.projectRoot = projectRoot;\n }\n\n /**\n * Main detection logic\n */\n public detect(): DetectionResult {\n const result: DetectionResult = {\n shouldUseWorktree: false,\n reasons: [],\n confidence: 'low',\n suggestions: [],\n };\n\n // Check various conditions\n const checks = [\n this.checkUncommittedChanges(),\n this.checkActiveInstances(),\n this.checkBranchProtection(),\n this.checkFileConflicts(),\n this.checkResourceUsage(),\n this.checkTaskComplexity(),\n ];\n\n // Aggregate results\n let score = 0;\n for (const check of checks) {\n if (check.detected) {\n score += check.weight;\n result.reasons.push(check.reason);\n if (check.suggestion) {\n result.suggestions.push(check.suggestion);\n }\n }\n }\n\n // Determine recommendation\n if (score >= 7) {\n result.shouldUseWorktree = true;\n result.confidence = 'high';\n } else if (score >= 4) {\n result.shouldUseWorktree = true;\n result.confidence = 'medium';\n } else if (score >= 2) {\n result.shouldUseWorktree = false;\n result.confidence = 'medium';\n result.suggestions.push(\n 'Consider using --worktree if making significant changes'\n );\n }\n\n return result;\n }\n\n /**\n * Check for uncommitted changes\n */\n private checkUncommittedChanges(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n const status = execSync('git status --porcelain', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n\n if (status.trim().length > 0) {\n const lines = status.trim().split('\\n').length;\n return {\n detected: true,\n weight: lines > 10 ? 3 : 2,\n reason: `${lines} uncommitted changes in working directory`,\n suggestion:\n 'Commit or stash changes before proceeding, or use worktree',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check for other active Claude instances\n */\n private checkActiveInstances(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n const lockDir = path.join(this.projectRoot, '.claude-worktree-locks');\n\n if (fs.existsSync(lockDir)) {\n try {\n const locks = fs\n .readdirSync(lockDir)\n .filter((f) => f.endsWith('.lock'));\n const activeLocks = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const stats = fs.statSync(lockPath);\n const ageHours = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60);\n return ageHours < 24;\n });\n\n if (activeLocks.length > 0) {\n return {\n detected: true,\n weight: activeLocks.length >= 2 ? 4 : 3,\n reason: `${activeLocks.length} other Claude instance(s) active`,\n suggestion: 'Use worktree to avoid conflicts with other instances',\n };\n }\n } catch {}\n }\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check if on protected branch\n */\n private checkBranchProtection(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n const branch = execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).trim();\n\n const protectedBranches = [\n 'main',\n 'master',\n 'production',\n 'staging',\n 'develop',\n ];\n\n if (protectedBranches.includes(branch)) {\n return {\n detected: true,\n weight: 4,\n reason: `Working on protected branch: ${branch}`,\n suggestion: 'Create a feature branch or use worktree',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check for potential file conflicts\n */\n private checkFileConflicts(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n // Check if multiple editors/IDEs are open\n const ideFiles = [\n '.vscode/settings.json',\n '.idea/workspace.xml',\n '.sublime-workspace',\n ];\n\n let openIDEs = 0;\n for (const ideFile of ideFiles) {\n const filePath = path.join(this.projectRoot, ideFile);\n if (fs.existsSync(filePath)) {\n try {\n const stats = fs.statSync(filePath);\n const ageMinutes = (Date.now() - stats.mtimeMs) / (1000 * 60);\n if (ageMinutes < 5) {\n openIDEs++;\n }\n } catch {}\n }\n }\n\n if (openIDEs > 1) {\n return {\n detected: true,\n weight: 2,\n reason: 'Multiple IDEs/editors detected',\n suggestion: 'Use worktree to avoid file lock conflicts',\n };\n }\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Check system resource usage\n */\n private checkResourceUsage(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n try {\n // Check number of git worktrees\n const worktrees = execSync('git worktree list', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n })\n .trim()\n .split('\\n').length;\n\n if (worktrees > 3) {\n return {\n detected: true,\n weight: 1,\n reason: `${worktrees} worktrees already exist`,\n suggestion: 'Consider cleaning up old worktrees',\n };\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Detect task complexity from user input or context\n */\n private checkTaskComplexity(): {\n detected: boolean;\n weight: number;\n reason: string;\n suggestion?: string;\n } {\n // Check for complex task indicators in recent commits\n try {\n const recentCommit = execSync('git log -1 --pretty=%B', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).toLowerCase();\n\n const complexIndicators = [\n 'refactor',\n 'breaking change',\n 'major',\n 'experiment',\n 'prototype',\n 'redesign',\n 'migration',\n ];\n\n for (const indicator of complexIndicators) {\n if (recentCommit.includes(indicator)) {\n return {\n detected: true,\n weight: 2,\n reason: 'Recent complex changes detected',\n suggestion: 'Use worktree for experimental or major changes',\n };\n }\n }\n } catch {}\n\n return { detected: false, weight: 0, reason: '' };\n }\n\n /**\n * Get current environment status\n */\n public getStatus(): {\n git: boolean;\n worktrees: number;\n instances: number;\n branch: string;\n uncommittedChanges: number;\n } {\n const status = {\n git: false,\n worktrees: 0,\n instances: 0,\n branch: 'unknown',\n uncommittedChanges: 0,\n };\n\n // Check Git\n try {\n execSync('git rev-parse --git-dir', {\n cwd: this.projectRoot,\n stdio: 'ignore',\n });\n status.git = true;\n\n // Get branch\n status.branch = execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n }).trim();\n\n // Count worktrees\n const worktreeList = execSync('git worktree list', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n status.worktrees = worktreeList.trim().split('\\n').length;\n\n // Count changes\n const changes = execSync('git status --porcelain', {\n cwd: this.projectRoot,\n encoding: 'utf8',\n });\n status.uncommittedChanges = changes.trim()\n ? changes.trim().split('\\n').length\n : 0;\n } catch {}\n\n // Count instances\n const lockDir = path.join(this.projectRoot, '.claude-worktree-locks');\n if (fs.existsSync(lockDir)) {\n try {\n const locks = fs\n .readdirSync(lockDir)\n .filter((f) => f.endsWith('.lock'));\n status.instances = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const stats = fs.statSync(lockPath);\n const ageHours = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60);\n return ageHours < 24;\n }).length;\n } catch {}\n }\n\n return status;\n }\n\n /**\n * Smart recommendation based on context\n */\n public recommend(taskDescription?: string): {\n mode: 'normal' | 'worktree' | 'sandbox' | 'chrome';\n reason: string;\n flags: string[];\n } {\n const detection = this.detect();\n const status = this.getStatus();\n\n // Analyze task description if provided\n let taskType = 'general';\n if (taskDescription) {\n const lower = taskDescription.toLowerCase();\n if (\n lower.includes('ui') ||\n lower.includes('frontend') ||\n lower.includes('component')\n ) {\n taskType = 'frontend';\n } else if (\n lower.includes('api') ||\n lower.includes('backend') ||\n lower.includes('database')\n ) {\n taskType = 'backend';\n } else if (\n lower.includes('test') ||\n lower.includes('debug') ||\n lower.includes('fix')\n ) {\n taskType = 'debugging';\n } else if (lower.includes('refactor') || lower.includes('clean')) {\n taskType = 'refactoring';\n }\n }\n\n // Determine mode and flags\n let mode: 'normal' | 'worktree' | 'sandbox' | 'chrome' = 'normal';\n const flags: string[] = [];\n let reason = '';\n\n if (detection.shouldUseWorktree) {\n mode = 'worktree';\n flags.push('--worktree');\n reason = detection.reasons[0] || 'Isolation recommended';\n }\n\n // Add task-specific flags\n switch (taskType) {\n case 'frontend':\n if (mode === 'worktree') {\n mode = 'chrome';\n flags.push('--chrome');\n reason += '; Chrome automation for UI work';\n }\n break;\n case 'backend':\n if (mode === 'worktree') {\n mode = 'sandbox';\n flags.push('--sandbox');\n reason += '; Sandboxed for API development';\n }\n break;\n case 'refactoring':\n if (mode === 'normal' && status.uncommittedChanges === 0) {\n // Refactoring on clean working directory is OK\n reason = 'Clean working directory, safe to proceed';\n }\n break;\n }\n\n return { mode, reason, flags };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/claude-sm-danger.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n/**\n * claude-sm-danger: Claude-SM wrapper with --dangerously-skip-permissions\n * Shorthand for: claude-sm --dangerously-skip-permissions [args]\n */\n\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\n// Get the claude-sm script path\nconst claudeSmPath = path.join(__dirname, 'claude-sm.js');\n\n// Prepend the danger flag to all args\nconst args = ['--dangerously-skip-permissions', ...process.argv.slice(2)];\n\n// Spawn claude-sm with the danger flag\nconst child = spawn('node', [claudeSmPath, ...args], {\n stdio: 'inherit',\n env: process.env,\n});\n\nchild.on('exit', (code) => {\n process.exit(code || 0);\n});\n\nchild.on('error', (err) => {\n console.error('Failed to launch claude-sm:', err.message);\n process.exit(1);\n});\n"],
5
- "mappings": ";;;;;AAOA,SAAS,aAAa;AACtB,YAAY,UAAU;AAKtB,MAAM,eAAe,KAAK,KAAK,WAAW,cAAc;AAGxD,MAAM,OAAO,CAAC,kCAAkC,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAGxE,MAAM,QAAQ,MAAM,QAAQ,CAAC,cAAc,GAAG,IAAI,GAAG;AAAA,EACnD,OAAO;AAAA,EACP,KAAK,QAAQ;AACf,CAAC;AAED,MAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAQ,KAAK,QAAQ,CAAC;AACxB,CAAC;AAED,MAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,UAAQ,MAAM,+BAA+B,IAAI,OAAO;AACxD,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/claude-sm.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n/**\n * claude-sm: Claude wrapper with StackMemory and worktree integration\n * Automatically manages context persistence and instance isolation\n */\n\nimport { config as loadDotenv } from 'dotenv';\nloadDotenv({ override: true, debug: false });\n\nimport { spawn, execSync, execFileSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { program } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport { initializeTracing, trace } from '../core/trace/index.js';\nimport {\n generateSessionSummary,\n formatSummaryMessage,\n SessionContext,\n} from '../hooks/session-summary.js';\nimport { sendNotification, loadSMSConfig } from '../hooks/sms-notify.js';\nimport { enableAutoSync } from '../hooks/whatsapp-sync.js';\nimport { enableCommands } from '../hooks/whatsapp-commands.js';\nimport { startScheduler, listSchedules } from '../hooks/whatsapp-scheduler.js';\nimport {\n getModelRouter,\n loadModelRouterConfig,\n type ModelProvider,\n} from '../core/models/model-router.js';\nimport { launchWrapper } from '../features/sweep/pty-wrapper.js';\nimport { FallbackMonitor } from '../core/models/fallback-monitor.js';\nimport {\n ensureWorkerStateDir,\n saveRegistry,\n loadRegistry,\n clearRegistry,\n type WorkerEntry,\n type WorkerSession,\n} from '../features/workers/worker-registry.js';\nimport {\n isTmuxAvailable,\n createTmuxSession,\n sendToPane,\n killTmuxSession,\n attachToSession,\n listPanes,\n sendCtrlC,\n sessionExists,\n} from '../features/workers/tmux-manager.js';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\ninterface ClaudeSMConfig {\n defaultWorktree: boolean;\n defaultSandbox: boolean;\n defaultChrome: boolean;\n defaultTracing: boolean;\n defaultRemote: boolean;\n defaultNotifyOnDone: boolean;\n defaultWhatsApp: boolean;\n defaultModelRouting: boolean;\n defaultSweep: boolean;\n defaultGreptile: boolean;\n defaultGEPA: boolean;\n}\n\ninterface ClaudeConfig {\n instanceId: string;\n worktreePath?: string;\n useSandbox: boolean;\n useChrome: boolean;\n useWorktree: boolean;\n useRemote: boolean;\n notifyOnDone: boolean;\n useWhatsApp: boolean;\n contextEnabled: boolean;\n branch?: string;\n task?: string;\n tracingEnabled: boolean;\n verboseTracing: boolean;\n claudeBin?: string;\n sessionStartTime: number;\n // Model routing\n useModelRouting: boolean;\n forceProvider?: ModelProvider;\n useThinkingMode: boolean;\n useSweep: boolean;\n useGreptile: boolean;\n useGEPA: boolean;\n}\n\nconst DEFAULT_SM_CONFIG: ClaudeSMConfig = {\n defaultWorktree: false,\n defaultSandbox: false,\n defaultChrome: false,\n defaultTracing: true,\n defaultRemote: false,\n defaultNotifyOnDone: true,\n defaultWhatsApp: false,\n defaultModelRouting: false,\n defaultSweep: true,\n defaultGreptile: true,\n defaultGEPA: false,\n};\n\nfunction getConfigPath(): string {\n return path.join(os.homedir(), '.stackmemory', 'claude-sm.json');\n}\n\nfunction loadSMConfig(): ClaudeSMConfig {\n try {\n const configPath = getConfigPath();\n if (fs.existsSync(configPath)) {\n const content = fs.readFileSync(configPath, 'utf8');\n return { ...DEFAULT_SM_CONFIG, ...JSON.parse(content) };\n }\n } catch {\n // Ignore errors, use defaults\n }\n return { ...DEFAULT_SM_CONFIG };\n}\n\nfunction saveSMConfig(config: ClaudeSMConfig): void {\n const configPath = getConfigPath();\n const dir = path.dirname(configPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n}\n\nclass ClaudeSM {\n private config: ClaudeConfig;\n private stackmemoryPath: string;\n private worktreeScriptPath: string;\n private claudeConfigDir: string;\n private smConfig: ClaudeSMConfig;\n\n constructor() {\n // Load persistent defaults\n this.smConfig = loadSMConfig();\n\n this.config = {\n instanceId: this.generateInstanceId(),\n useSandbox: this.smConfig.defaultSandbox,\n useChrome: this.smConfig.defaultChrome,\n useWorktree: this.smConfig.defaultWorktree,\n useRemote: this.smConfig.defaultRemote,\n notifyOnDone: this.smConfig.defaultNotifyOnDone,\n useWhatsApp: this.smConfig.defaultWhatsApp,\n contextEnabled: true,\n tracingEnabled: this.smConfig.defaultTracing,\n verboseTracing: false,\n sessionStartTime: Date.now(),\n useModelRouting: this.smConfig.defaultModelRouting,\n useThinkingMode: false,\n useSweep: this.smConfig.defaultSweep,\n useGreptile: this.smConfig.defaultGreptile,\n useGEPA: this.smConfig.defaultGEPA,\n };\n\n this.stackmemoryPath = this.findStackMemory();\n this.worktreeScriptPath = path.join(\n __dirname,\n '../../scripts/claude-worktree-manager.sh'\n );\n this.claudeConfigDir = path.join(os.homedir(), '.claude');\n\n // Ensure config directory exists\n if (!fs.existsSync(this.claudeConfigDir)) {\n fs.mkdirSync(this.claudeConfigDir, { recursive: true });\n }\n }\n\n private generateInstanceId(): string {\n return uuidv4().substring(0, 8);\n }\n\n private findStackMemory(): string {\n // Check multiple possible locations\n const possiblePaths = [\n path.join(os.homedir(), '.stackmemory', 'bin', 'stackmemory'),\n '/usr/local/bin/stackmemory',\n '/opt/homebrew/bin/stackmemory',\n 'stackmemory', // Rely on PATH\n ];\n\n for (const smPath of possiblePaths) {\n try {\n execFileSync('which', [smPath], { stdio: 'ignore' });\n return smPath;\n } catch {\n // Continue searching\n }\n }\n\n return 'stackmemory'; // Fallback to PATH\n }\n\n private isGitRepo(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n private getCurrentBranch(): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf8',\n }).trim();\n } catch {\n return 'main';\n }\n }\n\n private hasUncommittedChanges(): boolean {\n try {\n const status = execSync('git status --porcelain', { encoding: 'utf8' });\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n private resolveClaudeBin(): string | null {\n // 1) CLI-specified\n if (this.config.claudeBin && this.config.claudeBin.trim()) {\n return this.config.claudeBin.trim();\n }\n // 2) Env override\n const envBin = process.env['CLAUDE_BIN'];\n if (envBin && envBin.trim()) return envBin.trim();\n // 3) PATH detection\n try {\n execSync('which claude', { stdio: 'ignore' });\n return 'claude';\n } catch {}\n return null;\n }\n\n private gepaProcesses: ReturnType<typeof spawn>[] = [];\n\n private startGEPAWatcher(): void {\n // Find CLAUDE.md and AGENT.md in current directory or project root\n const watchFiles = ['CLAUDE.md', 'AGENT.md', 'AGENTS.md']\n .map((f) => path.join(process.cwd(), f))\n .filter((p) => fs.existsSync(p));\n\n if (watchFiles.length === 0) {\n console.log(\n chalk.gray(\n ' Prompt Forge: disabled (no CLAUDE.md, AGENT.md, or AGENTS.md found)'\n )\n );\n return;\n }\n\n // Find GEPA scripts directory (check multiple locations)\n const gepaPaths = [\n // From dist/src/cli -> scripts/gepa (3 levels up)\n path.join(__dirname, '../../../scripts/gepa/hooks/auto-optimize.js'),\n // From src/cli -> scripts/gepa (2 levels up, for dev mode)\n path.join(__dirname, '../../scripts/gepa/hooks/auto-optimize.js'),\n // Global install location\n path.join(\n os.homedir(),\n '.stackmemory',\n 'scripts',\n 'gepa',\n 'hooks',\n 'auto-optimize.js'\n ),\n // npm global install\n path.join(\n __dirname,\n '..',\n '..',\n 'scripts',\n 'gepa',\n 'hooks',\n 'auto-optimize.js'\n ),\n ];\n\n const gepaScript = gepaPaths.find((p) => fs.existsSync(p));\n if (!gepaScript) {\n console.log(chalk.gray(' Prompt Forge: disabled (scripts not found)'));\n return;\n }\n\n // Start GEPA watcher for each file\n for (const filePath of watchFiles) {\n const gepaProcess = spawn('node', [gepaScript, 'watch', filePath], {\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe'],\n env: { ...process.env, GEPA_SILENT: '1' },\n });\n\n gepaProcess.unref();\n this.gepaProcesses.push(gepaProcess);\n\n // Log output from GEPA (non-blocking)\n gepaProcess.stdout?.on('data', (data: Buffer) => {\n const output = data.toString().trim();\n if (output && !output.includes('Watching')) {\n console.log(chalk.magenta(`[GEPA] ${output}`));\n }\n });\n }\n\n const fileNames = watchFiles.map((f) => path.basename(f)).join(', ');\n console.log(\n chalk.cyan(` Prompt Forge: watching ${fileNames} for optimization`)\n );\n }\n\n private stopGEPAWatcher(): void {\n for (const proc of this.gepaProcesses) {\n proc.kill('SIGTERM');\n }\n this.gepaProcesses = [];\n }\n\n private ensureGreptileMcp(): void {\n const apiKey = process.env['GREPTILE_API_KEY'];\n const ghToken = process.env['GITHUB_TOKEN'];\n\n if (!apiKey) {\n console.log(\n chalk.gray(' Greptile: disabled (set GREPTILE_API_KEY in .env)')\n );\n return;\n }\n\n // Check if already registered\n try {\n const result = execSync('claude mcp list 2>/dev/null', {\n encoding: 'utf-8',\n });\n if (result.includes('greptile')) {\n console.log(chalk.gray(' Greptile: MCP server registered'));\n return;\n }\n } catch {\n // claude mcp list not available, try to add anyway\n }\n\n // Register Greptile MCP server via HTTP transport\n try {\n const cmd = [\n 'claude mcp add',\n '--transport http',\n 'greptile',\n 'https://api.greptile.com/mcp',\n `--header \"Authorization: Bearer ${apiKey}\"`,\n ];\n if (ghToken) {\n cmd.push(`--header \"X-GitHub-Token: ${ghToken}\"`);\n }\n execSync(cmd.join(' '), { stdio: 'ignore' });\n console.log(chalk.cyan(' Greptile: MCP server registered'));\n } catch {\n // Fallback: register via stdio transport with npx\n try {\n const envArgs = [`GREPTILE_API_KEY=${apiKey}`];\n if (ghToken) envArgs.push(`GITHUB_TOKEN=${ghToken}`);\n execSync(\n `claude mcp add greptile -- env ${envArgs.join(' ')} npx greptile-mcp-server`,\n { stdio: 'ignore' }\n );\n console.log(chalk.cyan(' Greptile: MCP server registered (stdio)'));\n } catch {\n console.log(chalk.gray(' Greptile: failed to register MCP server'));\n }\n }\n }\n\n private setupWorktree(): string | null {\n if (!this.config.useWorktree || !this.isGitRepo()) {\n return null;\n }\n\n console.log(chalk.blue('\uD83C\uDF33 Setting up isolated worktree...'));\n\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.]/g, '-')\n .substring(0, 19);\n const branch =\n this.config.branch ||\n `claude-${this.config.task || 'work'}-${timestamp}-${this.config.instanceId}`;\n const repoName = path.basename(process.cwd());\n const worktreePath = path.join(\n path.dirname(process.cwd()),\n `${repoName}--${branch}`\n );\n\n try {\n // Create worktree\n const flags = [];\n if (this.config.useSandbox) flags.push('--sandbox');\n if (this.config.useChrome) flags.push('--chrome');\n\n const cmd = `git worktree add -b \"${branch}\" \"${worktreePath}\"`;\n execSync(cmd, { stdio: 'inherit' });\n\n console.log(chalk.green(`\u2705 Worktree created: ${worktreePath}`));\n console.log(chalk.gray(` Branch: ${branch}`));\n\n // Save worktree config\n const configPath = path.join(worktreePath, '.claude-instance.json');\n const configData = {\n instanceId: this.config.instanceId,\n worktreePath,\n branch,\n task: this.config.task,\n sandboxEnabled: this.config.useSandbox,\n chromeEnabled: this.config.useChrome,\n created: new Date().toISOString(),\n parentRepo: process.cwd(),\n };\n fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));\n\n // Copy environment files\n const envFiles = ['.env', '.env.local', '.mise.toml', '.tool-versions'];\n for (const file of envFiles) {\n const srcPath = path.join(process.cwd(), file);\n if (fs.existsSync(srcPath)) {\n fs.copyFileSync(srcPath, path.join(worktreePath, file));\n }\n }\n\n return worktreePath;\n } catch (err: unknown) {\n console.error(chalk.red('\u274C Failed to create worktree:'), err);\n return null;\n }\n }\n\n private saveContext(\n message: string,\n metadata: Record<string, unknown> = {}\n ): void {\n if (!this.config.contextEnabled) return;\n\n try {\n const contextData = {\n message,\n metadata: {\n ...metadata,\n instanceId: this.config.instanceId,\n worktree: this.config.worktreePath,\n timestamp: new Date().toISOString(),\n },\n };\n\n const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;\n execSync(cmd, { stdio: 'ignore' });\n } catch {\n // Silently fail - don't interrupt Claude\n }\n }\n\n private loadContext(): void {\n if (!this.config.contextEnabled) return;\n\n try {\n console.log(chalk.blue('\uD83D\uDCDA Loading previous context...'));\n\n // Use 'context show' command which outputs the current context stack\n const cmd = `${this.stackmemoryPath} context show`;\n const output = execSync(cmd, {\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'], // Capture stderr to suppress errors\n });\n\n // Check if we got meaningful output (not empty or just headers)\n const lines = output\n .trim()\n .split('\\n')\n .filter((l) => l.trim());\n if (lines.length > 3) {\n // Has content beyond headers\n console.log(chalk.gray('Context stack loaded'));\n }\n } catch {\n // Silently continue - context loading is optional\n }\n }\n\n private detectMultipleInstances(): boolean {\n try {\n const lockDir = path.join(process.cwd(), '.claude-worktree-locks');\n if (!fs.existsSync(lockDir)) return false;\n\n const locks = fs.readdirSync(lockDir).filter((f) => f.endsWith('.lock'));\n const activeLocks = locks.filter((lockFile) => {\n const lockPath = path.join(lockDir, lockFile);\n const lockData = JSON.parse(fs.readFileSync(lockPath, 'utf8'));\n const lockAge = Date.now() - new Date(lockData.created).getTime();\n return lockAge < 24 * 60 * 60 * 1000; // Less than 24 hours old\n });\n\n return activeLocks.length > 0;\n } catch {\n return false;\n }\n }\n\n private suggestWorktreeMode(): void {\n if (this.hasUncommittedChanges()) {\n console.log(chalk.yellow('\u26A0\uFE0F Uncommitted changes detected'));\n console.log(\n chalk.gray(' Consider using --worktree to work in isolation')\n );\n }\n\n if (this.detectMultipleInstances()) {\n console.log(chalk.yellow('\u26A0\uFE0F Other Claude instances detected'));\n console.log(\n chalk.gray(' Using --worktree is recommended to avoid conflicts')\n );\n }\n }\n\n private async startWhatsAppServices(): Promise<void> {\n const WEBHOOK_PORT = 3456;\n\n console.log(chalk.cyan('\\n\uD83D\uDCF1 WhatsApp Mode - Full Integration'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n // 1. Check SMS config\n const smsConfig = loadSMSConfig();\n if (!smsConfig.enabled) {\n console.log(\n chalk.yellow(' Notifications disabled. Run: stackmemory notify enable')\n );\n }\n\n // 2. Enable auto-sync on frame close\n try {\n enableAutoSync();\n console.log(\n chalk.green(' \u2713 Auto-sync enabled (digests on frame close)')\n );\n } catch {\n console.log(chalk.gray(' Auto-sync: skipped'));\n }\n\n // 3. Enable inbound command processing\n try {\n enableCommands();\n console.log(chalk.green(' \u2713 Command processing enabled'));\n console.log(\n chalk.gray(' Reply: status, tasks, context, help, build, test, lint')\n );\n } catch {\n console.log(chalk.gray(' Command processing: skipped'));\n }\n\n // 4. Start scheduler if schedules exist\n try {\n const schedules = listSchedules();\n if (schedules.length > 0) {\n startScheduler();\n console.log(\n chalk.green(` \u2713 Scheduler started (${schedules.length} schedules)`)\n );\n }\n } catch {\n // Scheduler optional\n }\n\n // 5. Check if webhook is already running\n const webhookRunning = await fetch(\n `http://localhost:${WEBHOOK_PORT}/health`\n )\n .then((r) => r.ok)\n .catch(() => false);\n\n if (!webhookRunning) {\n // Start webhook in background\n const webhookPath = path.join(__dirname, '../hooks/sms-webhook.js');\n const webhookProcess = spawn('node', [webhookPath], {\n detached: true,\n stdio: 'ignore',\n env: { ...process.env, SMS_WEBHOOK_PORT: String(WEBHOOK_PORT) },\n });\n webhookProcess.unref();\n console.log(\n chalk.green(` \u2713 Webhook server started (port ${WEBHOOK_PORT})`)\n );\n } else {\n console.log(\n chalk.green(` \u2713 Webhook already running (port ${WEBHOOK_PORT})`)\n );\n }\n\n // 6. Check if ngrok is running\n const ngrokRunning = await fetch('http://localhost:4040/api/tunnels')\n .then((r) => r.ok)\n .catch(() => false);\n\n if (!ngrokRunning) {\n // Start ngrok in background\n const ngrokProcess = spawn('ngrok', ['http', String(WEBHOOK_PORT)], {\n detached: true,\n stdio: 'ignore',\n });\n ngrokProcess.unref();\n console.log(chalk.gray(' Starting ngrok tunnel...'));\n\n // Wait for ngrok to start and get URL\n await new Promise((resolve) => setTimeout(resolve, 3000));\n }\n\n // 7. Get and display ngrok URL\n try {\n const tunnels = await fetch('http://localhost:4040/api/tunnels').then(\n (r) => r.json() as Promise<{ tunnels: Array<{ public_url: string }> }>\n );\n const publicUrl = tunnels?.tunnels?.[0]?.public_url;\n if (publicUrl) {\n // Save URL for other processes\n const configDir = path.join(os.homedir(), '.stackmemory');\n const configPath = path.join(configDir, 'ngrok-url.txt');\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n fs.writeFileSync(configPath, publicUrl);\n console.log(chalk.green(` \u2713 ngrok tunnel: ${publicUrl}/sms/incoming`));\n }\n } catch {\n console.log(chalk.yellow(' ngrok: waiting for tunnel...'));\n }\n\n // 8. Show pending prompts (sessions waiting for response)\n if (smsConfig.pendingPrompts.length > 0) {\n console.log();\n console.log(\n chalk.yellow(\n ` \u23F3 ${smsConfig.pendingPrompts.length} pending prompt(s) awaiting response:`\n )\n );\n smsConfig.pendingPrompts.slice(0, 3).forEach((p, i) => {\n const msg =\n p.message.length > 40 ? p.message.slice(0, 40) + '...' : p.message;\n console.log(chalk.gray(` ${i + 1}. [${p.id}] ${msg}`));\n });\n if (smsConfig.pendingPrompts.length > 3) {\n console.log(\n chalk.gray(` ... and ${smsConfig.pendingPrompts.length - 3} more`)\n );\n }\n }\n\n // 9. Show quick reference\n console.log();\n console.log(chalk.gray(' Quick actions from WhatsApp:'));\n console.log(chalk.gray(' \"status\" - session status'));\n console.log(chalk.gray(' \"context\" - current frame digest'));\n console.log(chalk.gray(' \"1\", \"2\" - respond to prompts'));\n\n console.log(chalk.gray('\u2500'.repeat(42)));\n }\n\n private async sendDoneNotification(exitCode: number | null): Promise<void> {\n try {\n const context: SessionContext = {\n instanceId: this.config.instanceId,\n exitCode,\n sessionStartTime: this.config.sessionStartTime,\n worktreePath: this.config.worktreePath,\n branch: this.config.branch,\n task: this.config.task,\n };\n\n const summary = await generateSessionSummary(context);\n const message = formatSummaryMessage(summary, this.config.instanceId);\n\n console.log(chalk.cyan('\\nSending session summary via WhatsApp...'));\n\n // Build options from suggestions for interactive response (always min 2)\n let options = summary.suggestions.slice(0, 4).map((s) => ({\n key: s.key,\n label: s.label,\n action: s.action,\n }));\n\n // Ensure minimum 2 options\n if (options.length < 2) {\n const defaults = [\n { key: '1', label: 'Start new session', action: 'claude-sm' },\n {\n key: '2',\n label: 'View logs',\n action: 'tail -30 ~/.claude/logs/*.log',\n },\n ];\n options = defaults.slice(0, 2 - options.length).concat(options);\n options.forEach((o, i) => (o.key = String(i + 1)));\n }\n\n const result = await sendNotification({\n type: 'task_complete',\n title: `Claude Session ${this.config.instanceId}`,\n message,\n prompt: {\n type: 'options',\n options,\n },\n });\n\n if (result.success) {\n console.log(chalk.green('Notification sent successfully'));\n } else {\n console.log(\n chalk.yellow(`Notification not sent: ${result.error || 'unknown'}`)\n );\n }\n } catch (error) {\n console.log(\n chalk.yellow(\n `Could not send notification: ${error instanceof Error ? error.message : 'unknown'}`\n )\n );\n }\n }\n\n public async run(args: string[]): Promise<void> {\n // Parse arguments\n const claudeArgs: string[] = [];\n let i = 0;\n\n while (i < args.length) {\n const arg = args[i];\n\n switch (arg) {\n case '--worktree':\n case '-w':\n this.config.useWorktree = true;\n break;\n case '--no-worktree':\n case '-W':\n this.config.useWorktree = false;\n break;\n case '--remote':\n case '-r':\n this.config.useRemote = true;\n break;\n case '--no-remote':\n this.config.useRemote = false;\n break;\n case '--notify-done':\n case '-n':\n this.config.notifyOnDone = true;\n break;\n case '--no-notify-done':\n this.config.notifyOnDone = false;\n break;\n case '--whatsapp':\n this.config.useWhatsApp = true;\n this.config.notifyOnDone = true; // Auto-enable notifications\n break;\n case '--no-whatsapp':\n this.config.useWhatsApp = false;\n break;\n case '--sandbox':\n case '-s':\n this.config.useSandbox = true;\n claudeArgs.push('--sandbox');\n break;\n case '--chrome':\n case '-c':\n this.config.useChrome = true;\n claudeArgs.push('--chrome');\n break;\n case '--no-context':\n this.config.contextEnabled = false;\n break;\n case '--no-trace':\n this.config.tracingEnabled = false;\n break;\n case '--verbose-trace':\n this.config.verboseTracing = true;\n break;\n case '--branch':\n case '-b':\n i++;\n this.config.branch = args[i];\n break;\n case '--task':\n case '-t':\n i++;\n this.config.task = args[i];\n break;\n case '--claude-bin':\n i++;\n this.config.claudeBin = args[i];\n process.env['CLAUDE_BIN'] = this.config.claudeBin;\n break;\n case '--auto':\n case '-a':\n // Auto mode: detect and apply best settings\n if (this.isGitRepo()) {\n this.config.useWorktree =\n this.hasUncommittedChanges() || this.detectMultipleInstances();\n }\n break;\n case '--think':\n case '--think-hard':\n case '--ultrathink':\n // Enable thinking mode with Qwen (if configured)\n this.config.useThinkingMode = true;\n this.config.useModelRouting = true;\n this.config.forceProvider = 'qwen';\n break;\n case '--qwen':\n // Force Qwen provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'qwen';\n break;\n case '--openai':\n // Force OpenAI provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'openai';\n break;\n case '--ollama':\n // Force Ollama provider\n this.config.useModelRouting = true;\n this.config.forceProvider = 'ollama';\n break;\n case '--model-routing':\n this.config.useModelRouting = true;\n break;\n case '--no-model-routing':\n this.config.useModelRouting = false;\n break;\n case '--sweep':\n this.config.useSweep = true;\n break;\n case '--no-sweep':\n this.config.useSweep = false;\n break;\n case '--greptile':\n this.config.useGreptile = true;\n break;\n case '--no-greptile':\n this.config.useGreptile = false;\n break;\n case '--gepa':\n this.config.useGEPA = true;\n break;\n case '--no-gepa':\n this.config.useGEPA = false;\n break;\n default:\n claudeArgs.push(arg);\n }\n i++;\n }\n\n // Validate --print/-p requires a prompt argument (unless stdin is piped)\n const printIndex = claudeArgs.findIndex(\n (a) => a === '-p' || a === '--print'\n );\n if (printIndex !== -1) {\n const nextArg = claudeArgs[printIndex + 1];\n const hasStdin = !process.stdin.isTTY; // stdin is piped\n const hasPromptArg = nextArg && !nextArg.startsWith('-');\n\n // Error only if no stdin AND no prompt argument\n if (!hasStdin && !hasPromptArg) {\n console.error(\n chalk.red('Error: --print/-p requires a prompt argument.')\n );\n console.log(chalk.gray('Usage: claude-smd -p \"your prompt here\"'));\n console.log(chalk.gray(' echo \"prompt\" | claude-smd -p'));\n process.exit(1);\n }\n }\n\n // Initialize tracing system if enabled\n if (this.config.tracingEnabled) {\n // Set up environment for tracing\n process.env['DEBUG_TRACE'] = 'true';\n process.env['STACKMEMORY_DEBUG'] = 'true';\n process.env['TRACE_OUTPUT'] = 'file'; // Write to file to not clutter Claude output\n process.env['TRACE_MASK_SENSITIVE'] = 'true'; // Always mask sensitive data\n\n if (this.config.verboseTracing) {\n process.env['TRACE_VERBOSITY'] = 'full';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'true';\n process.env['TRACE_MEMORY'] = 'true';\n } else {\n process.env['TRACE_VERBOSITY'] = 'summary';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'false';\n }\n\n // Initialize the tracing system\n initializeTracing();\n\n // Start tracing this Claude session\n trace.command(\n 'claude-sm',\n {\n instanceId: this.config.instanceId,\n worktree: this.config.useWorktree,\n sandbox: this.config.useSandbox,\n task: this.config.task,\n },\n async () => {\n // Session tracing will wrap the entire Claude execution\n }\n );\n }\n\n // Show header\n console.log(chalk.blue('\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557'));\n console.log(chalk.blue('\u2551 Claude + StackMemory + Worktree \u2551'));\n console.log(chalk.blue('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D'));\n console.log();\n\n // Check Git repo status\n if (this.isGitRepo()) {\n const branch = this.getCurrentBranch();\n console.log(chalk.gray(`\uD83D\uDCCD Current branch: ${branch}`));\n\n if (!this.config.useWorktree) {\n this.suggestWorktreeMode();\n }\n }\n\n // Setup worktree if requested\n if (this.config.useWorktree) {\n const worktreePath = this.setupWorktree();\n if (worktreePath) {\n this.config.worktreePath = worktreePath;\n process.chdir(worktreePath);\n\n // Save context about worktree creation\n this.saveContext('Created worktree for Claude instance', {\n action: 'worktree_created',\n path: worktreePath,\n branch: this.config.branch,\n });\n }\n }\n\n // Load previous context\n this.loadContext();\n\n // Setup environment\n process.env['CLAUDE_INSTANCE_ID'] = this.config.instanceId;\n if (this.config.worktreePath) {\n process.env['CLAUDE_WORKTREE_PATH'] = this.config.worktreePath;\n }\n if (this.config.useRemote) {\n process.env['CLAUDE_REMOTE'] = '1';\n }\n\n console.log(chalk.gray(`\uD83E\uDD16 Instance ID: ${this.config.instanceId}`));\n console.log(chalk.gray(`\uD83D\uDCC1 Working in: ${process.cwd()}`));\n\n if (this.config.useSandbox) {\n console.log(chalk.yellow('\uD83D\uDD12 Sandbox mode enabled'));\n }\n if (this.config.useRemote) {\n console.log(\n chalk.cyan('\uD83D\uDCF1 Remote mode: WhatsApp notifications for all questions')\n );\n }\n if (this.config.useChrome) {\n console.log(chalk.yellow('\uD83C\uDF10 Chrome automation enabled'));\n }\n if (this.config.tracingEnabled) {\n console.log(\n chalk.gray(`\uD83D\uDD0D Debug tracing enabled (logs to ~/.stackmemory/traces/)`)\n );\n if (this.config.verboseTracing) {\n console.log(\n chalk.gray(` Verbose mode: capturing all execution details`)\n );\n }\n }\n\n // Apply model routing if enabled\n if (this.config.useModelRouting) {\n const routerConfig = loadModelRouterConfig();\n if (routerConfig.enabled || this.config.forceProvider) {\n const router = getModelRouter();\n let routeResult;\n\n if (this.config.forceProvider) {\n // Force specific provider\n const env = router.switchTo(this.config.forceProvider);\n Object.assign(process.env, env);\n console.log(\n chalk.magenta(`\uD83D\uDD00 Model: ${this.config.forceProvider} (forced)`)\n );\n\n // Show thinking mode info if using Qwen with thinking\n if (\n this.config.forceProvider === 'qwen' &&\n this.config.useThinkingMode\n ) {\n const qwenConfig = routerConfig.providers.qwen;\n if (qwenConfig?.params?.enable_thinking) {\n console.log(\n chalk.gray(\n ` Thinking mode: budget ${qwenConfig.params.thinking_budget || 10000} tokens`\n )\n );\n }\n }\n } else {\n // Auto-route based on task type\n const taskType = this.config.useThinkingMode ? 'think' : 'default';\n routeResult = router.route(taskType, this.config.task);\n Object.assign(process.env, routeResult.env);\n\n if (routeResult.switched) {\n console.log(\n chalk.magenta(`\uD83D\uDD00 Model routed to: ${routeResult.provider}`)\n );\n }\n }\n } else {\n console.log(\n chalk.gray(\n ' Model routing: disabled (run: stackmemory model enable)'\n )\n );\n }\n }\n\n // Ensure Greptile MCP server is registered if enabled\n if (this.config.useGreptile) {\n this.ensureGreptileMcp();\n }\n\n // Start GEPA auto-optimizer if enabled\n if (this.config.useGEPA) {\n this.startGEPAWatcher();\n }\n\n // Start WhatsApp services if enabled\n if (this.config.useWhatsApp) {\n console.log(\n chalk.cyan('\uD83D\uDCF1 WhatsApp mode: notifications + webhook enabled')\n );\n await this.startWhatsAppServices();\n }\n\n console.log();\n\n // Launch via Sweep PTY wrapper if enabled\n if (this.config.useSweep) {\n const claudeBin = this.resolveClaudeBin();\n if (!claudeBin) {\n console.error(chalk.red('Claude CLI not found.'));\n process.exit(1);\n return;\n }\n console.log(\n chalk.cyan('[Sweep] Launching Claude with prediction bar...')\n );\n console.log(chalk.gray('\u2500'.repeat(42)));\n try {\n await launchWrapper({\n claudeBin,\n claudeArgs,\n });\n // PTY wrapper is now running \u2014 it calls process.exit() on child exit.\n // Return to prevent falling through to the fallback-monitor path,\n // which would spawn a second Claude instance.\n return;\n } catch (error) {\n // If PTY wrapper fails (e.g., node-pty missing), fall back to direct launch\n const msg = (error as Error).message || 'Unknown PTY error';\n console.error(chalk.yellow(`[Sweep disabled] ${msg}`));\n console.log(\n chalk.gray(\n 'Falling back to direct Claude launch (no prediction bar)...'\n )\n );\n // Disable Sweep for this session and continue below\n this.config.useSweep = false;\n }\n }\n\n console.log(chalk.gray('Starting Claude...'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n const claudeBin = this.resolveClaudeBin();\n if (!claudeBin) {\n console.error(chalk.red('\u274C Claude CLI not found.'));\n console.log(\n chalk.gray(\n ' Install Claude CLI or set an override:\\n' +\n ' export CLAUDE_BIN=/path/to/claude\\n' +\n ' claude-sm --help\\n\\n' +\n ' Ensure PATH includes npm global bin (npm bin -g).'\n )\n );\n process.exit(1);\n return;\n }\n\n // Setup fallback monitor for automatic Qwen switching on Claude failures\n const fallbackMonitor = new FallbackMonitor({\n enabled: true,\n maxRestarts: 2,\n restartDelayMs: 1500,\n onFallback: (provider, reason) => {\n console.log(chalk.yellow(`\\n[auto-fallback] Switching to ${provider}`));\n console.log(chalk.gray(` Reason: ${reason}`));\n console.log(chalk.gray(` Session will continue on ${provider}...`));\n\n // Send WhatsApp notification about fallback\n if (this.config.notifyOnDone || this.config.useWhatsApp) {\n sendNotification({\n type: 'custom',\n title: 'Model Fallback',\n message: `Claude unavailable (${reason}). Switched to ${provider}.`,\n }).catch(() => {});\n }\n },\n });\n\n // Check if fallback is available\n const fallbackAvailable = fallbackMonitor.isFallbackAvailable();\n if (fallbackAvailable) {\n console.log(\n chalk.gray(` Auto-fallback: Qwen ready (on rate limit/error)`)\n );\n }\n\n // Launch Claude with fallback monitoring\n const wrapper = fallbackMonitor.wrapProcess(claudeBin, claudeArgs, {\n env: process.env,\n cwd: process.cwd(),\n });\n\n const claude = wrapper.start();\n\n claude.on('error', (err: NodeJS.ErrnoException) => {\n console.error(chalk.red('\u274C Failed to launch Claude CLI.'));\n if (err.code === 'ENOENT') {\n console.error(\n chalk.gray(' Not found. Set CLAUDE_BIN or install claude on PATH.')\n );\n } else if (err.code === 'EPERM' || err.code === 'EACCES') {\n console.error(\n chalk.gray(\n ' Permission/sandbox issue. Try outside a sandbox or set CLAUDE_BIN.'\n )\n );\n } else {\n console.error(chalk.gray(` ${err.message}`));\n }\n process.exit(1);\n });\n\n // Handle exit\n claude.on('exit', async (code) => {\n // Stop GEPA watcher if running\n this.stopGEPAWatcher();\n\n // Check if we were in fallback mode\n const status = fallbackMonitor.getStatus();\n if (status.inFallback) {\n console.log(\n chalk.yellow(\n `\\nSession completed on fallback provider: ${status.currentProvider}`\n )\n );\n }\n // Save final context\n this.saveContext('Claude session ended', {\n action: 'session_end',\n exitCode: code,\n });\n\n // End tracing and show summary if enabled\n if (this.config.tracingEnabled) {\n const summary = trace.getExecutionSummary();\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Debug Trace Summary:'));\n console.log(chalk.gray(summary));\n }\n\n // Send notification when done (if enabled)\n if (this.config.notifyOnDone || this.config.useRemote) {\n await this.sendDoneNotification(code);\n }\n\n // Offer to clean up worktree\n if (this.config.worktreePath) {\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Session ended in worktree:'));\n console.log(chalk.gray(` ${this.config.worktreePath}`));\n console.log();\n console.log(chalk.gray('To remove worktree: gd_claude'));\n console.log(chalk.gray('To merge to main: cwm'));\n }\n\n process.exit(code || 0);\n });\n\n // Handle signals\n process.on('SIGINT', () => {\n this.saveContext('Claude session interrupted', {\n action: 'session_interrupt',\n });\n claude.kill('SIGINT');\n });\n\n process.on('SIGTERM', () => {\n this.saveContext('Claude session terminated', {\n action: 'session_terminate',\n });\n claude.kill('SIGTERM');\n });\n }\n}\n\n// CLI interface\nprogram\n .name('claude-sm')\n .description('Claude with StackMemory context and worktree isolation')\n .version('1.0.0');\n\n// Config subcommand\nconst configCmd = program\n .command('config')\n .description('Manage claude-sm defaults');\n\nconfigCmd\n .command('show')\n .description('Show current default settings')\n .action(() => {\n const config = loadSMConfig();\n console.log(chalk.blue('claude-sm defaults:'));\n const on = chalk.green('ON ');\n const off = chalk.gray('OFF');\n console.log(chalk.cyan('\\n Feature Status'));\n console.log(chalk.gray(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n console.log(` Predictive Edit ${config.defaultSweep ? on : off}`);\n console.log(` Code Review ${config.defaultGreptile ? on : off}`);\n console.log(` Prompt Forge ${config.defaultGEPA ? on : off}`);\n console.log(` Model Switcher ${config.defaultModelRouting ? on : off}`);\n console.log(` Safe Branch ${config.defaultWorktree ? on : off}`);\n console.log(` Mobile Sync ${config.defaultWhatsApp ? on : off}`);\n console.log(` Session Insights ${config.defaultTracing ? on : off}`);\n console.log(` Task Alert ${config.defaultNotifyOnDone ? on : off}`);\n console.log(chalk.gray(' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'));\n console.log(` Sandbox ${config.defaultSandbox ? on : off}`);\n console.log(` Chrome ${config.defaultChrome ? on : off}`);\n console.log(` Remote ${config.defaultRemote ? on : off}`);\n console.log(chalk.gray(`\\n Config: ${getConfigPath()}`));\n });\n\nconfigCmd\n .command('set <key> <value>')\n .description('Set a default (e.g., set worktree true)')\n .action((key: string, value: string) => {\n const config = loadSMConfig();\n const boolValue = value === 'true' || value === '1' || value === 'on';\n\n const keyMap: Record<string, keyof ClaudeSMConfig> = {\n worktree: 'defaultWorktree',\n sandbox: 'defaultSandbox',\n chrome: 'defaultChrome',\n tracing: 'defaultTracing',\n remote: 'defaultRemote',\n 'notify-done': 'defaultNotifyOnDone',\n notifyondone: 'defaultNotifyOnDone',\n whatsapp: 'defaultWhatsApp',\n 'model-routing': 'defaultModelRouting',\n modelrouting: 'defaultModelRouting',\n sweep: 'defaultSweep',\n greptile: 'defaultGreptile',\n gepa: 'defaultGEPA',\n };\n\n const configKey = keyMap[key];\n if (!configKey) {\n console.log(chalk.red(`Unknown key: ${key}`));\n console.log(\n chalk.gray(\n 'Valid keys: worktree, sandbox, chrome, tracing, remote, notify-done, whatsapp, sweep, greptile, gepa'\n )\n );\n process.exit(1);\n }\n\n config[configKey] = boolValue;\n saveSMConfig(config);\n console.log(chalk.green(`Set ${key} = ${boolValue}`));\n });\n\nconfigCmd\n .command('worktree-on')\n .description('Enable worktree mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWorktree = true;\n saveSMConfig(config);\n console.log(chalk.green('Worktree mode enabled by default'));\n });\n\nconfigCmd\n .command('worktree-off')\n .description('Disable worktree mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWorktree = false;\n saveSMConfig(config);\n console.log(chalk.green('Worktree mode disabled by default'));\n });\n\nconfigCmd\n .command('remote-on')\n .description('Enable remote mode by default (WhatsApp for all questions)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultRemote = true;\n saveSMConfig(config);\n console.log(chalk.green('Remote mode enabled by default'));\n });\n\nconfigCmd\n .command('remote-off')\n .description('Disable remote mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultRemote = false;\n saveSMConfig(config);\n console.log(chalk.green('Remote mode disabled by default'));\n });\n\nconfigCmd\n .command('notify-done-on')\n .description('Enable WhatsApp notification when session ends (default)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultNotifyOnDone = true;\n saveSMConfig(config);\n console.log(chalk.green('Notify-on-done enabled by default'));\n });\n\nconfigCmd\n .command('notify-done-off')\n .description('Disable notification when session ends')\n .action(() => {\n const config = loadSMConfig();\n config.defaultNotifyOnDone = false;\n saveSMConfig(config);\n console.log(chalk.green('Notify-on-done disabled by default'));\n });\n\nconfigCmd\n .command('whatsapp-on')\n .description('Enable WhatsApp mode by default (auto-starts webhook + ngrok)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWhatsApp = true;\n config.defaultNotifyOnDone = true; // Also enable notifications\n saveSMConfig(config);\n console.log(chalk.green('WhatsApp mode enabled by default'));\n console.log(chalk.gray('Sessions will auto-start webhook and ngrok'));\n });\n\nconfigCmd\n .command('whatsapp-off')\n .description('Disable WhatsApp mode by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultWhatsApp = false;\n saveSMConfig(config);\n console.log(chalk.green('WhatsApp mode disabled by default'));\n });\n\nconfigCmd\n .command('model-routing-on')\n .description(\n 'Enable model routing by default (route tasks to Qwen/other models)'\n )\n .action(() => {\n const config = loadSMConfig();\n config.defaultModelRouting = true;\n saveSMConfig(config);\n console.log(chalk.green('Model routing enabled by default'));\n console.log(chalk.gray('Configure with: stackmemory model setup-qwen'));\n });\n\nconfigCmd\n .command('model-routing-off')\n .description('Disable model routing by default (use Claude only)')\n .action(() => {\n const config = loadSMConfig();\n config.defaultModelRouting = false;\n saveSMConfig(config);\n console.log(chalk.green('Model routing disabled by default'));\n });\n\nconfigCmd\n .command('greptile-on')\n .description(\n 'Enable Greptile AI code review by default (requires GREPTILE_API_KEY)'\n )\n .action(() => {\n const config = loadSMConfig();\n config.defaultGreptile = true;\n saveSMConfig(config);\n console.log(chalk.green('Greptile enabled by default'));\n if (!process.env['GREPTILE_API_KEY']) {\n console.log(chalk.gray('Set GREPTILE_API_KEY in .env to activate'));\n }\n });\n\nconfigCmd\n .command('greptile-off')\n .description('Disable Greptile AI code review by default')\n .action(() => {\n const config = loadSMConfig();\n config.defaultGreptile = false;\n saveSMConfig(config);\n console.log(chalk.green('Greptile disabled by default'));\n });\n\nconfigCmd\n .command('gepa-on')\n .description('Enable GEPA auto-optimization of CLAUDE.md on changes')\n .action(() => {\n const config = loadSMConfig();\n config.defaultGEPA = true;\n saveSMConfig(config);\n console.log(chalk.green('GEPA auto-optimization enabled by default'));\n console.log(\n chalk.gray('CLAUDE.md changes will trigger evolutionary optimization')\n );\n });\n\nconfigCmd\n .command('gepa-off')\n .description('Disable GEPA auto-optimization')\n .action(() => {\n const config = loadSMConfig();\n config.defaultGEPA = false;\n saveSMConfig(config);\n console.log(chalk.green('GEPA auto-optimization disabled by default'));\n });\n\nconfigCmd\n .command('setup')\n .description('Interactive feature setup wizard')\n .action(async () => {\n const inquirer = await import('inquirer');\n const ora = (await import('ora')).default;\n const config = loadSMConfig();\n\n console.log(chalk.cyan('\\nClaude-SM Feature Setup\\n'));\n\n interface FeatureDef {\n key: keyof ClaudeSMConfig;\n name: string;\n desc: string;\n }\n\n const features: FeatureDef[] = [\n {\n key: 'defaultSweep',\n name: 'Predictive Edit',\n desc: 'AI-powered next-edit suggestions in real-time',\n },\n {\n key: 'defaultGreptile',\n name: 'Code Review',\n desc: 'Automated code review with deep codebase intelligence',\n },\n {\n key: 'defaultGEPA',\n name: 'Prompt Forge',\n desc: 'Evolutionary optimization of system prompts',\n },\n {\n key: 'defaultModelRouting',\n name: 'Model Switcher',\n desc: 'Smart routing across Claude, Qwen, and other models',\n },\n {\n key: 'defaultWorktree',\n name: 'Safe Branch',\n desc: 'Isolated git worktrees for conflict-free parallel work',\n },\n {\n key: 'defaultWhatsApp',\n name: 'Mobile Sync',\n desc: 'Remote control and notifications via WhatsApp',\n },\n {\n key: 'defaultTracing',\n name: 'Session Insights',\n desc: 'Deep execution tracing and performance analytics',\n },\n {\n key: 'defaultNotifyOnDone',\n name: 'Task Alert',\n desc: 'Instant notification when sessions complete',\n },\n ];\n\n const choices = features.map((f) => ({\n name: `${f.name} - ${f.desc}`,\n value: f.key,\n checked: config[f.key],\n }));\n\n const { selected } = await inquirer.default.prompt([\n {\n type: 'checkbox',\n name: 'selected',\n message: 'Select features to enable:',\n choices,\n },\n ]);\n\n const selectedKeys = selected as string[];\n\n // Apply all toggles\n for (const f of features) {\n config[f.key] = selectedKeys.includes(f.key);\n }\n saveSMConfig(config);\n\n // Post-install: Sweep -> install node-pty\n if (config.defaultSweep) {\n let hasPty = false;\n try {\n await import('node-pty');\n hasPty = true;\n } catch {\n // not installed\n }\n if (!hasPty) {\n const spinner = ora('Installing node-pty...').start();\n try {\n execSync('npm install node-pty', {\n stdio: 'ignore',\n cwd: process.cwd(),\n });\n spinner.succeed('node-pty installed');\n } catch {\n spinner.fail('Failed to install node-pty');\n console.log(chalk.gray(' Install manually: npm install node-pty'));\n }\n }\n }\n\n // Post-install: Greptile -> prompt for API key, register MCP\n if (config.defaultGreptile) {\n const apiKey = process.env['GREPTILE_API_KEY'];\n if (!apiKey) {\n const { key } = await inquirer.default.prompt([\n {\n type: 'password',\n name: 'key',\n message: 'Enter your Greptile API key (from app.greptile.com):',\n mask: '*',\n },\n ]);\n if (key && key.trim()) {\n // Append to .env\n const envPath = path.join(process.cwd(), '.env');\n const line = `\\nGREPTILE_API_KEY=${key.trim()}\\n`;\n fs.appendFileSync(envPath, line);\n process.env['GREPTILE_API_KEY'] = key.trim();\n console.log(chalk.green(' API key saved to .env'));\n }\n }\n\n // Register MCP server\n const currentKey = process.env['GREPTILE_API_KEY'];\n if (currentKey) {\n try {\n const result = execSync('claude mcp list 2>/dev/null', {\n encoding: 'utf-8',\n });\n if (!result.includes('greptile')) {\n execSync(\n `claude mcp add --transport http greptile https://api.greptile.com/mcp --header \"Authorization: Bearer ${currentKey}\"`,\n { stdio: 'ignore' }\n );\n console.log(chalk.green(' Greptile MCP server registered'));\n }\n } catch {\n // ignore registration failures\n }\n }\n }\n\n // Summary\n console.log(chalk.cyan('\\nFeature summary:'));\n for (const f of features) {\n const on = config[f.key];\n const mark = on ? chalk.green('ON') : chalk.gray('OFF');\n console.log(` ${mark} ${f.name}`);\n }\n console.log(chalk.gray(`\\nSaved to ${getConfigPath()}`));\n });\n\n// Spawn subcommand: launch N parallel Claude workers in tmux panes\nprogram\n .command('spawn <count>')\n .description('Spawn N parallel Claude workers in tmux panes')\n .option('-t, --task <desc>', 'Task description for each worker')\n .option('--worktree', 'Create isolated git worktrees per worker')\n .option('--no-sweep', 'Disable Sweep predictions')\n .option('--no-attach', 'Do not attach to tmux session after creation')\n .action(async (countStr: string, opts: Record<string, unknown>) => {\n const count = parseInt(countStr, 10);\n if (isNaN(count) || count < 1 || count > 8) {\n console.error(chalk.red('Worker count must be between 1 and 8'));\n process.exit(1);\n }\n\n if (!isTmuxAvailable()) {\n console.error(chalk.red('tmux is required for parallel workers.'));\n console.log(chalk.gray('Install with: brew install tmux'));\n process.exit(1);\n }\n\n const sessionId = uuidv4().substring(0, 8);\n const sessionName = `claude-sm-${sessionId}`;\n\n console.log(\n chalk.blue(`Spawning ${count} workers in tmux session: ${sessionName}`)\n );\n\n // Create tmux session with the right number of panes\n createTmuxSession(sessionName, count);\n\n const workers: WorkerEntry[] = [];\n const panes = listPanes(sessionName);\n\n for (let i = 0; i < count; i++) {\n const workerId = `w${i}-${uuidv4().substring(0, 6)}`;\n const stateDir = ensureWorkerStateDir(workerId);\n const pane = panes[i] || String(i);\n\n // Build claude-sm command with isolated sweep state\n const parts = ['claude-sm'];\n if (opts['sweep'] === false) parts.push('--no-sweep');\n if (opts['worktree']) parts.push('--worktree');\n if (opts['task']) parts.push('--task', `\"${opts['task']}\"`);\n const cmd = parts.join(' ');\n\n // Set env vars and launch in the pane\n sendToPane(\n sessionName,\n pane,\n `export SWEEP_INSTANCE_ID=${workerId} SWEEP_STATE_DIR=${stateDir} && ${cmd}`\n );\n\n workers.push({\n id: workerId,\n pane,\n cwd: process.cwd(),\n startedAt: new Date().toISOString(),\n stateDir,\n task: opts['task'] as string | undefined,\n });\n\n console.log(\n chalk.gray(\n ` Worker ${i}: ${workerId} (pane ${pane}, state: ${stateDir})`\n )\n );\n }\n\n // Save registry\n const session: WorkerSession = {\n sessionName,\n workers,\n createdAt: new Date().toISOString(),\n };\n saveRegistry(session);\n console.log(chalk.green(`\\nRegistry saved (${workers.length} workers)`));\n\n // Attach unless --no-attach\n if (opts['attach'] !== false) {\n console.log(chalk.gray('Attaching to tmux session...'));\n attachToSession(sessionName);\n } else {\n console.log(\n chalk.gray(`Attach later with: tmux attach -t ${sessionName}`)\n );\n }\n });\n\n// Workers subcommand: list/kill workers\nconst workersCmd = program\n .command('workers')\n .description('List active workers (default) or manage them');\n\nworkersCmd\n .command('list', { isDefault: true })\n .description('List active workers')\n .action(() => {\n const session = loadRegistry();\n if (!session) {\n console.log(chalk.gray('No active worker session.'));\n return;\n }\n\n const alive = sessionExists(session.sessionName);\n const status = alive ? chalk.green('ACTIVE') : chalk.red('DEAD');\n console.log(chalk.blue(`Session: ${session.sessionName} [${status}]`));\n console.log(chalk.gray(`Created: ${session.createdAt}`));\n console.log();\n\n for (const w of session.workers) {\n const taskLabel = w.task ? ` task=\"${w.task}\"` : '';\n console.log(` ${chalk.cyan(w.id)} pane=${w.pane}${taskLabel}`);\n console.log(chalk.gray(` state: ${w.stateDir}`));\n }\n });\n\nworkersCmd\n .command('kill [id]')\n .description('Kill entire session or send Ctrl-C to a specific worker')\n .action((id?: string) => {\n const session = loadRegistry();\n if (!session) {\n console.log(chalk.gray('No active worker session.'));\n return;\n }\n\n if (id) {\n // Kill specific worker\n const worker = session.workers.find((w) => w.id === id);\n if (!worker) {\n console.error(chalk.red(`Worker ${id} not found.`));\n process.exit(1);\n }\n sendCtrlC(session.sessionName, worker.pane);\n console.log(\n chalk.yellow(`Sent Ctrl-C to worker ${id} (pane ${worker.pane})`)\n );\n } else {\n // Kill entire session\n if (sessionExists(session.sessionName)) {\n killTmuxSession(session.sessionName);\n console.log(\n chalk.yellow(`Killed tmux session: ${session.sessionName}`)\n );\n }\n clearRegistry();\n console.log(chalk.gray('Registry cleared.'));\n }\n });\n\n// Main command (default action when no subcommand)\nprogram\n .option('-w, --worktree', 'Create isolated worktree for this instance')\n .option('-W, --no-worktree', 'Disable worktree (override default)')\n .option('-r, --remote', 'Enable remote mode (WhatsApp for all questions)')\n .option('--no-remote', 'Disable remote mode (override default)')\n .option('-n, --notify-done', 'Send WhatsApp notification when session ends')\n .option('--no-notify-done', 'Disable notification when session ends')\n .option(\n '--whatsapp',\n 'Enable WhatsApp mode (auto-start webhook + ngrok + notifications)'\n )\n .option('--no-whatsapp', 'Disable WhatsApp mode (override default)')\n .option('-s, --sandbox', 'Enable sandbox mode (file/network restrictions)')\n .option('-c, --chrome', 'Enable Chrome automation')\n .option('-a, --auto', 'Automatically detect and apply best settings')\n .option('-b, --branch <name>', 'Specify branch name for worktree')\n .option('-t, --task <desc>', 'Task description for context')\n .option('--claude-bin <path>', 'Path to claude CLI (or use CLAUDE_BIN)')\n .option('--no-context', 'Disable StackMemory context integration')\n .option('--no-trace', 'Disable debug tracing (enabled by default)')\n .option('--verbose-trace', 'Enable verbose debug tracing with full details')\n .option('--think', 'Enable thinking mode with Qwen (deep reasoning)')\n .option('--think-hard', 'Alias for --think')\n .option('--ultrathink', 'Alias for --think')\n .option('--qwen', 'Force Qwen provider for this session')\n .option('--openai', 'Force OpenAI provider for this session')\n .option('--ollama', 'Force Ollama provider for this session')\n .option('--model-routing', 'Enable model routing')\n .option('--no-model-routing', 'Disable model routing')\n .option('--sweep', 'Enable Sweep next-edit predictions (PTY wrapper)')\n .option('--no-sweep', 'Disable Sweep predictions')\n .option('--greptile', 'Enable Greptile AI code review (MCP server)')\n .option('--no-greptile', 'Disable Greptile integration')\n .option('--gepa', 'Enable GEPA auto-optimization of CLAUDE.md')\n .option('--no-gepa', 'Disable GEPA auto-optimization')\n .helpOption('-h, --help', 'Display help')\n .allowUnknownOption(true)\n .action(async (_options) => {\n const claudeSM = new ClaudeSM();\n const args = process.argv.slice(2);\n await claudeSM.run(args);\n });\n\n// Handle direct execution\n// ESM-safe CLI entry\nprogram.parse(process.argv);\n"],
5
- "mappings": "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",
6
- "names": ["claudeBin"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/codex-sm-danger.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n/**\n * codex-sm-danger: Codex-SM wrapper with --dangerously-skip-permissions\n * Shorthand for: codex-sm --dangerously-skip-permissions [args]\n */\n\nimport { spawn } from 'child_process';\nimport * as path from 'path';\n\n// __filename and __dirname are provided by esbuild banner for ESM compatibility\n\n// Get the codex-sm script path\nconst codexSmPath = path.join(__dirname, 'codex-sm.js');\n\n// Prepend the danger flag to all args\nconst args = ['--dangerously-skip-permissions', ...process.argv.slice(2)];\n\n// Spawn codex-sm with the danger flag\nconst child = spawn('node', [codexSmPath, ...args], {\n stdio: 'inherit',\n env: process.env,\n});\n\nchild.on('exit', (code) => {\n process.exit(code || 0);\n});\n\nchild.on('error', (err) => {\n console.error('Failed to launch codex-sm:', err.message);\n process.exit(1);\n});\n"],
5
- "mappings": ";;;;;AAOA,SAAS,aAAa;AACtB,YAAY,UAAU;AAKtB,MAAM,cAAc,KAAK,KAAK,WAAW,aAAa;AAGtD,MAAM,OAAO,CAAC,kCAAkC,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC;AAGxE,MAAM,QAAQ,MAAM,QAAQ,CAAC,aAAa,GAAG,IAAI,GAAG;AAAA,EAClD,OAAO;AAAA,EACP,KAAK,QAAQ;AACf,CAAC;AAED,MAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAQ,KAAK,QAAQ,CAAC;AACxB,CAAC;AAED,MAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,UAAQ,MAAM,8BAA8B,IAAI,OAAO;AACvD,UAAQ,KAAK,CAAC;AAChB,CAAC;",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/codex-sm.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\n/**\n * codex-sm: Codex wrapper with StackMemory and worktree integration\n * Automatically manages context persistence, optional worktree isolation, and tracing\n */\n\nimport { spawn, execSync, execFileSync } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { program } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\nimport chalk from 'chalk';\nimport { initializeTracing, trace } from '../core/trace/index.js';\n\ninterface CodexConfig {\n instanceId: string;\n worktreePath?: string;\n useWorktree: boolean;\n contextEnabled: boolean;\n branch?: string;\n task?: string;\n tracingEnabled: boolean;\n verboseTracing: boolean;\n codexBin?: string;\n}\n\nclass CodexSM {\n private config: CodexConfig;\n private stackmemoryPath: string;\n\n constructor() {\n this.config = {\n instanceId: this.generateInstanceId(),\n useWorktree: false,\n contextEnabled: true,\n tracingEnabled: true,\n verboseTracing: false,\n };\n\n this.stackmemoryPath = this.findStackMemory();\n }\n\n private generateInstanceId(): string {\n return uuidv4().substring(0, 8);\n }\n\n private findStackMemory(): string {\n const possiblePaths = [\n path.join(os.homedir(), '.stackmemory', 'bin', 'stackmemory'),\n '/usr/local/bin/stackmemory',\n '/opt/homebrew/bin/stackmemory',\n 'stackmemory',\n ];\n for (const smPath of possiblePaths) {\n try {\n execFileSync('which', [smPath], { stdio: 'ignore' });\n return smPath;\n } catch {\n // continue\n }\n }\n return 'stackmemory';\n }\n\n private isGitRepo(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n private getCurrentBranch(): string {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf8',\n }).trim();\n } catch {\n return 'main';\n }\n }\n\n private hasUncommittedChanges(): boolean {\n try {\n const status = execSync('git status --porcelain', { encoding: 'utf8' });\n return status.length > 0;\n } catch {\n return false;\n }\n }\n\n private resolveCodexBin(): string | null {\n // 1) CLI option\n if (this.config.codexBin && this.config.codexBin.trim()) {\n return this.config.codexBin.trim();\n }\n // 2) Environment override\n const envBin = process.env['CODEX_BIN'];\n if (envBin && envBin.trim()) {\n return envBin.trim();\n }\n // 3) Detect on PATH\n try {\n execSync('which codex', { stdio: 'ignore' });\n return 'codex';\n } catch {}\n try {\n execSync('which codex-cli', { stdio: 'ignore' });\n return 'codex-cli';\n } catch {}\n return null;\n }\n\n private setupWorktree(): string | null {\n if (!this.config.useWorktree || !this.isGitRepo()) return null;\n\n console.log(chalk.blue('\uD83C\uDF33 Setting up isolated worktree...'));\n\n const timestamp = new Date()\n .toISOString()\n .replace(/[:.]/g, '-')\n .substring(0, 19);\n const branch =\n this.config.branch ||\n `codex-${this.config.task || 'work'}-${timestamp}-${this.config.instanceId}`;\n const repoName = path.basename(process.cwd());\n const worktreePath = path.join(\n path.dirname(process.cwd()),\n `${repoName}--${branch}`\n );\n\n try {\n const cmd = `git worktree add -b \"${branch}\" \"${worktreePath}\"`;\n execSync(cmd, { stdio: 'inherit' });\n\n console.log(chalk.green(`Worktree created: ${worktreePath}`));\n console.log(chalk.gray(` Branch: ${branch}`));\n\n const configPath = path.join(worktreePath, '.codex-instance.json');\n const configData = {\n instanceId: this.config.instanceId,\n worktreePath,\n branch,\n task: this.config.task,\n created: new Date().toISOString(),\n parentRepo: process.cwd(),\n };\n fs.writeFileSync(configPath, JSON.stringify(configData, null, 2));\n\n const envFiles = ['.env', '.env.local', '.mise.toml', '.tool-versions'];\n for (const file of envFiles) {\n const srcPath = path.join(process.cwd(), file);\n if (fs.existsSync(srcPath))\n fs.copyFileSync(srcPath, path.join(worktreePath, file));\n }\n\n return worktreePath;\n } catch (err: unknown) {\n console.error(chalk.red('Failed to create worktree:'), err);\n return null;\n }\n }\n\n private saveContext(\n message: string,\n metadata: Record<string, unknown> = {}\n ): void {\n if (!this.config.contextEnabled) return;\n try {\n const contextData = {\n message,\n metadata: {\n ...metadata,\n instanceId: this.config.instanceId,\n worktree: this.config.worktreePath,\n timestamp: new Date().toISOString(),\n },\n };\n const cmd = `${this.stackmemoryPath} context save --json '${JSON.stringify(contextData)}'`;\n execSync(cmd, { stdio: 'ignore' });\n } catch {\n // ignore\n }\n }\n\n private loadContext(): void {\n if (!this.config.contextEnabled) return;\n try {\n console.log(chalk.blue('\uD83D\uDCDA Loading previous context...'));\n const cmd = `${this.stackmemoryPath} context list --limit 5 --format json`;\n const output = execSync(cmd, { encoding: 'utf8' });\n const contexts = JSON.parse(output);\n if (Array.isArray(contexts) && contexts.length > 0) {\n console.log(chalk.gray('Recent context loaded:'));\n contexts.forEach(\n (ctx: { message: string; metadata?: { timestamp?: string } }) => {\n console.log(\n chalk.gray(` - ${ctx.message} (${ctx.metadata?.timestamp})`)\n );\n }\n );\n }\n } catch {\n // ignore\n }\n }\n\n private suggestWorktreeMode(): void {\n if (this.hasUncommittedChanges()) {\n console.log(chalk.yellow('WARNING: Uncommitted changes detected'));\n console.log(\n chalk.gray(' Consider using --worktree to work in isolation')\n );\n }\n }\n\n public async run(args: string[]): Promise<void> {\n const codexArgs: string[] = [];\n let i = 0;\n while (i < args.length) {\n const arg = args[i];\n switch (arg) {\n case '--worktree':\n case '-w':\n this.config.useWorktree = true;\n break;\n case '--no-context':\n this.config.contextEnabled = false;\n break;\n case '--no-trace':\n this.config.tracingEnabled = false;\n break;\n case '--verbose-trace':\n this.config.verboseTracing = true;\n break;\n case '--branch':\n case '-b':\n i++;\n this.config.branch = args[i];\n break;\n case '--task':\n case '-t':\n i++;\n this.config.task = args[i];\n break;\n case '--codex-bin':\n i++;\n this.config.codexBin = args[i];\n process.env['CODEX_BIN'] = this.config.codexBin;\n break;\n case '--auto':\n case '-a':\n if (this.isGitRepo()) {\n this.config.useWorktree = this.hasUncommittedChanges();\n }\n break;\n default:\n codexArgs.push(arg);\n }\n i++;\n }\n\n if (this.config.tracingEnabled) {\n process.env['DEBUG_TRACE'] = 'true';\n process.env['STACKMEMORY_DEBUG'] = 'true';\n process.env['TRACE_OUTPUT'] = 'file';\n process.env['TRACE_MASK_SENSITIVE'] = 'true';\n if (this.config.verboseTracing) {\n process.env['TRACE_VERBOSITY'] = 'full';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'true';\n process.env['TRACE_MEMORY'] = 'true';\n } else {\n process.env['TRACE_VERBOSITY'] = 'summary';\n process.env['TRACE_PARAMS'] = 'true';\n process.env['TRACE_RESULTS'] = 'false';\n }\n initializeTracing();\n trace.command(\n 'codex-sm',\n {\n instanceId: this.config.instanceId,\n worktree: this.config.useWorktree,\n task: this.config.task,\n },\n async () => {}\n );\n }\n\n console.log(chalk.blue('\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557'));\n console.log(chalk.blue('\u2551 Codex + StackMemory + Worktree \u2551'));\n console.log(chalk.blue('\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D'));\n console.log();\n\n if (this.isGitRepo()) {\n const branch = this.getCurrentBranch();\n console.log(chalk.gray(`\uD83D\uDCCD Current branch: ${branch}`));\n if (!this.config.useWorktree) this.suggestWorktreeMode();\n }\n\n if (this.config.useWorktree) {\n const worktreePath = this.setupWorktree();\n if (worktreePath) {\n this.config.worktreePath = worktreePath;\n process.chdir(worktreePath);\n this.saveContext('Created worktree for Codex instance', {\n action: 'worktree_created',\n path: worktreePath,\n branch: this.config.branch,\n });\n }\n }\n\n this.loadContext();\n\n process.env['CODEX_INSTANCE_ID'] = this.config.instanceId;\n if (this.config.worktreePath)\n process.env['CODEX_WORKTREE_PATH'] = this.config.worktreePath;\n\n console.log(chalk.gray(`\uD83E\uDD16 Instance ID: ${this.config.instanceId}`));\n console.log(chalk.gray(`\uD83D\uDCC1 Working in: ${process.cwd()}`));\n\n console.log();\n console.log(chalk.gray('Starting Codex...'));\n console.log(chalk.gray('\u2500'.repeat(42)));\n\n const codexBin = this.resolveCodexBin();\n\n if (!codexBin) {\n console.error(chalk.red('\u274C Codex CLI not found.'));\n console.log(\n chalk.gray(\n ' Install codex/codex-cli or set an override:\\n' +\n ' export CODEX_BIN=/path/to/codex\\n' +\n ' codex-sm --help\\n\\n' +\n ' Ensure PATH includes npm global bin (npm bin -g).'\n )\n );\n process.exit(1);\n return;\n }\n\n const child = spawn(codexBin, codexArgs, {\n stdio: 'inherit',\n env: process.env,\n });\n\n child.on('error', (err: NodeJS.ErrnoException) => {\n console.error(chalk.red('\u274C Failed to launch Codex CLI.'));\n if (err.code === 'ENOENT') {\n console.error(\n chalk.gray(\n ' Not found. Set CODEX_BIN or install codex/codex-cli on PATH.'\n )\n );\n } else if (err.code === 'EPERM' || err.code === 'EACCES') {\n console.error(\n chalk.gray(\n ' Permission/sandbox issue. Try running outside a sandbox or set CODEX_BIN.'\n )\n );\n } else {\n console.error(chalk.gray(` ${err.message}`));\n }\n process.exit(1);\n });\n\n child.on('exit', (code) => {\n this.saveContext('Codex session ended', {\n action: 'session_end',\n exitCode: code,\n });\n if (this.config.tracingEnabled) {\n const summary = trace.getExecutionSummary();\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Debug Trace Summary:'));\n console.log(chalk.gray(summary));\n }\n if (this.config.worktreePath) {\n console.log();\n console.log(chalk.gray('\u2500'.repeat(42)));\n console.log(chalk.blue('Session ended in worktree:'));\n console.log(chalk.gray(` ${this.config.worktreePath}`));\n }\n process.exit(code || 0);\n });\n\n process.on('SIGINT', () => {\n this.saveContext('Codex session interrupted', {\n action: 'session_interrupt',\n });\n child.kill('SIGINT');\n });\n\n process.on('SIGTERM', () => {\n this.saveContext('Codex session terminated', {\n action: 'session_terminate',\n });\n child.kill('SIGTERM');\n });\n }\n}\n\nprogram\n .name('codex-sm')\n .description('Codex with StackMemory context and optional worktree isolation')\n .version('1.0.0')\n .option('-w, --worktree', 'Create isolated worktree for this instance')\n .option('-a, --auto', 'Automatically detect and apply best settings')\n .option('-b, --branch <name>', 'Specify branch name for worktree')\n .option('-t, --task <desc>', 'Task description for context')\n .option('--codex-bin <path>', 'Path to codex/codex-cli (or use CODEX_BIN)')\n .option('--no-context', 'Disable StackMemory context integration')\n .option('--no-trace', 'Disable debug tracing (enabled by default)')\n .option('--verbose-trace', 'Enable verbose debug tracing with full details')\n .helpOption('-h, --help', 'Display help')\n .allowUnknownOption(true)\n .action(async (_options) => {\n const codexSM = new CodexSM();\n const args = process.argv.slice(2);\n await codexSM.run(args);\n });\n\n// ESM-safe CLI entry\nprogram.parse(process.argv);\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cli/commands/api.ts"],
4
- "sourcesContent": ["/**\n * CLI Commands for API Skill\n *\n * Provides command-line interface for managing and executing APIs\n * via the Restish-based API skill.\n */\n\nimport { Command } from 'commander';\nimport { getAPISkill } from '../../skills/api-skill.js';\nimport { getAPIDiscovery } from '../../skills/api-discovery.js';\n\nexport function createAPICommand(): Command {\n const api = new Command('api');\n api.description('OpenAPI-based API access via Restish');\n\n // Add API\n api\n .command('add <name> <url>')\n .description('Register a new API')\n .option('--spec <url>', 'OpenAPI spec URL')\n .option(\n '--auth-type <type>',\n 'Authentication type (none|api-key|oauth2|basic)',\n 'none'\n )\n .option('--header-name <name>', 'Auth header name', 'Authorization')\n .option('--env-var <name>', 'Environment variable for auth token')\n .action(async (name: string, url: string, options) => {\n const skill = getAPISkill();\n const result = await skill.add(name, url, {\n spec: options.spec,\n authType: options.authType,\n headerName: options.headerName,\n envVar: options.envVar,\n });\n\n if (result.success) {\n console.log(`API '${name}' registered`);\n if (result.data) {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // List APIs\n api\n .command('list')\n .description('List all registered APIs')\n .action(async () => {\n const skill = getAPISkill();\n const result = await skill.list();\n\n if (result.success) {\n if (Array.isArray(result.data) && result.data.length === 0) {\n console.log(\n 'No APIs registered. Use: stackmemory api add <name> <url>'\n );\n } else {\n console.log('Registered APIs:');\n for (const api of result.data as Array<{\n name: string;\n baseUrl: string;\n authType: string;\n operations: number | string;\n }>) {\n console.log(` ${api.name}`);\n console.log(` URL: ${api.baseUrl}`);\n console.log(` Auth: ${api.authType}`);\n console.log(` Operations: ${api.operations}`);\n }\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Describe API\n api\n .command('describe <name> [operation]')\n .description('Show API details or specific operation')\n .action(async (name: string, operation?: string) => {\n const skill = getAPISkill();\n const result = await skill.describe(name, operation);\n\n if (result.success) {\n console.log(result.message);\n if (result.data) {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Execute API operation\n api\n .command('exec <name> <operation>')\n .description('Execute an API operation')\n .option('--raw', 'Output raw response')\n .option('--filter <query>', 'Filter/project response using shorthand query')\n .option('-H, --header <header...>', 'Add custom headers (key:value)')\n .allowUnknownOption(true)\n .action(async (name: string, operation: string, options, command) => {\n const skill = getAPISkill();\n\n // Parse unknown options as API parameters\n const params: Record<string, unknown> = {};\n const args = command.args.slice(2); // Skip name and operation\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith('--')) {\n const key = arg.slice(2);\n const nextArg = args[i + 1];\n if (nextArg && !nextArg.startsWith('--')) {\n params[key] = nextArg;\n i++;\n } else {\n params[key] = true;\n }\n }\n }\n\n // Parse headers\n const headers: Record<string, string> = {};\n if (options.header) {\n for (const h of options.header) {\n const [key, ...valueParts] = h.split(':');\n headers[key] = valueParts.join(':').trim();\n }\n }\n\n const result = await skill.exec(name, operation, params, {\n raw: options.raw,\n filter: options.filter,\n headers,\n });\n\n if (result.success) {\n if (typeof result.data === 'string') {\n console.log(result.data);\n } else {\n console.log(JSON.stringify(result.data, null, 2));\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Configure auth\n api\n .command('auth <name>')\n .description('Configure API authentication')\n .option('--token <token>', 'API token/key')\n .option('--env-var <name>', 'Environment variable name for token')\n .option('--oauth', 'Use OAuth2 flow')\n .option('--scopes <scopes>', 'OAuth2 scopes (comma-separated)')\n .action(async (name: string, options) => {\n const skill = getAPISkill();\n\n const result = await skill.auth(name, {\n token: options.token,\n envVar: options.envVar,\n oauth: options.oauth,\n scopes: options.scopes?.split(','),\n });\n\n if (result.success) {\n console.log(result.message);\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Sync API\n api\n .command('sync <name>')\n .description('Refresh API operations from spec')\n .action(async (name: string) => {\n const skill = getAPISkill();\n const result = await skill.sync(name);\n\n if (result.success) {\n console.log(result.message);\n if (result.data?.operations) {\n console.log(\n `Operations: ${(result.data.operations as string[]).join(', ')}`\n );\n }\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Remove API\n api\n .command('remove <name>')\n .description('Remove a registered API')\n .action(async (name: string) => {\n const skill = getAPISkill();\n const result = await skill.remove(name);\n\n if (result.success) {\n console.log(result.message);\n } else {\n console.error(`Error: ${result.message}`);\n process.exit(1);\n }\n });\n\n // Discover API from URL\n api\n .command('discover <url>')\n .description('Analyze a URL and discover API endpoints')\n .option('--register', 'Auto-register if API is discovered')\n .action(async (url: string, options) => {\n const discovery = getAPIDiscovery();\n\n // Use analyzeUrl directly for quick response (no network probing)\n const result = discovery.analyzeUrl(url);\n\n if (result) {\n console.log(`Discovered API: ${result.name}`);\n console.log(` Base URL: ${result.baseUrl}`);\n console.log(` Spec URL: ${result.specUrl || 'not found'}`);\n console.log(` Type: ${result.apiType || 'rest'}`);\n console.log(` Source: ${result.source}`);\n console.log(` Confidence: ${(result.confidence * 100).toFixed(0)}%`);\n\n if (result.apiType === 'graphql') {\n console.log(\n `\\nNote: This is a GraphQL API. Use a GraphQL client for queries.`\n );\n } else if (result.apiType === 'google-discovery') {\n console.log(\n `\\nNote: This uses Google Discovery format. Auth via gcloud CLI.`\n );\n }\n\n if (options.register) {\n await discovery.registerAPI(result);\n console.log(\n `\\nAPI registered. Use: stackmemory api exec ${result.name} <path>`\n );\n } else {\n console.log(\n `\\nTo register: stackmemory api add ${result.name} ${result.baseUrl}`\n );\n }\n } else {\n console.log('No API detected in this URL');\n }\n });\n\n // List discovered APIs\n api\n .command('discovered')\n .description('List all auto-discovered APIs')\n .action(() => {\n const discovery = getAPIDiscovery();\n const discovered = discovery.getDiscoveredAPIs();\n\n if (discovered.length === 0) {\n console.log('No APIs discovered yet.');\n console.log(\n 'Browse API documentation or use: stackmemory api discover <url>'\n );\n return;\n }\n\n console.log('Discovered APIs:');\n for (const api of discovered) {\n console.log(` ${api.name}`);\n console.log(` Base: ${api.baseUrl}`);\n console.log(` Spec: ${api.specUrl || 'none'}`);\n console.log(` Confidence: ${(api.confidence * 100).toFixed(0)}%`);\n }\n });\n\n // Register all discovered APIs\n api\n .command('register-discovered')\n .description('Register all discovered APIs')\n .action(async () => {\n const discovery = getAPIDiscovery();\n const discovered = discovery.getDiscoveredAPIs();\n\n if (discovered.length === 0) {\n console.log('No APIs to register. Use: stackmemory api discover <url>');\n return;\n }\n\n let registered = 0;\n for (const api of discovered) {\n if (await discovery.registerAPI(api)) {\n console.log(`Registered: ${api.name}`);\n registered++;\n }\n }\n\n console.log(`\\nRegistered ${registered}/${discovered.length} APIs`);\n });\n\n // Help\n api\n .command('help')\n .description('Show API skill help')\n .action(() => {\n const skill = getAPISkill();\n const discovery = getAPIDiscovery();\n console.log(skill.getHelp());\n console.log('\\n---\\n');\n console.log(discovery.getHelp());\n });\n\n return api;\n}\n"],
5
- "mappings": "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",
6
- "names": ["api"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cli/commands/auto-background.ts"],
4
- "sourcesContent": ["/**\n * CLI command for managing auto-background settings\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { join } from 'path';\nimport {\n loadConfig,\n saveConfig,\n AutoBackgroundConfig,\n} from '../../hooks/auto-background.js';\n\n// __dirname provided by esbuild banner\n\nexport function createAutoBackgroundCommand(): Command {\n const cmd = new Command('auto-bg')\n .description('Manage auto-background settings for long-running commands')\n .addHelpText(\n 'after',\n `\nExamples:\n stackmemory auto-bg show Show current configuration\n stackmemory auto-bg enable Enable auto-backgrounding\n stackmemory auto-bg disable Disable auto-backgrounding\n stackmemory auto-bg add \"npm publish\" Add command to always-background list\n stackmemory auto-bg remove \"npm test\" Remove command from list\n stackmemory auto-bg timeout 10000 Set timeout to 10 seconds\n stackmemory auto-bg install Install Claude Code hook\n`\n );\n\n cmd\n .command('show')\n .description('Show current auto-background configuration')\n .action(() => {\n const config = loadConfig();\n console.log(chalk.blue('Auto-Background Configuration:'));\n console.log();\n console.log(\n ` ${chalk.gray('Enabled:')} ${config.enabled ? chalk.green('yes') : chalk.red('no')}`\n );\n console.log(` ${chalk.gray('Timeout:')} ${config.timeoutMs}ms`);\n console.log(\n ` ${chalk.gray('Verbose:')} ${config.verbose ? 'yes' : 'no'}`\n );\n console.log();\n console.log(chalk.blue('Always Background:'));\n config.alwaysBackground.forEach((p) => console.log(` - ${p}`));\n console.log();\n console.log(chalk.blue('Never Background:'));\n config.neverBackground.forEach((p) => console.log(` - ${p}`));\n });\n\n cmd\n .command('enable')\n .description('Enable auto-backgrounding')\n .action(() => {\n const config = loadConfig();\n config.enabled = true;\n saveConfig(config);\n console.log(chalk.green('Auto-background enabled'));\n });\n\n cmd\n .command('disable')\n .description('Disable auto-backgrounding')\n .action(() => {\n const config = loadConfig();\n config.enabled = false;\n saveConfig(config);\n console.log(chalk.yellow('Auto-background disabled'));\n });\n\n cmd\n .command('add <pattern>')\n .description('Add command pattern to always-background list')\n .action((pattern: string) => {\n const config = loadConfig();\n if (!config.alwaysBackground.includes(pattern)) {\n config.alwaysBackground.push(pattern);\n saveConfig(config);\n console.log(chalk.green(`Added: ${pattern}`));\n } else {\n console.log(chalk.yellow(`Already in list: ${pattern}`));\n }\n });\n\n cmd\n .command('remove <pattern>')\n .description('Remove command pattern from always-background list')\n .action((pattern: string) => {\n const config = loadConfig();\n const idx = config.alwaysBackground.indexOf(pattern);\n if (idx !== -1) {\n config.alwaysBackground.splice(idx, 1);\n saveConfig(config);\n console.log(chalk.green(`Removed: ${pattern}`));\n } else {\n console.log(chalk.yellow(`Not in list: ${pattern}`));\n }\n });\n\n cmd\n .command('timeout <ms>')\n .description('Set timeout threshold in milliseconds')\n .action((ms: string) => {\n const config = loadConfig();\n const timeout = parseInt(ms, 10);\n if (isNaN(timeout) || timeout < 0) {\n console.log(chalk.red('Invalid timeout value'));\n return;\n }\n config.timeoutMs = timeout;\n saveConfig(config);\n console.log(chalk.green(`Timeout set to ${timeout}ms`));\n });\n\n cmd\n .command('verbose [on|off]')\n .description('Enable/disable verbose logging')\n .action((value?: string) => {\n const config = loadConfig();\n if (value === undefined) {\n config.verbose = !config.verbose;\n } else {\n config.verbose = value === 'on' || value === 'true';\n }\n saveConfig(config);\n console.log(\n chalk.green(\n `Verbose logging ${config.verbose ? 'enabled' : 'disabled'}`\n )\n );\n });\n\n cmd\n .command('reset')\n .description('Reset configuration to defaults')\n .action(() => {\n const defaultConfig: AutoBackgroundConfig = {\n enabled: true,\n timeoutMs: 5000,\n alwaysBackground: [\n 'npm install',\n 'npm ci',\n 'yarn install',\n 'pnpm install',\n 'bun install',\n 'npm run build',\n 'yarn build',\n 'pnpm build',\n 'cargo build',\n 'go build',\n 'make',\n 'npm test',\n 'npm run test',\n 'yarn test',\n 'pytest',\n 'jest',\n 'vitest',\n 'cargo test',\n 'docker build',\n 'docker-compose up',\n 'docker compose up',\n 'git clone',\n 'git fetch --all',\n 'npx tsc',\n 'tsc --noEmit',\n 'eslint .',\n 'npm run lint',\n ],\n neverBackground: [\n 'vim',\n 'nvim',\n 'nano',\n 'less',\n 'more',\n 'top',\n 'htop',\n 'echo',\n 'cat',\n 'ls',\n 'pwd',\n 'cd',\n 'which',\n 'git status',\n 'git diff',\n 'git log',\n ],\n verbose: false,\n };\n saveConfig(defaultConfig);\n console.log(chalk.green('Configuration reset to defaults'));\n });\n\n cmd\n .command('install')\n .description('Install Claude Code hook for auto-backgrounding')\n .action(() => {\n try {\n // Find the install script\n const scriptPath = join(\n __dirname,\n '../../../scripts/install-auto-background-hook.sh'\n );\n execSync(`bash \"${scriptPath}\"`, { stdio: 'inherit' });\n } catch {\n console.error(chalk.red('Failed to install hook'));\n console.log(\n chalk.gray(\n 'Run manually: bash scripts/install-auto-background-hook.sh'\n )\n );\n }\n });\n\n return cmd;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cli/commands/cleanup-processes.ts"],
4
- "sourcesContent": ["/**\n * CLI Command for Process Cleanup\n */\n\nimport { Command } from 'commander';\nimport {\n cleanupStaleProcesses,\n findStaleProcesses,\n getStackmemoryProcesses,\n} from '../../utils/process-cleanup.js';\n\nexport function createCleanupProcessesCommand(): Command {\n const cmd = new Command('cleanup-processes');\n cmd.description('Clean up stale stackmemory processes');\n\n cmd\n .option('--max-age <hours>', 'Max process age in hours (default: 24)', '24')\n .option('--dry-run', 'Show what would be killed without actually killing')\n .option('--all', 'Show all stackmemory processes (not just stale)')\n .option('--force', 'Kill without checking log activity')\n .action((options) => {\n const maxAgeHours = parseInt(options.maxAge, 10);\n\n if (options.all) {\n // Just list all processes\n const processes = getStackmemoryProcesses();\n\n if (processes.length === 0) {\n console.log('No stackmemory processes running');\n return;\n }\n\n console.log(`Found ${processes.length} stackmemory process(es):\\n`);\n for (const proc of processes) {\n const age =\n proc.ageHours < 1\n ? `${Math.round(proc.ageHours * 60)}m`\n : `${Math.round(proc.ageHours)}h`;\n console.log(` PID ${proc.pid} (${age} old)`);\n console.log(` ${proc.command}`);\n }\n return;\n }\n\n // Find and optionally kill stale processes\n const staleProcesses = options.force\n ? getStackmemoryProcesses().filter((p) => p.ageHours >= maxAgeHours)\n : findStaleProcesses(maxAgeHours);\n\n if (staleProcesses.length === 0) {\n console.log(`No stale processes older than ${maxAgeHours}h found`);\n return;\n }\n\n console.log(\n `Found ${staleProcesses.length} stale process(es) older than ${maxAgeHours}h:\\n`\n );\n\n for (const proc of staleProcesses) {\n const age = `${Math.round(proc.ageHours)}h`;\n console.log(` PID ${proc.pid} (${age} old)`);\n console.log(` ${proc.command}`);\n if (proc.lastLogActivity) {\n console.log(` Last log: ${proc.lastLogActivity.toISOString()}`);\n }\n }\n\n if (options.dryRun) {\n console.log('\\n[DRY RUN] No processes killed');\n return;\n }\n\n console.log('\\nKilling stale processes...');\n const result = cleanupStaleProcesses({ maxAgeHours, dryRun: false });\n\n console.log(`\\nKilled: ${result.killed.length}`);\n if (result.errors.length > 0) {\n console.log(`Errors: ${result.errors.length}`);\n for (const err of result.errors) {\n console.log(` PID ${err.pid}: ${err.error}`);\n }\n }\n });\n\n return cmd;\n}\n"],
5
- "mappings": ";;;;AAIA,SAAS,eAAe;AACxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,gCAAyC;AACvD,QAAM,MAAM,IAAI,QAAQ,mBAAmB;AAC3C,MAAI,YAAY,sCAAsC;AAEtD,MACG,OAAO,qBAAqB,0CAA0C,IAAI,EAC1E,OAAO,aAAa,oDAAoD,EACxE,OAAO,SAAS,iDAAiD,EACjE,OAAO,WAAW,oCAAoC,EACtD,OAAO,CAAC,YAAY;AACnB,UAAM,cAAc,SAAS,QAAQ,QAAQ,EAAE;AAE/C,QAAI,QAAQ,KAAK;AAEf,YAAM,YAAY,wBAAwB;AAE1C,UAAI,UAAU,WAAW,GAAG;AAC1B,gBAAQ,IAAI,kCAAkC;AAC9C;AAAA,MACF;AAEA,cAAQ,IAAI,SAAS,UAAU,MAAM;AAAA,CAA6B;AAClE,iBAAW,QAAQ,WAAW;AAC5B,cAAM,MACJ,KAAK,WAAW,IACZ,GAAG,KAAK,MAAM,KAAK,WAAW,EAAE,CAAC,MACjC,GAAG,KAAK,MAAM,KAAK,QAAQ,CAAC;AAClC,gBAAQ,IAAI,SAAS,KAAK,GAAG,KAAK,GAAG,OAAO;AAC5C,gBAAQ,IAAI,OAAO,KAAK,OAAO,EAAE;AAAA,MACnC;AACA;AAAA,IACF;AAGA,UAAM,iBAAiB,QAAQ,QAC3B,wBAAwB,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,WAAW,IACjE,mBAAmB,WAAW;AAElC,QAAI,eAAe,WAAW,GAAG;AAC/B,cAAQ,IAAI,iCAAiC,WAAW,SAAS;AACjE;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,SAAS,eAAe,MAAM,iCAAiC,WAAW;AAAA;AAAA,IAC5E;AAEA,eAAW,QAAQ,gBAAgB;AACjC,YAAM,MAAM,GAAG,KAAK,MAAM,KAAK,QAAQ,CAAC;AACxC,cAAQ,IAAI,SAAS,KAAK,GAAG,KAAK,GAAG,OAAO;AAC5C,cAAQ,IAAI,OAAO,KAAK,OAAO,EAAE;AACjC,UAAI,KAAK,iBAAiB;AACxB,gBAAQ,IAAI,iBAAiB,KAAK,gBAAgB,YAAY,CAAC,EAAE;AAAA,MACnE;AAAA,IACF;AAEA,QAAI,QAAQ,QAAQ;AAClB,cAAQ,IAAI,iCAAiC;AAC7C;AAAA,IACF;AAEA,YAAQ,IAAI,8BAA8B;AAC1C,UAAM,SAAS,sBAAsB,EAAE,aAAa,QAAQ,MAAM,CAAC;AAEnE,YAAQ,IAAI;AAAA,UAAa,OAAO,OAAO,MAAM,EAAE;AAC/C,QAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,cAAQ,IAAI,WAAW,OAAO,OAAO,MAAM,EAAE;AAC7C,iBAAW,OAAO,OAAO,QAAQ;AAC/B,gBAAQ,IAAI,SAAS,IAAI,GAAG,KAAK,IAAI,KAAK,EAAE;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,CAAC;AAEH,SAAO;AACT;",
6
- "names": []
7
- }