@stackmemoryai/stackmemory 0.5.57 → 0.5.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/bin/codex-smd +6 -0
  2. package/dist/cli/codex-sm-danger.js +21 -0
  3. package/dist/cli/codex-sm-danger.js.map +7 -0
  4. package/dist/cli/commands/handoff.js +33 -3
  5. package/dist/cli/commands/handoff.js.map +2 -2
  6. package/dist/cli/commands/search.js +20 -3
  7. package/dist/cli/commands/search.js.map +2 -2
  8. package/dist/core/database/sqlite-adapter.js +13 -3
  9. package/dist/core/database/sqlite-adapter.js.map +2 -2
  10. package/dist/core/errors/error-utils.js +208 -0
  11. package/dist/core/errors/error-utils.js.map +7 -0
  12. package/dist/core/errors/index.js +13 -4
  13. package/dist/core/errors/index.js.map +2 -2
  14. package/dist/core/merge/unified-merge-resolver.js +303 -0
  15. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  16. package/dist/core/monitoring/logger.js +61 -9
  17. package/dist/core/monitoring/logger.js.map +2 -2
  18. package/dist/core/security/index.js +35 -0
  19. package/dist/core/security/index.js.map +7 -0
  20. package/dist/core/security/input-sanitizer.js +321 -0
  21. package/dist/core/security/input-sanitizer.js.map +7 -0
  22. package/dist/core/session/enhanced-handoff.js +136 -2
  23. package/dist/core/session/enhanced-handoff.js.map +3 -3
  24. package/dist/integrations/linear/client.js +5 -1
  25. package/dist/integrations/linear/client.js.map +2 -2
  26. package/dist/integrations/mcp/remote-server.js +27 -36
  27. package/dist/integrations/mcp/remote-server.js.map +2 -2
  28. package/dist/integrations/mcp/server.js +44 -29
  29. package/dist/integrations/mcp/server.js.map +3 -3
  30. package/dist/scripts/benchmark-performance.js +48 -0
  31. package/dist/scripts/benchmark-performance.js.map +7 -0
  32. package/dist/scripts/check-redis.js +42 -0
  33. package/dist/scripts/check-redis.js.map +7 -0
  34. package/dist/scripts/initialize.js +116 -0
  35. package/dist/scripts/initialize.js.map +7 -0
  36. package/dist/scripts/list-linear-tasks.js +124 -0
  37. package/dist/scripts/list-linear-tasks.js.map +7 -0
  38. package/dist/scripts/measure-handoff-impact.js +340 -0
  39. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  40. package/dist/scripts/query-chromadb.js +160 -0
  41. package/dist/scripts/query-chromadb.js.map +7 -0
  42. package/dist/scripts/show-linear-summary.js +119 -0
  43. package/dist/scripts/show-linear-summary.js.map +7 -0
  44. package/dist/scripts/simple-swarm-demo.js +90 -0
  45. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  46. package/dist/scripts/status.js +155 -0
  47. package/dist/scripts/status.js.map +7 -0
  48. package/dist/scripts/test-chromadb-sync.js +192 -0
  49. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  50. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  51. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  52. package/dist/scripts/test-ralph-iterations.js +121 -0
  53. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  54. package/dist/scripts/test-redis-storage.js +389 -0
  55. package/dist/scripts/test-redis-storage.js.map +7 -0
  56. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  57. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  58. package/dist/scripts/test-swarm-fixes.js +125 -0
  59. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  60. package/dist/scripts/test-swarm-tui.js +23 -0
  61. package/dist/scripts/test-swarm-tui.js.map +7 -0
  62. package/dist/scripts/test-tui-shortcuts.js +52 -0
  63. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  64. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  65. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  66. package/dist/src/agents/core/agent-task-manager.js +527 -0
  67. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  68. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  69. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  70. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  71. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  72. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  73. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  74. package/dist/src/cli/auto-detect.js +321 -0
  75. package/dist/src/cli/auto-detect.js.map +7 -0
  76. package/dist/src/cli/claude-sm-danger.js +21 -0
  77. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  78. package/dist/src/cli/claude-sm.js +1156 -0
  79. package/dist/src/cli/claude-sm.js.map +7 -0
  80. package/dist/src/cli/codex-sm-danger.js +21 -0
  81. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  82. package/dist/src/cli/codex-sm.js +349 -0
  83. package/dist/src/cli/codex-sm.js.map +7 -0
  84. package/dist/src/cli/commands/api.js +232 -0
  85. package/dist/src/cli/commands/api.js.map +7 -0
  86. package/dist/src/cli/commands/auto-background.js +180 -0
  87. package/dist/src/cli/commands/auto-background.js.map +7 -0
  88. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  89. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  90. package/dist/src/cli/commands/clear.js +202 -0
  91. package/dist/src/cli/commands/clear.js.map +7 -0
  92. package/dist/src/cli/commands/config.js +445 -0
  93. package/dist/src/cli/commands/config.js.map +7 -0
  94. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  95. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  96. package/dist/src/cli/commands/context.js +343 -0
  97. package/dist/src/cli/commands/context.js.map +7 -0
  98. package/dist/src/cli/commands/daemon.js +392 -0
  99. package/dist/src/cli/commands/daemon.js.map +7 -0
  100. package/dist/src/cli/commands/dashboard.js +210 -0
  101. package/dist/src/cli/commands/dashboard.js.map +7 -0
  102. package/dist/src/cli/commands/db.js +147 -0
  103. package/dist/src/cli/commands/db.js.map +7 -0
  104. package/dist/src/cli/commands/decision.js +266 -0
  105. package/dist/src/cli/commands/decision.js.map +7 -0
  106. package/dist/src/cli/commands/discovery.js +279 -0
  107. package/dist/src/cli/commands/discovery.js.map +7 -0
  108. package/dist/src/cli/commands/handoff.js +624 -0
  109. package/dist/src/cli/commands/handoff.js.map +7 -0
  110. package/dist/src/cli/commands/hooks.js +298 -0
  111. package/dist/src/cli/commands/hooks.js.map +7 -0
  112. package/dist/src/cli/commands/linear.js +529 -0
  113. package/dist/src/cli/commands/linear.js.map +7 -0
  114. package/dist/src/cli/commands/log.js +169 -0
  115. package/dist/src/cli/commands/log.js.map +7 -0
  116. package/dist/src/cli/commands/login.js +172 -0
  117. package/dist/src/cli/commands/login.js.map +7 -0
  118. package/dist/src/cli/commands/migrate.js +240 -0
  119. package/dist/src/cli/commands/migrate.js.map +7 -0
  120. package/dist/src/cli/commands/model.js +533 -0
  121. package/dist/src/cli/commands/model.js.map +7 -0
  122. package/dist/src/cli/commands/onboard.js +536 -0
  123. package/dist/src/cli/commands/onboard.js.map +7 -0
  124. package/dist/src/cli/commands/projects.js +199 -0
  125. package/dist/src/cli/commands/projects.js.map +7 -0
  126. package/dist/src/cli/commands/ralph.js +909 -0
  127. package/dist/src/cli/commands/ralph.js.map +7 -0
  128. package/dist/src/cli/commands/retrieval.js +248 -0
  129. package/dist/src/cli/commands/retrieval.js.map +7 -0
  130. package/dist/src/cli/commands/search.js +173 -0
  131. package/dist/src/cli/commands/search.js.map +7 -0
  132. package/dist/src/cli/commands/service.js +749 -0
  133. package/dist/src/cli/commands/service.js.map +7 -0
  134. package/dist/src/cli/commands/session.js +200 -0
  135. package/dist/src/cli/commands/session.js.map +7 -0
  136. package/dist/src/cli/commands/settings.js +306 -0
  137. package/dist/src/cli/commands/settings.js.map +7 -0
  138. package/dist/src/cli/commands/setup.js +701 -0
  139. package/dist/src/cli/commands/setup.js.map +7 -0
  140. package/dist/src/cli/commands/shell.js +249 -0
  141. package/dist/src/cli/commands/shell.js.map +7 -0
  142. package/dist/src/cli/commands/signup.js +50 -0
  143. package/dist/src/cli/commands/signup.js.map +7 -0
  144. package/dist/src/cli/commands/skills.js +470 -0
  145. package/dist/src/cli/commands/skills.js.map +7 -0
  146. package/dist/src/cli/commands/sms-notify.js +795 -0
  147. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  148. package/dist/src/cli/commands/storage-tier.js +183 -0
  149. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  150. package/dist/src/cli/commands/sweep.js +249 -0
  151. package/dist/src/cli/commands/sweep.js.map +7 -0
  152. package/dist/src/cli/commands/tasks.js +213 -0
  153. package/dist/src/cli/commands/tasks.js.map +7 -0
  154. package/dist/src/cli/commands/worktree.js +319 -0
  155. package/dist/src/cli/commands/worktree.js.map +7 -0
  156. package/dist/src/cli/index.js +594 -0
  157. package/dist/src/cli/index.js.map +7 -0
  158. package/dist/src/cli/opencode-sm.js +448 -0
  159. package/dist/src/cli/opencode-sm.js.map +7 -0
  160. package/dist/src/cli/utils/viewer.js +96 -0
  161. package/dist/src/cli/utils/viewer.js.map +7 -0
  162. package/dist/src/core/config/config-manager.js +398 -0
  163. package/dist/src/core/config/config-manager.js.map +7 -0
  164. package/dist/src/core/config/feature-flags.js +76 -0
  165. package/dist/src/core/config/feature-flags.js.map +7 -0
  166. package/dist/src/core/config/storage-config.js +115 -0
  167. package/dist/src/core/config/storage-config.js.map +7 -0
  168. package/dist/src/core/config/types.js +144 -0
  169. package/dist/src/core/config/types.js.map +7 -0
  170. package/dist/src/core/context/auto-context.js +80 -0
  171. package/dist/src/core/context/auto-context.js.map +7 -0
  172. package/dist/src/core/context/dual-stack-manager.js +870 -0
  173. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  174. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  175. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  176. package/dist/src/core/context/frame-database.js +479 -0
  177. package/dist/src/core/context/frame-database.js.map +7 -0
  178. package/dist/src/core/context/frame-digest.js +250 -0
  179. package/dist/src/core/context/frame-digest.js.map +7 -0
  180. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  181. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  182. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  183. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  184. package/dist/src/core/context/frame-recovery.js +302 -0
  185. package/dist/src/core/context/frame-recovery.js.map +7 -0
  186. package/dist/src/core/context/frame-stack.js +314 -0
  187. package/dist/src/core/context/frame-stack.js.map +7 -0
  188. package/dist/src/core/context/frame-types.js +5 -0
  189. package/dist/src/core/context/frame-types.js.map +7 -0
  190. package/dist/src/core/context/index.js +25 -0
  191. package/dist/src/core/context/index.js.map +7 -0
  192. package/dist/src/core/context/permission-manager.js +185 -0
  193. package/dist/src/core/context/permission-manager.js.map +7 -0
  194. package/dist/src/core/context/recursive-context-manager.js +592 -0
  195. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  196. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  197. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  198. package/dist/src/core/context/shared-context-layer.js +621 -0
  199. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  200. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  201. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  202. package/dist/src/core/context/validation.js +130 -0
  203. package/dist/src/core/context/validation.js.map +7 -0
  204. package/dist/src/core/database/batch-operations.js +384 -0
  205. package/dist/src/core/database/batch-operations.js.map +7 -0
  206. package/dist/src/core/database/connection-pool.js +330 -0
  207. package/dist/src/core/database/connection-pool.js.map +7 -0
  208. package/dist/src/core/database/database-adapter.js +60 -0
  209. package/dist/src/core/database/database-adapter.js.map +7 -0
  210. package/dist/src/core/database/migration-manager.js +614 -0
  211. package/dist/src/core/database/migration-manager.js.map +7 -0
  212. package/dist/src/core/database/query-cache.js +298 -0
  213. package/dist/src/core/database/query-cache.js.map +7 -0
  214. package/dist/src/core/database/query-router.js +430 -0
  215. package/dist/src/core/database/query-router.js.map +7 -0
  216. package/dist/src/core/database/sqlite-adapter.js +738 -0
  217. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  218. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  219. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  220. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  221. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  222. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  223. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  224. package/dist/src/core/digest/index.js +9 -0
  225. package/dist/src/core/digest/index.js.map +7 -0
  226. package/dist/src/core/digest/types.js +25 -0
  227. package/dist/src/core/digest/types.js.map +7 -0
  228. package/dist/src/core/errors/error-utils.js +208 -0
  229. package/dist/src/core/errors/error-utils.js.map +7 -0
  230. package/dist/src/core/errors/index.js +521 -0
  231. package/dist/src/core/errors/index.js.map +7 -0
  232. package/dist/src/core/errors/recovery.js +269 -0
  233. package/dist/src/core/errors/recovery.js.map +7 -0
  234. package/dist/src/core/execution/parallel-executor.js +258 -0
  235. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  236. package/dist/src/core/frame/workflow-templates.js +319 -0
  237. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  238. package/dist/src/core/merge/conflict-detector.js +431 -0
  239. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  240. package/dist/src/core/merge/index.js +9 -0
  241. package/dist/src/core/merge/index.js.map +7 -0
  242. package/dist/src/core/merge/resolution-engine.js +558 -0
  243. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  244. package/dist/src/core/merge/stack-diff.js +532 -0
  245. package/dist/src/core/merge/stack-diff.js.map +7 -0
  246. package/dist/src/core/merge/types.js +5 -0
  247. package/dist/src/core/merge/types.js.map +7 -0
  248. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  249. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  250. package/dist/src/core/models/fallback-monitor.js +232 -0
  251. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  252. package/dist/src/core/models/model-router.js +340 -0
  253. package/dist/src/core/models/model-router.js.map +7 -0
  254. package/dist/src/core/monitoring/error-handler.js +49 -0
  255. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  256. package/dist/src/core/monitoring/logger.js +202 -0
  257. package/dist/src/core/monitoring/logger.js.map +7 -0
  258. package/dist/src/core/monitoring/metrics.js +172 -0
  259. package/dist/src/core/monitoring/metrics.js.map +7 -0
  260. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  261. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  262. package/dist/src/core/monitoring/session-monitor.js +300 -0
  263. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  264. package/dist/src/core/performance/context-cache.js +273 -0
  265. package/dist/src/core/performance/context-cache.js.map +7 -0
  266. package/dist/src/core/performance/index.js +11 -0
  267. package/dist/src/core/performance/index.js.map +7 -0
  268. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  269. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  270. package/dist/src/core/performance/monitor.js +221 -0
  271. package/dist/src/core/performance/monitor.js.map +7 -0
  272. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  273. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  274. package/dist/src/core/performance/performance-benchmark.js +277 -0
  275. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  276. package/dist/src/core/performance/performance-profiler.js +370 -0
  277. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  278. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  279. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  280. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  281. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  282. package/dist/src/core/projects/project-isolation.js +201 -0
  283. package/dist/src/core/projects/project-isolation.js.map +7 -0
  284. package/dist/src/core/projects/project-manager.js +697 -0
  285. package/dist/src/core/projects/project-manager.js.map +7 -0
  286. package/dist/src/core/query/query-parser.js +370 -0
  287. package/dist/src/core/query/query-parser.js.map +7 -0
  288. package/dist/src/core/query/query-templates.js +321 -0
  289. package/dist/src/core/query/query-templates.js.map +7 -0
  290. package/dist/src/core/retrieval/context-retriever.js +479 -0
  291. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  292. package/dist/src/core/retrieval/index.js +8 -0
  293. package/dist/src/core/retrieval/index.js.map +7 -0
  294. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  295. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  296. package/dist/src/core/retrieval/llm-provider.js +151 -0
  297. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  298. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  299. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  300. package/dist/src/core/retrieval/summary-generator.js +589 -0
  301. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  302. package/dist/src/core/retrieval/types.js +21 -0
  303. package/dist/src/core/retrieval/types.js.map +7 -0
  304. package/dist/src/core/security/index.js +35 -0
  305. package/dist/src/core/security/index.js.map +7 -0
  306. package/dist/src/core/security/input-sanitizer.js +321 -0
  307. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  308. package/dist/src/core/session/clear-survival.js +465 -0
  309. package/dist/src/core/session/clear-survival.js.map +7 -0
  310. package/dist/src/core/session/enhanced-handoff.js +792 -0
  311. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  312. package/dist/src/core/session/handoff-generator.js +343 -0
  313. package/dist/src/core/session/handoff-generator.js.map +7 -0
  314. package/dist/src/core/session/index.js +15 -0
  315. package/dist/src/core/session/index.js.map +7 -0
  316. package/dist/src/core/session/session-manager.js +347 -0
  317. package/dist/src/core/session/session-manager.js.map +7 -0
  318. package/dist/src/core/skills/index.js +7 -0
  319. package/dist/src/core/skills/index.js.map +7 -0
  320. package/dist/src/core/skills/skill-storage.js +764 -0
  321. package/dist/src/core/skills/skill-storage.js.map +7 -0
  322. package/dist/src/core/skills/types.js +193 -0
  323. package/dist/src/core/skills/types.js.map +7 -0
  324. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  325. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  326. package/dist/src/core/storage/infinite-storage.js +510 -0
  327. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  328. package/dist/src/core/storage/remote-storage.js +489 -0
  329. package/dist/src/core/storage/remote-storage.js.map +7 -0
  330. package/dist/src/core/storage/two-tier-storage.js +766 -0
  331. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  332. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  333. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  334. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  335. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  336. package/dist/src/core/trace/debug-trace.js +417 -0
  337. package/dist/src/core/trace/debug-trace.js.map +7 -0
  338. package/dist/src/core/trace/index.js +109 -0
  339. package/dist/src/core/trace/index.js.map +7 -0
  340. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  341. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  342. package/dist/src/core/trace/trace-detector.js +528 -0
  343. package/dist/src/core/trace/trace-detector.js.map +7 -0
  344. package/dist/src/core/trace/trace-store.js +345 -0
  345. package/dist/src/core/trace/trace-store.js.map +7 -0
  346. package/dist/src/core/trace/types.js +77 -0
  347. package/dist/src/core/trace/types.js.map +7 -0
  348. package/dist/src/core/types.js +5 -0
  349. package/dist/src/core/types.js.map +7 -0
  350. package/dist/src/core/utils/async-mutex.js +114 -0
  351. package/dist/src/core/utils/async-mutex.js.map +7 -0
  352. package/dist/src/core/utils/compression.js +83 -0
  353. package/dist/src/core/utils/compression.js.map +7 -0
  354. package/dist/src/core/utils/update-checker.js +218 -0
  355. package/dist/src/core/utils/update-checker.js.map +7 -0
  356. package/dist/src/core/worktree/worktree-manager.js +465 -0
  357. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  358. package/dist/src/daemon/daemon-config.js +149 -0
  359. package/dist/src/daemon/daemon-config.js.map +7 -0
  360. package/dist/src/daemon/services/context-service.js +122 -0
  361. package/dist/src/daemon/services/context-service.js.map +7 -0
  362. package/dist/src/daemon/services/linear-service.js +136 -0
  363. package/dist/src/daemon/services/linear-service.js.map +7 -0
  364. package/dist/src/daemon/session-daemon.js +312 -0
  365. package/dist/src/daemon/session-daemon.js.map +7 -0
  366. package/dist/src/daemon/unified-daemon.js +276 -0
  367. package/dist/src/daemon/unified-daemon.js.map +7 -0
  368. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  369. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  370. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  371. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  372. package/dist/src/features/analytics/index.js +18 -0
  373. package/dist/src/features/analytics/index.js.map +7 -0
  374. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  375. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  376. package/dist/src/features/analytics/types/metrics.js +5 -0
  377. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  378. package/dist/src/features/browser/browser-mcp.js +492 -0
  379. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  380. package/dist/src/features/sweep/index.js +20 -0
  381. package/dist/src/features/sweep/index.js.map +7 -0
  382. package/dist/src/features/sweep/prediction-client.js +155 -0
  383. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  384. package/dist/src/features/sweep/prompt-builder.js +85 -0
  385. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  386. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  387. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  388. package/dist/src/features/sweep/state-watcher.js +87 -0
  389. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  390. package/dist/src/features/sweep/status-bar.js +88 -0
  391. package/dist/src/features/sweep/status-bar.js.map +7 -0
  392. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  393. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  394. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  395. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  396. package/dist/src/features/sweep/types.js +18 -0
  397. package/dist/src/features/sweep/types.js.map +7 -0
  398. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  399. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  400. package/dist/src/features/tasks/task-aware-context.js +410 -0
  401. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  402. package/dist/src/features/tui/simple-monitor.js +116 -0
  403. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  404. package/dist/src/features/tui/swarm-monitor.js +648 -0
  405. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  406. package/dist/src/features/web/client/stores/task-store.js +26 -0
  407. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  408. package/dist/src/features/web/server/index.js +194 -0
  409. package/dist/src/features/web/server/index.js.map +7 -0
  410. package/dist/src/hooks/auto-background.js +151 -0
  411. package/dist/src/hooks/auto-background.js.map +7 -0
  412. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  413. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  414. package/dist/src/hooks/config.js +150 -0
  415. package/dist/src/hooks/config.js.map +7 -0
  416. package/dist/src/hooks/daemon.js +364 -0
  417. package/dist/src/hooks/daemon.js.map +7 -0
  418. package/dist/src/hooks/events.js +58 -0
  419. package/dist/src/hooks/events.js.map +7 -0
  420. package/dist/src/hooks/index.js +12 -0
  421. package/dist/src/hooks/index.js.map +7 -0
  422. package/dist/src/hooks/linear-task-picker.js +186 -0
  423. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  424. package/dist/src/hooks/schemas.js +197 -0
  425. package/dist/src/hooks/schemas.js.map +7 -0
  426. package/dist/src/hooks/secure-fs.js +49 -0
  427. package/dist/src/hooks/secure-fs.js.map +7 -0
  428. package/dist/src/hooks/security-logger.js +155 -0
  429. package/dist/src/hooks/security-logger.js.map +7 -0
  430. package/dist/src/hooks/session-summary.js +222 -0
  431. package/dist/src/hooks/session-summary.js.map +7 -0
  432. package/dist/src/hooks/sms-action-runner.js +371 -0
  433. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  434. package/dist/src/hooks/sms-notify.js +506 -0
  435. package/dist/src/hooks/sms-notify.js.map +7 -0
  436. package/dist/src/hooks/sms-watcher.js +93 -0
  437. package/dist/src/hooks/sms-watcher.js.map +7 -0
  438. package/dist/src/hooks/sms-webhook.js +555 -0
  439. package/dist/src/hooks/sms-webhook.js.map +7 -0
  440. package/dist/src/hooks/whatsapp-commands.js +479 -0
  441. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  442. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  443. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  444. package/dist/src/hooks/whatsapp-sync.js +409 -0
  445. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  446. package/dist/src/index.js +25 -0
  447. package/dist/src/index.js.map +7 -0
  448. package/dist/src/integrations/anthropic/client.js +263 -0
  449. package/dist/src/integrations/anthropic/client.js.map +7 -0
  450. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  451. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  452. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  453. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  454. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  455. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  456. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  457. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  458. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  459. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  460. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  461. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  462. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  463. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  464. package/dist/src/integrations/linear/auth.js +337 -0
  465. package/dist/src/integrations/linear/auth.js.map +7 -0
  466. package/dist/src/integrations/linear/auto-sync.js +258 -0
  467. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  468. package/dist/src/integrations/linear/client.js +634 -0
  469. package/dist/src/integrations/linear/client.js.map +7 -0
  470. package/dist/src/integrations/linear/config.js +130 -0
  471. package/dist/src/integrations/linear/config.js.map +7 -0
  472. package/dist/src/integrations/linear/migration.js +361 -0
  473. package/dist/src/integrations/linear/migration.js.map +7 -0
  474. package/dist/src/integrations/linear/oauth-server.js +454 -0
  475. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  476. package/dist/src/integrations/linear/rest-client.js +213 -0
  477. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  478. package/dist/src/integrations/linear/sync-manager.js +236 -0
  479. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  480. package/dist/src/integrations/linear/sync-service.js +231 -0
  481. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  482. package/dist/src/integrations/linear/sync.js +782 -0
  483. package/dist/src/integrations/linear/sync.js.map +7 -0
  484. package/dist/src/integrations/linear/types.js +5 -0
  485. package/dist/src/integrations/linear/types.js.map +7 -0
  486. package/dist/src/integrations/linear/unified-sync.js +589 -0
  487. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  488. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  489. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  490. package/dist/src/integrations/linear/webhook-server.js +218 -0
  491. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  492. package/dist/src/integrations/linear/webhook.js +291 -0
  493. package/dist/src/integrations/linear/webhook.js.map +7 -0
  494. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  495. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  496. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  497. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  498. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  499. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  500. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  501. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  502. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  503. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  504. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  505. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  506. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  507. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  508. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  509. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  510. package/dist/src/integrations/mcp/index.js +23 -0
  511. package/dist/src/integrations/mcp/index.js.map +7 -0
  512. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  513. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  514. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  515. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  516. package/dist/src/integrations/mcp/remote-server.js +682 -0
  517. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  518. package/dist/src/integrations/mcp/schemas.js +147 -0
  519. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  520. package/dist/src/integrations/mcp/server.js +1975 -0
  521. package/dist/src/integrations/mcp/server.js.map +7 -0
  522. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  523. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  524. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  525. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  526. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  527. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  528. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  529. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  530. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  531. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  532. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  533. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  534. package/dist/src/integrations/ralph/index.js +18 -0
  535. package/dist/src/integrations/ralph/index.js.map +7 -0
  536. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  537. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  538. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  539. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  540. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  541. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  542. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  543. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  544. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  545. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  546. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  547. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  548. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  549. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  550. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  551. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  552. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  553. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  554. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  555. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  556. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  557. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  558. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  559. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  560. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  561. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  562. package/dist/src/integrations/ralph/types.js +5 -0
  563. package/dist/src/integrations/ralph/types.js.map +7 -0
  564. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  565. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  566. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  567. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  568. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  569. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  570. package/dist/src/models/user.model.js +358 -0
  571. package/dist/src/models/user.model.js.map +7 -0
  572. package/dist/src/servers/production/auth-middleware.js +528 -0
  573. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  574. package/dist/src/services/config-service.js +65 -0
  575. package/dist/src/services/config-service.js.map +7 -0
  576. package/dist/src/services/context-service.js +194 -0
  577. package/dist/src/services/context-service.js.map +7 -0
  578. package/dist/src/skills/api-discovery.js +354 -0
  579. package/dist/src/skills/api-discovery.js.map +7 -0
  580. package/dist/src/skills/api-skill.js +475 -0
  581. package/dist/src/skills/api-skill.js.map +7 -0
  582. package/dist/src/skills/claude-skills.js +1061 -0
  583. package/dist/src/skills/claude-skills.js.map +7 -0
  584. package/dist/src/skills/dashboard-launcher.js +216 -0
  585. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  586. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  587. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  588. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  589. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  590. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  591. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  592. package/dist/src/types/task.js +5 -0
  593. package/dist/src/types/task.js.map +7 -0
  594. package/dist/src/utils/env.js +50 -0
  595. package/dist/src/utils/env.js.map +7 -0
  596. package/dist/src/utils/formatting.js +62 -0
  597. package/dist/src/utils/formatting.js.map +7 -0
  598. package/dist/src/utils/process-cleanup.js +136 -0
  599. package/dist/src/utils/process-cleanup.js.map +7 -0
  600. package/package.json +4 -3
  601. package/scripts/create-cleanup-issues.js +302 -0
  602. package/scripts/demos/browser-test.ts +39 -0
  603. package/scripts/demos/ralph-integration-demo.ts +244 -0
  604. package/scripts/demos/trace-demo.ts +214 -0
  605. package/scripts/demos/trace-detector.demo.ts +171 -0
  606. package/scripts/demos/trace-test.ts +67 -0
  607. package/scripts/initialize.ts +16 -7
  608. package/scripts/install.sh +14 -62
  609. package/scripts/status.ts +111 -46
  610. package/scripts/test-claude-config.sh +123 -0
  611. package/scripts/validate-claude-config.sh +155 -0
@@ -0,0 +1,202 @@
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 { Command } from "commander";
7
+ import chalk from "chalk";
8
+ import ora from "ora";
9
+ import * as fs from "fs/promises";
10
+ import * as path from "path";
11
+ import Database from "better-sqlite3";
12
+ import { existsSync } from "fs";
13
+ import { ClearSurvival } from "../../core/session/clear-survival.js";
14
+ import { FrameManager } from "../../core/context/index.js";
15
+ import { sessionManager } from "../../core/session/session-manager.js";
16
+ const clearCommand = new Command("clear").description("Manage context clearing with ledger preservation").option("--save", "Save continuity ledger before clearing").option("--restore", "Restore from continuity ledger").option("--check", "Check if clear is recommended").option("--auto", "Automatically save if needed and clear").option("--status", "Show current context usage").option("--show-ledger", "Display current ledger").action(async (options) => {
17
+ const spinner = ora();
18
+ try {
19
+ const projectRoot = process.cwd();
20
+ const dbPath = path.join(projectRoot, ".stackmemory", "context.db");
21
+ if (!existsSync(dbPath)) {
22
+ console.error(
23
+ chalk.red("\u2717 StackMemory not initialized in this directory")
24
+ );
25
+ console.log(chalk.yellow("Run: stackmemory init"));
26
+ process.exit(1);
27
+ }
28
+ const db = new Database(dbPath);
29
+ await sessionManager.initialize();
30
+ const session = await sessionManager.getOrCreateSession({
31
+ projectPath: projectRoot
32
+ });
33
+ const frameManager = new FrameManager(db, session.projectId);
34
+ const handoffGenerator = {
35
+ generateHandoff: () => Promise.resolve("Mock handoff"),
36
+ getHandoffPath: () => "mock.md"
37
+ };
38
+ const dbManager = {
39
+ getCurrentSessionId: () => Promise.resolve(session.id),
40
+ getSession: () => Promise.resolve(session)
41
+ };
42
+ const clearSurvival = new ClearSurvival(
43
+ frameManager,
44
+ dbManager,
45
+ handoffGenerator,
46
+ projectRoot
47
+ );
48
+ if (options.status) {
49
+ await showContextStatus(clearSurvival);
50
+ } else if (options.check) {
51
+ await checkIfClearRecommended(clearSurvival);
52
+ } else if (options.save) {
53
+ await saveLedger(clearSurvival, spinner);
54
+ } else if (options.restore) {
55
+ await restoreFromLedger(clearSurvival, spinner);
56
+ } else if (options.showLedger) {
57
+ await showLedger(projectRoot);
58
+ } else if (options.auto) {
59
+ await autoClear(clearSurvival, spinner);
60
+ } else {
61
+ await showContextStatus(clearSurvival);
62
+ console.log("\nOptions:");
63
+ console.log(" --status Show current context usage");
64
+ console.log(" --check Check if clear is recommended");
65
+ console.log(" --save Save continuity ledger");
66
+ console.log(" --restore Restore from ledger");
67
+ console.log(" --auto Auto-save if needed and clear");
68
+ }
69
+ } catch (error) {
70
+ console.error(chalk.red("Error: " + error.message));
71
+ if (process.env["NODE_ENV"] !== "test") {
72
+ process.exit(1);
73
+ }
74
+ }
75
+ });
76
+ async function showContextStatus(clearSurvival) {
77
+ const usage = await clearSurvival.getContextUsage();
78
+ const status = clearSurvival.assessContextStatus(usage);
79
+ console.log(chalk.bold("\n\u{1F4CA} Context Usage Status"));
80
+ console.log("\u2500".repeat(40));
81
+ const percentage = Math.round(usage.percentageUsed);
82
+ const statusColor = getStatusColor(status);
83
+ console.log(`Usage: ${percentage}% ${getProgressBar(percentage)}`);
84
+ console.log(`Status: ${statusColor}`);
85
+ console.log(`Active Frames: ${usage.activeFrames}`);
86
+ console.log(`Total Frames: ${usage.totalFrames}`);
87
+ console.log(`Sessions: ${usage.sessionCount}`);
88
+ if (status === "critical" || status === "saved") {
89
+ console.log(
90
+ chalk.yellow("\n\u26A0\uFE0F Consider clearing context to improve performance")
91
+ );
92
+ console.log(chalk.cyan("Run: stackmemory clear --save"));
93
+ }
94
+ }
95
+ async function checkIfClearRecommended(clearSurvival) {
96
+ const usage = await clearSurvival.getContextUsage();
97
+ const status = clearSurvival.assessContextStatus(usage);
98
+ if (status === "critical" || status === "saved") {
99
+ console.log(chalk.yellow("\u2713 Clear recommended"));
100
+ console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);
101
+ process.exit(0);
102
+ } else {
103
+ console.log(chalk.green("\u2717 Clear not needed"));
104
+ console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);
105
+ process.exit(1);
106
+ }
107
+ }
108
+ async function saveLedger(clearSurvival, spinner) {
109
+ spinner.start("Saving continuity ledger...");
110
+ const ledgerPath = await clearSurvival.saveContinuityLedger();
111
+ spinner.succeed(chalk.green("Continuity ledger saved"));
112
+ console.log(chalk.cyan(`Location: ${ledgerPath}`));
113
+ const ledger = JSON.parse(await fs.readFile(ledgerPath, "utf-8"));
114
+ console.log("\nSaved:");
115
+ console.log(` \u2022 ${ledger.activeFrames.length} active frames`);
116
+ console.log(` \u2022 ${ledger.decisions.length} key decisions`);
117
+ console.log(
118
+ ` \u2022 ${ledger.context.importantTasks?.length || 0} important tasks`
119
+ );
120
+ }
121
+ async function restoreFromLedger(clearSurvival, spinner) {
122
+ spinner.start("Restoring from continuity ledger...");
123
+ const result = await clearSurvival.restoreFromLedger();
124
+ if (result.success) {
125
+ spinner.succeed(chalk.green("Context restored from ledger"));
126
+ console.log("\nRestored:");
127
+ console.log(` \u2022 ${result.restoredFrames} frames`);
128
+ console.log(` \u2022 ${result.restoredDecisions} decisions`);
129
+ } else {
130
+ spinner.fail(chalk.red("Failed to restore from ledger"));
131
+ console.log(chalk.yellow(result.message));
132
+ }
133
+ }
134
+ async function showLedger(projectRoot) {
135
+ const ledgerPath = path.join(projectRoot, ".stackmemory", "continuity.json");
136
+ if (!existsSync(ledgerPath)) {
137
+ console.log(chalk.yellow("No continuity ledger found"));
138
+ return;
139
+ }
140
+ const ledger = JSON.parse(await fs.readFile(ledgerPath, "utf-8"));
141
+ console.log(chalk.bold("\n\u{1F4D6} Continuity Ledger"));
142
+ console.log("\u2500".repeat(40));
143
+ console.log(`Created: ${new Date(ledger.timestamp).toLocaleString()}`);
144
+ console.log(`Active Frames: ${ledger.activeFrames.length}`);
145
+ console.log(`Key Decisions: ${ledger.decisions.length}`);
146
+ if (ledger.activeFrames.length > 0) {
147
+ console.log("\nActive Work:");
148
+ ledger.activeFrames.slice(0, 5).forEach((frame) => {
149
+ console.log(` \u2022 ${frame.name} (${frame.type})`);
150
+ });
151
+ }
152
+ if (ledger.decisions.length > 0) {
153
+ console.log("\nKey Decisions:");
154
+ ledger.decisions.slice(0, 3).forEach((decision) => {
155
+ console.log(` \u2022 ${decision.decision}`);
156
+ });
157
+ }
158
+ }
159
+ async function autoClear(clearSurvival, spinner) {
160
+ const usage = await clearSurvival.getContextUsage();
161
+ const status = clearSurvival.assessContextStatus(usage);
162
+ if (status === "critical" || status === "saved") {
163
+ spinner.start("Auto-saving ledger before clear...");
164
+ await clearSurvival.saveContinuityLedger();
165
+ spinner.succeed("Ledger saved");
166
+ spinner.start("Clearing context...");
167
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
168
+ spinner.succeed("Context cleared successfully");
169
+ } else {
170
+ console.log(chalk.green("Context usage is healthy, no clear needed"));
171
+ }
172
+ }
173
+ function getProgressBar(percentage) {
174
+ const filled = Math.round(percentage / 5);
175
+ const empty = 20 - filled;
176
+ let bar = "[";
177
+ bar += chalk.green("\u25A0").repeat(Math.min(filled, 10));
178
+ bar += chalk.yellow("\u25A0").repeat(Math.max(0, Math.min(filled - 10, 5)));
179
+ bar += chalk.red("\u25A0").repeat(Math.max(0, filled - 15));
180
+ bar += chalk.gray("\u25A1").repeat(empty);
181
+ bar += "]";
182
+ return bar;
183
+ }
184
+ function getStatusColor(status) {
185
+ switch (status) {
186
+ case "healthy":
187
+ return chalk.green("\u2713 Healthy (<50%)");
188
+ case "moderate":
189
+ return chalk.blue("\u26A1 Moderate (50-70%)");
190
+ case "critical":
191
+ return chalk.yellow("\u26A0\uFE0F Critical (70-85%)");
192
+ case "saved":
193
+ return chalk.red("\u{1F4BE} Auto-saved (>85%)");
194
+ default:
195
+ return status;
196
+ }
197
+ }
198
+ var clear_default = clearCommand;
199
+ export {
200
+ clear_default as default
201
+ };
202
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/cli/commands/clear.ts"],
4
+ "sourcesContent": ["#!/usr/bin/env node\n/**\n * Clear command for StackMemory\n * Manages context clearing with ledger preservation\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport Database from 'better-sqlite3';\nimport { existsSync } from 'fs';\nimport { ClearSurvival } from '../../core/session/clear-survival.js';\nimport { FrameManager } from '../../core/context/index.js';\nimport { HandoffGenerator } from '../../core/session/handoff-generator.js';\nimport { sessionManager } from '../../core/session/session-manager.js';\nimport { getEnv, getOptionalEnv } from '../../utils/env.js';\n\nconst clearCommand = new Command('clear')\n .description('Manage context clearing with ledger preservation')\n .option('--save', 'Save continuity ledger before clearing')\n .option('--restore', 'Restore from continuity ledger')\n .option('--check', 'Check if clear is recommended')\n .option('--auto', 'Automatically save if needed and clear')\n .option('--status', 'Show current context usage')\n .option('--show-ledger', 'Display current ledger')\n .action(async (options) => {\n const spinner = ora();\n\n try {\n // Initialize managers\n const projectRoot = process.cwd();\n const dbPath = path.join(projectRoot, '.stackmemory', 'context.db');\n\n // Check if StackMemory is initialized\n if (!existsSync(dbPath)) {\n console.error(\n chalk.red('\u2717 StackMemory not initialized in this directory')\n );\n console.log(chalk.yellow('Run: stackmemory init'));\n process.exit(1);\n }\n\n const db = new Database(dbPath);\n\n // Initialize session manager\n await sessionManager.initialize();\n const session = await sessionManager.getOrCreateSession({\n projectPath: projectRoot,\n });\n\n const frameManager = new FrameManager(db, session.projectId);\n // For testing - use a mock handoff generator\n const handoffGenerator = {\n generateHandoff: () => Promise.resolve('Mock handoff'),\n getHandoffPath: () => 'mock.md',\n };\n // Create a mock DatabaseManager for ClearSurvival\n const dbManager = {\n getCurrentSessionId: () => Promise.resolve(session.id),\n getSession: () => Promise.resolve(session),\n } as any;\n const clearSurvival = new ClearSurvival(\n frameManager,\n dbManager,\n handoffGenerator as any,\n projectRoot\n );\n\n // Handle different options\n if (options.status) {\n await showContextStatus(clearSurvival);\n } else if (options.check) {\n await checkIfClearRecommended(clearSurvival);\n } else if (options.save) {\n await saveLedger(clearSurvival, spinner);\n } else if (options.restore) {\n await restoreFromLedger(clearSurvival, spinner);\n } else if (options.showLedger) {\n await showLedger(projectRoot);\n } else if (options.auto) {\n await autoClear(clearSurvival, spinner);\n } else {\n // Default: Show status and options\n await showContextStatus(clearSurvival);\n console.log('\\nOptions:');\n console.log(' --status Show current context usage');\n console.log(' --check Check if clear is recommended');\n console.log(' --save Save continuity ledger');\n console.log(' --restore Restore from ledger');\n console.log(' --auto Auto-save if needed and clear');\n }\n } catch (error: unknown) {\n // Don't exit in tests - just log the error\n console.error(chalk.red('Error: ' + (error as Error).message));\n if (process.env['NODE_ENV'] !== 'test') {\n process.exit(1);\n }\n }\n });\n\nasync function showContextStatus(clearSurvival: ClearSurvival): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n console.log(chalk.bold('\\n\uD83D\uDCCA Context Usage Status'));\n console.log('\u2500'.repeat(40));\n\n const percentage = Math.round(usage.percentageUsed);\n const statusColor = getStatusColor(status);\n\n console.log(`Usage: ${percentage}% ${getProgressBar(percentage)}`);\n console.log(`Status: ${statusColor}`);\n console.log(`Active Frames: ${usage.activeFrames}`);\n console.log(`Total Frames: ${usage.totalFrames}`);\n console.log(`Sessions: ${usage.sessionCount}`);\n\n if (status === 'critical' || status === 'saved') {\n console.log(\n chalk.yellow('\\n\u26A0\uFE0F Consider clearing context to improve performance')\n );\n console.log(chalk.cyan('Run: stackmemory clear --save'));\n }\n}\n\nasync function checkIfClearRecommended(\n clearSurvival: ClearSurvival\n): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n if (status === 'critical' || status === 'saved') {\n console.log(chalk.yellow('\u2713 Clear recommended'));\n console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);\n process.exit(0);\n } else {\n console.log(chalk.green('\u2717 Clear not needed'));\n console.log(`Context usage: ${Math.round(usage.percentageUsed)}%`);\n process.exit(1);\n }\n}\n\nasync function saveLedger(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n spinner.start('Saving continuity ledger...');\n\n const ledgerPath = await clearSurvival.saveContinuityLedger();\n\n spinner.succeed(chalk.green('Continuity ledger saved'));\n console.log(chalk.cyan(`Location: ${ledgerPath}`));\n\n // Show what was saved\n const ledger = JSON.parse(await fs.readFile(ledgerPath, 'utf-8'));\n console.log('\\nSaved:');\n console.log(` \u2022 ${ledger.activeFrames.length} active frames`);\n console.log(` \u2022 ${ledger.decisions.length} key decisions`);\n console.log(\n ` \u2022 ${ledger.context.importantTasks?.length || 0} important tasks`\n );\n}\n\nasync function restoreFromLedger(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n spinner.start('Restoring from continuity ledger...');\n\n const result = await clearSurvival.restoreFromLedger();\n\n if (result.success) {\n spinner.succeed(chalk.green('Context restored from ledger'));\n console.log('\\nRestored:');\n console.log(` \u2022 ${result.restoredFrames} frames`);\n console.log(` \u2022 ${result.restoredDecisions} decisions`);\n } else {\n spinner.fail(chalk.red('Failed to restore from ledger'));\n console.log(chalk.yellow(result.message));\n }\n}\n\nasync function showLedger(projectRoot: string): Promise<void> {\n const ledgerPath = path.join(projectRoot, '.stackmemory', 'continuity.json');\n\n if (!existsSync(ledgerPath)) {\n console.log(chalk.yellow('No continuity ledger found'));\n return;\n }\n\n const ledger = JSON.parse(await fs.readFile(ledgerPath, 'utf-8'));\n\n console.log(chalk.bold('\\n\uD83D\uDCD6 Continuity Ledger'));\n console.log('\u2500'.repeat(40));\n console.log(`Created: ${new Date(ledger.timestamp).toLocaleString()}`);\n console.log(`Active Frames: ${ledger.activeFrames.length}`);\n console.log(`Key Decisions: ${ledger.decisions.length}`);\n\n if (ledger.activeFrames.length > 0) {\n console.log('\\nActive Work:');\n ledger.activeFrames.slice(0, 5).forEach((frame: any) => {\n console.log(` \u2022 ${frame.name} (${frame.type})`);\n });\n }\n\n if (ledger.decisions.length > 0) {\n console.log('\\nKey Decisions:');\n ledger.decisions.slice(0, 3).forEach((decision: any) => {\n console.log(` \u2022 ${decision.decision}`);\n });\n }\n}\n\nasync function autoClear(\n clearSurvival: ClearSurvival,\n spinner: ora.Ora\n): Promise<void> {\n const usage = await clearSurvival.getContextUsage();\n const status = clearSurvival.assessContextStatus(usage);\n\n if (status === 'critical' || status === 'saved') {\n spinner.start('Auto-saving ledger before clear...');\n await clearSurvival.saveContinuityLedger();\n spinner.succeed('Ledger saved');\n\n spinner.start('Clearing context...');\n // Note: Actual clear implementation would go here\n // For now, just simulate\n await new Promise((resolve) => setTimeout(resolve, 1000));\n spinner.succeed('Context cleared successfully');\n } else {\n console.log(chalk.green('Context usage is healthy, no clear needed'));\n }\n}\n\nfunction getProgressBar(percentage: number): string {\n const filled = Math.round(percentage / 5);\n const empty = 20 - filled;\n\n let bar = '[';\n bar += chalk.green('\u25A0').repeat(Math.min(filled, 10));\n bar += chalk.yellow('\u25A0').repeat(Math.max(0, Math.min(filled - 10, 5)));\n bar += chalk.red('\u25A0').repeat(Math.max(0, filled - 15));\n bar += chalk.gray('\u25A1').repeat(empty);\n bar += ']';\n\n return bar;\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case 'healthy':\n return chalk.green('\u2713 Healthy (<50%)');\n case 'moderate':\n return chalk.blue('\u26A1 Moderate (50-70%)');\n case 'critical':\n return chalk.yellow('\u26A0\uFE0F Critical (70-85%)');\n case 'saved':\n return chalk.red('\uD83D\uDCBE Auto-saved (>85%)');\n default:\n return status;\n }\n}\n\n// Export for use in main CLI\nexport default clearCommand;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,445 @@
1
+ import { fileURLToPath as __fileURLToPath } from 'url';
2
+ import { dirname as __pathDirname } from 'path';
3
+ const __filename = __fileURLToPath(import.meta.url);
4
+ const __dirname = __pathDirname(__filename);
5
+ import { Command } from "commander";
6
+ import * as fs from "fs";
7
+ import * as path from "path";
8
+ import * as yaml from "js-yaml";
9
+ import chalk from "chalk";
10
+ import { ConfigManager } from "../../core/config/config-manager.js";
11
+ import {
12
+ DEFAULT_CONFIG,
13
+ DEFAULT_WEIGHTS,
14
+ DEFAULT_TOOL_SCORES
15
+ } from "../../core/config/types.js";
16
+ import {
17
+ loadStorageConfig,
18
+ enableChromaDB,
19
+ disableChromaDB,
20
+ getStorageModeDescription
21
+ } from "../../core/config/storage-config.js";
22
+ import inquirer from "inquirer";
23
+ function createConfigCommand() {
24
+ const config = new Command("config").description(
25
+ "Manage StackMemory configuration"
26
+ );
27
+ config.command("validate").description("Validate configuration file").option(
28
+ "-f, --file <path>",
29
+ "Path to config file",
30
+ ".stackmemory/config.yaml"
31
+ ).option("--fix", "Attempt to auto-fix common issues").action(async (options) => {
32
+ console.log(chalk.blue("\u{1F50D} Validating configuration..."));
33
+ const configPath = path.resolve(options.file);
34
+ const manager = new ConfigManager(configPath);
35
+ const result = manager.validate();
36
+ if (result.errors.length > 0) {
37
+ console.log(chalk.red("\n\u2717 Errors:"));
38
+ result.errors.forEach((error) => {
39
+ console.log(chalk.red(` \u2022 ${error}`));
40
+ });
41
+ }
42
+ if (result.warnings.length > 0) {
43
+ console.log(chalk.yellow("\n\u26A0 Warnings:"));
44
+ result.warnings.forEach((warning) => {
45
+ console.log(chalk.yellow(` \u2022 ${warning}`));
46
+ });
47
+ }
48
+ if (result.suggestions.length > 0) {
49
+ console.log(chalk.cyan("\n\u{1F4A1} Suggestions:"));
50
+ result.suggestions.forEach((suggestion) => {
51
+ console.log(chalk.cyan(` \u2022 ${suggestion}`));
52
+ });
53
+ }
54
+ if (options.fix && result.errors.length > 0) {
55
+ console.log(chalk.blue("\n\u{1F527} Attempting auto-fix..."));
56
+ const config2 = manager.getConfig();
57
+ const weights = config2.scoring.weights;
58
+ const weightSum = weights.base + weights.impact + weights.persistence + weights.reference;
59
+ if (Math.abs(weightSum - 1) > 1e-3) {
60
+ const factor = 1 / weightSum;
61
+ manager.updateWeights({
62
+ base: weights.base * factor,
63
+ impact: weights.impact * factor,
64
+ persistence: weights.persistence * factor,
65
+ reference: weights.reference * factor
66
+ });
67
+ manager.save();
68
+ console.log(chalk.green(" \u2713 Normalized weights to sum to 1.0"));
69
+ }
70
+ }
71
+ if (result.valid) {
72
+ console.log(chalk.green("\n\u2705 Configuration is valid"));
73
+ process.exit(0);
74
+ } else {
75
+ console.log(chalk.red("\n\u274C Configuration has errors"));
76
+ process.exit(1);
77
+ }
78
+ });
79
+ config.command("init").description("Initialize configuration file with defaults").option("-p, --profile <name>", "Use a preset profile", "default").option("-f, --force", "Overwrite existing config").action(async (options) => {
80
+ const configPath = path.join(
81
+ process.cwd(),
82
+ ".stackmemory",
83
+ "config.yaml"
84
+ );
85
+ if (fs.existsSync(configPath) && !options.force) {
86
+ console.log(
87
+ chalk.yellow(
88
+ "\u26A0 Config file already exists. Use --force to overwrite."
89
+ )
90
+ );
91
+ process.exit(1);
92
+ }
93
+ const dir = path.dirname(configPath);
94
+ if (!fs.existsSync(dir)) {
95
+ fs.mkdirSync(dir, { recursive: true });
96
+ }
97
+ const config2 = { ...DEFAULT_CONFIG };
98
+ if (options.profile && options.profile !== "default") {
99
+ config2.profile = options.profile;
100
+ }
101
+ const content = yaml.dump(config2, {
102
+ indent: 2,
103
+ lineWidth: 120,
104
+ noRefs: true
105
+ });
106
+ fs.writeFileSync(configPath, content, "utf-8");
107
+ console.log(chalk.green(`\u2705 Created config file at ${configPath}`));
108
+ if (options.profile !== "default") {
109
+ console.log(chalk.cyan(`\u{1F4CB} Using profile: ${options.profile}`));
110
+ }
111
+ });
112
+ config.command("show").description("Show current configuration").option("-p, --profile <name>", "Show specific profile").action(async (options) => {
113
+ const manager = new ConfigManager();
114
+ const config2 = manager.getConfig();
115
+ if (options.profile) {
116
+ const profiles = manager.getProfiles();
117
+ const profile = profiles[options.profile];
118
+ if (!profile) {
119
+ console.log(chalk.red(`\u274C Profile '${options.profile}' not found`));
120
+ console.log(chalk.cyan("Available profiles:"));
121
+ Object.keys(profiles).forEach((name) => {
122
+ console.log(` \u2022 ${name}`);
123
+ });
124
+ process.exit(1);
125
+ }
126
+ console.log(chalk.blue(`
127
+ \u{1F4CB} Profile: ${profile.name}`));
128
+ if (profile.description) {
129
+ console.log(chalk.gray(` ${profile.description}`));
130
+ }
131
+ console.log("\n" + yaml.dump(profile, { indent: 2 }));
132
+ } else {
133
+ console.log(chalk.blue("\n\u{1F4CB} Current Configuration:"));
134
+ if (config2.profile) {
135
+ console.log(chalk.cyan(` Active Profile: ${config2.profile}`));
136
+ }
137
+ console.log("\n" + yaml.dump(config2, { indent: 2 }));
138
+ }
139
+ });
140
+ config.command("set-profile <name>").description("Set active profile").action(async (name) => {
141
+ const manager = new ConfigManager();
142
+ if (manager.setProfile(name)) {
143
+ manager.save();
144
+ console.log(chalk.green(`\u2705 Active profile set to: ${name}`));
145
+ } else {
146
+ console.log(chalk.red(`\u274C Profile '${name}' not found`));
147
+ console.log(chalk.cyan("Available profiles:"));
148
+ Object.keys(manager.getProfiles()).forEach((profile) => {
149
+ console.log(` \u2022 ${profile}`);
150
+ });
151
+ process.exit(1);
152
+ }
153
+ });
154
+ config.command("list-profiles").description("List available profiles").action(async () => {
155
+ const manager = new ConfigManager();
156
+ const profiles = manager.getProfiles();
157
+ const currentProfile = manager.getConfig().profile;
158
+ console.log(chalk.blue("\n\u{1F4CB} Available Profiles:"));
159
+ Object.entries(profiles).forEach(([name, profile]) => {
160
+ const marker = name === currentProfile ? chalk.green(" \u2713") : "";
161
+ console.log(` \u2022 ${chalk.cyan(name)}${marker}`);
162
+ if (profile.description) {
163
+ console.log(chalk.gray(` ${profile.description}`));
164
+ }
165
+ });
166
+ });
167
+ config.command("test-score <tool>").description("Test importance scoring for a tool").option("-f, --files <number>", "Number of files affected", parseInt).option("-p, --permanent", "Is change permanent").option("-r, --references <number>", "Reference count", parseInt).action(async (tool, options) => {
168
+ const manager = new ConfigManager();
169
+ const score = manager.calculateScore(tool, {
170
+ filesAffected: options.files,
171
+ isPermanent: options.permanent,
172
+ referenceCount: options.references
173
+ });
174
+ const config2 = manager.getConfig();
175
+ const baseScore = config2.scoring.tool_scores[tool] || 0.5;
176
+ console.log(chalk.blue("\n\u{1F4CA} Score Calculation:"));
177
+ console.log(` Tool: ${chalk.cyan(tool)}`);
178
+ console.log(` Base Score: ${chalk.yellow(baseScore.toFixed(3))}`);
179
+ if (options.files !== void 0) {
180
+ console.log(` Files Affected: ${options.files}`);
181
+ }
182
+ if (options.permanent) {
183
+ console.log(` Permanent: ${chalk.green("Yes")}`);
184
+ }
185
+ if (options.references !== void 0) {
186
+ console.log(` References: ${options.references}`);
187
+ }
188
+ console.log(chalk.blue("\n Weights:"));
189
+ console.log(` Base: ${config2.scoring.weights.base}`);
190
+ console.log(` Impact: ${config2.scoring.weights.impact}`);
191
+ console.log(` Persistence: ${config2.scoring.weights.persistence}`);
192
+ console.log(` Reference: ${config2.scoring.weights.reference}`);
193
+ console.log(chalk.green(`
194
+ Final Score: ${score.toFixed(3)}`));
195
+ let level = "Low";
196
+ let color = chalk.gray;
197
+ if (score >= 0.8) {
198
+ level = "Critical";
199
+ color = chalk.red;
200
+ } else if (score >= 0.6) {
201
+ level = "High";
202
+ color = chalk.yellow;
203
+ } else if (score >= 0.4) {
204
+ level = "Medium";
205
+ color = chalk.cyan;
206
+ }
207
+ console.log(` Importance: ${color(level)}`);
208
+ });
209
+ config.command("create-profile <name>").description("Create a custom configuration profile").option("-d, --description <text>", "Profile description").option("-b, --base-weight <number>", "Base weight (0-1)", parseFloat).option("-i, --impact-weight <number>", "Impact weight (0-1)", parseFloat).option(
210
+ "-p, --persistence-weight <number>",
211
+ "Persistence weight (0-1)",
212
+ parseFloat
213
+ ).option(
214
+ "-r, --reference-weight <number>",
215
+ "Reference weight (0-1)",
216
+ parseFloat
217
+ ).option("--copy-from <profile>", "Copy settings from existing profile").action(async (name, options) => {
218
+ const manager = new ConfigManager();
219
+ const config2 = manager.getConfig();
220
+ if (config2.profiles && config2.profiles[name]) {
221
+ console.log(
222
+ chalk.yellow(
223
+ `\u26A0 Profile '${name}' already exists. Use 'edit-profile' to modify it.`
224
+ )
225
+ );
226
+ process.exit(1);
227
+ }
228
+ let newProfile;
229
+ if (options.copyFrom) {
230
+ const sourceProfile = config2.profiles?.[options.copyFrom];
231
+ if (!sourceProfile) {
232
+ console.log(
233
+ chalk.red(`\u274C Source profile '${options.copyFrom}' not found`)
234
+ );
235
+ process.exit(1);
236
+ }
237
+ newProfile = {
238
+ ...sourceProfile,
239
+ name,
240
+ description: options.description
241
+ };
242
+ } else {
243
+ const weights = {
244
+ base: options.baseWeight ?? DEFAULT_WEIGHTS.base,
245
+ impact: options.impactWeight ?? DEFAULT_WEIGHTS.impact,
246
+ persistence: options.persistenceWeight ?? DEFAULT_WEIGHTS.persistence,
247
+ reference: options.referenceWeight ?? DEFAULT_WEIGHTS.reference
248
+ };
249
+ const sum = weights.base + weights.impact + weights.persistence + weights.reference;
250
+ if (Math.abs(sum - 1) > 1e-3) {
251
+ console.log(
252
+ chalk.red(`\u274C Weights must sum to 1.0 (current: ${sum.toFixed(3)})`)
253
+ );
254
+ console.log(chalk.yellow("\nNormalizing weights to sum to 1.0..."));
255
+ const factor = 1 / sum;
256
+ weights.base *= factor;
257
+ weights.impact *= factor;
258
+ weights.persistence *= factor;
259
+ weights.reference *= factor;
260
+ }
261
+ newProfile = {
262
+ name,
263
+ description: options.description || `Custom profile created ${(/* @__PURE__ */ new Date()).toLocaleDateString()}`,
264
+ scoring: {
265
+ weights,
266
+ tool_scores: DEFAULT_TOOL_SCORES
267
+ }
268
+ };
269
+ }
270
+ if (!config2.profiles) {
271
+ config2.profiles = {};
272
+ }
273
+ config2.profiles[name] = newProfile;
274
+ manager.save();
275
+ console.log(chalk.green(`\u2705 Created profile: ${name}`));
276
+ console.log(chalk.blue("\nProfile Configuration:"));
277
+ console.log(yaml.dump(newProfile, { indent: 2 }));
278
+ console.log(
279
+ chalk.cyan(`
280
+ Activate with: stackmemory config set-profile ${name}`)
281
+ );
282
+ });
283
+ config.command("edit-profile <name>").description("Edit an existing profile").option(
284
+ "-s, --set-tool <tool:score>",
285
+ "Set tool score (e.g., search:0.95)",
286
+ (value, previous) => {
287
+ const result = previous || {};
288
+ const [tool, score] = value.split(":");
289
+ result[tool] = parseFloat(score);
290
+ return result;
291
+ },
292
+ {}
293
+ ).option(
294
+ "-w, --set-weight <type:value>",
295
+ "Set weight (e.g., base:0.4)",
296
+ (value, previous) => {
297
+ const result = previous || {};
298
+ const [type, weight] = value.split(":");
299
+ result[type] = parseFloat(weight);
300
+ return result;
301
+ },
302
+ {}
303
+ ).action(async (name, options) => {
304
+ const manager = new ConfigManager();
305
+ const config2 = manager.getConfig();
306
+ if (!config2.profiles?.[name]) {
307
+ console.log(chalk.red(`\u274C Profile '${name}' not found`));
308
+ process.exit(1);
309
+ }
310
+ const profile = config2.profiles[name];
311
+ if (Object.keys(options.setTool).length > 0) {
312
+ if (!profile.scoring) {
313
+ profile.scoring = {};
314
+ }
315
+ if (!profile.scoring.tool_scores) {
316
+ profile.scoring.tool_scores = {};
317
+ }
318
+ Object.assign(profile.scoring.tool_scores, options.setTool);
319
+ console.log(chalk.green("\u2713 Updated tool scores"));
320
+ }
321
+ if (Object.keys(options.setWeight).length > 0) {
322
+ if (!profile.scoring) {
323
+ profile.scoring = {};
324
+ }
325
+ if (!profile.scoring.weights) {
326
+ profile.scoring.weights = { ...DEFAULT_WEIGHTS };
327
+ }
328
+ Object.assign(profile.scoring.weights, options.setWeight);
329
+ const weights = profile.scoring.weights;
330
+ const sum = (weights.base || 0) + (weights.impact || 0) + (weights.persistence || 0) + (weights.reference || 0);
331
+ if (Math.abs(sum - 1) > 1e-3) {
332
+ console.log(
333
+ chalk.yellow(`\u26A0 Weights sum to ${sum.toFixed(3)}, normalizing...`)
334
+ );
335
+ const factor = 1 / sum;
336
+ if (weights.base) weights.base *= factor;
337
+ if (weights.impact) weights.impact *= factor;
338
+ if (weights.persistence) weights.persistence *= factor;
339
+ if (weights.reference) weights.reference *= factor;
340
+ }
341
+ console.log(chalk.green("\u2713 Updated weights"));
342
+ }
343
+ manager.save();
344
+ console.log(chalk.green(`
345
+ \u2705 Profile '${name}' updated`));
346
+ console.log(chalk.blue("\nUpdated Configuration:"));
347
+ console.log(yaml.dump(profile, { indent: 2 }));
348
+ });
349
+ config.command("profile-report [profile]").description("Show profile effectiveness report").action(async (profile) => {
350
+ console.log(chalk.blue("\n\u{1F4CA} Profile Effectiveness Report"));
351
+ if (profile) {
352
+ console.log(chalk.cyan(`
353
+ Profile: ${profile}`));
354
+ console.log("Note: Run tools with this profile to generate metrics");
355
+ } else {
356
+ console.log(
357
+ "\nNote: Tool scoring metrics will be available after running MCP tools"
358
+ );
359
+ }
360
+ console.log(chalk.gray("\nMetrics tracked:"));
361
+ console.log(" \u2022 Average score per tool");
362
+ console.log(" \u2022 High-importance operations");
363
+ console.log(" \u2022 Profile usage frequency");
364
+ console.log(" \u2022 Score trends over time");
365
+ });
366
+ const storageCmd = config.command("storage").description(
367
+ `Manage storage configuration
368
+
369
+ Storage Modes:
370
+ sqlite (default): Local storage only, fast, no external dependencies
371
+ hybrid: SQLite + ChromaDB for semantic search and cloud backup`
372
+ );
373
+ storageCmd.command("show").description("Show current storage configuration").action(async () => {
374
+ const storageConfig = loadStorageConfig();
375
+ console.log(chalk.blue("\nStorage Configuration:"));
376
+ console.log(` Mode: ${chalk.cyan(storageConfig.mode)}`);
377
+ console.log(` Description: ${chalk.gray(getStorageModeDescription())}`);
378
+ if (storageConfig.chromadb.enabled) {
379
+ console.log(chalk.blue("\nChromaDB Settings:"));
380
+ console.log(` Enabled: ${chalk.green("Yes")}`);
381
+ console.log(
382
+ ` API URL: ${chalk.gray(storageConfig.chromadb.apiUrl || "https://api.trychroma.com")}`
383
+ );
384
+ console.log(
385
+ ` Tenant: ${chalk.gray(storageConfig.chromadb.tenant || "default_tenant")}`
386
+ );
387
+ console.log(
388
+ ` Database: ${chalk.gray(storageConfig.chromadb.database || "default_database")}`
389
+ );
390
+ console.log(
391
+ ` API Key: ${chalk.gray(storageConfig.chromadb.apiKey ? "[configured]" : "[not set]")}`
392
+ );
393
+ } else {
394
+ console.log(chalk.blue("\nChromaDB Settings:"));
395
+ console.log(` Enabled: ${chalk.yellow("No")}`);
396
+ console.log(
397
+ chalk.gray(
398
+ " Enable with: stackmemory config storage enable-chromadb"
399
+ )
400
+ );
401
+ }
402
+ });
403
+ storageCmd.command("enable-chromadb").description("Enable ChromaDB for semantic search and cloud backup").option("--api-key <key>", "ChromaDB API key").option("--api-url <url>", "ChromaDB API URL", "https://api.trychroma.com").action(async (options) => {
404
+ let apiKey = options.apiKey;
405
+ if (!apiKey && process.stdin.isTTY) {
406
+ const answers = await inquirer.prompt([
407
+ {
408
+ type: "password",
409
+ name: "apiKey",
410
+ message: "Enter your ChromaDB API key:",
411
+ validate: (input) => {
412
+ if (!input || input.trim().length === 0) {
413
+ return "API key is required for ChromaDB";
414
+ }
415
+ return true;
416
+ }
417
+ }
418
+ ]);
419
+ apiKey = answers.apiKey;
420
+ }
421
+ if (!apiKey) {
422
+ console.log(chalk.red("[ERROR] ChromaDB API key is required."));
423
+ console.log(
424
+ chalk.gray("Provide via --api-key flag or run interactively.")
425
+ );
426
+ process.exit(1);
427
+ }
428
+ enableChromaDB({
429
+ apiKey,
430
+ apiUrl: options.apiUrl
431
+ });
432
+ console.log(chalk.green("[OK] ChromaDB enabled successfully."));
433
+ console.log(chalk.gray(`Storage mode: ${getStorageModeDescription()}`));
434
+ });
435
+ storageCmd.command("disable-chromadb").description("Disable ChromaDB and use SQLite-only storage").action(async () => {
436
+ disableChromaDB();
437
+ console.log(chalk.green("[OK] ChromaDB disabled."));
438
+ console.log(chalk.gray(`Storage mode: ${getStorageModeDescription()}`));
439
+ });
440
+ return config;
441
+ }
442
+ export {
443
+ createConfigCommand
444
+ };
445
+ //# sourceMappingURL=config.js.map