@stackmemoryai/stackmemory 0.5.57 → 0.5.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (611) hide show
  1. package/bin/codex-smd +6 -0
  2. package/dist/cli/codex-sm-danger.js +21 -0
  3. package/dist/cli/codex-sm-danger.js.map +7 -0
  4. package/dist/cli/commands/handoff.js +33 -3
  5. package/dist/cli/commands/handoff.js.map +2 -2
  6. package/dist/cli/commands/search.js +20 -3
  7. package/dist/cli/commands/search.js.map +2 -2
  8. package/dist/core/database/sqlite-adapter.js +13 -3
  9. package/dist/core/database/sqlite-adapter.js.map +2 -2
  10. package/dist/core/errors/error-utils.js +208 -0
  11. package/dist/core/errors/error-utils.js.map +7 -0
  12. package/dist/core/errors/index.js +13 -4
  13. package/dist/core/errors/index.js.map +2 -2
  14. package/dist/core/merge/unified-merge-resolver.js +303 -0
  15. package/dist/core/merge/unified-merge-resolver.js.map +7 -0
  16. package/dist/core/monitoring/logger.js +61 -9
  17. package/dist/core/monitoring/logger.js.map +2 -2
  18. package/dist/core/security/index.js +35 -0
  19. package/dist/core/security/index.js.map +7 -0
  20. package/dist/core/security/input-sanitizer.js +321 -0
  21. package/dist/core/security/input-sanitizer.js.map +7 -0
  22. package/dist/core/session/enhanced-handoff.js +136 -2
  23. package/dist/core/session/enhanced-handoff.js.map +3 -3
  24. package/dist/integrations/linear/client.js +5 -1
  25. package/dist/integrations/linear/client.js.map +2 -2
  26. package/dist/integrations/mcp/remote-server.js +27 -36
  27. package/dist/integrations/mcp/remote-server.js.map +2 -2
  28. package/dist/integrations/mcp/server.js +44 -29
  29. package/dist/integrations/mcp/server.js.map +3 -3
  30. package/dist/scripts/benchmark-performance.js +48 -0
  31. package/dist/scripts/benchmark-performance.js.map +7 -0
  32. package/dist/scripts/check-redis.js +42 -0
  33. package/dist/scripts/check-redis.js.map +7 -0
  34. package/dist/scripts/initialize.js +116 -0
  35. package/dist/scripts/initialize.js.map +7 -0
  36. package/dist/scripts/list-linear-tasks.js +124 -0
  37. package/dist/scripts/list-linear-tasks.js.map +7 -0
  38. package/dist/scripts/measure-handoff-impact.js +340 -0
  39. package/dist/scripts/measure-handoff-impact.js.map +7 -0
  40. package/dist/scripts/query-chromadb.js +160 -0
  41. package/dist/scripts/query-chromadb.js.map +7 -0
  42. package/dist/scripts/show-linear-summary.js +119 -0
  43. package/dist/scripts/show-linear-summary.js.map +7 -0
  44. package/dist/scripts/simple-swarm-demo.js +90 -0
  45. package/dist/scripts/simple-swarm-demo.js.map +7 -0
  46. package/dist/scripts/status.js +155 -0
  47. package/dist/scripts/status.js.map +7 -0
  48. package/dist/scripts/test-chromadb-sync.js +192 -0
  49. package/dist/scripts/test-chromadb-sync.js.map +7 -0
  50. package/dist/scripts/test-ralph-iteration-fix.js +86 -0
  51. package/dist/scripts/test-ralph-iteration-fix.js.map +7 -0
  52. package/dist/scripts/test-ralph-iterations.js +121 -0
  53. package/dist/scripts/test-ralph-iterations.js.map +7 -0
  54. package/dist/scripts/test-redis-storage.js +389 -0
  55. package/dist/scripts/test-redis-storage.js.map +7 -0
  56. package/dist/scripts/test-simple-ralph-state-sync.js +115 -0
  57. package/dist/scripts/test-simple-ralph-state-sync.js.map +7 -0
  58. package/dist/scripts/test-swarm-fixes.js +125 -0
  59. package/dist/scripts/test-swarm-fixes.js.map +7 -0
  60. package/dist/scripts/test-swarm-tui.js +23 -0
  61. package/dist/scripts/test-swarm-tui.js.map +7 -0
  62. package/dist/scripts/test-tui-shortcuts.js +52 -0
  63. package/dist/scripts/test-tui-shortcuts.js.map +7 -0
  64. package/dist/scripts/validate-tui-shortcuts.js +60 -0
  65. package/dist/scripts/validate-tui-shortcuts.js.map +7 -0
  66. package/dist/src/agents/core/agent-task-manager.js +527 -0
  67. package/dist/src/agents/core/agent-task-manager.js.map +7 -0
  68. package/dist/src/agents/verifiers/base-verifier.js +133 -0
  69. package/dist/src/agents/verifiers/base-verifier.js.map +7 -0
  70. package/dist/src/agents/verifiers/formatter-verifier.js +130 -0
  71. package/dist/src/agents/verifiers/formatter-verifier.js.map +7 -0
  72. package/dist/src/agents/verifiers/llm-judge.js +252 -0
  73. package/dist/src/agents/verifiers/llm-judge.js.map +7 -0
  74. package/dist/src/cli/auto-detect.js +321 -0
  75. package/dist/src/cli/auto-detect.js.map +7 -0
  76. package/dist/src/cli/claude-sm-danger.js +21 -0
  77. package/dist/src/cli/claude-sm-danger.js.map +7 -0
  78. package/dist/src/cli/claude-sm.js +1156 -0
  79. package/dist/src/cli/claude-sm.js.map +7 -0
  80. package/dist/src/cli/codex-sm-danger.js +21 -0
  81. package/dist/src/cli/codex-sm-danger.js.map +7 -0
  82. package/dist/src/cli/codex-sm.js +349 -0
  83. package/dist/src/cli/codex-sm.js.map +7 -0
  84. package/dist/src/cli/commands/api.js +232 -0
  85. package/dist/src/cli/commands/api.js.map +7 -0
  86. package/dist/src/cli/commands/auto-background.js +180 -0
  87. package/dist/src/cli/commands/auto-background.js.map +7 -0
  88. package/dist/src/cli/commands/cleanup-processes.js +68 -0
  89. package/dist/src/cli/commands/cleanup-processes.js.map +7 -0
  90. package/dist/src/cli/commands/clear.js +202 -0
  91. package/dist/src/cli/commands/clear.js.map +7 -0
  92. package/dist/src/cli/commands/config.js +445 -0
  93. package/dist/src/cli/commands/config.js.map +7 -0
  94. package/dist/src/cli/commands/context-rehydrate.js +751 -0
  95. package/dist/src/cli/commands/context-rehydrate.js.map +7 -0
  96. package/dist/src/cli/commands/context.js +343 -0
  97. package/dist/src/cli/commands/context.js.map +7 -0
  98. package/dist/src/cli/commands/daemon.js +392 -0
  99. package/dist/src/cli/commands/daemon.js.map +7 -0
  100. package/dist/src/cli/commands/dashboard.js +210 -0
  101. package/dist/src/cli/commands/dashboard.js.map +7 -0
  102. package/dist/src/cli/commands/db.js +147 -0
  103. package/dist/src/cli/commands/db.js.map +7 -0
  104. package/dist/src/cli/commands/decision.js +266 -0
  105. package/dist/src/cli/commands/decision.js.map +7 -0
  106. package/dist/src/cli/commands/discovery.js +279 -0
  107. package/dist/src/cli/commands/discovery.js.map +7 -0
  108. package/dist/src/cli/commands/handoff.js +624 -0
  109. package/dist/src/cli/commands/handoff.js.map +7 -0
  110. package/dist/src/cli/commands/hooks.js +298 -0
  111. package/dist/src/cli/commands/hooks.js.map +7 -0
  112. package/dist/src/cli/commands/linear.js +529 -0
  113. package/dist/src/cli/commands/linear.js.map +7 -0
  114. package/dist/src/cli/commands/log.js +169 -0
  115. package/dist/src/cli/commands/log.js.map +7 -0
  116. package/dist/src/cli/commands/login.js +172 -0
  117. package/dist/src/cli/commands/login.js.map +7 -0
  118. package/dist/src/cli/commands/migrate.js +240 -0
  119. package/dist/src/cli/commands/migrate.js.map +7 -0
  120. package/dist/src/cli/commands/model.js +533 -0
  121. package/dist/src/cli/commands/model.js.map +7 -0
  122. package/dist/src/cli/commands/onboard.js +536 -0
  123. package/dist/src/cli/commands/onboard.js.map +7 -0
  124. package/dist/src/cli/commands/projects.js +199 -0
  125. package/dist/src/cli/commands/projects.js.map +7 -0
  126. package/dist/src/cli/commands/ralph.js +909 -0
  127. package/dist/src/cli/commands/ralph.js.map +7 -0
  128. package/dist/src/cli/commands/retrieval.js +248 -0
  129. package/dist/src/cli/commands/retrieval.js.map +7 -0
  130. package/dist/src/cli/commands/search.js +173 -0
  131. package/dist/src/cli/commands/search.js.map +7 -0
  132. package/dist/src/cli/commands/service.js +749 -0
  133. package/dist/src/cli/commands/service.js.map +7 -0
  134. package/dist/src/cli/commands/session.js +200 -0
  135. package/dist/src/cli/commands/session.js.map +7 -0
  136. package/dist/src/cli/commands/settings.js +306 -0
  137. package/dist/src/cli/commands/settings.js.map +7 -0
  138. package/dist/src/cli/commands/setup.js +701 -0
  139. package/dist/src/cli/commands/setup.js.map +7 -0
  140. package/dist/src/cli/commands/shell.js +249 -0
  141. package/dist/src/cli/commands/shell.js.map +7 -0
  142. package/dist/src/cli/commands/signup.js +50 -0
  143. package/dist/src/cli/commands/signup.js.map +7 -0
  144. package/dist/src/cli/commands/skills.js +470 -0
  145. package/dist/src/cli/commands/skills.js.map +7 -0
  146. package/dist/src/cli/commands/sms-notify.js +795 -0
  147. package/dist/src/cli/commands/sms-notify.js.map +7 -0
  148. package/dist/src/cli/commands/storage-tier.js +183 -0
  149. package/dist/src/cli/commands/storage-tier.js.map +7 -0
  150. package/dist/src/cli/commands/sweep.js +249 -0
  151. package/dist/src/cli/commands/sweep.js.map +7 -0
  152. package/dist/src/cli/commands/tasks.js +213 -0
  153. package/dist/src/cli/commands/tasks.js.map +7 -0
  154. package/dist/src/cli/commands/worktree.js +319 -0
  155. package/dist/src/cli/commands/worktree.js.map +7 -0
  156. package/dist/src/cli/index.js +594 -0
  157. package/dist/src/cli/index.js.map +7 -0
  158. package/dist/src/cli/opencode-sm.js +448 -0
  159. package/dist/src/cli/opencode-sm.js.map +7 -0
  160. package/dist/src/cli/utils/viewer.js +96 -0
  161. package/dist/src/cli/utils/viewer.js.map +7 -0
  162. package/dist/src/core/config/config-manager.js +398 -0
  163. package/dist/src/core/config/config-manager.js.map +7 -0
  164. package/dist/src/core/config/feature-flags.js +76 -0
  165. package/dist/src/core/config/feature-flags.js.map +7 -0
  166. package/dist/src/core/config/storage-config.js +115 -0
  167. package/dist/src/core/config/storage-config.js.map +7 -0
  168. package/dist/src/core/config/types.js +144 -0
  169. package/dist/src/core/config/types.js.map +7 -0
  170. package/dist/src/core/context/auto-context.js +80 -0
  171. package/dist/src/core/context/auto-context.js.map +7 -0
  172. package/dist/src/core/context/dual-stack-manager.js +870 -0
  173. package/dist/src/core/context/dual-stack-manager.js.map +7 -0
  174. package/dist/src/core/context/enhanced-rehydration.js +994 -0
  175. package/dist/src/core/context/enhanced-rehydration.js.map +7 -0
  176. package/dist/src/core/context/frame-database.js +479 -0
  177. package/dist/src/core/context/frame-database.js.map +7 -0
  178. package/dist/src/core/context/frame-digest.js +250 -0
  179. package/dist/src/core/context/frame-digest.js.map +7 -0
  180. package/dist/src/core/context/frame-handoff-manager.js +778 -0
  181. package/dist/src/core/context/frame-handoff-manager.js.map +7 -0
  182. package/dist/src/core/context/frame-lifecycle-hooks.js +119 -0
  183. package/dist/src/core/context/frame-lifecycle-hooks.js.map +7 -0
  184. package/dist/src/core/context/frame-recovery.js +302 -0
  185. package/dist/src/core/context/frame-recovery.js.map +7 -0
  186. package/dist/src/core/context/frame-stack.js +314 -0
  187. package/dist/src/core/context/frame-stack.js.map +7 -0
  188. package/dist/src/core/context/frame-types.js +5 -0
  189. package/dist/src/core/context/frame-types.js.map +7 -0
  190. package/dist/src/core/context/index.js +25 -0
  191. package/dist/src/core/context/index.js.map +7 -0
  192. package/dist/src/core/context/permission-manager.js +185 -0
  193. package/dist/src/core/context/permission-manager.js.map +7 -0
  194. package/dist/src/core/context/recursive-context-manager.js +592 -0
  195. package/dist/src/core/context/recursive-context-manager.js.map +7 -0
  196. package/dist/src/core/context/refactored-frame-manager.js +754 -0
  197. package/dist/src/core/context/refactored-frame-manager.js.map +7 -0
  198. package/dist/src/core/context/shared-context-layer.js +621 -0
  199. package/dist/src/core/context/shared-context-layer.js.map +7 -0
  200. package/dist/src/core/context/stack-merge-resolver.js +749 -0
  201. package/dist/src/core/context/stack-merge-resolver.js.map +7 -0
  202. package/dist/src/core/context/validation.js +130 -0
  203. package/dist/src/core/context/validation.js.map +7 -0
  204. package/dist/src/core/database/batch-operations.js +384 -0
  205. package/dist/src/core/database/batch-operations.js.map +7 -0
  206. package/dist/src/core/database/connection-pool.js +330 -0
  207. package/dist/src/core/database/connection-pool.js.map +7 -0
  208. package/dist/src/core/database/database-adapter.js +60 -0
  209. package/dist/src/core/database/database-adapter.js.map +7 -0
  210. package/dist/src/core/database/migration-manager.js +614 -0
  211. package/dist/src/core/database/migration-manager.js.map +7 -0
  212. package/dist/src/core/database/query-cache.js +298 -0
  213. package/dist/src/core/database/query-cache.js.map +7 -0
  214. package/dist/src/core/database/query-router.js +430 -0
  215. package/dist/src/core/database/query-router.js.map +7 -0
  216. package/dist/src/core/database/sqlite-adapter.js +738 -0
  217. package/dist/src/core/database/sqlite-adapter.js.map +7 -0
  218. package/dist/src/core/digest/enhanced-hybrid-digest.js +277 -0
  219. package/dist/src/core/digest/enhanced-hybrid-digest.js.map +7 -0
  220. package/dist/src/core/digest/frame-digest-integration.js +176 -0
  221. package/dist/src/core/digest/frame-digest-integration.js.map +7 -0
  222. package/dist/src/core/digest/hybrid-digest-generator.js +553 -0
  223. package/dist/src/core/digest/hybrid-digest-generator.js.map +7 -0
  224. package/dist/src/core/digest/index.js +9 -0
  225. package/dist/src/core/digest/index.js.map +7 -0
  226. package/dist/src/core/digest/types.js +25 -0
  227. package/dist/src/core/digest/types.js.map +7 -0
  228. package/dist/src/core/errors/error-utils.js +208 -0
  229. package/dist/src/core/errors/error-utils.js.map +7 -0
  230. package/dist/src/core/errors/index.js +521 -0
  231. package/dist/src/core/errors/index.js.map +7 -0
  232. package/dist/src/core/errors/recovery.js +269 -0
  233. package/dist/src/core/errors/recovery.js.map +7 -0
  234. package/dist/src/core/execution/parallel-executor.js +258 -0
  235. package/dist/src/core/execution/parallel-executor.js.map +7 -0
  236. package/dist/src/core/frame/workflow-templates.js +319 -0
  237. package/dist/src/core/frame/workflow-templates.js.map +7 -0
  238. package/dist/src/core/merge/conflict-detector.js +431 -0
  239. package/dist/src/core/merge/conflict-detector.js.map +7 -0
  240. package/dist/src/core/merge/index.js +9 -0
  241. package/dist/src/core/merge/index.js.map +7 -0
  242. package/dist/src/core/merge/resolution-engine.js +558 -0
  243. package/dist/src/core/merge/resolution-engine.js.map +7 -0
  244. package/dist/src/core/merge/stack-diff.js +532 -0
  245. package/dist/src/core/merge/stack-diff.js.map +7 -0
  246. package/dist/src/core/merge/types.js +5 -0
  247. package/dist/src/core/merge/types.js.map +7 -0
  248. package/dist/src/core/merge/unified-merge-resolver.js +303 -0
  249. package/dist/src/core/merge/unified-merge-resolver.js.map +7 -0
  250. package/dist/src/core/models/fallback-monitor.js +232 -0
  251. package/dist/src/core/models/fallback-monitor.js.map +7 -0
  252. package/dist/src/core/models/model-router.js +340 -0
  253. package/dist/src/core/models/model-router.js.map +7 -0
  254. package/dist/src/core/monitoring/error-handler.js +49 -0
  255. package/dist/src/core/monitoring/error-handler.js.map +7 -0
  256. package/dist/src/core/monitoring/logger.js +202 -0
  257. package/dist/src/core/monitoring/logger.js.map +7 -0
  258. package/dist/src/core/monitoring/metrics.js +172 -0
  259. package/dist/src/core/monitoring/metrics.js.map +7 -0
  260. package/dist/src/core/monitoring/progress-tracker.js +189 -0
  261. package/dist/src/core/monitoring/progress-tracker.js.map +7 -0
  262. package/dist/src/core/monitoring/session-monitor.js +300 -0
  263. package/dist/src/core/monitoring/session-monitor.js.map +7 -0
  264. package/dist/src/core/performance/context-cache.js +273 -0
  265. package/dist/src/core/performance/context-cache.js.map +7 -0
  266. package/dist/src/core/performance/index.js +11 -0
  267. package/dist/src/core/performance/index.js.map +7 -0
  268. package/dist/src/core/performance/lazy-context-loader.js +327 -0
  269. package/dist/src/core/performance/lazy-context-loader.js.map +7 -0
  270. package/dist/src/core/performance/monitor.js +221 -0
  271. package/dist/src/core/performance/monitor.js.map +7 -0
  272. package/dist/src/core/performance/optimized-frame-context.js +345 -0
  273. package/dist/src/core/performance/optimized-frame-context.js.map +7 -0
  274. package/dist/src/core/performance/performance-benchmark.js +277 -0
  275. package/dist/src/core/performance/performance-benchmark.js.map +7 -0
  276. package/dist/src/core/performance/performance-profiler.js +370 -0
  277. package/dist/src/core/performance/performance-profiler.js.map +7 -0
  278. package/dist/src/core/performance/streaming-jsonl-parser.js +195 -0
  279. package/dist/src/core/performance/streaming-jsonl-parser.js.map +7 -0
  280. package/dist/src/core/persistence/postgres-adapter.js +349 -0
  281. package/dist/src/core/persistence/postgres-adapter.js.map +7 -0
  282. package/dist/src/core/projects/project-isolation.js +201 -0
  283. package/dist/src/core/projects/project-isolation.js.map +7 -0
  284. package/dist/src/core/projects/project-manager.js +697 -0
  285. package/dist/src/core/projects/project-manager.js.map +7 -0
  286. package/dist/src/core/query/query-parser.js +370 -0
  287. package/dist/src/core/query/query-parser.js.map +7 -0
  288. package/dist/src/core/query/query-templates.js +321 -0
  289. package/dist/src/core/query/query-templates.js.map +7 -0
  290. package/dist/src/core/retrieval/context-retriever.js +479 -0
  291. package/dist/src/core/retrieval/context-retriever.js.map +7 -0
  292. package/dist/src/core/retrieval/index.js +8 -0
  293. package/dist/src/core/retrieval/index.js.map +7 -0
  294. package/dist/src/core/retrieval/llm-context-retrieval.js +613 -0
  295. package/dist/src/core/retrieval/llm-context-retrieval.js.map +7 -0
  296. package/dist/src/core/retrieval/llm-provider.js +151 -0
  297. package/dist/src/core/retrieval/llm-provider.js.map +7 -0
  298. package/dist/src/core/retrieval/retrieval-audit.js +236 -0
  299. package/dist/src/core/retrieval/retrieval-audit.js.map +7 -0
  300. package/dist/src/core/retrieval/summary-generator.js +589 -0
  301. package/dist/src/core/retrieval/summary-generator.js.map +7 -0
  302. package/dist/src/core/retrieval/types.js +21 -0
  303. package/dist/src/core/retrieval/types.js.map +7 -0
  304. package/dist/src/core/security/index.js +35 -0
  305. package/dist/src/core/security/index.js.map +7 -0
  306. package/dist/src/core/security/input-sanitizer.js +321 -0
  307. package/dist/src/core/security/input-sanitizer.js.map +7 -0
  308. package/dist/src/core/session/clear-survival.js +465 -0
  309. package/dist/src/core/session/clear-survival.js.map +7 -0
  310. package/dist/src/core/session/enhanced-handoff.js +792 -0
  311. package/dist/src/core/session/enhanced-handoff.js.map +7 -0
  312. package/dist/src/core/session/handoff-generator.js +343 -0
  313. package/dist/src/core/session/handoff-generator.js.map +7 -0
  314. package/dist/src/core/session/index.js +15 -0
  315. package/dist/src/core/session/index.js.map +7 -0
  316. package/dist/src/core/session/session-manager.js +347 -0
  317. package/dist/src/core/session/session-manager.js.map +7 -0
  318. package/dist/src/core/skills/index.js +7 -0
  319. package/dist/src/core/skills/index.js.map +7 -0
  320. package/dist/src/core/skills/skill-storage.js +764 -0
  321. package/dist/src/core/skills/skill-storage.js.map +7 -0
  322. package/dist/src/core/skills/types.js +193 -0
  323. package/dist/src/core/skills/types.js.map +7 -0
  324. package/dist/src/core/storage/chromadb-adapter.js +354 -0
  325. package/dist/src/core/storage/chromadb-adapter.js.map +7 -0
  326. package/dist/src/core/storage/infinite-storage.js +510 -0
  327. package/dist/src/core/storage/infinite-storage.js.map +7 -0
  328. package/dist/src/core/storage/remote-storage.js +489 -0
  329. package/dist/src/core/storage/remote-storage.js.map +7 -0
  330. package/dist/src/core/storage/two-tier-storage.js +766 -0
  331. package/dist/src/core/storage/two-tier-storage.js.map +7 -0
  332. package/dist/src/core/trace/cli-trace-wrapper.js +132 -0
  333. package/dist/src/core/trace/cli-trace-wrapper.js.map +7 -0
  334. package/dist/src/core/trace/db-trace-wrapper.js +247 -0
  335. package/dist/src/core/trace/db-trace-wrapper.js.map +7 -0
  336. package/dist/src/core/trace/debug-trace.js +417 -0
  337. package/dist/src/core/trace/debug-trace.js.map +7 -0
  338. package/dist/src/core/trace/index.js +109 -0
  339. package/dist/src/core/trace/index.js.map +7 -0
  340. package/dist/src/core/trace/linear-api-wrapper.js +178 -0
  341. package/dist/src/core/trace/linear-api-wrapper.js.map +7 -0
  342. package/dist/src/core/trace/trace-detector.js +528 -0
  343. package/dist/src/core/trace/trace-detector.js.map +7 -0
  344. package/dist/src/core/trace/trace-store.js +345 -0
  345. package/dist/src/core/trace/trace-store.js.map +7 -0
  346. package/dist/src/core/trace/types.js +77 -0
  347. package/dist/src/core/trace/types.js.map +7 -0
  348. package/dist/src/core/types.js +5 -0
  349. package/dist/src/core/types.js.map +7 -0
  350. package/dist/src/core/utils/async-mutex.js +114 -0
  351. package/dist/src/core/utils/async-mutex.js.map +7 -0
  352. package/dist/src/core/utils/compression.js +83 -0
  353. package/dist/src/core/utils/compression.js.map +7 -0
  354. package/dist/src/core/utils/update-checker.js +218 -0
  355. package/dist/src/core/utils/update-checker.js.map +7 -0
  356. package/dist/src/core/worktree/worktree-manager.js +465 -0
  357. package/dist/src/core/worktree/worktree-manager.js.map +7 -0
  358. package/dist/src/daemon/daemon-config.js +149 -0
  359. package/dist/src/daemon/daemon-config.js.map +7 -0
  360. package/dist/src/daemon/services/context-service.js +122 -0
  361. package/dist/src/daemon/services/context-service.js.map +7 -0
  362. package/dist/src/daemon/services/linear-service.js +136 -0
  363. package/dist/src/daemon/services/linear-service.js.map +7 -0
  364. package/dist/src/daemon/session-daemon.js +312 -0
  365. package/dist/src/daemon/session-daemon.js.map +7 -0
  366. package/dist/src/daemon/unified-daemon.js +276 -0
  367. package/dist/src/daemon/unified-daemon.js.map +7 -0
  368. package/dist/src/features/analytics/api/analytics-api.js +287 -0
  369. package/dist/src/features/analytics/api/analytics-api.js.map +7 -0
  370. package/dist/src/features/analytics/core/analytics-service.js +282 -0
  371. package/dist/src/features/analytics/core/analytics-service.js.map +7 -0
  372. package/dist/src/features/analytics/index.js +18 -0
  373. package/dist/src/features/analytics/index.js.map +7 -0
  374. package/dist/src/features/analytics/queries/metrics-queries.js +277 -0
  375. package/dist/src/features/analytics/queries/metrics-queries.js.map +7 -0
  376. package/dist/src/features/analytics/types/metrics.js +5 -0
  377. package/dist/src/features/analytics/types/metrics.js.map +7 -0
  378. package/dist/src/features/browser/browser-mcp.js +492 -0
  379. package/dist/src/features/browser/browser-mcp.js.map +7 -0
  380. package/dist/src/features/sweep/index.js +20 -0
  381. package/dist/src/features/sweep/index.js.map +7 -0
  382. package/dist/src/features/sweep/prediction-client.js +155 -0
  383. package/dist/src/features/sweep/prediction-client.js.map +7 -0
  384. package/dist/src/features/sweep/prompt-builder.js +85 -0
  385. package/dist/src/features/sweep/prompt-builder.js.map +7 -0
  386. package/dist/src/features/sweep/pty-wrapper.js +171 -0
  387. package/dist/src/features/sweep/pty-wrapper.js.map +7 -0
  388. package/dist/src/features/sweep/state-watcher.js +87 -0
  389. package/dist/src/features/sweep/state-watcher.js.map +7 -0
  390. package/dist/src/features/sweep/status-bar.js +88 -0
  391. package/dist/src/features/sweep/status-bar.js.map +7 -0
  392. package/dist/src/features/sweep/sweep-server-manager.js +226 -0
  393. package/dist/src/features/sweep/sweep-server-manager.js.map +7 -0
  394. package/dist/src/features/sweep/tab-interceptor.js +38 -0
  395. package/dist/src/features/sweep/tab-interceptor.js.map +7 -0
  396. package/dist/src/features/sweep/types.js +18 -0
  397. package/dist/src/features/sweep/types.js.map +7 -0
  398. package/dist/src/features/tasks/linear-task-manager.js +487 -0
  399. package/dist/src/features/tasks/linear-task-manager.js.map +7 -0
  400. package/dist/src/features/tasks/task-aware-context.js +410 -0
  401. package/dist/src/features/tasks/task-aware-context.js.map +7 -0
  402. package/dist/src/features/tui/simple-monitor.js +116 -0
  403. package/dist/src/features/tui/simple-monitor.js.map +7 -0
  404. package/dist/src/features/tui/swarm-monitor.js +648 -0
  405. package/dist/src/features/tui/swarm-monitor.js.map +7 -0
  406. package/dist/src/features/web/client/stores/task-store.js +26 -0
  407. package/dist/src/features/web/client/stores/task-store.js.map +7 -0
  408. package/dist/src/features/web/server/index.js +194 -0
  409. package/dist/src/features/web/server/index.js.map +7 -0
  410. package/dist/src/hooks/auto-background.js +151 -0
  411. package/dist/src/hooks/auto-background.js.map +7 -0
  412. package/dist/src/hooks/claude-code-whatsapp-hook.js +197 -0
  413. package/dist/src/hooks/claude-code-whatsapp-hook.js.map +7 -0
  414. package/dist/src/hooks/config.js +150 -0
  415. package/dist/src/hooks/config.js.map +7 -0
  416. package/dist/src/hooks/daemon.js +364 -0
  417. package/dist/src/hooks/daemon.js.map +7 -0
  418. package/dist/src/hooks/events.js +58 -0
  419. package/dist/src/hooks/events.js.map +7 -0
  420. package/dist/src/hooks/index.js +12 -0
  421. package/dist/src/hooks/index.js.map +7 -0
  422. package/dist/src/hooks/linear-task-picker.js +186 -0
  423. package/dist/src/hooks/linear-task-picker.js.map +7 -0
  424. package/dist/src/hooks/schemas.js +197 -0
  425. package/dist/src/hooks/schemas.js.map +7 -0
  426. package/dist/src/hooks/secure-fs.js +49 -0
  427. package/dist/src/hooks/secure-fs.js.map +7 -0
  428. package/dist/src/hooks/security-logger.js +155 -0
  429. package/dist/src/hooks/security-logger.js.map +7 -0
  430. package/dist/src/hooks/session-summary.js +222 -0
  431. package/dist/src/hooks/session-summary.js.map +7 -0
  432. package/dist/src/hooks/sms-action-runner.js +371 -0
  433. package/dist/src/hooks/sms-action-runner.js.map +7 -0
  434. package/dist/src/hooks/sms-notify.js +506 -0
  435. package/dist/src/hooks/sms-notify.js.map +7 -0
  436. package/dist/src/hooks/sms-watcher.js +93 -0
  437. package/dist/src/hooks/sms-watcher.js.map +7 -0
  438. package/dist/src/hooks/sms-webhook.js +555 -0
  439. package/dist/src/hooks/sms-webhook.js.map +7 -0
  440. package/dist/src/hooks/whatsapp-commands.js +479 -0
  441. package/dist/src/hooks/whatsapp-commands.js.map +7 -0
  442. package/dist/src/hooks/whatsapp-scheduler.js +317 -0
  443. package/dist/src/hooks/whatsapp-scheduler.js.map +7 -0
  444. package/dist/src/hooks/whatsapp-sync.js +409 -0
  445. package/dist/src/hooks/whatsapp-sync.js.map +7 -0
  446. package/dist/src/index.js +25 -0
  447. package/dist/src/index.js.map +7 -0
  448. package/dist/src/integrations/anthropic/client.js +263 -0
  449. package/dist/src/integrations/anthropic/client.js.map +7 -0
  450. package/dist/src/integrations/claude-code/agent-bridge.js +768 -0
  451. package/dist/src/integrations/claude-code/agent-bridge.js.map +7 -0
  452. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js +459 -0
  453. package/dist/src/integrations/claude-code/enhanced-pre-clear-hooks.js.map +7 -0
  454. package/dist/src/integrations/claude-code/lifecycle-hooks.js +254 -0
  455. package/dist/src/integrations/claude-code/lifecycle-hooks.js.map +7 -0
  456. package/dist/src/integrations/claude-code/post-task-hooks.js +545 -0
  457. package/dist/src/integrations/claude-code/post-task-hooks.js.map +7 -0
  458. package/dist/src/integrations/claude-code/subagent-client-stub.js +20 -0
  459. package/dist/src/integrations/claude-code/subagent-client-stub.js.map +7 -0
  460. package/dist/src/integrations/claude-code/subagent-client.js +511 -0
  461. package/dist/src/integrations/claude-code/subagent-client.js.map +7 -0
  462. package/dist/src/integrations/claude-code/task-coordinator.js +360 -0
  463. package/dist/src/integrations/claude-code/task-coordinator.js.map +7 -0
  464. package/dist/src/integrations/linear/auth.js +337 -0
  465. package/dist/src/integrations/linear/auth.js.map +7 -0
  466. package/dist/src/integrations/linear/auto-sync.js +258 -0
  467. package/dist/src/integrations/linear/auto-sync.js.map +7 -0
  468. package/dist/src/integrations/linear/client.js +634 -0
  469. package/dist/src/integrations/linear/client.js.map +7 -0
  470. package/dist/src/integrations/linear/config.js +130 -0
  471. package/dist/src/integrations/linear/config.js.map +7 -0
  472. package/dist/src/integrations/linear/migration.js +361 -0
  473. package/dist/src/integrations/linear/migration.js.map +7 -0
  474. package/dist/src/integrations/linear/oauth-server.js +454 -0
  475. package/dist/src/integrations/linear/oauth-server.js.map +7 -0
  476. package/dist/src/integrations/linear/rest-client.js +213 -0
  477. package/dist/src/integrations/linear/rest-client.js.map +7 -0
  478. package/dist/src/integrations/linear/sync-manager.js +236 -0
  479. package/dist/src/integrations/linear/sync-manager.js.map +7 -0
  480. package/dist/src/integrations/linear/sync-service.js +231 -0
  481. package/dist/src/integrations/linear/sync-service.js.map +7 -0
  482. package/dist/src/integrations/linear/sync.js +782 -0
  483. package/dist/src/integrations/linear/sync.js.map +7 -0
  484. package/dist/src/integrations/linear/types.js +5 -0
  485. package/dist/src/integrations/linear/types.js.map +7 -0
  486. package/dist/src/integrations/linear/unified-sync.js +589 -0
  487. package/dist/src/integrations/linear/unified-sync.js.map +7 -0
  488. package/dist/src/integrations/linear/webhook-handler.js +219 -0
  489. package/dist/src/integrations/linear/webhook-handler.js.map +7 -0
  490. package/dist/src/integrations/linear/webhook-server.js +218 -0
  491. package/dist/src/integrations/linear/webhook-server.js.map +7 -0
  492. package/dist/src/integrations/linear/webhook.js +291 -0
  493. package/dist/src/integrations/linear/webhook.js.map +7 -0
  494. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js +266 -0
  495. package/dist/src/integrations/mcp/handlers/code-execution-handlers.js.map +7 -0
  496. package/dist/src/integrations/mcp/handlers/context-handlers.js +257 -0
  497. package/dist/src/integrations/mcp/handlers/context-handlers.js.map +7 -0
  498. package/dist/src/integrations/mcp/handlers/discovery-handlers.js +497 -0
  499. package/dist/src/integrations/mcp/handlers/discovery-handlers.js.map +7 -0
  500. package/dist/src/integrations/mcp/handlers/index.js +166 -0
  501. package/dist/src/integrations/mcp/handlers/index.js.map +7 -0
  502. package/dist/src/integrations/mcp/handlers/linear-handlers.js +247 -0
  503. package/dist/src/integrations/mcp/handlers/linear-handlers.js.map +7 -0
  504. package/dist/src/integrations/mcp/handlers/skill-handlers.js +529 -0
  505. package/dist/src/integrations/mcp/handlers/skill-handlers.js.map +7 -0
  506. package/dist/src/integrations/mcp/handlers/task-handlers.js +239 -0
  507. package/dist/src/integrations/mcp/handlers/task-handlers.js.map +7 -0
  508. package/dist/src/integrations/mcp/handlers/trace-handlers.js +308 -0
  509. package/dist/src/integrations/mcp/handlers/trace-handlers.js.map +7 -0
  510. package/dist/src/integrations/mcp/index.js +23 -0
  511. package/dist/src/integrations/mcp/index.js.map +7 -0
  512. package/dist/src/integrations/mcp/middleware/tool-scoring.js +356 -0
  513. package/dist/src/integrations/mcp/middleware/tool-scoring.js.map +7 -0
  514. package/dist/src/integrations/mcp/refactored-server.js +374 -0
  515. package/dist/src/integrations/mcp/refactored-server.js.map +7 -0
  516. package/dist/src/integrations/mcp/remote-server.js +682 -0
  517. package/dist/src/integrations/mcp/remote-server.js.map +7 -0
  518. package/dist/src/integrations/mcp/schemas.js +147 -0
  519. package/dist/src/integrations/mcp/schemas.js.map +7 -0
  520. package/dist/src/integrations/mcp/server.js +1975 -0
  521. package/dist/src/integrations/mcp/server.js.map +7 -0
  522. package/dist/src/integrations/mcp/tool-definitions-code.js +125 -0
  523. package/dist/src/integrations/mcp/tool-definitions-code.js.map +7 -0
  524. package/dist/src/integrations/mcp/tool-definitions.js +702 -0
  525. package/dist/src/integrations/mcp/tool-definitions.js.map +7 -0
  526. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js +860 -0
  527. package/dist/src/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +7 -0
  528. package/dist/src/integrations/ralph/context/context-budget-manager.js +301 -0
  529. package/dist/src/integrations/ralph/context/context-budget-manager.js.map +7 -0
  530. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js +360 -0
  531. package/dist/src/integrations/ralph/context/stackmemory-context-loader.js.map +7 -0
  532. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js +410 -0
  533. package/dist/src/integrations/ralph/coordination/enhanced-coordination.js.map +7 -0
  534. package/dist/src/integrations/ralph/index.js +18 -0
  535. package/dist/src/integrations/ralph/index.js.map +7 -0
  536. package/dist/src/integrations/ralph/learning/pattern-learner.js +401 -0
  537. package/dist/src/integrations/ralph/learning/pattern-learner.js.map +7 -0
  538. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js +448 -0
  539. package/dist/src/integrations/ralph/lifecycle/iteration-lifecycle.js.map +7 -0
  540. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js +294 -0
  541. package/dist/src/integrations/ralph/monitoring/swarm-dashboard.js.map +7 -0
  542. package/dist/src/integrations/ralph/monitoring/swarm-registry.js +108 -0
  543. package/dist/src/integrations/ralph/monitoring/swarm-registry.js.map +7 -0
  544. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js +463 -0
  545. package/dist/src/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +7 -0
  546. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js +400 -0
  547. package/dist/src/integrations/ralph/patterns/compounding-engineering-pattern.js.map +7 -0
  548. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js +473 -0
  549. package/dist/src/integrations/ralph/patterns/extended-coherence-sessions.js.map +7 -0
  550. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js +388 -0
  551. package/dist/src/integrations/ralph/patterns/oracle-worker-pattern.js.map +7 -0
  552. package/dist/src/integrations/ralph/performance/performance-optimizer.js +358 -0
  553. package/dist/src/integrations/ralph/performance/performance-optimizer.js.map +7 -0
  554. package/dist/src/integrations/ralph/recovery/crash-recovery.js +462 -0
  555. package/dist/src/integrations/ralph/recovery/crash-recovery.js.map +7 -0
  556. package/dist/src/integrations/ralph/state/state-reconciler.js +404 -0
  557. package/dist/src/integrations/ralph/state/state-reconciler.js.map +7 -0
  558. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js +428 -0
  559. package/dist/src/integrations/ralph/swarm/git-workflow-manager.js.map +7 -0
  560. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js +996 -0
  561. package/dist/src/integrations/ralph/swarm/swarm-coordinator.js.map +7 -0
  562. package/dist/src/integrations/ralph/types.js +5 -0
  563. package/dist/src/integrations/ralph/types.js.map +7 -0
  564. package/dist/src/integrations/ralph/visualization/ralph-debugger.js +585 -0
  565. package/dist/src/integrations/ralph/visualization/ralph-debugger.js.map +7 -0
  566. package/dist/src/mcp/stackmemory-mcp-server.js +554 -0
  567. package/dist/src/mcp/stackmemory-mcp-server.js.map +7 -0
  568. package/dist/src/middleware/exponential-rate-limiter.js +289 -0
  569. package/dist/src/middleware/exponential-rate-limiter.js.map +7 -0
  570. package/dist/src/models/user.model.js +358 -0
  571. package/dist/src/models/user.model.js.map +7 -0
  572. package/dist/src/servers/production/auth-middleware.js +528 -0
  573. package/dist/src/servers/production/auth-middleware.js.map +7 -0
  574. package/dist/src/services/config-service.js +65 -0
  575. package/dist/src/services/config-service.js.map +7 -0
  576. package/dist/src/services/context-service.js +194 -0
  577. package/dist/src/services/context-service.js.map +7 -0
  578. package/dist/src/skills/api-discovery.js +354 -0
  579. package/dist/src/skills/api-discovery.js.map +7 -0
  580. package/dist/src/skills/api-skill.js +475 -0
  581. package/dist/src/skills/api-skill.js.map +7 -0
  582. package/dist/src/skills/claude-skills.js +1061 -0
  583. package/dist/src/skills/claude-skills.js.map +7 -0
  584. package/dist/src/skills/dashboard-launcher.js +216 -0
  585. package/dist/src/skills/dashboard-launcher.js.map +7 -0
  586. package/dist/src/skills/recursive-agent-orchestrator.js +575 -0
  587. package/dist/src/skills/recursive-agent-orchestrator.js.map +7 -0
  588. package/dist/src/skills/repo-ingestion-skill.js +609 -0
  589. package/dist/src/skills/repo-ingestion-skill.js.map +7 -0
  590. package/dist/src/skills/unified-rlm-orchestrator.js +404 -0
  591. package/dist/src/skills/unified-rlm-orchestrator.js.map +7 -0
  592. package/dist/src/types/task.js +5 -0
  593. package/dist/src/types/task.js.map +7 -0
  594. package/dist/src/utils/env.js +50 -0
  595. package/dist/src/utils/env.js.map +7 -0
  596. package/dist/src/utils/formatting.js +62 -0
  597. package/dist/src/utils/formatting.js.map +7 -0
  598. package/dist/src/utils/process-cleanup.js +136 -0
  599. package/dist/src/utils/process-cleanup.js.map +7 -0
  600. package/package.json +4 -3
  601. package/scripts/create-cleanup-issues.js +302 -0
  602. package/scripts/demos/browser-test.ts +39 -0
  603. package/scripts/demos/ralph-integration-demo.ts +244 -0
  604. package/scripts/demos/trace-demo.ts +214 -0
  605. package/scripts/demos/trace-detector.demo.ts +171 -0
  606. package/scripts/demos/trace-test.ts +67 -0
  607. package/scripts/initialize.ts +16 -7
  608. package/scripts/install.sh +14 -62
  609. package/scripts/status.ts +111 -46
  610. package/scripts/test-claude-config.sh +123 -0
  611. package/scripts/validate-claude-config.sh +155 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/skills/claude-skills.ts"],
4
+ "sourcesContent": ["/**\n * Claude Skills for StackMemory\n * Custom skills that integrate with Claude Code to enhance workflow\n */\n\nimport {\n FrameHandoffManager,\n type HandoffMetadata,\n} from '../core/context/frame-handoff-manager.js';\nimport { DualStackManager } from '../core/context/dual-stack-manager.js';\nimport { SQLiteAdapter } from '../core/database/sqlite-adapter.js';\nimport { ContextRetriever } from '../core/retrieval/context-retriever.js';\nimport type { FrameManager } from '../core/context/index.js';\nimport { logger } from '../core/monitoring/logger.js';\nimport {\n RepoIngestionSkill,\n type RepoIngestionOptions,\n} from './repo-ingestion-skill.js';\nimport { DashboardLauncherSkill } from './dashboard-launcher.js';\nimport {\n RecursiveAgentOrchestrator,\n type RLMOptions,\n} from './recursive-agent-orchestrator.js';\nimport { getAPISkill, type APISkill } from './api-skill.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport type { Frame } from '../core/context/index.js';\n\n// Type definitions for Dig skill\ninterface Pattern {\n type: string;\n frequency: number;\n examples: string[];\n}\n\ninterface Decision {\n timestamp: string;\n decision: string;\n context: string;\n}\n\ninterface TimelineEntry {\n timestamp: string;\n event: string;\n description: string;\n}\n\nexport interface SkillContext {\n projectId: string;\n userId: string;\n dualStackManager: DualStackManager;\n handoffManager: FrameHandoffManager;\n contextRetriever: ContextRetriever;\n database: SQLiteAdapter;\n frameManager?: FrameManager;\n}\n\nexport interface SkillResult {\n success: boolean;\n message: string;\n data?: unknown;\n action?: string;\n}\n\n/**\n * Skill 1: Frame Handoff Orchestrator\n * Streamlines frame handoffs between team members\n */\nexport class HandoffSkill {\n constructor(private context: SkillContext) {}\n\n async execute(\n targetUser: string,\n message: string,\n options?: {\n frames?: string[];\n priority?: 'low' | 'medium' | 'high' | 'critical';\n autoDetect?: boolean;\n }\n ): Promise<SkillResult> {\n try {\n const activeStack = this.context.dualStackManager.getActiveStack();\n\n // Auto-detect frames if not specified\n let framesToHandoff = options?.frames || [];\n if (options?.autoDetect !== false && framesToHandoff.length === 0) {\n // Get recent frames that are completed or have errors\n const allFrames = await activeStack.getAllFrames();\n // Filter for completed frames OR frames with errors (not both conditions required)\n const relevantFrames = allFrames.filter(\n (f) =>\n f.state === 'completed' ||\n (f.outputs &&\n Array.isArray(f.outputs) &&\n f.outputs.some((o) => o.type === 'error'))\n );\n framesToHandoff = relevantFrames\n .slice(-5) // Last 5 relevant frames\n .map((f) => f.frameId);\n }\n\n if (framesToHandoff.length === 0) {\n return {\n success: false,\n message:\n 'No frames to handoff. Specify frames or complete some work first.',\n };\n }\n\n // Generate comprehensive handoff summary\n const frameDetails = await Promise.all(\n framesToHandoff.map((id) => activeStack.getFrame(id))\n );\n\n const summary = this.generateHandoffSummary(frameDetails, message);\n\n // Create handoff metadata\n const metadata: HandoffMetadata = {\n initiatedAt: new Date(),\n initiatorId: this.context.userId,\n targetUserId: targetUser,\n frameContext: {\n totalFrames: framesToHandoff.length,\n frameTypes: [\n ...new Set(frameDetails.map((f) => f?.type || 'unknown')),\n ],\n estimatedSize: JSON.stringify(frameDetails).length,\n dependencies: this.extractDependencies(frameDetails),\n },\n businessContext: {\n priority: options?.priority || 'medium',\n stakeholders: [targetUser],\n },\n };\n\n // Get target stack (shared or create new)\n const availableStacks =\n await this.context.dualStackManager.getAvailableStacks();\n let targetStackId = availableStacks.find(\n (s) => s.type === 'shared'\n )?.stackId;\n\n if (!targetStackId) {\n targetStackId = await this.context.dualStackManager.createSharedStack(\n 'team',\n `Handoff: ${message.slice(0, 50)}`,\n this.context.userId\n );\n }\n\n // Initiate handoff\n const handoffId = await this.context.handoffManager.initiateHandoff(\n targetStackId,\n framesToHandoff,\n metadata,\n targetUser,\n summary\n );\n\n // Create action items for recipient\n const actionItems = this.generateActionItems(frameDetails);\n\n return {\n success: true,\n message: `Handoff initiated to @${targetUser}`,\n data: {\n handoffId,\n frameCount: framesToHandoff.length,\n priority: options?.priority || 'medium',\n actionItems,\n targetStack: targetStackId,\n },\n action: `Notified ${targetUser}. Handoff ID: ${handoffId}`,\n };\n } catch (error: unknown) {\n logger.error('Handoff skill error:', error);\n return {\n success: false,\n message: `Failed to initiate handoff: ${error.message}`,\n };\n }\n }\n\n private generateHandoffSummary(frames: Frame[], message: string): string {\n const completed = frames.filter((f) => f?.state === 'completed').length;\n const blocked = frames.filter((f) =>\n f?.outputs?.some((o) => o.type === 'error')\n ).length;\n\n return `\n## Handoff Summary\n**Message**: ${message}\n**Frames**: ${frames.length} total (${completed} completed, ${blocked} blocked)\n\n### Work Completed:\n${frames\n .filter((f) => f?.state === 'completed')\n .map((f) => `- ${f.name}: ${f.digest_deterministic?.summary || 'No summary'}`)\n .join('\\n')}\n\n### Attention Required:\n${\n frames\n .filter((f) => f?.outputs?.some((o) => o.type === 'error'))\n .map(\n (f) =>\n `- ${f.name}: ${f.outputs.find((o) => o.type === 'error')?.content || 'Error'}`\n )\n .join('\\n') || 'None'\n}\n\n### Context:\n${frames\n .map((f) => f?.digest_ai?.context || '')\n .filter(Boolean)\n .join('\\n')}\n `.trim();\n }\n\n private extractDependencies(frames: Frame[]): string[] {\n const deps = new Set<string>();\n frames.forEach((frame) => {\n if (frame?.inputs?.dependencies) {\n if (Array.isArray(frame.inputs.dependencies)) {\n frame.inputs.dependencies.forEach((d) => deps.add(d));\n }\n }\n // Extract from outputs\n if (frame?.outputs) {\n frame.outputs.forEach((output) => {\n if (output.type === 'dependency') {\n deps.add(output.content);\n }\n });\n }\n });\n return Array.from(deps);\n }\n\n private generateActionItems(frames: Frame[]): string[] {\n const items: string[] = [];\n\n frames.forEach((frame) => {\n // Check for TODOs in outputs\n if (frame?.outputs) {\n frame.outputs.forEach((output) => {\n if (output.type === 'todo' || output.content?.includes('TODO')) {\n items.push(output.content);\n }\n });\n }\n\n // Check for errors that need resolution\n if (frame?.outputs?.some((o) => o.type === 'error')) {\n items.push(`Resolve error in ${frame.name}`);\n }\n\n // Check for pending tests - look in multiple places\n if (\n frame?.inputs?.tests === 'pending' ||\n frame?.type === 'implementation' ||\n (frame?.name && frame.name.toLowerCase().includes('implementation'))\n ) {\n items.push(`Write tests for ${frame.name}`);\n }\n });\n\n return items;\n }\n}\n\n/**\n * Skill 7: Recovery Checkpoint Manager\n * Create and manage recovery points\n */\nexport class CheckpointSkill {\n private checkpointDir: string;\n\n constructor(private context: SkillContext) {\n this.checkpointDir = path.join(\n os.homedir(),\n '.stackmemory',\n 'checkpoints',\n context.projectId\n );\n fs.mkdirSync(this.checkpointDir, { recursive: true });\n }\n\n async create(\n description: string,\n options?: {\n autoDetectRisky?: boolean;\n includeFiles?: string[];\n metadata?: Record<string, unknown>;\n }\n ): Promise<SkillResult> {\n try {\n const timestamp = Date.now();\n const checkpointId = `checkpoint-${timestamp}-${Math.random().toString(36).slice(2, 8)}`;\n\n // Get current context\n const activeStack = this.context.dualStackManager.getActiveStack();\n const currentContext = this.context.dualStackManager.getCurrentContext();\n const allFrames = await activeStack.getAllFrames();\n\n // Create checkpoint data\n const checkpoint = {\n id: checkpointId,\n timestamp,\n description,\n context: {\n stackId: currentContext.stackId,\n stackType: currentContext.type,\n userId: this.context.userId,\n projectId: this.context.projectId,\n },\n frames: allFrames,\n metadata: {\n ...options?.metadata,\n frameCount: allFrames.length,\n activeFrames: allFrames.filter((f) => f.state === 'active').length,\n completedFrames: allFrames.filter((f) => f.state === 'completed')\n .length,\n },\n files: options?.includeFiles || [],\n };\n\n // Save checkpoint\n const checkpointPath = path.join(\n this.checkpointDir,\n `${checkpointId}.json`\n );\n fs.writeFileSync(checkpointPath, JSON.stringify(checkpoint, null, 2));\n\n // Save file backups if specified\n if (options?.includeFiles && options.includeFiles.length > 0) {\n const filesDir = path.join(this.checkpointDir, checkpointId, 'files');\n fs.mkdirSync(filesDir, { recursive: true });\n\n for (const file of options.includeFiles) {\n if (fs.existsSync(file)) {\n const basename = path.basename(file);\n const backupPath = path.join(filesDir, basename);\n fs.copyFileSync(file, backupPath);\n }\n }\n }\n\n // Auto-detect risky operations\n if (options?.autoDetectRisky) {\n const riskyPatterns = [\n 'migration',\n 'database',\n 'deploy',\n 'production',\n 'delete',\n 'remove',\n 'drop',\n 'migrate', // Add more specific pattern\n ];\n\n const isRisky = allFrames.some((frame) => {\n const nameMatches =\n frame.name &&\n riskyPatterns.some((pattern) =>\n frame.name.toLowerCase().includes(pattern)\n );\n const commandMatches =\n frame.inputs?.command &&\n riskyPatterns.some((pattern) =>\n frame.inputs.command.toLowerCase().includes(pattern)\n );\n return nameMatches || commandMatches;\n });\n\n if (isRisky) {\n checkpoint.metadata.riskyOperation = true;\n checkpoint.metadata.autoCheckpoint = true;\n }\n }\n\n // Update the checkpoint data after risky operation detection\n fs.writeFileSync(checkpointPath, JSON.stringify(checkpoint, null, 2));\n\n logger.info(`Created checkpoint: ${checkpointId}`);\n\n return {\n success: true,\n message: `Checkpoint created: ${description}`,\n data: {\n checkpointId,\n timestamp: new Date(timestamp).toISOString(),\n frameCount: checkpoint.metadata.frameCount,\n location: checkpointPath,\n },\n action: `Saved checkpoint ${checkpointId}`,\n };\n } catch (error: unknown) {\n logger.error('Checkpoint creation error:', error);\n return {\n success: false,\n message: `Failed to create checkpoint: ${error.message}`,\n };\n }\n }\n\n async restore(checkpointId: string): Promise<SkillResult> {\n try {\n const checkpointPath = path.join(\n this.checkpointDir,\n `${checkpointId}.json`\n );\n\n if (!fs.existsSync(checkpointPath)) {\n // Try to find by partial ID\n const files = fs.readdirSync(this.checkpointDir);\n const match = files.find((f) => f.includes(checkpointId));\n if (match) {\n checkpointId = match.replace('.json', '');\n } else {\n return {\n success: false,\n message: `Checkpoint not found: ${checkpointId}`,\n };\n }\n }\n\n const checkpoint = JSON.parse(fs.readFileSync(checkpointPath, 'utf-8'));\n\n // Switch to checkpoint's stack\n await this.context.dualStackManager.switchToStack(\n checkpoint.context.stackId\n );\n\n // Restore frames (this is a simplified version - real implementation would be more complex)\n // const activeStack = this.context.dualStackManager.getActiveStack();\n\n // Clear current frames and restore from checkpoint\n // Note: This is a conceptual implementation - actual frame restoration\n // would need more sophisticated state management\n\n // Restore files if they exist\n const filesDir = path.join(this.checkpointDir, checkpointId, 'files');\n if (fs.existsSync(filesDir)) {\n const files = fs.readdirSync(filesDir);\n for (const file of files) {\n const backupPath = path.join(filesDir, file);\n const originalPath = checkpoint.files.find(\n (f) => path.basename(f) === file\n );\n if (originalPath && fs.existsSync(backupPath)) {\n fs.copyFileSync(backupPath, originalPath);\n }\n }\n }\n\n logger.info(`Restored checkpoint: ${checkpointId}`);\n\n return {\n success: true,\n message: `Restored to checkpoint: ${checkpoint.description}`,\n data: {\n checkpointId,\n timestamp: new Date(checkpoint.timestamp).toISOString(),\n frameCount: checkpoint.metadata.frameCount,\n filesRestored: checkpoint.files.length,\n },\n action: `Restored checkpoint from ${new Date(checkpoint.timestamp).toLocaleString()}`,\n };\n } catch (error: unknown) {\n logger.error('Checkpoint restoration error:', error);\n return {\n success: false,\n message: `Failed to restore checkpoint: ${error.message}`,\n };\n }\n }\n\n async list(options?: { limit?: number; since?: Date }): Promise<SkillResult> {\n try {\n const files = fs\n .readdirSync(this.checkpointDir)\n .filter((f) => f.endsWith('.json'))\n .map((f) => {\n const checkpointPath = path.join(this.checkpointDir, f);\n const checkpoint = JSON.parse(\n fs.readFileSync(checkpointPath, 'utf-8')\n );\n return checkpoint;\n })\n .filter((c) => !options?.since || c.timestamp > options.since.getTime())\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, options?.limit || 10);\n\n return {\n success: true,\n message: `Found ${files.length} checkpoints`,\n data: files.map((c) => ({\n id: c.id,\n description: c.description,\n timestamp: new Date(c.timestamp).toISOString(),\n frameCount: c.metadata.frameCount,\n risky: c.metadata.riskyOperation || false,\n })),\n };\n } catch (error: unknown) {\n logger.error('Checkpoint list error:', error);\n return {\n success: false,\n message: `Failed to list checkpoints: ${error.message}`,\n };\n }\n }\n\n async diff(checkpoint1: string, checkpoint2: string): Promise<SkillResult> {\n try {\n const cp1 = await this.loadCheckpoint(checkpoint1);\n const cp2 = await this.loadCheckpoint(checkpoint2);\n\n if (!cp1 || !cp2) {\n return {\n success: false,\n message: 'One or both checkpoints not found',\n };\n }\n\n const diff = {\n timeDiff: Math.abs(cp2.timestamp - cp1.timestamp),\n framesDiff: cp2.frames.length - cp1.frames.length,\n newFrames: cp2.frames.filter(\n (f2) => !cp1.frames.some((f1) => f1.frameId === f2.frameId)\n ),\n removedFrames: cp1.frames.filter(\n (f1) => !cp2.frames.some((f2) => f2.frameId === f1.frameId)\n ),\n modifiedFrames: cp2.frames.filter((f2) => {\n const f1 = cp1.frames.find((f) => f.frameId === f2.frameId);\n return f1 && JSON.stringify(f1) !== JSON.stringify(f2);\n }),\n };\n\n return {\n success: true,\n message: `Diff between ${cp1.description} and ${cp2.description}`,\n data: {\n timeDiff: `${Math.round(diff.timeDiff / 1000 / 60)} minutes`,\n framesDiff:\n diff.framesDiff > 0 ? `+${diff.framesDiff}` : `${diff.framesDiff}`,\n newFrames: diff.newFrames.length,\n removedFrames: diff.removedFrames.length,\n modifiedFrames: diff.modifiedFrames.length,\n details: diff,\n },\n };\n } catch (error: unknown) {\n logger.error('Checkpoint diff error:', error);\n return {\n success: false,\n message: `Failed to diff checkpoints: ${error.message}`,\n };\n }\n }\n\n private async loadCheckpoint(checkpointId: string): Promise<unknown> {\n const checkpointPath = path.join(\n this.checkpointDir,\n `${checkpointId}.json`\n );\n if (fs.existsSync(checkpointPath)) {\n return JSON.parse(fs.readFileSync(checkpointPath, 'utf-8'));\n }\n\n // Try partial match\n const files = fs.readdirSync(this.checkpointDir);\n const match = files.find((f) => f.includes(checkpointId));\n if (match) {\n const path = path.join(this.checkpointDir, match);\n return JSON.parse(fs.readFileSync(path, 'utf-8'));\n }\n\n return null;\n }\n}\n\n/**\n * Skill 2: Context Archaeologist\n * Deep historical context retrieval across sessions\n */\nexport class ArchaeologistSkill {\n constructor(private context: SkillContext) {}\n\n async dig(\n query: string,\n options?: {\n depth?: string; // e.g., \"6months\", \"30days\", \"all\"\n patterns?: boolean;\n decisions?: boolean;\n timeline?: boolean;\n }\n ): Promise<SkillResult> {\n try {\n // Parse depth\n const depth = this.parseDepth(options?.depth || '30days');\n const since = new Date(Date.now() - depth);\n\n // Use context retriever for semantic search\n const results = await this.context.contextRetriever.retrieve({\n query,\n projectId: this.context.projectId,\n limit: 50,\n minScore: 0.3,\n });\n\n // Filter by date if specified\n const filtered = results.filter(\n (r) => !depth || new Date(r.timestamp) > since\n );\n\n // Extract patterns if requested\n let patterns: Pattern[] = [];\n if (options?.patterns) {\n patterns = this.extractPatterns(filtered);\n }\n\n // Extract decisions if requested\n let decisions: Decision[] = [];\n if (options?.decisions) {\n decisions = this.extractDecisions(filtered);\n }\n\n // Generate timeline if requested\n let timeline: TimelineEntry[] = [];\n if (options?.timeline) {\n timeline = this.generateTimeline(filtered);\n }\n\n // Find most relevant context\n const topResults = filtered.slice(0, 10);\n const summary = this.generateArchaeologySummary(\n topResults,\n patterns,\n decisions,\n timeline\n );\n\n return {\n success: true,\n message: `Found ${filtered.length} relevant results`,\n data: {\n totalResults: filtered.length,\n timeRange: {\n from: since.toISOString(),\n to: new Date().toISOString(),\n },\n topResults: topResults.map((r) => ({\n frameId: r.frameId,\n score: r.score,\n timestamp: r.timestamp,\n summary: r.content.slice(0, 100) + '...',\n })),\n patterns,\n decisions,\n timeline,\n summary,\n },\n action: `Analyzed ${filtered.length} frames from ${options?.depth || '30days'} of history`,\n };\n } catch (error: unknown) {\n logger.error('Archaeology skill error:', error);\n return {\n success: false,\n message: `Failed to dig through context: ${error.message}`,\n };\n }\n }\n\n private parseDepth(depth: string): number {\n const match = depth.match(/^(\\d+)(days?|weeks?|months?|years?|all)$/i);\n if (!match) {\n return 30 * 24 * 60 * 60 * 1000; // Default 30 days\n }\n\n const [, num, unit] = match;\n const value = parseInt(num);\n\n switch (unit.toLowerCase()) {\n case 'day':\n case 'days':\n return value * 24 * 60 * 60 * 1000;\n case 'week':\n case 'weeks':\n return value * 7 * 24 * 60 * 60 * 1000;\n case 'month':\n case 'months':\n return value * 30 * 24 * 60 * 60 * 1000;\n case 'year':\n case 'years':\n return value * 365 * 24 * 60 * 60 * 1000;\n case 'all':\n return Number.MAX_SAFE_INTEGER;\n default:\n return 30 * 24 * 60 * 60 * 1000;\n }\n }\n\n private extractPatterns(results: Frame[]): Pattern[] {\n const patterns: Map<string, number> = new Map();\n\n // Common patterns to look for\n const patternTypes = [\n { regex: /test.*then.*implement/i, name: 'TDD' },\n { regex: /refactor/i, name: 'Refactoring' },\n { regex: /debug|fix|error|bug/i, name: 'Debugging' },\n { regex: /implement.*feature/i, name: 'Feature Development' },\n { regex: /review|code review/i, name: 'Code Review' },\n { regex: /deploy|release/i, name: 'Deployment' },\n { regex: /optimize|performance/i, name: 'Optimization' },\n ];\n\n results.forEach((result) => {\n patternTypes.forEach((pattern) => {\n if (pattern.regex.test(result.content)) {\n patterns.set(pattern.name, (patterns.get(pattern.name) || 0) + 1);\n }\n });\n });\n\n return Array.from(patterns.entries())\n .map(([name, count]) => ({ name, count }))\n .sort((a, b) => b.count - a.count);\n }\n\n private extractDecisions(results: Frame[]): Decision[] {\n const decisions: Decision[] = [];\n\n // Keywords that indicate decisions\n const decisionKeywords = [\n 'decided',\n 'chose',\n 'selected',\n 'will use',\n 'going with',\n 'approach',\n 'strategy',\n 'solution',\n ];\n\n results.forEach((result) => {\n const content = result.content.toLowerCase();\n if (decisionKeywords.some((keyword) => content.includes(keyword))) {\n // Extract sentence containing the decision\n const sentences = result.content.split(/[.!?]+/);\n const decisionSentence = sentences.find((s) =>\n decisionKeywords.some((k) => s.toLowerCase().includes(k))\n );\n\n if (decisionSentence) {\n decisions.push({\n frameId: result.frameId,\n timestamp: result.timestamp,\n decision: decisionSentence.trim(),\n context: result.content.slice(0, 200),\n });\n }\n }\n });\n\n return decisions.slice(0, 10); // Top 10 decisions\n }\n\n private generateTimeline(results: Frame[]): TimelineEntry[] {\n // Group by day\n const timeline: Map<string, Frame[]> = new Map();\n\n results.forEach((result) => {\n const date = new Date(result.timestamp).toDateString();\n if (!timeline.has(date)) {\n timeline.set(date, []);\n }\n const dateItems = timeline.get(date);\n if (dateItems) {\n dateItems.push(result);\n }\n });\n\n return Array.from(timeline.entries())\n .map(([date, items]) => ({\n date,\n itemCount: items.length,\n highlights: items.slice(0, 3).map((item) => ({\n frameId: item.frameId,\n summary: item.content.slice(0, 50) + '...',\n })),\n }))\n .sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\n }\n\n private generateArchaeologySummary(\n results: Frame[],\n patterns: Pattern[],\n decisions: Decision[],\n timeline: TimelineEntry[]\n ): string {\n let summary = '## Context Archaeology Report\\n\\n';\n\n if (results.length > 0) {\n summary += `### Most Relevant Context (${results.length} results)\\n`;\n results.slice(0, 3).forEach((r) => {\n summary += `- **${new Date(r.timestamp).toLocaleDateString()}**: ${r.content.slice(0, 100)}...\\n`;\n });\n summary += '\\n';\n }\n\n if (patterns.length > 0) {\n summary += `### Detected Patterns\\n`;\n patterns.slice(0, 5).forEach((p) => {\n summary += `- ${p.name}: ${p.count} occurrences\\n`;\n });\n summary += '\\n';\n }\n\n if (decisions.length > 0) {\n summary += `### Key Decisions\\n`;\n decisions.slice(0, 5).forEach((d) => {\n summary += `- **${new Date(d.timestamp).toLocaleDateString()}**: ${d.decision}\\n`;\n });\n summary += '\\n';\n }\n\n if (timeline.length > 0) {\n summary += `### Activity Timeline\\n`;\n timeline.slice(0, 5).forEach((t) => {\n summary += `- **${t.date}**: ${t.itemCount} activities\\n`;\n });\n }\n\n return summary;\n }\n}\n\n/**\n * Main Claude Skills Manager\n */\nexport class ClaudeSkillsManager {\n private handoffSkill: HandoffSkill;\n private checkpointSkill: CheckpointSkill;\n private archaeologistSkill: ArchaeologistSkill;\n private dashboardLauncher: DashboardLauncherSkill;\n private repoIngestionSkill: RepoIngestionSkill | null = null;\n private rlmOrchestrator: RecursiveAgentOrchestrator | null = null;\n private apiSkill: APISkill;\n\n constructor(private context: SkillContext) {\n this.handoffSkill = new HandoffSkill(context);\n this.checkpointSkill = new CheckpointSkill(context);\n this.archaeologistSkill = new ArchaeologistSkill(context);\n this.apiSkill = getAPISkill();\n\n // Initialize dashboard launcher (lazy import to avoid circular deps)\n import('./dashboard-launcher.js').then((module) => {\n this.dashboardLauncher = new module.DashboardLauncherSkill();\n // Don't auto-launch dashboard to avoid startup errors\n // User can manually launch with 'stackmemory skills dashboard launch'\n logger.info('Dashboard launcher initialized (manual launch required)');\n });\n\n // Initialize repo ingestion skill if ChromaDB is configured\n const chromaConfig = {\n apiKey: process.env['CHROMADB_API_KEY'] || '',\n tenant: process.env['CHROMADB_TENANT'] || '',\n database: process.env['CHROMADB_DATABASE'] || 'stackmemory',\n collectionName: process.env['CHROMADB_COLLECTION'] || 'stackmemory_repos',\n };\n\n if (chromaConfig.apiKey && chromaConfig.tenant) {\n this.repoIngestionSkill = new RepoIngestionSkill(\n chromaConfig,\n context.userId,\n process.env['CHROMADB_TEAM_ID']\n );\n this.repoIngestionSkill.initialize().catch((error: unknown) => {\n logger.warn('Repo ingestion skill initialization failed:', error);\n });\n }\n\n // Initialize RLM Orchestrator\n // Import dynamically to avoid circular dependencies\n import('../features/tasks/linear-task-manager.js')\n .then((module) => {\n const taskStore = new module.LinearTaskManager();\n\n // Use frameManager from context if available\n const frameManager = context.frameManager;\n if (!frameManager) {\n throw new Error(\n 'FrameManager not provided in context - required for RLM orchestrator'\n );\n }\n\n this.rlmOrchestrator = new RecursiveAgentOrchestrator(\n frameManager,\n context.dualStackManager,\n context.contextRetriever,\n taskStore\n );\n\n logger.info('RLM Orchestrator initialized');\n })\n .catch((error: unknown) => {\n logger.warn('RLM Orchestrator initialization failed:', error);\n });\n }\n\n async executeSkill(\n skillName: string,\n args: string[],\n options?: Record<string, unknown>\n ): Promise<SkillResult> {\n switch (skillName) {\n case 'handoff':\n return this.handoffSkill.execute(args[0], args[1], options);\n\n case 'checkpoint':\n const subcommand = args[0];\n switch (subcommand) {\n case 'create':\n return this.checkpointSkill.create(args[1], options);\n case 'restore':\n return this.checkpointSkill.restore(args[1]);\n case 'list':\n return this.checkpointSkill.list(options);\n case 'diff':\n return this.checkpointSkill.diff(args[1], args[2]);\n default:\n return {\n success: false,\n message: `Unknown checkpoint subcommand: ${subcommand}`,\n };\n }\n\n case 'dig':\n return this.archaeologistSkill.dig(args[0], options);\n\n case 'lint':\n // Linting task using RLM orchestrator with linting agent\n if (!this.rlmOrchestrator) {\n return {\n success: false,\n message:\n 'RLM Orchestrator not initialized. Please wait a moment and try again.',\n };\n }\n\n const lintPath = args[0] || process.cwd();\n const lintOptions = {\n ...options,\n // Force use of linting agent\n agents: ['linting'],\n maxParallel: 1,\n reviewStages: 1,\n verboseLogging: true,\n } as RLMOptions;\n\n const lintTask = `Perform comprehensive linting on ${lintPath}: Check for syntax errors, type issues, formatting violations, security vulnerabilities, performance anti-patterns, and unused code. Provide actionable fixes.`;\n\n try {\n const result = await this.rlmOrchestrator.execute(\n lintTask,\n { path: lintPath, ...options },\n lintOptions\n );\n\n return {\n success: result.success,\n message: `Linting ${result.success ? 'completed' : 'failed'}`,\n data: {\n issuesFound: result.issuesFound,\n issuesFixed: result.issuesFixed,\n duration: `${result.duration}ms`,\n totalTokens: result.totalTokens,\n details: result.rootNode,\n },\n };\n } catch (error) {\n return {\n success: false,\n message: `Linting failed: ${error.message}`,\n };\n }\n\n case 'rlm':\n if (!this.rlmOrchestrator) {\n return {\n success: false,\n message:\n 'RLM Orchestrator not initialized. Please wait a moment and try again.',\n };\n }\n return this.rlmOrchestrator.execute(args[0], options as RLMOptions);\n\n case 'repo':\n case 'ingest':\n if (!this.repoIngestionSkill) {\n return {\n success: false,\n message:\n 'Repo ingestion skill not initialized. Please configure ChromaDB.',\n };\n }\n\n const repoCommand = args[0];\n switch (repoCommand) {\n case 'ingest':\n const repoPath = args[1] || process.cwd();\n const repoName = args[2] || path.basename(repoPath);\n return await this.repoIngestionSkill.ingestRepository(\n repoPath,\n repoName,\n options as RepoIngestionOptions\n );\n\n case 'update':\n const updatePath = args[1] || process.cwd();\n const updateName = args[2] || path.basename(updatePath);\n return await this.repoIngestionSkill.updateRepository(\n updatePath,\n updateName,\n options as RepoIngestionOptions\n );\n\n case 'search':\n const query = args[1];\n if (!query) {\n return {\n success: false,\n message: 'Search query required',\n };\n }\n const results = await this.repoIngestionSkill.searchCode(query, {\n repoName: options?.repoName as string,\n language: options?.language as string,\n limit: options?.limit as number,\n includeContext: options?.includeContext as boolean,\n });\n return {\n success: true,\n message: `Found ${results.length} results`,\n data: results,\n };\n\n case 'stats':\n const stats = await this.repoIngestionSkill.getRepoStats(args[1]);\n return {\n success: true,\n message: 'Repository statistics',\n data: stats,\n };\n\n default:\n return {\n success: false,\n message: `Unknown repo command: ${repoCommand}. Use: ingest, update, search, or stats`,\n };\n }\n\n case 'dashboard':\n const dashboardCmd = args[0];\n if (!this.dashboardLauncher) {\n return {\n success: false,\n message: 'Dashboard launcher not yet initialized',\n };\n }\n switch (dashboardCmd) {\n case 'launch':\n await this.dashboardLauncher.launch();\n return {\n success: true,\n message: 'Dashboard launched',\n action: 'open-browser',\n };\n case 'stop':\n await this.dashboardLauncher.stop();\n return {\n success: true,\n message: 'Dashboard stopped',\n };\n default:\n await this.dashboardLauncher.launch();\n return {\n success: true,\n message: 'Dashboard launched',\n action: 'open-browser',\n };\n }\n\n case 'recursive':\n if (!this.rlmOrchestrator) {\n return {\n success: false,\n message:\n 'RLM Orchestrator not initialized. Please wait a moment and try again.',\n };\n }\n\n const task = args.join(' ') || 'Analyze and improve the current code';\n const rlmOptions = options as RLMOptions;\n\n try {\n logger.info('Starting RLM execution', { task });\n\n const result = await this.rlmOrchestrator.execute(\n task,\n {\n files: rlmOptions.files || [],\n query: task,\n },\n rlmOptions\n );\n\n return {\n success: result.success,\n message: `RLM execution ${result.success ? 'completed' : 'failed'}`,\n data: {\n duration: `${result.duration}ms`,\n totalTokens: result.totalTokens,\n totalCost: `$${result.totalCost.toFixed(2)}`,\n testsGenerated: result.testsGenerated,\n improvements: result.improvements.length,\n issuesFound: result.issuesFound,\n issuesFixed: result.issuesFixed,\n executionTree: result.rootNode,\n },\n };\n } catch (error) {\n logger.error('RLM execution error:', error);\n return {\n success: false,\n message: `RLM execution failed: ${error.message}`,\n };\n }\n\n case 'api':\n const apiCmd = args[0];\n switch (apiCmd) {\n case 'add':\n return this.apiSkill.add(args[1], args[2], {\n spec: options?.spec as string,\n authType: options?.authType as\n | 'none'\n | 'api-key'\n | 'oauth2'\n | 'basic',\n headerName: options?.headerName as string,\n envVar: options?.envVar as string,\n });\n case 'list':\n return this.apiSkill.list();\n case 'describe':\n return this.apiSkill.describe(args[1], args[2]);\n case 'exec':\n const execParams: Record<string, unknown> = {};\n // Parse remaining args as params\n for (let i = 3; i < args.length; i += 2) {\n if (args[i] && args[i + 1]) {\n execParams[args[i].replace('--', '')] = args[i + 1];\n }\n }\n return this.apiSkill.exec(args[1], args[2], execParams, {\n raw: options?.raw as boolean,\n filter: options?.filter as string,\n });\n case 'auth':\n return this.apiSkill.auth(args[1], {\n token: options?.token as string,\n envVar: options?.envVar as string,\n oauth: options?.oauth as boolean,\n scopes: (options?.scopes as string)?.split(','),\n });\n case 'sync':\n return this.apiSkill.sync(args[1]);\n case 'remove':\n return this.apiSkill.remove(args[1]);\n case 'help':\n default:\n return {\n success: true,\n message: this.apiSkill.getHelp(),\n };\n }\n\n default:\n return {\n success: false,\n message: `Unknown skill: ${skillName}`,\n };\n }\n }\n\n getAvailableSkills(): string[] {\n const skills = ['handoff', 'checkpoint', 'dig', 'dashboard', 'api'];\n if (this.repoIngestionSkill) {\n skills.push('repo');\n }\n if (this.rlmOrchestrator) {\n skills.push('rlm', 'lint');\n }\n return skills;\n }\n\n getSkillHelp(skillName: string): string {\n switch (skillName) {\n case 'handoff':\n return `\n/handoff @user \"message\" [--priority high] [--frames frame1,frame2]\nStreamline frame handoffs between team members\n`;\n\n case 'checkpoint':\n return `\n/checkpoint create \"description\" [--files file1,file2] [--auto-detect-risky]\n/checkpoint restore <id>\n/checkpoint list [--limit 10] [--since \"2024-01-01\"]\n/checkpoint diff <id1> <id2>\nCreate and manage recovery points\n`;\n\n case 'dig':\n return `\n/dig \"query\" [--depth 6months] [--patterns] [--decisions] [--timeline]\nDeep historical context retrieval across sessions\n`;\n\n case 'lint':\n return `\n/lint [path] [options]\nPerform comprehensive code linting and quality checks\n\nAutomatically checks for:\n- Syntax errors and type issues\n- Code formatting and style violations \n- Security vulnerabilities\n- Performance anti-patterns\n- Unused imports and dead code\n- Code smells and complexity issues\n\nUsage:\n stackmemory skills lint # Lint current directory\n stackmemory skills lint src/ # Lint specific directory\n stackmemory skills lint src/file.ts # Lint specific file\n\nOptions:\n --fix Automatically fix issues where possible\n --format Focus on formatting issues\n --security Focus on security vulnerabilities\n --performance Focus on performance issues\n --verbose Show detailed output\n\nExamples:\n stackmemory skills lint --fix\n stackmemory skills lint src/ --security --verbose\n`;\n\n case 'rlm':\n return `\n/rlm \"task description\" [options]\nExecute complex tasks with recursive agent orchestration\n\nOptions:\n --max-parallel <n> Max concurrent subagents (default: 5)\n --max-recursion <n> Max recursion depth (default: 4)\n --max-tokens-per-agent <n> Token budget per agent (default: 30000)\n --review-stages <n> Review iterations (default: 3)\n --quality-threshold <n> Target quality 0-1 (default: 0.85)\n --test-mode <mode> unit/integration/e2e/all (default: all)\n --verbose Show all operations\n --timeout-per-agent <s> Timeout in seconds (default: 300)\n\nExamples:\n stackmemory skills rlm \"Generate tests for API endpoints\"\n stackmemory skills rlm \"Refactor auth system\" --quality-threshold 0.95\n`;\n\n case 'dashboard':\n return `\n/dashboard [launch|stop]\nLaunch the StackMemory web dashboard for real-time monitoring\n- launch: Start the web dashboard and open in browser (default)\n- stop: Stop the dashboard server\nAuto-launches on new sessions when configured\n`;\n\n case 'repo':\n return `\n/repo ingest [path] [name] [--incremental] [--include-tests] [--include-docs]\n/repo update [path] [name] [--force-update]\n/repo search \"query\" [--repo-name name] [--language lang] [--limit n]\n/repo stats [repo-name]\n\nIngest and search code repositories in ChromaDB:\n- ingest: Index a new repository (defaults to current directory)\n- update: Update an existing repository with changes\n- search: Semantic search across ingested code\n- stats: View statistics about ingested repositories\n\nOptions:\n- --incremental: Only process changed files\n- --include-tests: Include test files in indexing\n- --include-docs: Include documentation files\n- --force-update: Force re-indexing of all files\n- --language: Filter search by programming language\n- --limit: Maximum search results (default: 20)\n`;\n\n case 'recursive':\n return `\n/rlm \"task description\" [options]\n\nRecursive Language Model orchestration using Claude Code's Task tool:\n- Decomposes complex tasks into parallel/sequential subtasks\n- Spawns specialized Claude subagents for each task type\n- Automatic test generation and multi-stage review\n- Handles large codebases through intelligent chunking\n\nSubagent Types:\n- Planning: Task decomposition and strategy\n- Code: Implementation and refactoring\n- Testing: Comprehensive test generation (unit/integration/E2E)\n- Linting: Code quality and formatting\n- Review: Multi-stage code review and quality scoring\n- Improve: Implement review suggestions\n- Context: Information retrieval\n- Publish: NPM/GitHub releases\n\nOptions:\n- --max-parallel N: Max concurrent subagents (default: 5)\n- --max-recursion N: Max recursion depth (default: 4)\n- --review-stages N: Number of review iterations (default: 3)\n- --quality-threshold N: Target quality score 0-1 (default: 0.85)\n- --test-mode [unit|integration|e2e|all]: Test generation mode (default: all)\n- --verbose: Show all recursive operations\n\nExamples:\n/rlm \"Refactor the authentication system with full test coverage\"\n/rlm \"Generate comprehensive tests for the API endpoints\" --test-mode integration\n/rlm \"Review and improve code quality\" --review-stages 5 --quality-threshold 0.95\n`;\n\n case 'api':\n return this.apiSkill.getHelp();\n\n default:\n return `Unknown skill: ${skillName}`;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["path"]
7
+ }
@@ -0,0 +1,216 @@
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 { exec } from "child_process";
6
+ import { promisify } from "util";
7
+ import { existsSync } from "fs";
8
+ import { join } from "path";
9
+ import { logger } from "../core/monitoring/logger.js";
10
+ const execAsync = promisify(exec);
11
+ class DashboardLauncherSkill {
12
+ config;
13
+ serverProcess = null;
14
+ webProcess = null;
15
+ constructor(config) {
16
+ this.config = {
17
+ autoLaunch: true,
18
+ webPort: 3e3,
19
+ serverPort: 8080,
20
+ openBrowser: true,
21
+ mode: "web",
22
+ ...config
23
+ };
24
+ }
25
+ /**
26
+ * Check if the dashboard server is running
27
+ */
28
+ async isServerRunning() {
29
+ try {
30
+ const response = await fetch(
31
+ `http://localhost:${this.config.serverPort}/api/health`
32
+ );
33
+ return response.ok;
34
+ } catch {
35
+ return false;
36
+ }
37
+ }
38
+ /**
39
+ * Check if the web dashboard is running
40
+ */
41
+ async isWebRunning() {
42
+ try {
43
+ const response = await fetch(`http://localhost:${this.config.webPort}`);
44
+ return response.ok;
45
+ } catch {
46
+ return false;
47
+ }
48
+ }
49
+ /**
50
+ * Launch the dashboard server
51
+ */
52
+ async launchServer() {
53
+ if (await this.isServerRunning()) {
54
+ logger.info("Dashboard server already running");
55
+ return;
56
+ }
57
+ logger.info("Starting dashboard server...");
58
+ try {
59
+ await execAsync("npm run build");
60
+ const { spawn } = await import("child_process");
61
+ this.serverProcess = spawn(
62
+ "node",
63
+ ["dist/features/web/server/index.js"],
64
+ {
65
+ detached: true,
66
+ stdio: "ignore",
67
+ env: {
68
+ ...process.env,
69
+ WS_PORT: String(this.config.serverPort)
70
+ }
71
+ }
72
+ );
73
+ this.serverProcess.unref();
74
+ let attempts = 0;
75
+ while (attempts < 10) {
76
+ if (await this.isServerRunning()) {
77
+ logger.info(
78
+ `Dashboard server started on port ${this.config.serverPort}`
79
+ );
80
+ return;
81
+ }
82
+ await new Promise((r) => setTimeout(r, 1e3));
83
+ attempts++;
84
+ }
85
+ throw new Error("Server failed to start");
86
+ } catch (error) {
87
+ logger.error("Failed to launch dashboard server:", error);
88
+ throw error;
89
+ }
90
+ }
91
+ /**
92
+ * Launch the web dashboard
93
+ */
94
+ async launchWeb() {
95
+ if (await this.isWebRunning()) {
96
+ logger.info("Web dashboard already running");
97
+ if (this.config.openBrowser) {
98
+ await this.openInBrowser();
99
+ }
100
+ return;
101
+ }
102
+ logger.info("Starting web dashboard...");
103
+ try {
104
+ const webPath = join(process.cwd(), "src/features/web/client");
105
+ if (!existsSync(webPath)) {
106
+ logger.warn("Web dashboard not found. Run setup first.");
107
+ return;
108
+ }
109
+ const { spawn } = await import("child_process");
110
+ this.webProcess = spawn("npm", ["run", "dev"], {
111
+ cwd: webPath,
112
+ detached: true,
113
+ stdio: "ignore",
114
+ env: {
115
+ ...process.env,
116
+ PORT: String(this.config.webPort),
117
+ NEXT_PUBLIC_WS_URL: `http://localhost:${this.config.serverPort}`
118
+ }
119
+ });
120
+ this.webProcess.unref();
121
+ let attempts = 0;
122
+ while (attempts < 15) {
123
+ if (await this.isWebRunning()) {
124
+ logger.info(`Web dashboard started on port ${this.config.webPort}`);
125
+ if (this.config.openBrowser) {
126
+ await this.openInBrowser();
127
+ }
128
+ return;
129
+ }
130
+ await new Promise((r) => setTimeout(r, 2e3));
131
+ attempts++;
132
+ }
133
+ throw new Error("Web dashboard failed to start");
134
+ } catch (error) {
135
+ logger.error("Failed to launch web dashboard:", error);
136
+ throw error;
137
+ }
138
+ }
139
+ /**
140
+ * Launch the TUI dashboard
141
+ */
142
+ async launchTUI() {
143
+ logger.info("Launching TUI dashboard...");
144
+ try {
145
+ const { spawn } = await import("child_process");
146
+ spawn("node", ["dist/features/tui/index.js"], {
147
+ stdio: "inherit"
148
+ });
149
+ } catch (error) {
150
+ logger.error("Failed to launch TUI:", error);
151
+ throw error;
152
+ }
153
+ }
154
+ /**
155
+ * Open dashboard in browser
156
+ */
157
+ async openInBrowser() {
158
+ const url = `http://localhost:${this.config.webPort}`;
159
+ const platform = process.platform;
160
+ try {
161
+ let command;
162
+ if (platform === "darwin") {
163
+ command = `open ${url}`;
164
+ } else if (platform === "win32") {
165
+ command = `start ${url}`;
166
+ } else {
167
+ command = `xdg-open ${url}`;
168
+ }
169
+ await execAsync(command);
170
+ logger.info(`Opened dashboard in browser: ${url}`);
171
+ } catch (error) {
172
+ logger.warn("Failed to open browser:", error);
173
+ }
174
+ }
175
+ /**
176
+ * Launch dashboard based on configuration
177
+ */
178
+ async launch() {
179
+ if (!this.config.autoLaunch) {
180
+ logger.info("Dashboard auto-launch disabled");
181
+ return;
182
+ }
183
+ try {
184
+ if (this.config.mode === "web" || this.config.mode === "both") {
185
+ await this.launchServer();
186
+ await this.launchWeb();
187
+ }
188
+ if (this.config.mode === "tui" || this.config.mode === "both") {
189
+ await this.launchTUI();
190
+ }
191
+ logger.info("Dashboard launched successfully");
192
+ } catch (error) {
193
+ logger.error("Dashboard launch failed:", error);
194
+ }
195
+ }
196
+ /**
197
+ * Stop all dashboard processes
198
+ */
199
+ async stop() {
200
+ if (this.serverProcess) {
201
+ this.serverProcess.kill();
202
+ this.serverProcess = null;
203
+ }
204
+ if (this.webProcess) {
205
+ this.webProcess.kill();
206
+ this.webProcess = null;
207
+ }
208
+ logger.info("Dashboard processes stopped");
209
+ }
210
+ }
211
+ const dashboardLauncher = new DashboardLauncherSkill();
212
+ export {
213
+ DashboardLauncherSkill,
214
+ dashboardLauncher
215
+ };
216
+ //# sourceMappingURL=dashboard-launcher.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/skills/dashboard-launcher.ts"],
4
+ "sourcesContent": ["/**\n * Dashboard Launcher Skill\n * Automatically launches the StackMemory web dashboard on new sessions\n */\n\nimport { exec, type ChildProcess } from 'child_process';\nimport { promisify } from 'util';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\nimport { logger } from '../core/monitoring/logger.js';\n\nconst execAsync = promisify(exec);\n\nexport interface DashboardLauncherConfig {\n autoLaunch: boolean;\n webPort: number;\n serverPort: number;\n openBrowser: boolean;\n mode: 'tui' | 'web' | 'both';\n}\n\nexport class DashboardLauncherSkill {\n private config: DashboardLauncherConfig;\n private serverProcess: ChildProcess | null = null;\n private webProcess: ChildProcess | null = null;\n\n constructor(config?: Partial<DashboardLauncherConfig>) {\n this.config = {\n autoLaunch: true,\n webPort: 3000,\n serverPort: 8080,\n openBrowser: true,\n mode: 'web',\n ...config,\n };\n }\n\n /**\n * Check if the dashboard server is running\n */\n async isServerRunning(): Promise<boolean> {\n try {\n const response = await fetch(\n `http://localhost:${this.config.serverPort}/api/health`\n );\n return response.ok;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if the web dashboard is running\n */\n async isWebRunning(): Promise<boolean> {\n try {\n const response = await fetch(`http://localhost:${this.config.webPort}`);\n return response.ok;\n } catch {\n return false;\n }\n }\n\n /**\n * Launch the dashboard server\n */\n async launchServer(): Promise<void> {\n if (await this.isServerRunning()) {\n logger.info('Dashboard server already running');\n return;\n }\n\n logger.info('Starting dashboard server...');\n\n try {\n // Build the server first\n await execAsync('npm run build');\n\n // Start the server in background\n const { spawn } = await import('child_process');\n this.serverProcess = spawn(\n 'node',\n ['dist/features/web/server/index.js'],\n {\n detached: true,\n stdio: 'ignore',\n env: {\n ...process.env,\n WS_PORT: String(this.config.serverPort),\n },\n }\n );\n\n this.serverProcess.unref();\n\n // Wait for server to start\n let attempts = 0;\n while (attempts < 10) {\n if (await this.isServerRunning()) {\n logger.info(\n `Dashboard server started on port ${this.config.serverPort}`\n );\n return;\n }\n await new Promise((r) => setTimeout(r, 1000));\n attempts++;\n }\n\n throw new Error('Server failed to start');\n } catch (error: unknown) {\n logger.error('Failed to launch dashboard server:', error);\n throw error;\n }\n }\n\n /**\n * Launch the web dashboard\n */\n async launchWeb(): Promise<void> {\n if (await this.isWebRunning()) {\n logger.info('Web dashboard already running');\n if (this.config.openBrowser) {\n await this.openInBrowser();\n }\n return;\n }\n\n logger.info('Starting web dashboard...');\n\n try {\n // Check if Next.js app exists\n const webPath = join(process.cwd(), 'src/features/web/client');\n if (!existsSync(webPath)) {\n logger.warn('Web dashboard not found. Run setup first.');\n return;\n }\n\n // Start Next.js dev server\n const { spawn } = await import('child_process');\n this.webProcess = spawn('npm', ['run', 'dev'], {\n cwd: webPath,\n detached: true,\n stdio: 'ignore',\n env: {\n ...process.env,\n PORT: String(this.config.webPort),\n NEXT_PUBLIC_WS_URL: `http://localhost:${this.config.serverPort}`,\n },\n });\n\n this.webProcess.unref();\n\n // Wait for web to start\n let attempts = 0;\n while (attempts < 15) {\n if (await this.isWebRunning()) {\n logger.info(`Web dashboard started on port ${this.config.webPort}`);\n if (this.config.openBrowser) {\n await this.openInBrowser();\n }\n return;\n }\n await new Promise((r) => setTimeout(r, 2000));\n attempts++;\n }\n\n throw new Error('Web dashboard failed to start');\n } catch (error: unknown) {\n logger.error('Failed to launch web dashboard:', error);\n throw error;\n }\n }\n\n /**\n * Launch the TUI dashboard\n */\n async launchTUI(): Promise<void> {\n logger.info('Launching TUI dashboard...');\n\n try {\n const { spawn } = await import('child_process');\n spawn('node', ['dist/features/tui/index.js'], {\n stdio: 'inherit',\n });\n } catch (error: unknown) {\n logger.error('Failed to launch TUI:', error);\n throw error;\n }\n }\n\n /**\n * Open dashboard in browser\n */\n async openInBrowser(): Promise<void> {\n const url = `http://localhost:${this.config.webPort}`;\n const platform = process.platform;\n\n try {\n let command: string;\n if (platform === 'darwin') {\n command = `open ${url}`;\n } else if (platform === 'win32') {\n command = `start ${url}`;\n } else {\n command = `xdg-open ${url}`;\n }\n\n await execAsync(command);\n logger.info(`Opened dashboard in browser: ${url}`);\n } catch (error: unknown) {\n logger.warn('Failed to open browser:', error);\n }\n }\n\n /**\n * Launch dashboard based on configuration\n */\n async launch(): Promise<void> {\n if (!this.config.autoLaunch) {\n logger.info('Dashboard auto-launch disabled');\n return;\n }\n\n try {\n // Always start the server for web mode\n if (this.config.mode === 'web' || this.config.mode === 'both') {\n await this.launchServer();\n await this.launchWeb();\n }\n\n // Launch TUI if requested\n if (this.config.mode === 'tui' || this.config.mode === 'both') {\n await this.launchTUI();\n }\n\n logger.info('Dashboard launched successfully');\n } catch (error: unknown) {\n logger.error('Dashboard launch failed:', error);\n }\n }\n\n /**\n * Stop all dashboard processes\n */\n async stop(): Promise<void> {\n if (this.serverProcess) {\n this.serverProcess.kill();\n this.serverProcess = null;\n }\n\n if (this.webProcess) {\n this.webProcess.kill();\n this.webProcess = null;\n }\n\n logger.info('Dashboard processes stopped');\n }\n}\n\n// Export singleton instance for Claude integration\nexport const dashboardLauncher = new DashboardLauncherSkill();\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }