@stackmemoryai/stackmemory 0.5.58 → 0.5.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/dist/cli/commands/search.js +20 -3
  2. package/dist/cli/commands/search.js.map +2 -2
  3. package/dist/core/database/sqlite-adapter.js +13 -3
  4. package/dist/core/database/sqlite-adapter.js.map +2 -2
  5. package/dist/core/errors/error-utils.js +208 -0
  6. package/dist/core/errors/error-utils.js.map +7 -0
  7. package/dist/core/errors/index.js +13 -4
  8. package/dist/core/errors/index.js.map +2 -2
  9. package/dist/core/merge/unified-merge-resolver.js +303 -0
  10. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  11. package/dist/core/monitoring/logger.js +61 -9
  12. package/dist/core/monitoring/logger.js.map +2 -2
  13. package/dist/core/security/index.js +35 -0
  14. package/dist/core/security/index.js.map +7 -0
  15. package/dist/core/security/input-sanitizer.js +321 -0
  16. package/dist/core/security/input-sanitizer.js.map +7 -0
  17. package/dist/integrations/linear/client.js +5 -1
  18. package/dist/integrations/linear/client.js.map +2 -2
  19. package/dist/integrations/mcp/remote-server.js +27 -36
  20. package/dist/integrations/mcp/remote-server.js.map +2 -2
  21. package/dist/integrations/mcp/server.js +44 -29
  22. package/dist/integrations/mcp/server.js.map +3 -3
  23. package/dist/scripts/benchmark-performance.js +48 -0
  24. package/dist/scripts/benchmark-performance.js.map +7 -0
  25. package/dist/scripts/check-redis.js +42 -0
  26. package/dist/scripts/check-redis.js.map +7 -0
  27. package/dist/scripts/initialize.js +116 -0
  28. package/dist/scripts/initialize.js.map +7 -0
  29. package/dist/scripts/list-linear-tasks.js +124 -0
  30. package/dist/scripts/list-linear-tasks.js.map +7 -0
  31. package/dist/scripts/measure-handoff-impact.js +340 -0
  32. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  33. package/dist/scripts/query-chromadb.js +160 -0
  34. package/dist/scripts/query-chromadb.js.map +7 -0
  35. package/dist/scripts/show-linear-summary.js +119 -0
  36. package/dist/scripts/show-linear-summary.js.map +7 -0
  37. package/dist/scripts/simple-swarm-demo.js +90 -0
  38. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  39. package/dist/scripts/status.js +155 -0
  40. package/dist/scripts/status.js.map +7 -0
  41. package/dist/scripts/test-chromadb-sync.js +192 -0
  42. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  43. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  44. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  45. package/dist/scripts/test-ralph-iterations.js +121 -0
  46. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  47. package/dist/scripts/test-redis-storage.js +389 -0
  48. package/dist/scripts/test-redis-storage.js.map +7 -0
  49. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  50. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  51. package/dist/scripts/test-swarm-fixes.js +125 -0
  52. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  53. package/dist/scripts/test-swarm-tui.js +23 -0
  54. package/dist/scripts/test-swarm-tui.js.map +7 -0
  55. package/dist/scripts/test-tui-shortcuts.js +52 -0
  56. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  57. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  58. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  59. package/dist/src/agents/core/agent-task-manager.js +527 -0
  60. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  61. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  62. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  63. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  64. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  65. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  66. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  67. package/dist/src/cli/auto-detect.js +321 -0
  68. package/dist/src/cli/auto-detect.js.map +7 -0
  69. package/dist/src/cli/claude-sm-danger.js +21 -0
  70. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  71. package/dist/src/cli/claude-sm.js +1156 -0
  72. package/dist/src/cli/claude-sm.js.map +7 -0
  73. package/dist/src/cli/codex-sm-danger.js +21 -0
  74. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  75. package/dist/src/cli/codex-sm.js +349 -0
  76. package/dist/src/cli/codex-sm.js.map +7 -0
  77. package/dist/src/cli/commands/api.js +232 -0
  78. package/dist/src/cli/commands/api.js.map +7 -0
  79. package/dist/src/cli/commands/auto-background.js +180 -0
  80. package/dist/src/cli/commands/auto-background.js.map +7 -0
  81. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  82. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  83. package/dist/src/cli/commands/clear.js +202 -0
  84. package/dist/src/cli/commands/clear.js.map +7 -0
  85. package/dist/src/cli/commands/config.js +445 -0
  86. package/dist/src/cli/commands/config.js.map +7 -0
  87. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  88. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  89. package/dist/src/cli/commands/context.js +343 -0
  90. package/dist/src/cli/commands/context.js.map +7 -0
  91. package/dist/src/cli/commands/daemon.js +392 -0
  92. package/dist/src/cli/commands/daemon.js.map +7 -0
  93. package/dist/src/cli/commands/dashboard.js +210 -0
  94. package/dist/src/cli/commands/dashboard.js.map +7 -0
  95. package/dist/src/cli/commands/db.js +147 -0
  96. package/dist/src/cli/commands/db.js.map +7 -0
  97. package/dist/src/cli/commands/decision.js +266 -0
  98. package/dist/src/cli/commands/decision.js.map +7 -0
  99. package/dist/src/cli/commands/discovery.js +279 -0
  100. package/dist/src/cli/commands/discovery.js.map +7 -0
  101. package/dist/src/cli/commands/handoff.js +624 -0
  102. package/dist/src/cli/commands/handoff.js.map +7 -0
  103. package/dist/src/cli/commands/hooks.js +298 -0
  104. package/dist/src/cli/commands/hooks.js.map +7 -0
  105. package/dist/src/cli/commands/linear.js +529 -0
  106. package/dist/src/cli/commands/linear.js.map +7 -0
  107. package/dist/src/cli/commands/log.js +169 -0
  108. package/dist/src/cli/commands/log.js.map +7 -0
  109. package/dist/src/cli/commands/login.js +172 -0
  110. package/dist/src/cli/commands/login.js.map +7 -0
  111. package/dist/src/cli/commands/migrate.js +240 -0
  112. package/dist/src/cli/commands/migrate.js.map +7 -0
  113. package/dist/src/cli/commands/model.js +533 -0
  114. package/dist/src/cli/commands/model.js.map +7 -0
  115. package/dist/src/cli/commands/onboard.js +536 -0
  116. package/dist/src/cli/commands/onboard.js.map +7 -0
  117. package/dist/src/cli/commands/projects.js +199 -0
  118. package/dist/src/cli/commands/projects.js.map +7 -0
  119. package/dist/src/cli/commands/ralph.js +909 -0
  120. package/dist/src/cli/commands/ralph.js.map +7 -0
  121. package/dist/src/cli/commands/retrieval.js +248 -0
  122. package/dist/src/cli/commands/retrieval.js.map +7 -0
  123. package/dist/src/cli/commands/search.js +173 -0
  124. package/dist/src/cli/commands/search.js.map +7 -0
  125. package/dist/src/cli/commands/service.js +749 -0
  126. package/dist/src/cli/commands/service.js.map +7 -0
  127. package/dist/src/cli/commands/session.js +200 -0
  128. package/dist/src/cli/commands/session.js.map +7 -0
  129. package/dist/src/cli/commands/settings.js +306 -0
  130. package/dist/src/cli/commands/settings.js.map +7 -0
  131. package/dist/src/cli/commands/setup.js +701 -0
  132. package/dist/src/cli/commands/setup.js.map +7 -0
  133. package/dist/src/cli/commands/shell.js +249 -0
  134. package/dist/src/cli/commands/shell.js.map +7 -0
  135. package/dist/src/cli/commands/signup.js +50 -0
  136. package/dist/src/cli/commands/signup.js.map +7 -0
  137. package/dist/src/cli/commands/skills.js +470 -0
  138. package/dist/src/cli/commands/skills.js.map +7 -0
  139. package/dist/src/cli/commands/sms-notify.js +795 -0
  140. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  141. package/dist/src/cli/commands/storage-tier.js +183 -0
  142. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  143. package/dist/src/cli/commands/sweep.js +249 -0
  144. package/dist/src/cli/commands/sweep.js.map +7 -0
  145. package/dist/src/cli/commands/tasks.js +213 -0
  146. package/dist/src/cli/commands/tasks.js.map +7 -0
  147. package/dist/src/cli/commands/worktree.js +319 -0
  148. package/dist/src/cli/commands/worktree.js.map +7 -0
  149. package/dist/src/cli/index.js +594 -0
  150. package/dist/src/cli/index.js.map +7 -0
  151. package/dist/src/cli/opencode-sm.js +448 -0
  152. package/dist/src/cli/opencode-sm.js.map +7 -0
  153. package/dist/src/cli/utils/viewer.js +96 -0
  154. package/dist/src/cli/utils/viewer.js.map +7 -0
  155. package/dist/src/core/config/config-manager.js +398 -0
  156. package/dist/src/core/config/config-manager.js.map +7 -0
  157. package/dist/src/core/config/feature-flags.js +76 -0
  158. package/dist/src/core/config/feature-flags.js.map +7 -0
  159. package/dist/src/core/config/storage-config.js +115 -0
  160. package/dist/src/core/config/storage-config.js.map +7 -0
  161. package/dist/src/core/config/types.js +144 -0
  162. package/dist/src/core/config/types.js.map +7 -0
  163. package/dist/src/core/context/auto-context.js +80 -0
  164. package/dist/src/core/context/auto-context.js.map +7 -0
  165. package/dist/src/core/context/dual-stack-manager.js +870 -0
  166. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  167. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  168. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  169. package/dist/src/core/context/frame-database.js +479 -0
  170. package/dist/src/core/context/frame-database.js.map +7 -0
  171. package/dist/src/core/context/frame-digest.js +250 -0
  172. package/dist/src/core/context/frame-digest.js.map +7 -0
  173. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  174. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  175. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  176. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  177. package/dist/src/core/context/frame-recovery.js +302 -0
  178. package/dist/src/core/context/frame-recovery.js.map +7 -0
  179. package/dist/src/core/context/frame-stack.js +314 -0
  180. package/dist/src/core/context/frame-stack.js.map +7 -0
  181. package/dist/src/core/context/frame-types.js +5 -0
  182. package/dist/src/core/context/frame-types.js.map +7 -0
  183. package/dist/src/core/context/index.js +25 -0
  184. package/dist/src/core/context/index.js.map +7 -0
  185. package/dist/src/core/context/permission-manager.js +185 -0
  186. package/dist/src/core/context/permission-manager.js.map +7 -0
  187. package/dist/src/core/context/recursive-context-manager.js +592 -0
  188. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  189. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  190. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  191. package/dist/src/core/context/shared-context-layer.js +621 -0
  192. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  193. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  194. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  195. package/dist/src/core/context/validation.js +130 -0
  196. package/dist/src/core/context/validation.js.map +7 -0
  197. package/dist/src/core/database/batch-operations.js +384 -0
  198. package/dist/src/core/database/batch-operations.js.map +7 -0
  199. package/dist/src/core/database/connection-pool.js +330 -0
  200. package/dist/src/core/database/connection-pool.js.map +7 -0
  201. package/dist/src/core/database/database-adapter.js +60 -0
  202. package/dist/src/core/database/database-adapter.js.map +7 -0
  203. package/dist/src/core/database/migration-manager.js +614 -0
  204. package/dist/src/core/database/migration-manager.js.map +7 -0
  205. package/dist/src/core/database/query-cache.js +298 -0
  206. package/dist/src/core/database/query-cache.js.map +7 -0
  207. package/dist/src/core/database/query-router.js +430 -0
  208. package/dist/src/core/database/query-router.js.map +7 -0
  209. package/dist/src/core/database/sqlite-adapter.js +738 -0
  210. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  211. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  212. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  213. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  214. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  215. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  216. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  217. package/dist/src/core/digest/index.js +9 -0
  218. package/dist/src/core/digest/index.js.map +7 -0
  219. package/dist/src/core/digest/types.js +25 -0
  220. package/dist/src/core/digest/types.js.map +7 -0
  221. package/dist/src/core/errors/error-utils.js +208 -0
  222. package/dist/src/core/errors/error-utils.js.map +7 -0
  223. package/dist/src/core/errors/index.js +521 -0
  224. package/dist/src/core/errors/index.js.map +7 -0
  225. package/dist/src/core/errors/recovery.js +269 -0
  226. package/dist/src/core/errors/recovery.js.map +7 -0
  227. package/dist/src/core/execution/parallel-executor.js +258 -0
  228. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  229. package/dist/src/core/frame/workflow-templates.js +319 -0
  230. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  231. package/dist/src/core/merge/conflict-detector.js +431 -0
  232. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  233. package/dist/src/core/merge/index.js +9 -0
  234. package/dist/src/core/merge/index.js.map +7 -0
  235. package/dist/src/core/merge/resolution-engine.js +558 -0
  236. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  237. package/dist/src/core/merge/stack-diff.js +532 -0
  238. package/dist/src/core/merge/stack-diff.js.map +7 -0
  239. package/dist/src/core/merge/types.js +5 -0
  240. package/dist/src/core/merge/types.js.map +7 -0
  241. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  242. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  243. package/dist/src/core/models/fallback-monitor.js +232 -0
  244. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  245. package/dist/src/core/models/model-router.js +340 -0
  246. package/dist/src/core/models/model-router.js.map +7 -0
  247. package/dist/src/core/monitoring/error-handler.js +49 -0
  248. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  249. package/dist/src/core/monitoring/logger.js +202 -0
  250. package/dist/src/core/monitoring/logger.js.map +7 -0
  251. package/dist/src/core/monitoring/metrics.js +172 -0
  252. package/dist/src/core/monitoring/metrics.js.map +7 -0
  253. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  254. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  255. package/dist/src/core/monitoring/session-monitor.js +300 -0
  256. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  257. package/dist/src/core/performance/context-cache.js +273 -0
  258. package/dist/src/core/performance/context-cache.js.map +7 -0
  259. package/dist/src/core/performance/index.js +11 -0
  260. package/dist/src/core/performance/index.js.map +7 -0
  261. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  262. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  263. package/dist/src/core/performance/monitor.js +221 -0
  264. package/dist/src/core/performance/monitor.js.map +7 -0
  265. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  266. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  267. package/dist/src/core/performance/performance-benchmark.js +277 -0
  268. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  269. package/dist/src/core/performance/performance-profiler.js +370 -0
  270. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  271. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  272. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  273. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  274. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  275. package/dist/src/core/projects/project-isolation.js +201 -0
  276. package/dist/src/core/projects/project-isolation.js.map +7 -0
  277. package/dist/src/core/projects/project-manager.js +697 -0
  278. package/dist/src/core/projects/project-manager.js.map +7 -0
  279. package/dist/src/core/query/query-parser.js +370 -0
  280. package/dist/src/core/query/query-parser.js.map +7 -0
  281. package/dist/src/core/query/query-templates.js +321 -0
  282. package/dist/src/core/query/query-templates.js.map +7 -0
  283. package/dist/src/core/retrieval/context-retriever.js +479 -0
  284. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  285. package/dist/src/core/retrieval/index.js +8 -0
  286. package/dist/src/core/retrieval/index.js.map +7 -0
  287. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  288. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  289. package/dist/src/core/retrieval/llm-provider.js +151 -0
  290. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  291. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  292. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  293. package/dist/src/core/retrieval/summary-generator.js +589 -0
  294. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  295. package/dist/src/core/retrieval/types.js +21 -0
  296. package/dist/src/core/retrieval/types.js.map +7 -0
  297. package/dist/src/core/security/index.js +35 -0
  298. package/dist/src/core/security/index.js.map +7 -0
  299. package/dist/src/core/security/input-sanitizer.js +321 -0
  300. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  301. package/dist/src/core/session/clear-survival.js +465 -0
  302. package/dist/src/core/session/clear-survival.js.map +7 -0
  303. package/dist/src/core/session/enhanced-handoff.js +792 -0
  304. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  305. package/dist/src/core/session/handoff-generator.js +343 -0
  306. package/dist/src/core/session/handoff-generator.js.map +7 -0
  307. package/dist/src/core/session/index.js +15 -0
  308. package/dist/src/core/session/index.js.map +7 -0
  309. package/dist/src/core/session/session-manager.js +347 -0
  310. package/dist/src/core/session/session-manager.js.map +7 -0
  311. package/dist/src/core/skills/index.js +7 -0
  312. package/dist/src/core/skills/index.js.map +7 -0
  313. package/dist/src/core/skills/skill-storage.js +764 -0
  314. package/dist/src/core/skills/skill-storage.js.map +7 -0
  315. package/dist/src/core/skills/types.js +193 -0
  316. package/dist/src/core/skills/types.js.map +7 -0
  317. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  318. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  319. package/dist/src/core/storage/infinite-storage.js +510 -0
  320. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  321. package/dist/src/core/storage/remote-storage.js +489 -0
  322. package/dist/src/core/storage/remote-storage.js.map +7 -0
  323. package/dist/src/core/storage/two-tier-storage.js +766 -0
  324. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  325. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  326. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  327. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  328. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  329. package/dist/src/core/trace/debug-trace.js +417 -0
  330. package/dist/src/core/trace/debug-trace.js.map +7 -0
  331. package/dist/src/core/trace/index.js +109 -0
  332. package/dist/src/core/trace/index.js.map +7 -0
  333. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  334. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  335. package/dist/src/core/trace/trace-detector.js +528 -0
  336. package/dist/src/core/trace/trace-detector.js.map +7 -0
  337. package/dist/src/core/trace/trace-store.js +345 -0
  338. package/dist/src/core/trace/trace-store.js.map +7 -0
  339. package/dist/src/core/trace/types.js +77 -0
  340. package/dist/src/core/trace/types.js.map +7 -0
  341. package/dist/src/core/types.js +5 -0
  342. package/dist/src/core/types.js.map +7 -0
  343. package/dist/src/core/utils/async-mutex.js +114 -0
  344. package/dist/src/core/utils/async-mutex.js.map +7 -0
  345. package/dist/src/core/utils/compression.js +83 -0
  346. package/dist/src/core/utils/compression.js.map +7 -0
  347. package/dist/src/core/utils/update-checker.js +218 -0
  348. package/dist/src/core/utils/update-checker.js.map +7 -0
  349. package/dist/src/core/worktree/worktree-manager.js +465 -0
  350. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  351. package/dist/src/daemon/daemon-config.js +149 -0
  352. package/dist/src/daemon/daemon-config.js.map +7 -0
  353. package/dist/src/daemon/services/context-service.js +122 -0
  354. package/dist/src/daemon/services/context-service.js.map +7 -0
  355. package/dist/src/daemon/services/linear-service.js +136 -0
  356. package/dist/src/daemon/services/linear-service.js.map +7 -0
  357. package/dist/src/daemon/session-daemon.js +312 -0
  358. package/dist/src/daemon/session-daemon.js.map +7 -0
  359. package/dist/src/daemon/unified-daemon.js +276 -0
  360. package/dist/src/daemon/unified-daemon.js.map +7 -0
  361. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  362. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  363. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  364. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  365. package/dist/src/features/analytics/index.js +18 -0
  366. package/dist/src/features/analytics/index.js.map +7 -0
  367. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  368. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  369. package/dist/src/features/analytics/types/metrics.js +5 -0
  370. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  371. package/dist/src/features/browser/browser-mcp.js +492 -0
  372. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  373. package/dist/src/features/sweep/index.js +20 -0
  374. package/dist/src/features/sweep/index.js.map +7 -0
  375. package/dist/src/features/sweep/prediction-client.js +155 -0
  376. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  377. package/dist/src/features/sweep/prompt-builder.js +85 -0
  378. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  379. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  380. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  381. package/dist/src/features/sweep/state-watcher.js +87 -0
  382. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  383. package/dist/src/features/sweep/status-bar.js +88 -0
  384. package/dist/src/features/sweep/status-bar.js.map +7 -0
  385. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  386. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  387. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  388. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  389. package/dist/src/features/sweep/types.js +18 -0
  390. package/dist/src/features/sweep/types.js.map +7 -0
  391. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  392. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  393. package/dist/src/features/tasks/task-aware-context.js +410 -0
  394. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  395. package/dist/src/features/tui/simple-monitor.js +116 -0
  396. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  397. package/dist/src/features/tui/swarm-monitor.js +648 -0
  398. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  399. package/dist/src/features/web/client/stores/task-store.js +26 -0
  400. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  401. package/dist/src/features/web/server/index.js +194 -0
  402. package/dist/src/features/web/server/index.js.map +7 -0
  403. package/dist/src/hooks/auto-background.js +151 -0
  404. package/dist/src/hooks/auto-background.js.map +7 -0
  405. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  406. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  407. package/dist/src/hooks/config.js +150 -0
  408. package/dist/src/hooks/config.js.map +7 -0
  409. package/dist/src/hooks/daemon.js +364 -0
  410. package/dist/src/hooks/daemon.js.map +7 -0
  411. package/dist/src/hooks/events.js +58 -0
  412. package/dist/src/hooks/events.js.map +7 -0
  413. package/dist/src/hooks/index.js +12 -0
  414. package/dist/src/hooks/index.js.map +7 -0
  415. package/dist/src/hooks/linear-task-picker.js +186 -0
  416. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  417. package/dist/src/hooks/schemas.js +197 -0
  418. package/dist/src/hooks/schemas.js.map +7 -0
  419. package/dist/src/hooks/secure-fs.js +49 -0
  420. package/dist/src/hooks/secure-fs.js.map +7 -0
  421. package/dist/src/hooks/security-logger.js +155 -0
  422. package/dist/src/hooks/security-logger.js.map +7 -0
  423. package/dist/src/hooks/session-summary.js +222 -0
  424. package/dist/src/hooks/session-summary.js.map +7 -0
  425. package/dist/src/hooks/sms-action-runner.js +371 -0
  426. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  427. package/dist/src/hooks/sms-notify.js +506 -0
  428. package/dist/src/hooks/sms-notify.js.map +7 -0
  429. package/dist/src/hooks/sms-watcher.js +93 -0
  430. package/dist/src/hooks/sms-watcher.js.map +7 -0
  431. package/dist/src/hooks/sms-webhook.js +555 -0
  432. package/dist/src/hooks/sms-webhook.js.map +7 -0
  433. package/dist/src/hooks/whatsapp-commands.js +479 -0
  434. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  435. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  436. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  437. package/dist/src/hooks/whatsapp-sync.js +409 -0
  438. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  439. package/dist/src/index.js +25 -0
  440. package/dist/src/index.js.map +7 -0
  441. package/dist/src/integrations/anthropic/client.js +263 -0
  442. package/dist/src/integrations/anthropic/client.js.map +7 -0
  443. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  444. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  445. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  446. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  447. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  448. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  449. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  450. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  451. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  452. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  453. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  454. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  455. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  456. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  457. package/dist/src/integrations/linear/auth.js +337 -0
  458. package/dist/src/integrations/linear/auth.js.map +7 -0
  459. package/dist/src/integrations/linear/auto-sync.js +258 -0
  460. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  461. package/dist/src/integrations/linear/client.js +634 -0
  462. package/dist/src/integrations/linear/client.js.map +7 -0
  463. package/dist/src/integrations/linear/config.js +130 -0
  464. package/dist/src/integrations/linear/config.js.map +7 -0
  465. package/dist/src/integrations/linear/migration.js +361 -0
  466. package/dist/src/integrations/linear/migration.js.map +7 -0
  467. package/dist/src/integrations/linear/oauth-server.js +454 -0
  468. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  469. package/dist/src/integrations/linear/rest-client.js +213 -0
  470. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  471. package/dist/src/integrations/linear/sync-manager.js +236 -0
  472. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  473. package/dist/src/integrations/linear/sync-service.js +231 -0
  474. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  475. package/dist/src/integrations/linear/sync.js +782 -0
  476. package/dist/src/integrations/linear/sync.js.map +7 -0
  477. package/dist/src/integrations/linear/types.js +5 -0
  478. package/dist/src/integrations/linear/types.js.map +7 -0
  479. package/dist/src/integrations/linear/unified-sync.js +589 -0
  480. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  481. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  482. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  483. package/dist/src/integrations/linear/webhook-server.js +218 -0
  484. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  485. package/dist/src/integrations/linear/webhook.js +291 -0
  486. package/dist/src/integrations/linear/webhook.js.map +7 -0
  487. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  488. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  489. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  490. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  491. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  492. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  493. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  494. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  495. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  496. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  497. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  498. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  499. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  500. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  501. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  502. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  503. package/dist/src/integrations/mcp/index.js +23 -0
  504. package/dist/src/integrations/mcp/index.js.map +7 -0
  505. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  506. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  507. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  508. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  509. package/dist/src/integrations/mcp/remote-server.js +682 -0
  510. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  511. package/dist/src/integrations/mcp/schemas.js +147 -0
  512. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  513. package/dist/src/integrations/mcp/server.js +1975 -0
  514. package/dist/src/integrations/mcp/server.js.map +7 -0
  515. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  516. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  517. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  518. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  519. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  520. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  521. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  522. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  523. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  524. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  525. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  526. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  527. package/dist/src/integrations/ralph/index.js +18 -0
  528. package/dist/src/integrations/ralph/index.js.map +7 -0
  529. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  530. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  531. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  532. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  533. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  534. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  535. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  536. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  537. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  538. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  539. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  540. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  541. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  542. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  543. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  544. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  545. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  546. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  547. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  548. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  549. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  550. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  551. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  552. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  553. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  554. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  555. package/dist/src/integrations/ralph/types.js +5 -0
  556. package/dist/src/integrations/ralph/types.js.map +7 -0
  557. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  558. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  559. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  560. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  561. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  562. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  563. package/dist/src/models/user.model.js +358 -0
  564. package/dist/src/models/user.model.js.map +7 -0
  565. package/dist/src/servers/production/auth-middleware.js +528 -0
  566. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  567. package/dist/src/services/config-service.js +65 -0
  568. package/dist/src/services/config-service.js.map +7 -0
  569. package/dist/src/services/context-service.js +194 -0
  570. package/dist/src/services/context-service.js.map +7 -0
  571. package/dist/src/skills/api-discovery.js +354 -0
  572. package/dist/src/skills/api-discovery.js.map +7 -0
  573. package/dist/src/skills/api-skill.js +475 -0
  574. package/dist/src/skills/api-skill.js.map +7 -0
  575. package/dist/src/skills/claude-skills.js +1061 -0
  576. package/dist/src/skills/claude-skills.js.map +7 -0
  577. package/dist/src/skills/dashboard-launcher.js +216 -0
  578. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  579. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  580. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  581. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  582. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  583. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  584. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  585. package/dist/src/types/task.js +5 -0
  586. package/dist/src/types/task.js.map +7 -0
  587. package/dist/src/utils/env.js +50 -0
  588. package/dist/src/utils/env.js.map +7 -0
  589. package/dist/src/utils/formatting.js +62 -0
  590. package/dist/src/utils/formatting.js.map +7 -0
  591. package/dist/src/utils/process-cleanup.js +136 -0
  592. package/dist/src/utils/process-cleanup.js.map +7 -0
  593. package/package.json +3 -3
  594. package/scripts/initialize.ts +16 -7
  595. package/scripts/install.sh +14 -62
  596. package/scripts/status.ts +111 -46
