@stackmemoryai/stackmemory 0.5.59 → 0.5.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. package/README.md +105 -1
  2. package/dist/src/cli/claude-sm.js +130 -50
  3. package/dist/src/cli/claude-sm.js.map +2 -2
  4. package/dist/src/cli/index.js +18 -3
  5. package/dist/src/cli/index.js.map +3 -3
  6. package/dist/src/core/extensions/custom-tools.js +567 -0
  7. package/dist/src/core/extensions/custom-tools.js.map +7 -0
  8. package/dist/src/core/extensions/index.js +55 -0
  9. package/dist/src/core/extensions/index.js.map +7 -0
  10. package/dist/src/core/extensions/loader.js +709 -0
  11. package/dist/src/core/extensions/loader.js.map +7 -0
  12. package/dist/src/core/extensions/plugin-system.js +506 -0
  13. package/dist/src/core/extensions/plugin-system.js.map +7 -0
  14. package/dist/src/core/extensions/provider-adapter.js +617 -0
  15. package/dist/src/core/extensions/provider-adapter.js.map +7 -0
  16. package/dist/src/core/extensions/sandbox-runtime.js +664 -0
  17. package/dist/src/core/extensions/sandbox-runtime.js.map +7 -0
  18. package/dist/src/core/storage/chromadb-adapter.js +32 -6
  19. package/dist/src/core/storage/chromadb-adapter.js.map +2 -2
  20. package/dist/src/skills/repo-ingestion-skill.js +35 -12
  21. package/dist/src/skills/repo-ingestion-skill.js.map +2 -2
  22. package/package.json +11 -7
  23. package/scripts/background-sync-manager.js +145 -83
  24. package/scripts/claude-sm-autostart.js +17 -12
  25. package/scripts/gepa/README.md +275 -0
  26. package/scripts/gepa/config.json +53 -0
  27. package/scripts/gepa/evals/coding-tasks.jsonl +5 -0
  28. package/scripts/gepa/evals/fixtures/buggy-loop.js +18 -0
  29. package/scripts/gepa/evals/fixtures/callback-hell.js +53 -0
  30. package/scripts/gepa/generations/gen-000/baseline.md +124 -0
  31. package/scripts/gepa/hooks/auto-optimize.js +494 -0
  32. package/scripts/gepa/hooks/eval-tracker.js +203 -0
  33. package/scripts/gepa/hooks/reflect.js +311 -0
  34. package/scripts/gepa/optimize.js +611 -0
  35. package/scripts/gepa/state.json +14 -0
  36. package/scripts/test-pre-publish-quick.sh +1 -1
  37. package/dist/agents/core/agent-task-manager.js +0 -527
  38. package/dist/agents/core/agent-task-manager.js.map +0 -7
  39. package/dist/agents/testing-agent.js +0 -614
  40. package/dist/agents/testing-agent.js.map +0 -7
  41. package/dist/agents/verifiers/base-verifier.js +0 -133
  42. package/dist/agents/verifiers/base-verifier.js.map +0 -7
  43. package/dist/agents/verifiers/formatter-verifier.js +0 -130
  44. package/dist/agents/verifiers/formatter-verifier.js.map +0 -7
  45. package/dist/agents/verifiers/llm-judge.js +0 -252
  46. package/dist/agents/verifiers/llm-judge.js.map +0 -7
  47. package/dist/cli/auto-detect.js +0 -321
  48. package/dist/cli/auto-detect.js.map +0 -7
  49. package/dist/cli/browser-test.js +0 -33
  50. package/dist/cli/browser-test.js.map +0 -7
  51. package/dist/cli/claude-sm-danger.js +0 -21
  52. package/dist/cli/claude-sm-danger.js.map +0 -7
  53. package/dist/cli/claude-sm.js +0 -1156
  54. package/dist/cli/claude-sm.js.map +0 -7
  55. package/dist/cli/codex-sm-danger.js +0 -21
  56. package/dist/cli/codex-sm-danger.js.map +0 -7
  57. package/dist/cli/codex-sm.js +0 -349
  58. package/dist/cli/codex-sm.js.map +0 -7
  59. package/dist/cli/commands/api.js +0 -232
  60. package/dist/cli/commands/api.js.map +0 -7
  61. package/dist/cli/commands/auto-background.js +0 -180
  62. package/dist/cli/commands/auto-background.js.map +0 -7
  63. package/dist/cli/commands/cleanup-processes.js +0 -68
  64. package/dist/cli/commands/cleanup-processes.js.map +0 -7
  65. package/dist/cli/commands/clear.js +0 -202
  66. package/dist/cli/commands/clear.js.map +0 -7
  67. package/dist/cli/commands/config.js +0 -445
  68. package/dist/cli/commands/config.js.map +0 -7
  69. package/dist/cli/commands/context-rehydrate.js +0 -751
  70. package/dist/cli/commands/context-rehydrate.js.map +0 -7
  71. package/dist/cli/commands/context.js +0 -343
  72. package/dist/cli/commands/context.js.map +0 -7
  73. package/dist/cli/commands/daemon.js +0 -392
  74. package/dist/cli/commands/daemon.js.map +0 -7
  75. package/dist/cli/commands/dashboard.js +0 -210
  76. package/dist/cli/commands/dashboard.js.map +0 -7
  77. package/dist/cli/commands/db.js +0 -147
  78. package/dist/cli/commands/db.js.map +0 -7
  79. package/dist/cli/commands/decision.js +0 -266
  80. package/dist/cli/commands/decision.js.map +0 -7
  81. package/dist/cli/commands/discovery.js +0 -279
  82. package/dist/cli/commands/discovery.js.map +0 -7
  83. package/dist/cli/commands/handoff.js +0 -624
  84. package/dist/cli/commands/handoff.js.map +0 -7
  85. package/dist/cli/commands/hooks.js +0 -298
  86. package/dist/cli/commands/hooks.js.map +0 -7
  87. package/dist/cli/commands/linear-unified.js +0 -353
  88. package/dist/cli/commands/linear-unified.js.map +0 -7
  89. package/dist/cli/commands/linear.js +0 -529
  90. package/dist/cli/commands/linear.js.map +0 -7
  91. package/dist/cli/commands/log.js +0 -169
  92. package/dist/cli/commands/log.js.map +0 -7
  93. package/dist/cli/commands/login.js +0 -172
  94. package/dist/cli/commands/login.js.map +0 -7
  95. package/dist/cli/commands/migrate.js +0 -240
  96. package/dist/cli/commands/migrate.js.map +0 -7
  97. package/dist/cli/commands/model.js +0 -533
  98. package/dist/cli/commands/model.js.map +0 -7
  99. package/dist/cli/commands/monitor.js +0 -313
  100. package/dist/cli/commands/monitor.js.map +0 -7
  101. package/dist/cli/commands/onboard.js +0 -536
  102. package/dist/cli/commands/onboard.js.map +0 -7
  103. package/dist/cli/commands/projects.js +0 -199
  104. package/dist/cli/commands/projects.js.map +0 -7
  105. package/dist/cli/commands/quality.js +0 -413
  106. package/dist/cli/commands/quality.js.map +0 -7
  107. package/dist/cli/commands/ralph.js +0 -909
  108. package/dist/cli/commands/ralph.js.map +0 -7
  109. package/dist/cli/commands/retrieval.js +0 -248
  110. package/dist/cli/commands/retrieval.js.map +0 -7
  111. package/dist/cli/commands/search.js +0 -173
  112. package/dist/cli/commands/search.js.map +0 -7
  113. package/dist/cli/commands/service.js +0 -749
  114. package/dist/cli/commands/service.js.map +0 -7
  115. package/dist/cli/commands/session.js +0 -200
  116. package/dist/cli/commands/session.js.map +0 -7
  117. package/dist/cli/commands/settings.js +0 -306
  118. package/dist/cli/commands/settings.js.map +0 -7
  119. package/dist/cli/commands/setup.js +0 -701
  120. package/dist/cli/commands/setup.js.map +0 -7
  121. package/dist/cli/commands/shell.js +0 -249
  122. package/dist/cli/commands/shell.js.map +0 -7
  123. package/dist/cli/commands/signup.js +0 -50
  124. package/dist/cli/commands/signup.js.map +0 -7
  125. package/dist/cli/commands/skills.js +0 -470
  126. package/dist/cli/commands/skills.js.map +0 -7
  127. package/dist/cli/commands/sms-notify.js +0 -795
  128. package/dist/cli/commands/sms-notify.js.map +0 -7
  129. package/dist/cli/commands/storage-tier.js +0 -183
  130. package/dist/cli/commands/storage-tier.js.map +0 -7
  131. package/dist/cli/commands/storage.js +0 -360
  132. package/dist/cli/commands/storage.js.map +0 -7
  133. package/dist/cli/commands/sweep.js +0 -249
  134. package/dist/cli/commands/sweep.js.map +0 -7
  135. package/dist/cli/commands/tasks.js +0 -213
  136. package/dist/cli/commands/tasks.js.map +0 -7
  137. package/dist/cli/commands/test.js +0 -286
  138. package/dist/cli/commands/test.js.map +0 -7
  139. package/dist/cli/commands/workflow.js +0 -142
  140. package/dist/cli/commands/workflow.js.map +0 -7
  141. package/dist/cli/commands/worktree.js +0 -319
  142. package/dist/cli/commands/worktree.js.map +0 -7
  143. package/dist/cli/index.js +0 -594
  144. package/dist/cli/index.js.map +0 -7
  145. package/dist/cli/opencode-sm.js +0 -448
  146. package/dist/cli/opencode-sm.js.map +0 -7
  147. package/dist/cli/utils/viewer.js +0 -96
  148. package/dist/cli/utils/viewer.js.map +0 -7
  149. package/dist/core/analytics/team-analytics.js +0 -378
  150. package/dist/core/analytics/team-analytics.js.map +0 -7
  151. package/dist/core/config/config-manager.js +0 -398
  152. package/dist/core/config/config-manager.js.map +0 -7
  153. package/dist/core/config/feature-flags.js +0 -76
  154. package/dist/core/config/feature-flags.js.map +0 -7
  155. package/dist/core/config/storage-config.js +0 -115
  156. package/dist/core/config/storage-config.js.map +0 -7
  157. package/dist/core/config/types.js +0 -144
  158. package/dist/core/config/types.js.map +0 -7
  159. package/dist/core/context/auto-context.js +0 -80
  160. package/dist/core/context/auto-context.js.map +0 -7
  161. package/dist/core/context/dual-stack-manager.js +0 -870
  162. package/dist/core/context/dual-stack-manager.js.map +0 -7
  163. package/dist/core/context/enhanced-rehydration.js +0 -994
  164. package/dist/core/context/enhanced-rehydration.js.map +0 -7
  165. package/dist/core/context/frame-database.js +0 -479
  166. package/dist/core/context/frame-database.js.map +0 -7
  167. package/dist/core/context/frame-digest.js +0 -250
  168. package/dist/core/context/frame-digest.js.map +0 -7
  169. package/dist/core/context/frame-handoff-manager.js +0 -778
  170. package/dist/core/context/frame-handoff-manager.js.map +0 -7
  171. package/dist/core/context/frame-lifecycle-hooks.js +0 -119
  172. package/dist/core/context/frame-lifecycle-hooks.js.map +0 -7
  173. package/dist/core/context/frame-manager.js +0 -1069
  174. package/dist/core/context/frame-manager.js.map +0 -7
  175. package/dist/core/context/frame-recovery.js +0 -302
  176. package/dist/core/context/frame-recovery.js.map +0 -7
  177. package/dist/core/context/frame-stack.js +0 -314
  178. package/dist/core/context/frame-stack.js.map +0 -7
  179. package/dist/core/context/frame-types.js +0 -5
  180. package/dist/core/context/frame-types.js.map +0 -7
  181. package/dist/core/context/incremental-gc.js +0 -290
  182. package/dist/core/context/incremental-gc.js.map +0 -7
  183. package/dist/core/context/index.js +0 -25
  184. package/dist/core/context/index.js.map +0 -7
  185. package/dist/core/context/model-aware-compaction.js +0 -623
  186. package/dist/core/context/model-aware-compaction.js.map +0 -7
  187. package/dist/core/context/permission-manager.js +0 -185
  188. package/dist/core/context/permission-manager.js.map +0 -7
  189. package/dist/core/context/recursive-context-manager.js +0 -592
  190. package/dist/core/context/recursive-context-manager.js.map +0 -7
  191. package/dist/core/context/refactored-frame-manager.js +0 -754
  192. package/dist/core/context/refactored-frame-manager.js.map +0 -7
  193. package/dist/core/context/shared-context-layer.js +0 -621
  194. package/dist/core/context/shared-context-layer.js.map +0 -7
  195. package/dist/core/context/stack-merge-resolver.js +0 -749
  196. package/dist/core/context/stack-merge-resolver.js.map +0 -7
  197. package/dist/core/context/validation.js +0 -130
  198. package/dist/core/context/validation.js.map +0 -7
  199. package/dist/core/database/batch-operations.js +0 -384
  200. package/dist/core/database/batch-operations.js.map +0 -7
  201. package/dist/core/database/connection-pool.js +0 -330
  202. package/dist/core/database/connection-pool.js.map +0 -7
  203. package/dist/core/database/database-adapter.js +0 -60
  204. package/dist/core/database/database-adapter.js.map +0 -7
  205. package/dist/core/database/migration-manager.js +0 -614
  206. package/dist/core/database/migration-manager.js.map +0 -7
  207. package/dist/core/database/paradedb-adapter.js +0 -990
  208. package/dist/core/database/paradedb-adapter.js.map +0 -7
  209. package/dist/core/database/query-cache.js +0 -298
  210. package/dist/core/database/query-cache.js.map +0 -7
  211. package/dist/core/database/query-router.js +0 -430
  212. package/dist/core/database/query-router.js.map +0 -7
  213. package/dist/core/database/sqlite-adapter.js +0 -738
  214. package/dist/core/database/sqlite-adapter.js.map +0 -7
  215. package/dist/core/digest/enhanced-hybrid-digest.js +0 -277
  216. package/dist/core/digest/enhanced-hybrid-digest.js.map +0 -7
  217. package/dist/core/digest/frame-digest-integration.js +0 -176
  218. package/dist/core/digest/frame-digest-integration.js.map +0 -7
  219. package/dist/core/digest/hybrid-digest-generator.js +0 -553
  220. package/dist/core/digest/hybrid-digest-generator.js.map +0 -7
  221. package/dist/core/digest/index.js +0 -9
  222. package/dist/core/digest/index.js.map +0 -7
  223. package/dist/core/digest/types.js +0 -25
  224. package/dist/core/digest/types.js.map +0 -7
  225. package/dist/core/errors/error-utils.js +0 -208
  226. package/dist/core/errors/error-utils.js.map +0 -7
  227. package/dist/core/errors/index.js +0 -521
  228. package/dist/core/errors/index.js.map +0 -7
  229. package/dist/core/errors/recovery.js +0 -269
  230. package/dist/core/errors/recovery.js.map +0 -7
  231. package/dist/core/execution/parallel-executor.js +0 -258
  232. package/dist/core/execution/parallel-executor.js.map +0 -7
  233. package/dist/core/frame/workflow-templates.js +0 -319
  234. package/dist/core/frame/workflow-templates.js.map +0 -7
  235. package/dist/core/merge/conflict-detector.js +0 -431
  236. package/dist/core/merge/conflict-detector.js.map +0 -7
  237. package/dist/core/merge/index.js +0 -9
  238. package/dist/core/merge/index.js.map +0 -7
  239. package/dist/core/merge/resolution-engine.js +0 -558
  240. package/dist/core/merge/resolution-engine.js.map +0 -7
  241. package/dist/core/merge/stack-diff.js +0 -532
  242. package/dist/core/merge/stack-diff.js.map +0 -7
  243. package/dist/core/merge/unified-merge-resolver.js +0 -303
  244. package/dist/core/merge/unified-merge-resolver.js.map +0 -7
  245. package/dist/core/models/fallback-monitor.js +0 -232
  246. package/dist/core/models/fallback-monitor.js.map +0 -7
  247. package/dist/core/models/model-router.js +0 -340
  248. package/dist/core/models/model-router.js.map +0 -7
  249. package/dist/core/monitoring/error-handler.js +0 -49
  250. package/dist/core/monitoring/error-handler.js.map +0 -7
  251. package/dist/core/monitoring/logger.js +0 -202
  252. package/dist/core/monitoring/logger.js.map +0 -7
  253. package/dist/core/monitoring/metrics.js +0 -172
  254. package/dist/core/monitoring/metrics.js.map +0 -7
  255. package/dist/core/monitoring/progress-tracker.js +0 -189
  256. package/dist/core/monitoring/progress-tracker.js.map +0 -7
  257. package/dist/core/monitoring/session-monitor.js +0 -300
  258. package/dist/core/monitoring/session-monitor.js.map +0 -7
  259. package/dist/core/performance/context-cache.js +0 -273
  260. package/dist/core/performance/context-cache.js.map +0 -7
  261. package/dist/core/performance/index.js +0 -11
  262. package/dist/core/performance/index.js.map +0 -7
  263. package/dist/core/performance/lazy-context-loader.js +0 -327
  264. package/dist/core/performance/lazy-context-loader.js.map +0 -7
  265. package/dist/core/performance/monitor.js +0 -221
  266. package/dist/core/performance/monitor.js.map +0 -7
  267. package/dist/core/performance/optimized-frame-context.js +0 -345
  268. package/dist/core/performance/optimized-frame-context.js.map +0 -7
  269. package/dist/core/performance/performance-benchmark.js +0 -277
  270. package/dist/core/performance/performance-benchmark.js.map +0 -7
  271. package/dist/core/performance/performance-profiler.js +0 -370
  272. package/dist/core/performance/performance-profiler.js.map +0 -7
  273. package/dist/core/performance/streaming-jsonl-parser.js +0 -195
  274. package/dist/core/performance/streaming-jsonl-parser.js.map +0 -7
  275. package/dist/core/persistence/postgres-adapter.js +0 -349
  276. package/dist/core/persistence/postgres-adapter.js.map +0 -7
  277. package/dist/core/projects/project-isolation.js +0 -201
  278. package/dist/core/projects/project-isolation.js.map +0 -7
  279. package/dist/core/projects/project-manager.js +0 -697
  280. package/dist/core/projects/project-manager.js.map +0 -7
  281. package/dist/core/query/query-parser.js +0 -370
  282. package/dist/core/query/query-parser.js.map +0 -7
  283. package/dist/core/query/query-templates.js +0 -321
  284. package/dist/core/query/query-templates.js.map +0 -7
  285. package/dist/core/retrieval/context-retriever.js +0 -479
  286. package/dist/core/retrieval/context-retriever.js.map +0 -7
  287. package/dist/core/retrieval/graph-retrieval.js +0 -662
  288. package/dist/core/retrieval/graph-retrieval.js.map +0 -7
  289. package/dist/core/retrieval/hierarchical-retrieval.js +0 -656
  290. package/dist/core/retrieval/hierarchical-retrieval.js.map +0 -7
  291. package/dist/core/retrieval/index.js +0 -8
  292. package/dist/core/retrieval/index.js.map +0 -7
  293. package/dist/core/retrieval/llm-context-retrieval.js +0 -613
  294. package/dist/core/retrieval/llm-context-retrieval.js.map +0 -7
  295. package/dist/core/retrieval/llm-provider.js +0 -151
  296. package/dist/core/retrieval/llm-provider.js.map +0 -7
  297. package/dist/core/retrieval/retrieval-audit.js +0 -236
  298. package/dist/core/retrieval/retrieval-audit.js.map +0 -7
  299. package/dist/core/retrieval/retrieval-benchmarks.js +0 -521
  300. package/dist/core/retrieval/retrieval-benchmarks.js.map +0 -7
  301. package/dist/core/retrieval/summary-generator.js +0 -589
  302. package/dist/core/retrieval/summary-generator.js.map +0 -7
  303. package/dist/core/retrieval/types.js +0 -21
  304. package/dist/core/retrieval/types.js.map +0 -7
  305. package/dist/core/security/index.js +0 -35
  306. package/dist/core/security/index.js.map +0 -7
  307. package/dist/core/security/input-sanitizer.js +0 -321
  308. package/dist/core/security/input-sanitizer.js.map +0 -7
  309. package/dist/core/session/clear-survival.js +0 -465
  310. package/dist/core/session/clear-survival.js.map +0 -7
  311. package/dist/core/session/enhanced-handoff.js +0 -792
  312. package/dist/core/session/enhanced-handoff.js.map +0 -7
  313. package/dist/core/session/handoff-generator.js +0 -343
  314. package/dist/core/session/handoff-generator.js.map +0 -7
  315. package/dist/core/session/index.js +0 -15
  316. package/dist/core/session/index.js.map +0 -7
  317. package/dist/core/session/session-manager.js +0 -347
  318. package/dist/core/session/session-manager.js.map +0 -7
  319. package/dist/core/skills/index.js +0 -7
  320. package/dist/core/skills/index.js.map +0 -7
  321. package/dist/core/skills/skill-storage.js +0 -764
  322. package/dist/core/skills/skill-storage.js.map +0 -7
  323. package/dist/core/skills/types.js +0 -193
  324. package/dist/core/skills/types.js.map +0 -7
  325. package/dist/core/storage/chromadb-adapter.js +0 -354
  326. package/dist/core/storage/chromadb-adapter.js.map +0 -7
  327. package/dist/core/storage/infinite-storage.js +0 -510
  328. package/dist/core/storage/infinite-storage.js.map +0 -7
  329. package/dist/core/storage/railway-optimized-storage.js +0 -591
  330. package/dist/core/storage/railway-optimized-storage.js.map +0 -7
  331. package/dist/core/storage/remote-storage.js +0 -489
  332. package/dist/core/storage/remote-storage.js.map +0 -7
  333. package/dist/core/storage/two-tier-storage.js +0 -766
  334. package/dist/core/storage/two-tier-storage.js.map +0 -7
  335. package/dist/core/trace/cli-trace-wrapper.js +0 -132
  336. package/dist/core/trace/cli-trace-wrapper.js.map +0 -7
  337. package/dist/core/trace/db-trace-wrapper.js +0 -247
  338. package/dist/core/trace/db-trace-wrapper.js.map +0 -7
  339. package/dist/core/trace/debug-trace.js +0 -417
  340. package/dist/core/trace/debug-trace.js.map +0 -7
  341. package/dist/core/trace/index.js +0 -109
  342. package/dist/core/trace/index.js.map +0 -7
  343. package/dist/core/trace/linear-api-wrapper.js +0 -178
  344. package/dist/core/trace/linear-api-wrapper.js.map +0 -7
  345. package/dist/core/trace/trace-demo.js +0 -154
  346. package/dist/core/trace/trace-demo.js.map +0 -7
  347. package/dist/core/trace/trace-detector.demo.js +0 -142
  348. package/dist/core/trace/trace-detector.demo.js.map +0 -7
  349. package/dist/core/trace/trace-detector.js +0 -528
  350. package/dist/core/trace/trace-detector.js.map +0 -7
  351. package/dist/core/trace/trace-store.js +0 -345
  352. package/dist/core/trace/trace-store.js.map +0 -7
  353. package/dist/core/trace/types.js +0 -77
  354. package/dist/core/trace/types.js.map +0 -7
  355. package/dist/core/types.js +0 -5
  356. package/dist/core/types.js.map +0 -7
  357. package/dist/core/utils/async-mutex.js +0 -114
  358. package/dist/core/utils/async-mutex.js.map +0 -7
  359. package/dist/core/utils/compression.js +0 -83
  360. package/dist/core/utils/compression.js.map +0 -7
  361. package/dist/core/utils/update-checker.js +0 -218
  362. package/dist/core/utils/update-checker.js.map +0 -7
  363. package/dist/core/worktree/worktree-manager.js +0 -465
  364. package/dist/core/worktree/worktree-manager.js.map +0 -7
  365. package/dist/daemon/daemon-config.js +0 -149
  366. package/dist/daemon/daemon-config.js.map +0 -7
  367. package/dist/daemon/services/context-service.js +0 -122
  368. package/dist/daemon/services/context-service.js.map +0 -7
  369. package/dist/daemon/services/linear-service.js +0 -136
  370. package/dist/daemon/services/linear-service.js.map +0 -7
  371. package/dist/daemon/session-daemon.js +0 -312
  372. package/dist/daemon/session-daemon.js.map +0 -7
  373. package/dist/daemon/unified-daemon.js +0 -276
  374. package/dist/daemon/unified-daemon.js.map +0 -7
  375. package/dist/features/analytics/api/analytics-api.js +0 -287
  376. package/dist/features/analytics/api/analytics-api.js.map +0 -7
  377. package/dist/features/analytics/core/analytics-service.js +0 -282
  378. package/dist/features/analytics/core/analytics-service.js.map +0 -7
  379. package/dist/features/analytics/index.js +0 -18
  380. package/dist/features/analytics/index.js.map +0 -7
  381. package/dist/features/analytics/queries/metrics-queries.js +0 -277
  382. package/dist/features/analytics/queries/metrics-queries.js.map +0 -7
  383. package/dist/features/analytics/types/metrics.js +0 -5
  384. package/dist/features/analytics/types/metrics.js.map +0 -7
  385. package/dist/features/browser/browser-mcp.js +0 -492
  386. package/dist/features/browser/browser-mcp.js.map +0 -7
  387. package/dist/features/sweep/index.js +0 -20
  388. package/dist/features/sweep/index.js.map +0 -7
  389. package/dist/features/sweep/prediction-client.js +0 -155
  390. package/dist/features/sweep/prediction-client.js.map +0 -7
  391. package/dist/features/sweep/prompt-builder.js +0 -85
  392. package/dist/features/sweep/prompt-builder.js.map +0 -7
  393. package/dist/features/sweep/pty-wrapper.js +0 -171
  394. package/dist/features/sweep/pty-wrapper.js.map +0 -7
  395. package/dist/features/sweep/state-watcher.js +0 -87
  396. package/dist/features/sweep/state-watcher.js.map +0 -7
  397. package/dist/features/sweep/status-bar.js +0 -88
  398. package/dist/features/sweep/status-bar.js.map +0 -7
  399. package/dist/features/sweep/sweep-server-manager.js +0 -226
  400. package/dist/features/sweep/sweep-server-manager.js.map +0 -7
  401. package/dist/features/sweep/tab-interceptor.js +0 -38
  402. package/dist/features/sweep/tab-interceptor.js.map +0 -7
  403. package/dist/features/sweep/types.js +0 -18
  404. package/dist/features/sweep/types.js.map +0 -7
  405. package/dist/features/tasks/linear-task-manager.js +0 -487
  406. package/dist/features/tasks/linear-task-manager.js.map +0 -7
  407. package/dist/features/tasks/task-aware-context.js +0 -410
  408. package/dist/features/tasks/task-aware-context.js.map +0 -7
  409. package/dist/features/tui/simple-monitor.js +0 -116
  410. package/dist/features/tui/simple-monitor.js.map +0 -7
  411. package/dist/features/tui/swarm-monitor.js +0 -648
  412. package/dist/features/tui/swarm-monitor.js.map +0 -7
  413. package/dist/features/web/client/stores/task-store.js +0 -26
  414. package/dist/features/web/client/stores/task-store.js.map +0 -7
  415. package/dist/features/web/server/index.js +0 -194
  416. package/dist/features/web/server/index.js.map +0 -7
  417. package/dist/hooks/auto-background.js +0 -151
  418. package/dist/hooks/auto-background.js.map +0 -7
  419. package/dist/hooks/claude-code-whatsapp-hook.js +0 -197
  420. package/dist/hooks/claude-code-whatsapp-hook.js.map +0 -7
  421. package/dist/hooks/config.js +0 -150
  422. package/dist/hooks/config.js.map +0 -7
  423. package/dist/hooks/daemon.js +0 -364
  424. package/dist/hooks/daemon.js.map +0 -7
  425. package/dist/hooks/events.js +0 -58
  426. package/dist/hooks/events.js.map +0 -7
  427. package/dist/hooks/index.js +0 -12
  428. package/dist/hooks/index.js.map +0 -7
  429. package/dist/hooks/linear-task-picker.js +0 -186
  430. package/dist/hooks/linear-task-picker.js.map +0 -7
  431. package/dist/hooks/schemas.js +0 -197
  432. package/dist/hooks/schemas.js.map +0 -7
  433. package/dist/hooks/secure-fs.js +0 -49
  434. package/dist/hooks/secure-fs.js.map +0 -7
  435. package/dist/hooks/security-logger.js +0 -155
  436. package/dist/hooks/security-logger.js.map +0 -7
  437. package/dist/hooks/session-summary.js +0 -222
  438. package/dist/hooks/session-summary.js.map +0 -7
  439. package/dist/hooks/sms-action-runner.js +0 -371
  440. package/dist/hooks/sms-action-runner.js.map +0 -7
  441. package/dist/hooks/sms-notify.js +0 -506
  442. package/dist/hooks/sms-notify.js.map +0 -7
  443. package/dist/hooks/sms-watcher.js +0 -93
  444. package/dist/hooks/sms-watcher.js.map +0 -7
  445. package/dist/hooks/sms-webhook.js +0 -555
  446. package/dist/hooks/sms-webhook.js.map +0 -7
  447. package/dist/hooks/whatsapp-commands.js +0 -479
  448. package/dist/hooks/whatsapp-commands.js.map +0 -7
  449. package/dist/hooks/whatsapp-scheduler.js +0 -317
  450. package/dist/hooks/whatsapp-scheduler.js.map +0 -7
  451. package/dist/hooks/whatsapp-sync.js +0 -409
  452. package/dist/hooks/whatsapp-sync.js.map +0 -7
  453. package/dist/index.js +0 -25
  454. package/dist/index.js.map +0 -7
  455. package/dist/integrations/anthropic/client.js +0 -263
  456. package/dist/integrations/anthropic/client.js.map +0 -7
  457. package/dist/integrations/claude-code/agent-bridge.js +0 -768
  458. package/dist/integrations/claude-code/agent-bridge.js.map +0 -7
  459. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js +0 -459
  460. package/dist/integrations/claude-code/enhanced-pre-clear-hooks.js.map +0 -7
  461. package/dist/integrations/claude-code/lifecycle-hooks.js +0 -254
  462. package/dist/integrations/claude-code/lifecycle-hooks.js.map +0 -7
  463. package/dist/integrations/claude-code/post-task-hooks.js +0 -545
  464. package/dist/integrations/claude-code/post-task-hooks.js.map +0 -7
  465. package/dist/integrations/claude-code/subagent-client-stub.js +0 -20
  466. package/dist/integrations/claude-code/subagent-client-stub.js.map +0 -7
  467. package/dist/integrations/claude-code/subagent-client.js +0 -511
  468. package/dist/integrations/claude-code/subagent-client.js.map +0 -7
  469. package/dist/integrations/claude-code/task-coordinator.js +0 -360
  470. package/dist/integrations/claude-code/task-coordinator.js.map +0 -7
  471. package/dist/integrations/linear/auth.js +0 -337
  472. package/dist/integrations/linear/auth.js.map +0 -7
  473. package/dist/integrations/linear/auto-sync.js +0 -258
  474. package/dist/integrations/linear/auto-sync.js.map +0 -7
  475. package/dist/integrations/linear/client.js +0 -634
  476. package/dist/integrations/linear/client.js.map +0 -7
  477. package/dist/integrations/linear/config.js +0 -130
  478. package/dist/integrations/linear/config.js.map +0 -7
  479. package/dist/integrations/linear/migration.js +0 -361
  480. package/dist/integrations/linear/migration.js.map +0 -7
  481. package/dist/integrations/linear/oauth-server.js +0 -454
  482. package/dist/integrations/linear/oauth-server.js.map +0 -7
  483. package/dist/integrations/linear/rest-client.js +0 -213
  484. package/dist/integrations/linear/rest-client.js.map +0 -7
  485. package/dist/integrations/linear/sync-manager.js +0 -236
  486. package/dist/integrations/linear/sync-manager.js.map +0 -7
  487. package/dist/integrations/linear/sync-service.js +0 -231
  488. package/dist/integrations/linear/sync-service.js.map +0 -7
  489. package/dist/integrations/linear/sync.js +0 -782
  490. package/dist/integrations/linear/sync.js.map +0 -7
  491. package/dist/integrations/linear/types.js +0 -5
  492. package/dist/integrations/linear/types.js.map +0 -7
  493. package/dist/integrations/linear/unified-sync.js +0 -589
  494. package/dist/integrations/linear/unified-sync.js.map +0 -7
  495. package/dist/integrations/linear/webhook-handler.js +0 -219
  496. package/dist/integrations/linear/webhook-handler.js.map +0 -7
  497. package/dist/integrations/linear/webhook-server.js +0 -218
  498. package/dist/integrations/linear/webhook-server.js.map +0 -7
  499. package/dist/integrations/linear/webhook.js +0 -291
  500. package/dist/integrations/linear/webhook.js.map +0 -7
  501. package/dist/integrations/mcp/handlers/code-execution-handlers.js +0 -266
  502. package/dist/integrations/mcp/handlers/code-execution-handlers.js.map +0 -7
  503. package/dist/integrations/mcp/handlers/context-handlers.js +0 -257
  504. package/dist/integrations/mcp/handlers/context-handlers.js.map +0 -7
  505. package/dist/integrations/mcp/handlers/discovery-handlers.js +0 -497
  506. package/dist/integrations/mcp/handlers/discovery-handlers.js.map +0 -7
  507. package/dist/integrations/mcp/handlers/index.js +0 -166
  508. package/dist/integrations/mcp/handlers/index.js.map +0 -7
  509. package/dist/integrations/mcp/handlers/linear-handlers.js +0 -247
  510. package/dist/integrations/mcp/handlers/linear-handlers.js.map +0 -7
  511. package/dist/integrations/mcp/handlers/skill-handlers.js +0 -529
  512. package/dist/integrations/mcp/handlers/skill-handlers.js.map +0 -7
  513. package/dist/integrations/mcp/handlers/task-handlers.js +0 -239
  514. package/dist/integrations/mcp/handlers/task-handlers.js.map +0 -7
  515. package/dist/integrations/mcp/handlers/trace-handlers.js +0 -308
  516. package/dist/integrations/mcp/handlers/trace-handlers.js.map +0 -7
  517. package/dist/integrations/mcp/index.js +0 -23
  518. package/dist/integrations/mcp/index.js.map +0 -7
  519. package/dist/integrations/mcp/middleware/tool-scoring.js +0 -356
  520. package/dist/integrations/mcp/middleware/tool-scoring.js.map +0 -7
  521. package/dist/integrations/mcp/refactored-server.js +0 -374
  522. package/dist/integrations/mcp/refactored-server.js.map +0 -7
  523. package/dist/integrations/mcp/remote-server.js +0 -682
  524. package/dist/integrations/mcp/remote-server.js.map +0 -7
  525. package/dist/integrations/mcp/schemas.js +0 -147
  526. package/dist/integrations/mcp/schemas.js.map +0 -7
  527. package/dist/integrations/mcp/server.js +0 -1975
  528. package/dist/integrations/mcp/server.js.map +0 -7
  529. package/dist/integrations/mcp/tool-definitions-code.js +0 -125
  530. package/dist/integrations/mcp/tool-definitions-code.js.map +0 -7
  531. package/dist/integrations/mcp/tool-definitions.js +0 -702
  532. package/dist/integrations/mcp/tool-definitions.js.map +0 -7
  533. package/dist/integrations/mcp/trace-test.js +0 -48
  534. package/dist/integrations/mcp/trace-test.js.map +0 -7
  535. package/dist/integrations/pg-aiguide/embedding-provider.js +0 -189
  536. package/dist/integrations/pg-aiguide/embedding-provider.js.map +0 -7
  537. package/dist/integrations/pg-aiguide/semantic-search.js +0 -187
  538. package/dist/integrations/pg-aiguide/semantic-search.js.map +0 -7
  539. package/dist/integrations/pg-aiguide/timescale-analytics.js +0 -224
  540. package/dist/integrations/pg-aiguide/timescale-analytics.js.map +0 -7
  541. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js +0 -860
  542. package/dist/integrations/ralph/bridge/ralph-stackmemory-bridge.js.map +0 -7
  543. package/dist/integrations/ralph/context/context-budget-manager.js +0 -301
  544. package/dist/integrations/ralph/context/context-budget-manager.js.map +0 -7
  545. package/dist/integrations/ralph/context/stackmemory-context-loader.js +0 -360
  546. package/dist/integrations/ralph/context/stackmemory-context-loader.js.map +0 -7
  547. package/dist/integrations/ralph/coordination/enhanced-coordination.js +0 -410
  548. package/dist/integrations/ralph/coordination/enhanced-coordination.js.map +0 -7
  549. package/dist/integrations/ralph/index.js +0 -18
  550. package/dist/integrations/ralph/index.js.map +0 -7
  551. package/dist/integrations/ralph/learning/pattern-learner.js +0 -401
  552. package/dist/integrations/ralph/learning/pattern-learner.js.map +0 -7
  553. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js +0 -448
  554. package/dist/integrations/ralph/lifecycle/iteration-lifecycle.js.map +0 -7
  555. package/dist/integrations/ralph/monitoring/swarm-dashboard.js +0 -294
  556. package/dist/integrations/ralph/monitoring/swarm-dashboard.js.map +0 -7
  557. package/dist/integrations/ralph/monitoring/swarm-registry.js +0 -108
  558. package/dist/integrations/ralph/monitoring/swarm-registry.js.map +0 -7
  559. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js +0 -463
  560. package/dist/integrations/ralph/orchestration/multi-loop-orchestrator.js.map +0 -7
  561. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js +0 -400
  562. package/dist/integrations/ralph/patterns/compounding-engineering-pattern.js.map +0 -7
  563. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js +0 -473
  564. package/dist/integrations/ralph/patterns/extended-coherence-sessions.js.map +0 -7
  565. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js +0 -388
  566. package/dist/integrations/ralph/patterns/oracle-worker-pattern.js.map +0 -7
  567. package/dist/integrations/ralph/performance/performance-optimizer.js +0 -358
  568. package/dist/integrations/ralph/performance/performance-optimizer.js.map +0 -7
  569. package/dist/integrations/ralph/ralph-integration-demo.js +0 -182
  570. package/dist/integrations/ralph/ralph-integration-demo.js.map +0 -7
  571. package/dist/integrations/ralph/recovery/crash-recovery.js +0 -462
  572. package/dist/integrations/ralph/recovery/crash-recovery.js.map +0 -7
  573. package/dist/integrations/ralph/state/state-reconciler.js +0 -404
  574. package/dist/integrations/ralph/state/state-reconciler.js.map +0 -7
  575. package/dist/integrations/ralph/swarm/git-workflow-manager.js +0 -428
  576. package/dist/integrations/ralph/swarm/git-workflow-manager.js.map +0 -7
  577. package/dist/integrations/ralph/swarm/swarm-coordinator.js +0 -996
  578. package/dist/integrations/ralph/swarm/swarm-coordinator.js.map +0 -7
  579. package/dist/integrations/ralph/types.js +0 -5
  580. package/dist/integrations/ralph/types.js.map +0 -7
  581. package/dist/integrations/ralph/visualization/ralph-debugger.js +0 -585
  582. package/dist/integrations/ralph/visualization/ralph-debugger.js.map +0 -7
  583. package/dist/mcp/stackmemory-mcp-server.js +0 -554
  584. package/dist/mcp/stackmemory-mcp-server.js.map +0 -7
  585. package/dist/middleware/exponential-rate-limiter.js +0 -289
  586. package/dist/middleware/exponential-rate-limiter.js.map +0 -7
  587. package/dist/models/user.model.js +0 -358
  588. package/dist/models/user.model.js.map +0 -7
  589. package/dist/servers/production/auth-middleware.js +0 -528
  590. package/dist/servers/production/auth-middleware.js.map +0 -7
  591. package/dist/servers/railway/config.js +0 -55
  592. package/dist/servers/railway/config.js.map +0 -7
  593. package/dist/servers/railway/index-enhanced.js +0 -160
  594. package/dist/servers/railway/index-enhanced.js.map +0 -7
  595. package/dist/servers/railway/index.js +0 -1349
  596. package/dist/servers/railway/index.js.map +0 -7
  597. package/dist/servers/railway/simple.js +0 -64
  598. package/dist/servers/railway/simple.js.map +0 -7
  599. package/dist/servers/railway/storage-test.js +0 -459
  600. package/dist/servers/railway/storage-test.js.map +0 -7
  601. package/dist/services/config-service.js +0 -65
  602. package/dist/services/config-service.js.map +0 -7
  603. package/dist/services/context-service.js +0 -194
  604. package/dist/services/context-service.js.map +0 -7
  605. package/dist/skills/api-discovery.js +0 -354
  606. package/dist/skills/api-discovery.js.map +0 -7
  607. package/dist/skills/api-skill.js +0 -475
  608. package/dist/skills/api-skill.js.map +0 -7
  609. package/dist/skills/claude-skills.js +0 -1061
  610. package/dist/skills/claude-skills.js.map +0 -7
  611. package/dist/skills/dashboard-launcher.js +0 -216
  612. package/dist/skills/dashboard-launcher.js.map +0 -7
  613. package/dist/skills/recursive-agent-orchestrator.js +0 -575
  614. package/dist/skills/recursive-agent-orchestrator.js.map +0 -7
  615. package/dist/skills/repo-ingestion-skill.js +0 -609
  616. package/dist/skills/repo-ingestion-skill.js.map +0 -7
  617. package/dist/skills/security-secrets-scanner.js +0 -284
  618. package/dist/skills/security-secrets-scanner.js.map +0 -7
  619. package/dist/skills/unified-rlm-orchestrator.js +0 -404
  620. package/dist/skills/unified-rlm-orchestrator.js.map +0 -7
  621. package/dist/types/task.js +0 -5
  622. package/dist/types/task.js.map +0 -7
  623. package/dist/utils/env.js +0 -50
  624. package/dist/utils/env.js.map +0 -7
  625. package/dist/utils/formatting.js +0 -62
  626. package/dist/utils/formatting.js.map +0 -7
  627. package/dist/utils/process-cleanup.js +0 -136
  628. package/dist/utils/process-cleanup.js.map +0 -7
  629. package/dist/validation/schemas.js +0 -222
  630. package/dist/validation/schemas.js.map +0 -7
  631. /package/dist/{core/merge → src/core/extensions}/types.js +0 -0
  632. /package/dist/{core/merge → src/core/extensions}/types.js.map +0 -0
@@ -1,7 +0,0 @@
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
- }
@@ -1,216 +0,0 @@
1
- import { fileURLToPath as __fileURLToPath } from 'url';
2
- import { dirname as __pathDirname } from 'path';
3
- const __filename = __fileURLToPath(import.meta.url);
4
- const __dirname = __pathDirname(__filename);
5
- import { 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
@@ -1,7 +0,0 @@
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
- }