@@ -0,0 +1,536 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath as __fileURLToPath } from 'url';
3
+ import { dirname as __pathDirname } from 'path';
4
+ const __filename = __fileURLToPath(import.meta.url);
5
+ const __dirname = __pathDirname(__filename);
6
+ import inquirer from "inquirer";
7
+ import chalk from "chalk";
8
+ import { homedir } from "os";
9
+ import { join } from "path";
10
+ import { existsSync, mkdirSync, writeFileSync } from "fs";
11
+ import { execFileSync } from "child_process";
12
+ import { WorktreeManager } from "../../core/worktree/worktree-manager.js";
13
+ import { ProjectManager } from "../../core/projects/project-manager.js";
14
+ import { logger } from "../../core/monitoring/logger.js";
15
+ function registerOnboardingCommand(program) {
16
+ program.command("onboard").alias("setup").description("Interactive setup for StackMemory").option("--reset", "Reset all configurations and start fresh").action(async (options) => {
17
+ console.log(chalk.cyan("\n\u{1F680} Welcome to StackMemory Setup!\n"));
18
+ const configPath = join(homedir(), ".stackmemory");
19
+ if (existsSync(configPath) && !options.reset) {
20
+ const { proceed } = await inquirer.prompt([
21
+ {
22
+ type: "confirm",
23
+ name: "proceed",
24
+ message: "StackMemory is already configured. Do you want to reconfigure?",
25
+ default: false
26
+ }
27
+ ]);
28
+ if (!proceed) {
29
+ console.log(chalk.yellow("\nSetup cancelled."));
30
+ return;
31
+ }
32
+ }
33
+ try {
34
+ const config = await runOnboarding();
35
+ await applyConfiguration(config);
36
+ console.log(
37
+ chalk.green("\n\u2705 StackMemory setup completed successfully!\n")
38
+ );
39
+ showNextSteps(config);
40
+ } catch (error) {
41
+ logger.error("Onboarding failed", error);
42
+ console.error(
43
+ chalk.red("\n\u274C Setup failed:"),
44
+ error.message
45
+ );
46
+ process.exit(1);
47
+ }
48
+ });
49
+ }
50
+ async function runOnboarding() {
51
+ const { setupType } = await inquirer.prompt([
52
+ {
53
+ type: "list",
54
+ name: "setupType",
55
+ message: "Choose your setup type:",
56
+ choices: [
57
+ { name: "Basic (Recommended for most users)", value: "basic" },
58
+ { name: "Advanced (Full customization)", value: "advanced" }
59
+ ],
60
+ default: "basic"
61
+ }
62
+ ]);
63
+ let config = {
64
+ setupType,
65
+ enableWorktrees: false,
66
+ worktreeIsolation: true,
67
+ enableProjects: true,
68
+ scanProjects: false,
69
+ enableLinear: false,
70
+ enableAnalytics: true,
71
+ defaultContextPath: join(homedir(), ".stackmemory"),
72
+ storageMode: "local"
73
+ };
74
+ const { storageMode } = await inquirer.prompt([
75
+ {
76
+ type: "list",
77
+ name: "storageMode",
78
+ message: "Where should StackMemory store data?",
79
+ choices: [
80
+ { name: "Local (free, SQLite in ~/.stackmemory)", value: "local" },
81
+ { name: "Hosted (paid, managed Postgres)", value: "hosted" }
82
+ ],
83
+ default: "local"
84
+ }
85
+ ]);
86
+ config.storageMode = storageMode;
87
+ if (storageMode === "hosted") {
88
+ const { hasAccount } = await inquirer.prompt([
89
+ {
90
+ type: "confirm",
91
+ name: "hasAccount",
92
+ message: "Do you already have a hosted account & connection string?",
93
+ default: false
94
+ }
95
+ ]);
96
+ if (!hasAccount) {
97
+ try {
98
+ const signupUrl = "https://stackmemory.ai/hosted";
99
+ console.log(chalk.gray(`Opening signup page: ${signupUrl}`));
100
+ const mod = await import("open");
101
+ await mod.default(signupUrl);
102
+ } catch (e) {
103
+ console.log(chalk.yellow("Could not open browser automatically. Please sign up and obtain your DATABASE_URL."));
104
+ }
105
+ }
106
+ const { databaseUrl } = await inquirer.prompt([
107
+ {
108
+ type: "password",
109
+ name: "databaseUrl",
110
+ message: "Paste your DATABASE_URL (postgres://...)",
111
+ validate: (input) => input.startsWith("postgres://") || input.startsWith("postgresql://") ? true : "Must start with postgres:// or postgresql://"
112
+ }
113
+ ]);
114
+ config.databaseUrl = databaseUrl;
115
+ }
116
+ if (setupType === "basic") {
117
+ const basicAnswers = await inquirer.prompt([
118
+ {
119
+ type: "confirm",
120
+ name: "enableWorktrees",
121
+ message: "Enable Git worktree support? (Recommended for multi-branch workflows)",
122
+ default: false
123
+ },
124
+ {
125
+ type: "confirm",
126
+ name: "scanProjects",
127
+ message: "Scan and organize your existing projects?",
128
+ default: true
129
+ },
130
+ {
131
+ type: "confirm",
132
+ name: "enableLinear",
133
+ message: "Connect to Linear for task management?",
134
+ default: false
135
+ }
136
+ ]);
137
+ config = { ...config, ...basicAnswers };
138
+ if (basicAnswers.enableLinear) {
139
+ const { linearApiKey } = await inquirer.prompt([
140
+ {
141
+ type: "password",
142
+ name: "linearApiKey",
143
+ message: "Enter your Linear API key:",
144
+ validate: (input) => input.length > 0 || "API key is required"
145
+ }
146
+ ]);
147
+ config.linearApiKey = linearApiKey;
148
+ }
149
+ } else {
150
+ const advancedAnswers = await inquirer.prompt([
151
+ {
152
+ type: "confirm",
153
+ name: "enableWorktrees",
154
+ message: "Enable Git worktree support?",
155
+ default: false
156
+ }
157
+ ]);
158
+ if (advancedAnswers.enableWorktrees) {
159
+ const worktreeAnswers = await inquirer.prompt([
160
+ {
161
+ type: "confirm",
162
+ name: "worktreeIsolation",
163
+ message: "Isolate contexts between worktrees? (Recommended)",
164
+ default: true
165
+ },
166
+ {
167
+ type: "confirm",
168
+ name: "autoDetect",
169
+ message: "Auto-detect worktrees when switching directories?",
170
+ default: true
171
+ },
172
+ {
173
+ type: "confirm",
174
+ name: "shareGlobal",
175
+ message: "Share global context across worktrees?",
176
+ default: false
177
+ },
178
+ {
179
+ type: "number",
180
+ name: "syncInterval",
181
+ message: "Context sync interval in minutes (0 to disable):",
182
+ default: 15,
183
+ validate: (input) => input >= 0 || "Must be 0 or positive"
184
+ }
185
+ ]);
186
+ config = { ...config, ...advancedAnswers, ...worktreeAnswers };
187
+ }
188
+ const projectAnswers = await inquirer.prompt([
189
+ {
190
+ type: "confirm",
191
+ name: "enableProjects",
192
+ message: "Enable automatic project management?",
193
+ default: true
194
+ }
195
+ ]);
196
+ if (projectAnswers.enableProjects) {
197
+ const projectDetailAnswers = await inquirer.prompt([
198
+ {
199
+ type: "confirm",
200
+ name: "scanProjects",
201
+ message: "Scan for existing projects now?",
202
+ default: true
203
+ },
204
+ {
205
+ type: "checkbox",
206
+ name: "scanPaths",
207
+ message: "Select directories to scan:",
208
+ choices: [
209
+ { name: "~/Dev", value: join(homedir(), "Dev"), checked: true },
210
+ { name: "~/dev", value: join(homedir(), "dev"), checked: true },
211
+ {
212
+ name: "~/Projects",
213
+ value: join(homedir(), "Projects"),
214
+ checked: true
215
+ },
216
+ {
217
+ name: "~/projects",
218
+ value: join(homedir(), "projects"),
219
+ checked: true
220
+ },
221
+ { name: "~/Work", value: join(homedir(), "Work"), checked: false },
222
+ { name: "~/code", value: join(homedir(), "code"), checked: true },
223
+ {
224
+ name: "~/Documents/GitHub",
225
+ value: join(homedir(), "Documents/GitHub"),
226
+ checked: false
227
+ }
228
+ ],
229
+ when: () => projectDetailAnswers.scanProjects
230
+ }
231
+ ]);
232
+ config = { ...config, ...projectAnswers, ...projectDetailAnswers };
233
+ }
234
+ const integrationAnswers = await inquirer.prompt([
235
+ {
236
+ type: "confirm",
237
+ name: "enableLinear",
238
+ message: "Enable Linear integration?",
239
+ default: false
240
+ },
241
+ {
242
+ type: "password",
243
+ name: "linearApiKey",
244
+ message: "Linear API key:",
245
+ when: (answers) => answers.enableLinear,
246
+ validate: (input) => input.length > 0 || "API key is required"
247
+ },
248
+ {
249
+ type: "confirm",
250
+ name: "enableAnalytics",
251
+ message: "Enable usage analytics? (Local only)",
252
+ default: true
253
+ },
254
+ {
255
+ type: "input",
256
+ name: "defaultContextPath",
257
+ message: "Default context storage path:",
258
+ default: join(homedir(), ".stackmemory"),
259
+ validate: (input) => input.length > 0 || "Path is required"
260
+ }
261
+ ]);
262
+ config = { ...config, ...integrationAnswers };
263
+ }
264
+ return config;
265
+ }
266
+ async function applyConfiguration(config) {
267
+ const configPath = join(homedir(), ".stackmemory");
268
+ console.log(chalk.gray("\nCreating directory structure..."));
269
+ const dirs = [
270
+ configPath,
271
+ join(configPath, "contexts"),
272
+ join(configPath, "projects"),
273
+ join(configPath, "worktrees"),
274
+ join(configPath, "bin"),
275
+ join(configPath, "logs"),
276
+ join(configPath, "analytics")
277
+ ];
278
+ for (const dir of dirs) {
279
+ if (!existsSync(dir)) {
280
+ mkdirSync(dir, { recursive: true });
281
+ }
282
+ }
283
+ if (config.enableWorktrees) {
284
+ console.log(chalk.gray("Configuring worktree support..."));
285
+ const worktreeManager = WorktreeManager.getInstance();
286
+ worktreeManager.saveConfig({
287
+ enabled: true,
288
+ autoDetect: true,
289
+ isolateContexts: config.worktreeIsolation,
290
+ shareGlobalContext: false,
291
+ syncInterval: 15
292
+ });
293
+ const worktrees = worktreeManager.detectWorktrees();
294
+ if (worktrees.length > 0) {
295
+ console.log(chalk.green(` \u2713 Found ${worktrees.length} worktree(s)`));
296
+ worktrees.forEach((wt) => {
297
+ console.log(chalk.gray(` - ${wt.branch} at ${wt.path}`));
298
+ });
299
+ }
300
+ }
301
+ if (config.enableProjects && config.scanProjects) {
302
+ console.log(chalk.gray("Scanning for projects..."));
303
+ const projectManager = ProjectManager.getInstance();
304
+ const scanPaths = config.scanPaths || [
305
+ join(homedir(), "Dev"),
306
+ join(homedir(), "dev"),
307
+ join(homedir(), "Projects"),
308
+ join(homedir(), "projects"),
309
+ join(homedir(), "code")
310
+ ];
311
+ await projectManager.scanAndCategorizeAllProjects(
312
+ scanPaths.filter((p) => existsSync(p))
313
+ );
314
+ const projects = projectManager.getAllProjects();
315
+ console.log(chalk.green(` \u2713 Found ${projects.length} project(s)`));
316
+ const byType = {};
317
+ projects.forEach((p) => {
318
+ byType[p.accountType] = (byType[p.accountType] || 0) + 1;
319
+ });
320
+ Object.entries(byType).forEach(([type, count]) => {
321
+ console.log(chalk.gray(` - ${type}: ${count} project(s)`));
322
+ });
323
+ }
324
+ if (config.enableLinear && config.linearApiKey) {
325
+ console.log(chalk.gray("Configuring Linear integration..."));
326
+ const linearConfig = {
327
+ apiKey: config.linearApiKey,
328
+ autoSync: true,
329
+ syncInterval: 3e5
330
+ // 5 minutes
331
+ };
332
+ writeFileSync(
333
+ join(configPath, "linear-config.json"),
334
+ JSON.stringify(linearConfig, null, 2)
335
+ );
336
+ console.log(chalk.green(" \u2713 Linear configured"));
337
+ }
338
+ const mainConfig = {
339
+ version: "1.0.0",
340
+ setupCompleted: (/* @__PURE__ */ new Date()).toISOString(),
341
+ features: {
342
+ worktrees: config.enableWorktrees,
343
+ projects: config.enableProjects,
344
+ linear: config.enableLinear,
345
+ analytics: config.enableAnalytics
346
+ },
347
+ paths: {
348
+ default: config.defaultContextPath
349
+ },
350
+ database: {
351
+ mode: config.storageMode,
352
+ ...config.databaseUrl ? { url: config.databaseUrl } : {}
353
+ }
354
+ };
355
+ writeFileSync(
356
+ join(configPath, "config.json"),
357
+ JSON.stringify(mainConfig, null, 2)
358
+ );
359
+ if (config.storageMode === "hosted" && config.databaseUrl) {
360
+ try {
361
+ const envFile = join(configPath, "railway.env");
362
+ writeFileSync(envFile, `# StackMemory hosted DB
363
+ DATABASE_URL=${config.databaseUrl}
364
+ `);
365
+ console.log(chalk.green(" \u2713 Saved hosted DB settings to ~/.stackmemory/railway.env"));
366
+ console.log(chalk.gray(" Tip: export DATABASE_URL from this file in your shell profile."));
367
+ } catch (e) {
368
+ console.log(chalk.yellow(" \u26A0 Could not write hosted DB env file"));
369
+ }
370
+ }
371
+ const binPath = "/usr/local/bin/claude-sm";
372
+ const sourcePath = join(configPath, "bin", "stackmemory");
373
+ try {
374
+ const wrapperScript = `#!/bin/bash
375
+ # StackMemory CLI wrapper with worktree support
376
+ CURRENT_DIR=$(pwd)
377
+
378
+ # Auto-detect worktree if enabled
379
+ if [ -f ~/.stackmemory/worktree-config.json ]; then
380
+ WORKTREE_ENABLED=$(grep '"enabled": true' ~/.stackmemory/worktree-config.json)
381
+ if [ ! -z "$WORKTREE_ENABLED" ]; then
382
+ # Check if we're in a git worktree
383
+ if git worktree list &>/dev/null; then
384
+ export SM_WORKTREE_PATH="$CURRENT_DIR"
385
+ fi
386
+ fi
387
+ fi
388
+
389
+ # Run StackMemory with context
390
+ exec stackmemory "$@"
391
+ `;
392
+ writeFileSync(sourcePath, wrapperScript);
393
+ execFileSync("chmod", ["+x", sourcePath]);
394
+ if (!existsSync(binPath)) {
395
+ execFileSync("ln", ["-s", sourcePath, binPath]);
396
+ console.log(chalk.green(" \u2713 Created claude-sm command"));
397
+ }
398
+ } catch (error) {
399
+ console.log(
400
+ chalk.yellow(" \u26A0 Could not create claude-sm symlink (may need sudo)")
401
+ );
402
+ }
403
+ const codexBinPath = "/usr/local/bin/codex-sm";
404
+ const codexSourcePath = join(configPath, "bin", "codex-sm");
405
+ try {
406
+ const codexWrapper = `#!/bin/bash
407
+ # Codex CLI wrapper with StackMemory integration
408
+ # Usage: codex-sm [--auto-sync] [--sync-interval=MINUTES] [args...]
409
+
410
+ # Flags
411
+ AUTO_SYNC=false
412
+ SYNC_INTERVAL=5
413
+ for arg in "$@"; do
414
+ case $arg in
415
+ --auto-sync)
416
+ AUTO_SYNC=true
417
+ shift
418
+ ;;
419
+ --sync-interval=*)
420
+ SYNC_INTERVAL="\${arg#*=}"
421
+ shift
422
+ ;;
423
+ esac
424
+ done
425
+
426
+ # Auto-initialize StackMemory if in git repo without it
427
+ if [ -d ".git" ] && [ ! -d ".stackmemory" ]; then
428
+ echo "\u{1F4E6} Initializing StackMemory for this project..."
429
+ stackmemory init --silent 2>/dev/null || true
430
+ fi
431
+
432
+ # Load existing context if available
433
+ if [ -d ".stackmemory" ]; then
434
+ echo "\u{1F9E0} Loading StackMemory context..."
435
+ stackmemory status --brief 2>/dev/null || true
436
+ fi
437
+
438
+ # Start Linear auto-sync in background if requested
439
+ SYNC_PID=""
440
+ if [ "$AUTO_SYNC" = true ] && [ -n "$LINEAR_API_KEY" ]; then
441
+ echo "\u{1F504} Starting Linear auto-sync (${SYNC_INTERVAL}min intervals)..."
442
+ (
443
+ while true; do
444
+ sleep $((SYNC_INTERVAL * 60))
445
+ if [ -d ".stackmemory" ]; then
446
+ stackmemory linear sync --quiet 2>/dev/null || true
447
+ fi
448
+ done
449
+ ) &
450
+ SYNC_PID=$!
451
+ fi
452
+
453
+ cleanup() {
454
+ echo ""
455
+ echo "\u{1F4DD} Saving StackMemory context..."
456
+
457
+ # Kill auto-sync if running
458
+ if [ -n "$SYNC_PID" ] && kill -0 $SYNC_PID 2>/dev/null; then
459
+ echo "\u{1F6D1} Stopping auto-sync..."
460
+ kill $SYNC_PID 2>/dev/null || true
461
+ fi
462
+
463
+ # Save project status and final sync
464
+ if [ -d ".stackmemory" ]; then
465
+ stackmemory status 2>/dev/null
466
+ if [ -n "$LINEAR_API_KEY" ]; then
467
+ echo "\u{1F504} Final Linear sync..."
468
+ stackmemory linear sync 2>/dev/null
469
+ fi
470
+ echo "\u2705 StackMemory context saved"
471
+ fi
472
+ }
473
+
474
+ trap cleanup EXIT INT TERM
475
+
476
+ # Run Codex CLI
477
+ if command -v codex &> /dev/null; then
478
+ codex "$@"
479
+ elif command -v codex-cli &> /dev/null; then
480
+ codex-cli "$@"
481
+ else
482
+ echo "\u274C Codex CLI not found. Please install it first."
483
+ echo " See: https://github.com/openai/codex-cli"
484
+ exit 1
485
+ fi
486
+ `;
487
+ writeFileSync(codexSourcePath, codexWrapper);
488
+ execFileSync("chmod", ["+x", codexSourcePath]);
489
+ if (!existsSync(codexBinPath)) {
490
+ execFileSync("ln", ["-s", codexSourcePath, codexBinPath]);
491
+ console.log(chalk.green(" \u2713 Created codex-sm command"));
492
+ }
493
+ } catch (error) {
494
+ console.log(
495
+ chalk.yellow(" \u26A0 Could not create codex-sm symlink (may need sudo)")
496
+ );
497
+ }
498
+ }
499
+ function showNextSteps(config) {
500
+ console.log(chalk.cyan("\u{1F389} Next Steps:\n"));
501
+ console.log("1. Initialize StackMemory in your project:");
502
+ console.log(chalk.gray(" cd your-project"));
503
+ console.log(chalk.gray(" stackmemory init\n"));
504
+ if (config.enableWorktrees) {
505
+ console.log("2. Create a new worktree:");
506
+ console.log(
507
+ chalk.gray(
508
+ " git worktree add -b feature/new-feature ../project-feature"
509
+ )
510
+ );
511
+ console.log(chalk.gray(" cd ../project-feature"));
512
+ console.log(
513
+ chalk.gray(
514
+ " stackmemory status # Isolated context for this worktree\n"
515
+ )
516
+ );
517
+ }
518
+ console.log("3. Use with Claude:");
519
+ console.log(chalk.gray(" claude-sm # Or use stackmemory directly\n"));
520
+ console.log("4. Use with Codex:");
521
+ console.log(chalk.gray(" codex-sm # Codex + StackMemory integration\n"));
522
+ if (config.enableLinear) {
523
+ console.log("5. Sync with Linear:");
524
+ console.log(chalk.gray(" stackmemory linear sync\n"));
525
+ }
526
+ console.log("For more help:");
527
+ console.log(chalk.gray(" stackmemory --help"));
528
+ console.log(chalk.gray(" stackmemory projects --help"));
529
+ if (config.enableWorktrees) {
530
+ console.log(chalk.gray(" stackmemory worktree --help"));
531
+ }
532
+ }
533
+ export {
534
+ registerOnboardingCommand
535
+ };
536
+ //# sourceMappingURL=onboard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/cli/commands/onboard.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * StackMemory Onboarding CLI\n * Interactive setup for new StackMemory installations\n */\n\nimport { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport { homedir } from 'os';\nimport { join } from 'path';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { execSync, execFileSync } from 'child_process';\nimport { WorktreeManager } from '../../core/worktree/worktree-manager.js';\nimport { ProjectManager } from '../../core/projects/project-manager.js';\nimport { logger } from '../../core/monitoring/logger.js';\n\ninterface OnboardingConfig {\n setupType: 'basic' | 'advanced';\n enableWorktrees: boolean;\n worktreeIsolation: boolean;\n enableProjects: boolean;\n scanProjects: boolean;\n enableLinear: boolean;\n linearApiKey?: string;\n enableAnalytics: boolean;\n defaultContextPath: string;\n storageMode: 'local' | 'hosted';\n databaseUrl?: string;\n}\n\nexport function registerOnboardingCommand(program: Command): void {\n program\n .command('onboard')\n .alias('setup')\n .description('Interactive setup for StackMemory')\n .option('--reset', 'Reset all configurations and start fresh')\n .action(async (options) => {\n console.log(chalk.cyan('\\n\uD83D\uDE80 Welcome to StackMemory Setup!\\n'));\n\n // Check if already configured\n const configPath = join(homedir(), '.stackmemory');\n if (existsSync(configPath) && !options.reset) {\n const { proceed } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message:\n 'StackMemory is already configured. Do you want to reconfigure?',\n default: false,\n },\n ]);\n\n if (!proceed) {\n console.log(chalk.yellow('\\nSetup cancelled.'));\n return;\n }\n }\n\n try {\n const config = await runOnboarding();\n await applyConfiguration(config);\n\n console.log(\n chalk.green('\\n\u2705 StackMemory setup completed successfully!\\n')\n );\n showNextSteps(config);\n } catch (error: unknown) {\n logger.error('Onboarding failed', error as Error);\n console.error(\n chalk.red('\\n\u274C Setup failed:'),\n (error as Error).message\n );\n process.exit(1);\n }\n });\n}\n\nasync function runOnboarding(): Promise<OnboardingConfig> {\n // Basic or Advanced Setup\n const { setupType } = await inquirer.prompt([\n {\n type: 'list',\n name: 'setupType',\n message: 'Choose your setup type:',\n choices: [\n { name: 'Basic (Recommended for most users)', value: 'basic' },\n { name: 'Advanced (Full customization)', value: 'advanced' },\n ],\n default: 'basic',\n },\n ]);\n\n let config: OnboardingConfig = {\n setupType,\n enableWorktrees: false,\n worktreeIsolation: true,\n enableProjects: true,\n scanProjects: false,\n enableLinear: false,\n enableAnalytics: true,\n defaultContextPath: join(homedir(), '.stackmemory'),\n storageMode: 'local',\n };\n\n // Choose storage mode\n const { storageMode } = await inquirer.prompt([\n {\n type: 'list',\n name: 'storageMode',\n message: 'Where should StackMemory store data?',\n choices: [\n { name: 'Local (free, SQLite in ~/.stackmemory)', value: 'local' },\n { name: 'Hosted (paid, managed Postgres)', value: 'hosted' },\n ],\n default: 'local',\n },\n ]);\n config.storageMode = storageMode;\n\n if (storageMode === 'hosted') {\n const { hasAccount } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'hasAccount',\n message: 'Do you already have a hosted account & connection string?',\n default: false,\n },\n ]);\n\n if (!hasAccount) {\n try {\n const signupUrl = 'https://stackmemory.ai/hosted';\n console.log(chalk.gray(`Opening signup page: ${signupUrl}`));\n // Lazy load open to avoid ES module issues\n const mod = await import('open');\n await mod.default(signupUrl);\n } catch (e) {\n console.log(chalk.yellow('Could not open browser automatically. Please sign up and obtain your DATABASE_URL.'));\n }\n }\n\n const { databaseUrl } = await inquirer.prompt([\n {\n type: 'password',\n name: 'databaseUrl',\n message: 'Paste your DATABASE_URL (postgres://...)',\n validate: (input: string) =>\n input.startsWith('postgres://') || input.startsWith('postgresql://')\n ? true\n : 'Must start with postgres:// or postgresql://',\n },\n ]);\n config.databaseUrl = databaseUrl;\n }\n\n if (setupType === 'basic') {\n // Basic setup with sensible defaults\n const basicAnswers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'enableWorktrees',\n message:\n 'Enable Git worktree support? (Recommended for multi-branch workflows)',\n default: false,\n },\n {\n type: 'confirm',\n name: 'scanProjects',\n message: 'Scan and organize your existing projects?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'enableLinear',\n message: 'Connect to Linear for task management?',\n default: false,\n },\n ]);\n\n config = { ...config, ...basicAnswers };\n\n if (basicAnswers.enableLinear) {\n const { linearApiKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'linearApiKey',\n message: 'Enter your Linear API key:',\n validate: (input: string) =>\n input.length > 0 || 'API key is required',\n },\n ]);\n config.linearApiKey = linearApiKey;\n }\n } else {\n // Advanced setup with all options\n const advancedAnswers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'enableWorktrees',\n message: 'Enable Git worktree support?',\n default: false,\n },\n ]);\n\n if (advancedAnswers.enableWorktrees) {\n const worktreeAnswers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'worktreeIsolation',\n message: 'Isolate contexts between worktrees? (Recommended)',\n default: true,\n },\n {\n type: 'confirm',\n name: 'autoDetect',\n message: 'Auto-detect worktrees when switching directories?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'shareGlobal',\n message: 'Share global context across worktrees?',\n default: false,\n },\n {\n type: 'number',\n name: 'syncInterval',\n message: 'Context sync interval in minutes (0 to disable):',\n default: 15,\n validate: (input: number) => input >= 0 || 'Must be 0 or positive',\n },\n ]);\n\n config = { ...config, ...advancedAnswers, ...worktreeAnswers };\n }\n\n const projectAnswers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'enableProjects',\n message: 'Enable automatic project management?',\n default: true,\n },\n ]);\n\n if (projectAnswers.enableProjects) {\n const projectDetailAnswers: any = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'scanProjects',\n message: 'Scan for existing projects now?',\n default: true,\n },\n {\n type: 'checkbox',\n name: 'scanPaths',\n message: 'Select directories to scan:',\n choices: [\n { name: '~/Dev', value: join(homedir(), 'Dev'), checked: true },\n { name: '~/dev', value: join(homedir(), 'dev'), checked: true },\n {\n name: '~/Projects',\n value: join(homedir(), 'Projects'),\n checked: true,\n },\n {\n name: '~/projects',\n value: join(homedir(), 'projects'),\n checked: true,\n },\n { name: '~/Work', value: join(homedir(), 'Work'), checked: false },\n { name: '~/code', value: join(homedir(), 'code'), checked: true },\n {\n name: '~/Documents/GitHub',\n value: join(homedir(), 'Documents/GitHub'),\n checked: false,\n },\n ],\n when: (): boolean => projectDetailAnswers.scanProjects,\n },\n ]);\n\n config = { ...config, ...projectAnswers, ...projectDetailAnswers };\n }\n\n const integrationAnswers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'enableLinear',\n message: 'Enable Linear integration?',\n default: false,\n },\n {\n type: 'password',\n name: 'linearApiKey',\n message: 'Linear API key:',\n when: (answers: any) => answers.enableLinear,\n validate: (input: string) => input.length > 0 || 'API key is required',\n },\n {\n type: 'confirm',\n name: 'enableAnalytics',\n message: 'Enable usage analytics? (Local only)',\n default: true,\n },\n {\n type: 'input',\n name: 'defaultContextPath',\n message: 'Default context storage path:',\n default: join(homedir(), '.stackmemory'),\n validate: (input: string) => input.length > 0 || 'Path is required',\n },\n ]);\n\n config = { ...config, ...integrationAnswers };\n }\n\n return config;\n}\n\nasync function applyConfiguration(config: OnboardingConfig): Promise<void> {\n const configPath = join(homedir(), '.stackmemory');\n\n // Create base directory structure\n console.log(chalk.gray('\\nCreating directory structure...'));\n const dirs = [\n configPath,\n join(configPath, 'contexts'),\n join(configPath, 'projects'),\n join(configPath, 'worktrees'),\n join(configPath, 'bin'),\n join(configPath, 'logs'),\n join(configPath, 'analytics'),\n ];\n\n for (const dir of dirs) {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n // Configure git worktree support\n if (config.enableWorktrees) {\n console.log(chalk.gray('Configuring worktree support...'));\n const worktreeManager = WorktreeManager.getInstance();\n worktreeManager.saveConfig({\n enabled: true,\n autoDetect: true,\n isolateContexts: config.worktreeIsolation,\n shareGlobalContext: false,\n syncInterval: 15,\n });\n\n // Detect current worktrees\n const worktrees = worktreeManager.detectWorktrees();\n if (worktrees.length > 0) {\n console.log(chalk.green(` \u2713 Found ${worktrees.length} worktree(s)`));\n worktrees.forEach((wt) => {\n console.log(chalk.gray(` - ${wt.branch} at ${wt.path}`));\n });\n }\n }\n\n // Scan and organize projects\n if (config.enableProjects && config.scanProjects) {\n console.log(chalk.gray('Scanning for projects...'));\n const projectManager = ProjectManager.getInstance();\n\n const scanPaths = (config as any).scanPaths || [\n join(homedir(), 'Dev'),\n join(homedir(), 'dev'),\n join(homedir(), 'Projects'),\n join(homedir(), 'projects'),\n join(homedir(), 'code'),\n ];\n\n await projectManager.scanAndCategorizeAllProjects(\n scanPaths.filter((p: string) => existsSync(p))\n );\n\n const projects = projectManager.getAllProjects();\n console.log(chalk.green(` \u2713 Found ${projects.length} project(s)`));\n\n // Show summary\n const byType: Record<string, number> = {};\n projects.forEach((p) => {\n byType[p.accountType] = (byType[p.accountType] || 0) + 1;\n });\n\n Object.entries(byType).forEach(([type, count]) => {\n console.log(chalk.gray(` - ${type}: ${count} project(s)`));\n });\n }\n\n // Configure Linear integration\n if (config.enableLinear && config.linearApiKey) {\n console.log(chalk.gray('Configuring Linear integration...'));\n const linearConfig = {\n apiKey: config.linearApiKey,\n autoSync: true,\n syncInterval: 300000, // 5 minutes\n };\n\n writeFileSync(\n join(configPath, 'linear-config.json'),\n JSON.stringify(linearConfig, null, 2)\n );\n console.log(chalk.green(' \u2713 Linear configured'));\n }\n\n // Save main configuration\n const mainConfig = {\n version: '1.0.0',\n setupCompleted: new Date().toISOString(),\n features: {\n worktrees: config.enableWorktrees,\n projects: config.enableProjects,\n linear: config.enableLinear,\n analytics: config.enableAnalytics,\n },\n paths: {\n default: config.defaultContextPath,\n },\n database: {\n mode: config.storageMode,\n ...(config.databaseUrl ? { url: config.databaseUrl } : {}),\n },\n };\n\n writeFileSync(\n join(configPath, 'config.json'),\n JSON.stringify(mainConfig, null, 2)\n );\n\n // If hosted selected, persist a simple env file suggestion\n if (config.storageMode === 'hosted' && config.databaseUrl) {\n try {\n const envFile = join(configPath, 'railway.env');\n writeFileSync(envFile, `# StackMemory hosted DB\\nDATABASE_URL=${config.databaseUrl}\\n`);\n console.log(chalk.green(' \u2713 Saved hosted DB settings to ~/.stackmemory/railway.env'));\n console.log(chalk.gray(' Tip: export DATABASE_URL from this file in your shell profile.'));\n } catch (e) {\n console.log(chalk.yellow(' \u26A0 Could not write hosted DB env file'));\n }\n }\n\n // Create claude-sm symlink for easy access\n const binPath = '/usr/local/bin/claude-sm';\n const sourcePath = join(configPath, 'bin', 'stackmemory');\n\n try {\n // Create wrapper script\n const wrapperScript = `#!/bin/bash\n# StackMemory CLI wrapper with worktree support\nCURRENT_DIR=$(pwd)\n\n# Auto-detect worktree if enabled\nif [ -f ~/.stackmemory/worktree-config.json ]; then\n WORKTREE_ENABLED=$(grep '\"enabled\": true' ~/.stackmemory/worktree-config.json)\n if [ ! -z \"$WORKTREE_ENABLED\" ]; then\n # Check if we're in a git worktree\n if git worktree list &>/dev/null; then\n export SM_WORKTREE_PATH=\"$CURRENT_DIR\"\n fi\n fi\nfi\n\n# Run StackMemory with context\nexec stackmemory \"$@\"\n`;\n\n writeFileSync(sourcePath, wrapperScript);\n execFileSync('chmod', ['+x', sourcePath]);\n\n // Create symlink if it doesn't exist\n if (!existsSync(binPath)) {\n execFileSync('ln', ['-s', sourcePath, binPath]);\n console.log(chalk.green(' \u2713 Created claude-sm command'));\n }\n } catch (error: unknown) {\n console.log(\n chalk.yellow(' \u26A0 Could not create claude-sm symlink (may need sudo)')\n );\n }\n\n // Create codex-sm symlink for easy access\n const codexBinPath = '/usr/local/bin/codex-sm';\n const codexSourcePath = join(configPath, 'bin', 'codex-sm');\n\n try {\n // Create Codex wrapper script (based on scripts/codex-wrapper.sh)\n const codexWrapper = `#!/bin/bash\n# Codex CLI wrapper with StackMemory integration\n# Usage: codex-sm [--auto-sync] [--sync-interval=MINUTES] [args...]\n\n# Flags\nAUTO_SYNC=false\nSYNC_INTERVAL=5\nfor arg in \"$@\"; do\n case $arg in\n --auto-sync)\n AUTO_SYNC=true\n shift\n ;;\n --sync-interval=*)\n SYNC_INTERVAL=\"\\${arg#*=}\"\n shift\n ;;\n esac\ndone\n\n# Auto-initialize StackMemory if in git repo without it\nif [ -d \".git\" ] && [ ! -d \".stackmemory\" ]; then\n echo \"\uD83D\uDCE6 Initializing StackMemory for this project...\"\n stackmemory init --silent 2>/dev/null || true\nfi\n\n# Load existing context if available\nif [ -d \".stackmemory\" ]; then\n echo \"\uD83E\uDDE0 Loading StackMemory context...\"\n stackmemory status --brief 2>/dev/null || true\nfi\n\n# Start Linear auto-sync in background if requested\nSYNC_PID=\"\"\nif [ \"$AUTO_SYNC\" = true ] && [ -n \"$LINEAR_API_KEY\" ]; then\n echo \"\uD83D\uDD04 Starting Linear auto-sync (${SYNC_INTERVAL}min intervals)...\"\n (\n while true; do\n sleep $((SYNC_INTERVAL * 60))\n if [ -d \".stackmemory\" ]; then\n stackmemory linear sync --quiet 2>/dev/null || true\n fi\n done\n ) &\n SYNC_PID=$!\nfi\n\ncleanup() {\n echo \"\"\n echo \"\uD83D\uDCDD Saving StackMemory context...\"\n\n # Kill auto-sync if running\n if [ -n \"$SYNC_PID\" ] && kill -0 $SYNC_PID 2>/dev/null; then\n echo \"\uD83D\uDED1 Stopping auto-sync...\"\n kill $SYNC_PID 2>/dev/null || true\n fi\n\n # Save project status and final sync\n if [ -d \".stackmemory\" ]; then\n stackmemory status 2>/dev/null\n if [ -n \"$LINEAR_API_KEY\" ]; then\n echo \"\uD83D\uDD04 Final Linear sync...\"\n stackmemory linear sync 2>/dev/null\n fi\n echo \"\u2705 StackMemory context saved\"\n fi\n}\n\ntrap cleanup EXIT INT TERM\n\n# Run Codex CLI\nif command -v codex &> /dev/null; then\n codex \"$@\"\nelif command -v codex-cli &> /dev/null; then\n codex-cli \"$@\"\nelse\n echo \"\u274C Codex CLI not found. Please install it first.\"\n echo \" See: https://github.com/openai/codex-cli\"\n exit 1\nfi\n`;\n\n writeFileSync(codexSourcePath, codexWrapper);\n execFileSync('chmod', ['+x', codexSourcePath]);\n\n // Create symlink if it doesn't exist\n if (!existsSync(codexBinPath)) {\n execFileSync('ln', ['-s', codexSourcePath, codexBinPath]);\n console.log(chalk.green(' \u2713 Created codex-sm command'));\n }\n } catch (error: unknown) {\n console.log(\n chalk.yellow(' \u26A0 Could not create codex-sm symlink (may need sudo)')\n );\n }\n}\n\nfunction showNextSteps(config: OnboardingConfig): void {\n console.log(chalk.cyan('\uD83C\uDF89 Next Steps:\\n'));\n\n console.log('1. Initialize StackMemory in your project:');\n console.log(chalk.gray(' cd your-project'));\n console.log(chalk.gray(' stackmemory init\\n'));\n\n if (config.enableWorktrees) {\n console.log('2. Create a new worktree:');\n console.log(\n chalk.gray(\n ' git worktree add -b feature/new-feature ../project-feature'\n )\n );\n console.log(chalk.gray(' cd ../project-feature'));\n console.log(\n chalk.gray(\n ' stackmemory status # Isolated context for this worktree\\n'\n )\n );\n }\n\n console.log('3. Use with Claude:');\n console.log(chalk.gray(' claude-sm # Or use stackmemory directly\\n'));\n\n console.log('4. Use with Codex:');\n console.log(chalk.gray(' codex-sm # Codex + StackMemory integration\\n'));\n\n if (config.enableLinear) {\n console.log('5. Sync with Linear:');\n console.log(chalk.gray(' stackmemory linear sync\\n'));\n }\n\n console.log('For more help:');\n console.log(chalk.gray(' stackmemory --help'));\n console.log(chalk.gray(' stackmemory projects --help'));\n if (config.enableWorktrees) {\n console.log(chalk.gray(' stackmemory worktree --help'));\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }