@claude-flow/cli 3.27.4 → 3.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/.claude/agents/analysis/analyze-code-quality.md +178 -178
  2. package/.claude/agents/analysis/code-analyzer.md +209 -209
  3. package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
  4. package/.claude/agents/architecture/arch-system-design.md +156 -156
  5. package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
  6. package/.claude/agents/browser/browser-agent.yaml +182 -182
  7. package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
  8. package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
  9. package/.claude/agents/consensus/gossip-coordinator.md +62 -62
  10. package/.claude/agents/consensus/performance-benchmarker.md +850 -850
  11. package/.claude/agents/consensus/quorum-manager.md +822 -822
  12. package/.claude/agents/consensus/raft-manager.md +62 -62
  13. package/.claude/agents/consensus/security-manager.md +621 -621
  14. package/.claude/agents/core/planner.md +374 -374
  15. package/.claude/agents/custom/test-long-runner.md +44 -44
  16. package/.claude/agents/data/data-ml-model.md +444 -444
  17. package/.claude/agents/data/ml/data-ml-model.md +192 -192
  18. package/.claude/agents/development/backend/dev-backend-api.md +141 -141
  19. package/.claude/agents/development/dev-backend-api.md +344 -344
  20. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
  21. package/.claude/agents/devops/ops-cicd-github.md +164 -164
  22. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
  23. package/.claude/agents/documentation/docs-api-openapi.md +354 -354
  24. package/.claude/agents/flow-nexus/app-store.md +87 -87
  25. package/.claude/agents/flow-nexus/authentication.md +68 -68
  26. package/.claude/agents/flow-nexus/challenges.md +80 -80
  27. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  28. package/.claude/agents/flow-nexus/payments.md +82 -82
  29. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  30. package/.claude/agents/flow-nexus/swarm.md +75 -75
  31. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  32. package/.claude/agents/flow-nexus/workflow.md +83 -83
  33. package/.claude/agents/github/code-review-swarm.md +377 -377
  34. package/.claude/agents/github/github-modes.md +172 -172
  35. package/.claude/agents/github/issue-tracker.md +575 -575
  36. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  37. package/.claude/agents/github/pr-manager.md +437 -437
  38. package/.claude/agents/github/project-board-sync.md +508 -508
  39. package/.claude/agents/github/release-manager.md +604 -604
  40. package/.claude/agents/github/release-swarm.md +582 -582
  41. package/.claude/agents/github/repo-architect.md +397 -397
  42. package/.claude/agents/github/swarm-issue.md +572 -572
  43. package/.claude/agents/github/swarm-pr.md +427 -427
  44. package/.claude/agents/github/sync-coordinator.md +451 -451
  45. package/.claude/agents/github/workflow-automation.md +902 -902
  46. package/.claude/agents/goal/agent.md +815 -815
  47. package/.claude/agents/optimization/benchmark-suite.md +664 -664
  48. package/.claude/agents/optimization/load-balancer.md +430 -430
  49. package/.claude/agents/optimization/performance-monitor.md +671 -671
  50. package/.claude/agents/optimization/resource-allocator.md +673 -673
  51. package/.claude/agents/optimization/topology-optimizer.md +807 -807
  52. package/.claude/agents/payments/agentic-payments.md +126 -126
  53. package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
  54. package/.claude/agents/sparc/architecture.md +698 -698
  55. package/.claude/agents/sparc/pseudocode.md +519 -519
  56. package/.claude/agents/sparc/refinement.md +801 -801
  57. package/.claude/agents/sparc/specification.md +477 -477
  58. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
  59. package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
  60. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  61. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  62. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  63. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  64. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  65. package/.claude/agents/swarm/adaptive-coordinator.md +1126 -1126
  66. package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
  67. package/.claude/agents/swarm/mesh-coordinator.md +962 -962
  68. package/.claude/agents/templates/automation-smart-agent.md +204 -204
  69. package/.claude/agents/templates/base-template-generator.md +289 -289
  70. package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
  71. package/.claude/agents/templates/github-pr-manager.md +176 -176
  72. package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
  73. package/.claude/agents/templates/memory-coordinator.md +186 -186
  74. package/.claude/agents/templates/orchestrator-task.md +138 -138
  75. package/.claude/agents/templates/performance-analyzer.md +198 -198
  76. package/.claude/agents/templates/sparc-coordinator.md +513 -513
  77. package/.claude/agents/testing/production-validator.md +394 -394
  78. package/.claude/agents/testing/tdd-london-swarm.md +243 -243
  79. package/.claude/agents/v3/aidefence-guardian.md +282 -282
  80. package/.claude/agents/v3/claims-authorizer.md +208 -208
  81. package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
  82. package/.claude/agents/v3/ddd-domain-expert.md +220 -220
  83. package/.claude/agents/v3/injection-analyst.md +236 -236
  84. package/.claude/agents/v3/performance-engineer.md +1233 -1233
  85. package/.claude/agents/v3/pii-detector.md +151 -151
  86. package/.claude/agents/v3/reasoningbank-learner.md +213 -213
  87. package/.claude/agents/v3/security-architect-aidefence.md +410 -410
  88. package/.claude/agents/v3/security-architect.md +867 -867
  89. package/.claude/agents/v3/swarm-memory-manager.md +157 -157
  90. package/.claude/agents/v3/v3-integration-architect.md +205 -205
  91. package/.claude/commands/agents/README.md +50 -50
  92. package/.claude/commands/agents/agent-capabilities.md +140 -140
  93. package/.claude/commands/agents/agent-coordination.md +28 -28
  94. package/.claude/commands/agents/agent-spawning.md +28 -28
  95. package/.claude/commands/agents/agent-types.md +216 -216
  96. package/.claude/commands/agents/health.md +139 -139
  97. package/.claude/commands/agents/list.md +100 -100
  98. package/.claude/commands/agents/logs.md +130 -130
  99. package/.claude/commands/agents/metrics.md +122 -122
  100. package/.claude/commands/agents/pool.md +127 -127
  101. package/.claude/commands/agents/spawn.md +140 -140
  102. package/.claude/commands/agents/status.md +115 -115
  103. package/.claude/commands/agents/stop.md +102 -102
  104. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  105. package/.claude/commands/analysis/README.md +9 -9
  106. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  107. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  108. package/.claude/commands/analysis/performance-report.md +25 -25
  109. package/.claude/commands/analysis/token-efficiency.md +44 -44
  110. package/.claude/commands/analysis/token-usage.md +25 -25
  111. package/.claude/commands/automation/README.md +9 -9
  112. package/.claude/commands/automation/auto-agent.md +122 -122
  113. package/.claude/commands/automation/self-healing.md +105 -105
  114. package/.claude/commands/automation/session-memory.md +89 -89
  115. package/.claude/commands/automation/smart-agents.md +72 -72
  116. package/.claude/commands/automation/smart-spawn.md +25 -25
  117. package/.claude/commands/automation/workflow-select.md +25 -25
  118. package/.claude/commands/claude-flow-help.md +103 -103
  119. package/.claude/commands/claude-flow-memory.md +107 -107
  120. package/.claude/commands/claude-flow-swarm.md +205 -205
  121. package/.claude/commands/coordination/README.md +9 -9
  122. package/.claude/commands/coordination/agent-spawn.md +25 -25
  123. package/.claude/commands/coordination/init.md +44 -44
  124. package/.claude/commands/coordination/orchestrate.md +43 -43
  125. package/.claude/commands/coordination/spawn.md +45 -45
  126. package/.claude/commands/coordination/swarm-init.md +85 -85
  127. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  128. package/.claude/commands/github/README.md +11 -11
  129. package/.claude/commands/github/code-review-swarm.md +513 -513
  130. package/.claude/commands/github/code-review.md +25 -25
  131. package/.claude/commands/github/github-modes.md +146 -146
  132. package/.claude/commands/github/github-swarm.md +121 -121
  133. package/.claude/commands/github/issue-tracker.md +291 -291
  134. package/.claude/commands/github/issue-triage.md +25 -25
  135. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  136. package/.claude/commands/github/pr-enhance.md +26 -26
  137. package/.claude/commands/github/pr-manager.md +169 -169
  138. package/.claude/commands/github/project-board-sync.md +470 -470
  139. package/.claude/commands/github/release-manager.md +339 -339
  140. package/.claude/commands/github/release-swarm.md +543 -543
  141. package/.claude/commands/github/repo-analyze.md +25 -25
  142. package/.claude/commands/github/repo-architect.md +366 -366
  143. package/.claude/commands/github/swarm-issue.md +484 -484
  144. package/.claude/commands/github/swarm-pr.md +287 -287
  145. package/.claude/commands/github/sync-coordinator.md +302 -302
  146. package/.claude/commands/github/workflow-automation.md +441 -441
  147. package/.claude/commands/hive-mind/README.md +17 -17
  148. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  149. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  150. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  151. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  152. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  153. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  154. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  155. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  156. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  157. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  158. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  159. package/.claude/commands/hooks/README.md +11 -11
  160. package/.claude/commands/hooks/overview.md +57 -57
  161. package/.claude/commands/hooks/post-edit.md +117 -117
  162. package/.claude/commands/hooks/post-task.md +112 -112
  163. package/.claude/commands/hooks/pre-edit.md +113 -113
  164. package/.claude/commands/hooks/pre-task.md +111 -111
  165. package/.claude/commands/hooks/session-end.md +118 -118
  166. package/.claude/commands/hooks/setup.md +102 -102
  167. package/.claude/commands/memory/README.md +9 -9
  168. package/.claude/commands/memory/memory-persist.md +25 -25
  169. package/.claude/commands/memory/memory-search.md +25 -25
  170. package/.claude/commands/memory/memory-usage.md +25 -25
  171. package/.claude/commands/memory/neural.md +47 -47
  172. package/.claude/commands/monitoring/README.md +9 -9
  173. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  174. package/.claude/commands/monitoring/agents.md +44 -44
  175. package/.claude/commands/monitoring/real-time-view.md +25 -25
  176. package/.claude/commands/monitoring/status.md +46 -46
  177. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  178. package/.claude/commands/optimization/README.md +9 -9
  179. package/.claude/commands/optimization/auto-topology.md +61 -61
  180. package/.claude/commands/optimization/cache-manage.md +25 -25
  181. package/.claude/commands/optimization/parallel-execute.md +25 -25
  182. package/.claude/commands/optimization/parallel-execution.md +49 -49
  183. package/.claude/commands/optimization/topology-optimize.md +25 -25
  184. package/.claude/commands/pair/README.md +260 -260
  185. package/.claude/commands/pair/commands.md +545 -545
  186. package/.claude/commands/pair/config.md +509 -509
  187. package/.claude/commands/pair/examples.md +511 -511
  188. package/.claude/commands/pair/modes.md +347 -347
  189. package/.claude/commands/pair/session.md +406 -406
  190. package/.claude/commands/pair/start.md +208 -208
  191. package/.claude/commands/sparc/analyzer.md +51 -51
  192. package/.claude/commands/sparc/architect.md +53 -53
  193. package/.claude/commands/sparc/ask.md +97 -97
  194. package/.claude/commands/sparc/batch-executor.md +54 -54
  195. package/.claude/commands/sparc/code.md +89 -89
  196. package/.claude/commands/sparc/coder.md +54 -54
  197. package/.claude/commands/sparc/debug.md +83 -83
  198. package/.claude/commands/sparc/debugger.md +54 -54
  199. package/.claude/commands/sparc/designer.md +53 -53
  200. package/.claude/commands/sparc/devops.md +109 -109
  201. package/.claude/commands/sparc/docs-writer.md +80 -80
  202. package/.claude/commands/sparc/documenter.md +54 -54
  203. package/.claude/commands/sparc/innovator.md +54 -54
  204. package/.claude/commands/sparc/integration.md +83 -83
  205. package/.claude/commands/sparc/mcp.md +117 -117
  206. package/.claude/commands/sparc/memory-manager.md +54 -54
  207. package/.claude/commands/sparc/optimizer.md +54 -54
  208. package/.claude/commands/sparc/orchestrator.md +131 -131
  209. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  210. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  211. package/.claude/commands/sparc/researcher.md +54 -54
  212. package/.claude/commands/sparc/reviewer.md +54 -54
  213. package/.claude/commands/sparc/security-review.md +80 -80
  214. package/.claude/commands/sparc/sparc-modes.md +174 -174
  215. package/.claude/commands/sparc/sparc.md +111 -111
  216. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  217. package/.claude/commands/sparc/supabase-admin.md +348 -348
  218. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  219. package/.claude/commands/sparc/tdd.md +54 -54
  220. package/.claude/commands/sparc/tester.md +54 -54
  221. package/.claude/commands/sparc/tutorial.md +79 -79
  222. package/.claude/commands/sparc/workflow-manager.md +54 -54
  223. package/.claude/commands/sparc.md +166 -166
  224. package/.claude/commands/stream-chain/pipeline.md +120 -120
  225. package/.claude/commands/stream-chain/run.md +69 -69
  226. package/.claude/commands/swarm/README.md +15 -15
  227. package/.claude/commands/swarm/analysis.md +95 -95
  228. package/.claude/commands/swarm/development.md +96 -96
  229. package/.claude/commands/swarm/examples.md +168 -168
  230. package/.claude/commands/swarm/maintenance.md +102 -102
  231. package/.claude/commands/swarm/optimization.md +117 -117
  232. package/.claude/commands/swarm/research.md +136 -136
  233. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  234. package/.claude/commands/swarm/swarm-background.md +8 -8
  235. package/.claude/commands/swarm/swarm-init.md +19 -19
  236. package/.claude/commands/swarm/swarm-modes.md +8 -8
  237. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  238. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  239. package/.claude/commands/swarm/swarm-status.md +8 -8
  240. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  241. package/.claude/commands/swarm/swarm.md +87 -87
  242. package/.claude/commands/swarm/testing.md +131 -131
  243. package/.claude/commands/training/README.md +9 -9
  244. package/.claude/commands/training/model-update.md +25 -25
  245. package/.claude/commands/training/neural-patterns.md +107 -107
  246. package/.claude/commands/training/neural-train.md +75 -75
  247. package/.claude/commands/training/pattern-learn.md +25 -25
  248. package/.claude/commands/training/specialization.md +62 -62
  249. package/.claude/commands/truth/start.md +142 -142
  250. package/.claude/commands/verify/check.md +49 -49
  251. package/.claude/commands/verify/start.md +127 -127
  252. package/.claude/commands/workflows/README.md +9 -9
  253. package/.claude/commands/workflows/development.md +77 -77
  254. package/.claude/commands/workflows/research.md +62 -62
  255. package/.claude/commands/workflows/workflow-create.md +25 -25
  256. package/.claude/commands/workflows/workflow-execute.md +25 -25
  257. package/.claude/commands/workflows/workflow-export.md +25 -25
  258. package/.claude/eval/human-relevance-frozen-v1.json +17 -17
  259. package/.claude/evolve-proof/generation-0.json +211 -211
  260. package/.claude/evolve-proof/real-generation-0.json +406 -406
  261. package/.claude/evolve-proof/real-generation-1.json +406 -406
  262. package/.claude/helpers/README.md +96 -96
  263. package/.claude/helpers/adr-compliance.sh +186 -186
  264. package/.claude/helpers/auto-commit.sh +178 -178
  265. package/.claude/helpers/auto-memory-hook.mjs +430 -430
  266. package/.claude/helpers/checkpoint-manager.sh +251 -251
  267. package/.claude/helpers/daemon-manager.sh +252 -252
  268. package/.claude/helpers/ddd-tracker.sh +144 -144
  269. package/.claude/helpers/github-safe.js +156 -156
  270. package/.claude/helpers/github-setup.sh +45 -45
  271. package/.claude/helpers/guidance-hook.sh +13 -13
  272. package/.claude/helpers/guidance-hooks.sh +102 -102
  273. package/.claude/helpers/health-monitor.sh +108 -108
  274. package/.claude/helpers/helpers.manifest.json +6 -6
  275. package/.claude/helpers/hook-handler.cjs +460 -460
  276. package/.claude/helpers/intelligence.cjs +1058 -1058
  277. package/.claude/helpers/learning-hooks.sh +329 -329
  278. package/.claude/helpers/learning-optimizer.sh +127 -127
  279. package/.claude/helpers/learning-service.mjs +1144 -1144
  280. package/.claude/helpers/memory.js +83 -83
  281. package/.claude/helpers/metrics-db.mjs +503 -503
  282. package/.claude/helpers/pattern-consolidator.sh +86 -86
  283. package/.claude/helpers/perf-worker.sh +160 -160
  284. package/.claude/helpers/post-commit +16 -16
  285. package/.claude/helpers/pre-commit +26 -26
  286. package/.claude/helpers/quick-start.sh +19 -19
  287. package/.claude/helpers/router.js +105 -105
  288. package/.claude/helpers/security-scanner.sh +127 -127
  289. package/.claude/helpers/session.js +157 -157
  290. package/.claude/helpers/setup-mcp.sh +18 -18
  291. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  292. package/.claude/helpers/statusline-hook.sh +21 -21
  293. package/.claude/helpers/statusline.cjs +925 -925
  294. package/.claude/helpers/statusline.js +352 -352
  295. package/.claude/helpers/swarm-comms.sh +353 -353
  296. package/.claude/helpers/swarm-hooks.sh +761 -761
  297. package/.claude/helpers/swarm-monitor.sh +210 -210
  298. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  299. package/.claude/helpers/update-v3-progress.sh +165 -165
  300. package/.claude/helpers/v3-quick-status.sh +57 -57
  301. package/.claude/helpers/v3.sh +110 -110
  302. package/.claude/helpers/validate-v3-config.sh +215 -215
  303. package/.claude/helpers/worker-manager.sh +170 -170
  304. package/.claude/proven-config.json +1 -1
  305. package/.claude/proven-config.manifest.json +37 -37
  306. package/.claude/proven-config.signed.json +41 -41
  307. package/.claude/settings.json +182 -182
  308. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  309. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  310. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  311. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  312. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  313. package/.claude/skills/browser/SKILL.md +204 -204
  314. package/.claude/skills/dual-mode/README.md +71 -71
  315. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  316. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  317. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  318. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  319. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  320. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  321. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  322. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  323. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  324. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  325. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  326. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  327. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  328. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  329. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  330. package/.claude/skills/skill-builder/SKILL.md +910 -910
  331. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  332. package/.claude/skills/stream-chain/SKILL.md +560 -560
  333. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  334. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  335. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  336. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  337. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  338. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  339. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  340. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  341. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  342. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  343. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  344. package/.claude/skills/verification-quality/SKILL.md +691 -691
  345. package/README.md +419 -419
  346. package/bin/cli.js +314 -314
  347. package/bin/mcp-server.js +224 -224
  348. package/bin/preinstall.cjs +2 -2
  349. package/catalog-manifest.json +2 -2
  350. package/dist/src/benchmarks/gaia-critic.js +24 -24
  351. package/dist/src/business-pods/bbs-budget-tracker.js +53 -53
  352. package/dist/src/commands/completions.js +409 -409
  353. package/dist/src/commands/daemon.d.ts +23 -0
  354. package/dist/src/commands/daemon.js +216 -44
  355. package/dist/src/commands/embeddings.js +26 -26
  356. package/dist/src/commands/funnel.d.ts +2 -0
  357. package/dist/src/commands/funnel.js +110 -2
  358. package/dist/src/commands/hive-mind.js +97 -97
  359. package/dist/src/commands/hooks.js +9 -9
  360. package/dist/src/commands/init.js +94 -38
  361. package/dist/src/commands/memory.js +85 -1
  362. package/dist/src/commands/ruvector/backup.js +23 -23
  363. package/dist/src/commands/ruvector/benchmark.js +31 -31
  364. package/dist/src/commands/ruvector/import.js +14 -14
  365. package/dist/src/commands/ruvector/init.js +115 -115
  366. package/dist/src/commands/ruvector/migrate.js +99 -99
  367. package/dist/src/commands/ruvector/optimize.js +51 -51
  368. package/dist/src/commands/ruvector/setup.js +624 -624
  369. package/dist/src/commands/ruvector/status.js +38 -38
  370. package/dist/src/config/proven-config.js +2 -2
  371. package/dist/src/funnel/disclosure.d.ts +1 -0
  372. package/dist/src/funnel/disclosure.js +12 -0
  373. package/dist/src/funnel/index.d.ts +1 -1
  374. package/dist/src/funnel/index.js +1 -1
  375. package/dist/src/init/claudemd-generator.js +231 -231
  376. package/dist/src/init/executor.js +453 -453
  377. package/dist/src/init/helper-signing.d.ts +8 -1
  378. package/dist/src/init/helper-signing.js +9 -2
  379. package/dist/src/init/helpers-generator.js +751 -751
  380. package/dist/src/init/statusline-generator.js +994 -951
  381. package/dist/src/mcp-tools/agentdb-tools.js +15 -15
  382. package/dist/src/mcp-tools/browser-intent-tools.js +19 -19
  383. package/dist/src/memory/graph-edge-writer.js +22 -22
  384. package/dist/src/memory/memory-bridge.d.ts +10 -0
  385. package/dist/src/memory/memory-bridge.js +139 -88
  386. package/dist/src/memory/memory-initializer.d.ts +18 -0
  387. package/dist/src/memory/memory-initializer.js +539 -407
  388. package/dist/src/memory/rabitq-index.js +5 -5
  389. package/dist/src/runtime/headless.js +28 -28
  390. package/dist/src/ruvector/flash-attention.d.ts +195 -0
  391. package/dist/src/ruvector/flash-attention.js +643 -0
  392. package/dist/src/ruvector/moe-router.d.ts +206 -0
  393. package/dist/src/ruvector/moe-router.js +626 -0
  394. package/dist/src/services/distill-tuning.js +7 -7
  395. package/dist/src/services/event-stream.d.ts +25 -0
  396. package/dist/src/services/event-stream.js +27 -0
  397. package/dist/src/services/global-ai-budget.d.ts +25 -0
  398. package/dist/src/services/global-ai-budget.js +56 -0
  399. package/dist/src/services/headless-worker-executor.d.ts +21 -0
  400. package/dist/src/services/headless-worker-executor.js +152 -86
  401. package/dist/src/services/loop-worker-runner.d.ts +16 -0
  402. package/dist/src/services/loop-worker-runner.js +34 -0
  403. package/dist/src/services/memory-distillation.js +4 -4
  404. package/dist/src/services/repo-supervisor.d.ts +70 -0
  405. package/dist/src/services/repo-supervisor.js +228 -0
  406. package/dist/src/services/runtime-capabilities.d.ts +22 -0
  407. package/dist/src/services/runtime-capabilities.js +45 -0
  408. package/dist/src/services/worker-daemon.d.ts +26 -0
  409. package/dist/src/services/worker-daemon.js +95 -5
  410. package/dist/src/services/workspace-lease.d.ts +55 -0
  411. package/dist/src/services/workspace-lease.js +191 -0
  412. package/dist/src/transfer/deploy-seraphine.js +23 -23
  413. package/package.json +134 -133
  414. package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +32 -32
  415. package/plugins/ruflo-metaharness/README.md +72 -72
  416. package/plugins/ruflo-metaharness/agents/metaharness-architect.md +58 -58
  417. package/plugins/ruflo-metaharness/commands/ruflo-metaharness.md +48 -48
  418. package/plugins/ruflo-metaharness/scripts/_darwin.mjs +210 -210
  419. package/plugins/ruflo-metaharness/scripts/_harness.mjs +330 -330
  420. package/plugins/ruflo-metaharness/scripts/_invoke.mjs +231 -231
  421. package/plugins/ruflo-metaharness/scripts/_redblue.mjs +143 -143
  422. package/plugins/ruflo-metaharness/scripts/_similarity.mjs +161 -161
  423. package/plugins/ruflo-metaharness/scripts/_spike-similarity.mjs +223 -223
  424. package/plugins/ruflo-metaharness/scripts/audit-list.mjs +158 -158
  425. package/plugins/ruflo-metaharness/scripts/audit-trend.mjs +272 -272
  426. package/plugins/ruflo-metaharness/scripts/bench-parse-mcp-scan.mjs +146 -146
  427. package/plugins/ruflo-metaharness/scripts/bench-recordpair-overhead.mjs +186 -186
  428. package/plugins/ruflo-metaharness/scripts/bench-similarity.mjs +177 -177
  429. package/plugins/ruflo-metaharness/scripts/bench.mjs +95 -95
  430. package/plugins/ruflo-metaharness/scripts/drift-from-history.mjs +363 -363
  431. package/plugins/ruflo-metaharness/scripts/evolve.mjs +404 -404
  432. package/plugins/ruflo-metaharness/scripts/genome.mjs +80 -80
  433. package/plugins/ruflo-metaharness/scripts/gepa.mjs +153 -153
  434. package/plugins/ruflo-metaharness/scripts/learn.mjs +127 -127
  435. package/plugins/ruflo-metaharness/scripts/mcp-scan.mjs +111 -111
  436. package/plugins/ruflo-metaharness/scripts/mint.mjs +126 -126
  437. package/plugins/ruflo-metaharness/scripts/oia-audit.mjs +228 -228
  438. package/plugins/ruflo-metaharness/scripts/redblue.mjs +286 -286
  439. package/plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs +250 -250
  440. package/plugins/ruflo-metaharness/scripts/score.mjs +92 -92
  441. package/plugins/ruflo-metaharness/scripts/security-bench.mjs +174 -174
  442. package/plugins/ruflo-metaharness/scripts/similarity.mjs +158 -158
  443. package/plugins/ruflo-metaharness/scripts/smoke.sh +2353 -2353
  444. package/plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs +165 -165
  445. package/plugins/ruflo-metaharness/scripts/test-mcp-tools.mjs +472 -472
  446. package/plugins/ruflo-metaharness/scripts/test-parallel-pipeline.mjs +204 -204
  447. package/plugins/ruflo-metaharness/scripts/test-pipeline-roundtrip.mjs +586 -586
  448. package/plugins/ruflo-metaharness/scripts/test-similarity.mjs +334 -334
  449. package/plugins/ruflo-metaharness/scripts/test-with-openrouter.mjs +229 -229
  450. package/plugins/ruflo-metaharness/scripts/threat-model.mjs +59 -59
  451. package/plugins/ruflo-metaharness/skills/harness-bench/SKILL.md +64 -64
  452. package/plugins/ruflo-metaharness/skills/harness-drift-from-history/SKILL.md +65 -65
  453. package/plugins/ruflo-metaharness/skills/harness-evolve/SKILL.md +131 -131
  454. package/plugins/ruflo-metaharness/skills/harness-genome/SKILL.md +54 -54
  455. package/plugins/ruflo-metaharness/skills/harness-gepa/SKILL.md +65 -65
  456. package/plugins/ruflo-metaharness/skills/harness-learn/SKILL.md +65 -65
  457. package/plugins/ruflo-metaharness/skills/harness-mcp-scan/SKILL.md +49 -49
  458. package/plugins/ruflo-metaharness/skills/harness-mint/SKILL.md +72 -72
  459. package/plugins/ruflo-metaharness/skills/harness-oia-audit/SKILL.md +79 -79
  460. package/plugins/ruflo-metaharness/skills/harness-score/SKILL.md +66 -66
  461. package/plugins/ruflo-metaharness/skills/harness-security-bench/SKILL.md +101 -101
  462. package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +67 -67
  463. package/plugins/ruflo-metaharness/skills/harness-threat-model/SKILL.md +41 -41
  464. package/scripts/postinstall.cjs +153 -153
@@ -31,6 +31,29 @@ export declare function daemonCommandLineBelongsToWorkspace(commandLine: string,
31
31
  * Returns null for pre-#1914 daemons that never stamped a workspace.
32
32
  */
33
33
  export declare function extractWorkspaceFromDaemonLine(commandLine: string): string | null;
34
+ /**
35
+ * #2661 root-fix — one-time upgrade migration warning. A user who had
36
+ * `aiWorkersEnabled: true` configured BEFORE this fix landed (old config
37
+ * file or RUFLO_DAEMON_AI_WORKERS=1) and already has multiple worktree
38
+ * daemons running is exactly the P0 scenario the issue describes — surface
39
+ * it plainly, ONCE ever (not on every `daemon start`, which would just be
40
+ * noise once the user has seen and acted on it). The supervisor/lease
41
+ * mechanism (task #9) already makes only one of those daemons actually
42
+ * schedule AI workers going forward; this warning's job is purely to make
43
+ * a pre-existing fleet VISIBLE the first time this code runs, not to take
44
+ * any destructive action — nothing here stops or kills another daemon.
45
+ *
46
+ * `opts` exists for tests ONLY, mirroring the injectable-dependency pattern
47
+ * used elsewhere in this codebase (e.g. helper-refresh.ts's
48
+ * sourceDirOverride) — real callers always use the defaults.
49
+ */
50
+ export declare function maybeShowMultiDaemonMigrationWarning(opts?: {
51
+ markerFile?: string;
52
+ fleetScanner?: () => Promise<Array<{
53
+ pid: number;
54
+ workspace: string | null;
55
+ }>>;
56
+ }): Promise<void>;
34
57
  export declare const daemonCommand: Command;
35
58
  export default daemonCommand;
36
59
  //# sourceMappingURL=daemon.d.ts.map
@@ -7,6 +7,7 @@ import { getDaemon, startDaemon, stopDaemon } from '../services/worker-daemon.js
7
7
  import { fork } from 'child_process';
8
8
  import { fileURLToPath } from 'url';
9
9
  import { dirname, join, resolve } from 'path';
10
+ import { homedir } from 'os';
10
11
  import * as fs from 'fs';
11
12
  // Start daemon subcommand
12
13
  const startCommand = {
@@ -580,6 +581,11 @@ async function startBackgroundDaemon(projectRoot, quiet, forwarded = {}) {
580
581
  }
581
582
  }
582
583
  catch { /* best-effort visibility — never fail the start */ }
584
+ // #2661 root-fix — one-time migration warning for a pre-existing
585
+ // multi-daemon fleet that already had AI workers enabled before this
586
+ // fix landed. Separate from the always-shown notice above: this one
587
+ // fires at most once ever, and only for the genuinely risky shape.
588
+ await maybeShowMultiDaemonMigrationWarning();
583
589
  }
584
590
  return { success: true };
585
591
  }
@@ -942,6 +948,68 @@ async function scanRunningDaemons() {
942
948
  return [];
943
949
  }
944
950
  }
951
+ function defaultMultiDaemonWarningMarker() {
952
+ return join(homedir(), '.claude-flow', 'multi-daemon-warning-shown.json');
953
+ }
954
+ /**
955
+ * #2661 root-fix — one-time upgrade migration warning. A user who had
956
+ * `aiWorkersEnabled: true` configured BEFORE this fix landed (old config
957
+ * file or RUFLO_DAEMON_AI_WORKERS=1) and already has multiple worktree
958
+ * daemons running is exactly the P0 scenario the issue describes — surface
959
+ * it plainly, ONCE ever (not on every `daemon start`, which would just be
960
+ * noise once the user has seen and acted on it). The supervisor/lease
961
+ * mechanism (task #9) already makes only one of those daemons actually
962
+ * schedule AI workers going forward; this warning's job is purely to make
963
+ * a pre-existing fleet VISIBLE the first time this code runs, not to take
964
+ * any destructive action — nothing here stops or kills another daemon.
965
+ *
966
+ * `opts` exists for tests ONLY, mirroring the injectable-dependency pattern
967
+ * used elsewhere in this codebase (e.g. helper-refresh.ts's
968
+ * sourceDirOverride) — real callers always use the defaults.
969
+ */
970
+ export async function maybeShowMultiDaemonMigrationWarning(opts) {
971
+ const markerFile = opts?.markerFile ?? defaultMultiDaemonWarningMarker();
972
+ try {
973
+ if (fs.existsSync(markerFile))
974
+ return;
975
+ const fleet = await (opts?.fleetScanner ?? scanRunningDaemons)();
976
+ if (fleet.length <= 1)
977
+ return;
978
+ let anyAiEnabled = false;
979
+ for (const d of fleet) {
980
+ if (!d.workspace)
981
+ continue;
982
+ try {
983
+ const statePath = join(d.workspace, '.claude-flow', 'daemon-state.json');
984
+ if (!fs.existsSync(statePath))
985
+ continue;
986
+ const st = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
987
+ if (st?.config?.aiWorkersEnabled === true) {
988
+ anyAiEnabled = true;
989
+ break;
990
+ }
991
+ }
992
+ catch { /* unreadable state — skip this daemon */ }
993
+ }
994
+ // Only the genuinely risky shape (pre-existing fleet + AI workers
995
+ // enabled somewhere in it) warrants the migration warning. A harmless
996
+ // multi-daemon fleet with AI workers off everywhere already gets the
997
+ // lighter, always-shown fleet-size notice at daemon start.
998
+ if (anyAiEnabled) {
999
+ output.writeln();
1000
+ output.printWarning(`Ruflo found ${fleet.length} worktree daemons. Scheduled AI workers are now supervisor-gated.`);
1001
+ output.printInfo('Inspect: ruflo daemon status --all');
1002
+ output.printInfo('Stop all: ruflo daemon stop --all');
1003
+ output.printInfo('Pause autonomous launches: ruflo daemon budget pause');
1004
+ output.writeln();
1005
+ }
1006
+ const dir = dirname(markerFile);
1007
+ if (!fs.existsSync(dir))
1008
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
1009
+ fs.writeFileSync(markerFile, JSON.stringify({ shownAt: new Date().toISOString(), fleetSize: fleet.length, anyAiEnabled }), { mode: 0o600 });
1010
+ }
1011
+ catch { /* best-effort visibility — never fail the command */ }
1012
+ }
945
1013
  /**
946
1014
  * #2356: render the global `daemon status --all` view. For each running daemon
947
1015
  * it reads that workspace's daemon-state.json to show age + configured TTL,
@@ -1010,6 +1078,39 @@ async function renderAllDaemonsStatus() {
1010
1078
  if (daemons.length > 1) {
1011
1079
  output.printInfo('Stop all daemons across workspaces with: ruflo daemon stop --all');
1012
1080
  }
1081
+ // #2661 root-fix — repository supervisor state, one row per distinct
1082
+ // repository among the scanned daemons' workspaces. Resolving identity
1083
+ // per workspace is cheap (a couple of `git rev-parse` calls, cached).
1084
+ try {
1085
+ const { resolveGitWorkspaceIdentity } = await import('../services/git-workspace-identity.js');
1086
+ const { getRepoSupervisorRegistry } = await import('../services/repo-supervisor.js');
1087
+ const { getWorkspaceLeaseRegistry } = await import('../services/workspace-lease.js');
1088
+ const seenRepos = new Map(); // repositoryId -> a representative workspace path
1089
+ for (const d of daemons) {
1090
+ if (!d.workspace)
1091
+ continue;
1092
+ const identity = resolveGitWorkspaceIdentity(d.workspace);
1093
+ if (identity.isGit && !seenRepos.has(identity.repositoryId)) {
1094
+ seenRepos.set(identity.repositoryId, d.workspace);
1095
+ }
1096
+ }
1097
+ if (seenRepos.size > 0) {
1098
+ const supervisorReg = getRepoSupervisorRegistry();
1099
+ const leaseReg = getWorkspaceLeaseRegistry();
1100
+ const lines = [];
1101
+ for (const [repositoryId, sampleWorkspace] of seenRepos) {
1102
+ const record = supervisorReg.getRecord(repositoryId);
1103
+ const activeLeases = leaseReg.listActive(repositoryId).length;
1104
+ const label = repositoryId.slice(0, 12);
1105
+ lines.push(record
1106
+ ? ` ${label}… supervisor: ${record.worktreeRoot} (pid ${record.pid}) | active leases: ${activeLeases}`
1107
+ : ` ${label}… supervisor: ${output.dim('none elected')} | active leases: ${activeLeases}`);
1108
+ }
1109
+ output.writeln();
1110
+ output.printBox(lines.join('\n'), 'Repository Supervisors (#2661 root-fix)');
1111
+ }
1112
+ }
1113
+ catch { /* supervisor registry unavailable — skip the panel */ }
1013
1114
  // #2661: user-global AI launch usage — the shared budget every daemon
1014
1115
  // draws from, independent of worktree count.
1015
1116
  try {
@@ -1330,33 +1431,33 @@ const installSupervisorCommand = {
1330
1431
  const plistDir = join(home, 'Library', 'LaunchAgents');
1331
1432
  const plistPath = join(plistDir, 'io.ruv.ruflo.daemon.plist');
1332
1433
  const logDir = join(projectRoot, '.claude-flow', 'logs');
1333
- const plist = `<?xml version="1.0" encoding="UTF-8"?>
1334
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
1335
- <plist version="1.0">
1336
- <dict>
1337
- <key>Label</key><string>io.ruv.ruflo.daemon</string>
1338
- <key>ProgramArguments</key>
1339
- <array>
1340
- <string>${nodeBin}</string>
1341
- <string>${cliJs}</string>
1342
- <string>daemon</string><string>start</string><string>--foreground</string><string>--quiet</string>
1343
- </array>
1344
- <key>WorkingDirectory</key><string>${projectRoot}</string>
1345
- <key>RunAtLoad</key><true/>
1346
- <key>KeepAlive</key>
1347
- <dict>
1348
- <key>SuccessfulExit</key><false/>
1349
- <key>Crashed</key><true/>
1350
- </dict>
1351
- <key>ThrottleInterval</key><integer>10</integer>
1352
- <key>StandardOutPath</key><string>${logDir}/supervisor.out.log</string>
1353
- <key>StandardErrorPath</key><string>${logDir}/supervisor.err.log</string>
1354
- <key>EnvironmentVariables</key>
1355
- <dict>
1356
- <key>CLAUDE_FLOW_DAEMON</key><string>1</string>
1357
- </dict>
1358
- </dict>
1359
- </plist>
1434
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
1435
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
1436
+ <plist version="1.0">
1437
+ <dict>
1438
+ <key>Label</key><string>io.ruv.ruflo.daemon</string>
1439
+ <key>ProgramArguments</key>
1440
+ <array>
1441
+ <string>${nodeBin}</string>
1442
+ <string>${cliJs}</string>
1443
+ <string>daemon</string><string>start</string><string>--foreground</string><string>--quiet</string>
1444
+ </array>
1445
+ <key>WorkingDirectory</key><string>${projectRoot}</string>
1446
+ <key>RunAtLoad</key><true/>
1447
+ <key>KeepAlive</key>
1448
+ <dict>
1449
+ <key>SuccessfulExit</key><false/>
1450
+ <key>Crashed</key><true/>
1451
+ </dict>
1452
+ <key>ThrottleInterval</key><integer>10</integer>
1453
+ <key>StandardOutPath</key><string>${logDir}/supervisor.out.log</string>
1454
+ <key>StandardErrorPath</key><string>${logDir}/supervisor.err.log</string>
1455
+ <key>EnvironmentVariables</key>
1456
+ <dict>
1457
+ <key>CLAUDE_FLOW_DAEMON</key><string>1</string>
1458
+ </dict>
1459
+ </dict>
1460
+ </plist>
1360
1461
  `;
1361
1462
  if (dryRun) {
1362
1463
  output.writeln(plist);
@@ -1397,23 +1498,23 @@ const installSupervisorCommand = {
1397
1498
  // Linux: systemd-user
1398
1499
  const unitDir = join(home, '.config', 'systemd', 'user');
1399
1500
  const unitPath = join(unitDir, 'ruflo-daemon.service');
1400
- const unit = `[Unit]
1401
- Description=RuFlo background worker daemon
1402
- After=default.target
1403
-
1404
- [Service]
1405
- Type=simple
1406
- WorkingDirectory=${projectRoot}
1407
- Environment=CLAUDE_FLOW_DAEMON=1
1408
- ExecStart=${nodeBin} ${cliJs} daemon start --foreground --quiet
1409
- Restart=on-failure
1410
- RestartSec=10
1411
- # Restart on Crashed (signal) too
1412
- StartLimitIntervalSec=300
1413
- StartLimitBurst=5
1414
-
1415
- [Install]
1416
- WantedBy=default.target
1501
+ const unit = `[Unit]
1502
+ Description=RuFlo background worker daemon
1503
+ After=default.target
1504
+
1505
+ [Service]
1506
+ Type=simple
1507
+ WorkingDirectory=${projectRoot}
1508
+ Environment=CLAUDE_FLOW_DAEMON=1
1509
+ ExecStart=${nodeBin} ${cliJs} daemon start --foreground --quiet
1510
+ Restart=on-failure
1511
+ RestartSec=10
1512
+ # Restart on Crashed (signal) too
1513
+ StartLimitIntervalSec=300
1514
+ StartLimitBurst=5
1515
+
1516
+ [Install]
1517
+ WantedBy=default.target
1417
1518
  `;
1418
1519
  if (dryRun) {
1419
1520
  output.writeln(unit);
@@ -1496,6 +1597,76 @@ const uninstallSupervisorCommand = {
1496
1597
  return { success: false, exitCode: 1 };
1497
1598
  },
1498
1599
  };
1600
+ // #2661 root-fix — `daemon budget show|pause|resume`. The budget state was
1601
+ // previously visible only inline in `daemon status --all`; these give it an
1602
+ // independently scriptable surface (e.g. `ruflo daemon budget pause` before
1603
+ // a long interactive session, `... resume` after).
1604
+ const budgetShowCommand = {
1605
+ name: 'show',
1606
+ description: 'Show the user-global AI launch budget (launches, active children, circuit-breaker state)',
1607
+ options: [],
1608
+ examples: [{ command: 'claude-flow daemon budget show', description: 'Show current budget usage and limits' }],
1609
+ action: async () => {
1610
+ const { getGlobalAiBudget } = await import('../services/global-ai-budget.js');
1611
+ const budget = getGlobalAiBudget();
1612
+ const usage = budget.getUsage();
1613
+ const limits = budget.getLimits();
1614
+ output.writeln();
1615
+ const byWs = usage.byWorkspace.slice(0, 10).map((w) => ` ${w.launches}× ${w.workspace}`);
1616
+ output.printBox([
1617
+ `Launches (last hour): ${usage.lastHour}/${limits.maxLaunchesPerHour}`,
1618
+ `Launches (last 24h): ${usage.lastDay}/${limits.maxLaunchesPerDay}`,
1619
+ `Active Claude children: ${usage.active}/${limits.maxConcurrentGlobal}`,
1620
+ usage.pausedUntil
1621
+ ? output.warning(`PAUSED until ${new Date(usage.pausedUntil).toISOString()} (${usage.pauseReason ?? 'quota error'})`)
1622
+ : `Circuit breaker: ${output.dim('closed (normal)')}`,
1623
+ ...(byWs.length > 0 ? ['Launches by workspace (24h):', ...byWs] : []),
1624
+ ].join('\n'), 'Global AI Budget');
1625
+ return { success: true, data: { usage, limits } };
1626
+ },
1627
+ };
1628
+ const budgetPauseCommand = {
1629
+ name: 'pause',
1630
+ description: 'Pause ALL autonomous Claude launches across every daemon until resumed',
1631
+ options: [
1632
+ { name: 'reason', short: 'r', type: 'string', description: 'Optional reason recorded in the pause receipt' },
1633
+ ],
1634
+ examples: [{ command: 'claude-flow daemon budget pause --reason "conserving quota for a demo"', description: 'Pause autonomous launches' }],
1635
+ action: async (ctx) => {
1636
+ const { getGlobalAiBudget } = await import('../services/global-ai-budget.js');
1637
+ await getGlobalAiBudget().pause(ctx.flags.reason);
1638
+ output.printSuccess('Autonomous AI worker launches paused across all daemons. Resume with: ruflo daemon budget resume');
1639
+ return { success: true };
1640
+ },
1641
+ };
1642
+ const budgetResumeCommand = {
1643
+ name: 'resume',
1644
+ description: 'Resume autonomous Claude launches (clears a manual pause or a quota-triggered circuit-breaker pause)',
1645
+ options: [],
1646
+ examples: [{ command: 'claude-flow daemon budget resume', description: 'Resume autonomous launches' }],
1647
+ action: async () => {
1648
+ const { getGlobalAiBudget } = await import('../services/global-ai-budget.js');
1649
+ await getGlobalAiBudget().resume();
1650
+ output.printSuccess('Autonomous AI worker launches resumed.');
1651
+ return { success: true };
1652
+ },
1653
+ };
1654
+ const budgetCommand = {
1655
+ name: 'budget',
1656
+ description: 'Inspect and control the user-global AI launch budget (#2661)',
1657
+ subcommands: [budgetShowCommand, budgetPauseCommand, budgetResumeCommand],
1658
+ options: [],
1659
+ examples: [
1660
+ { command: 'claude-flow daemon budget show', description: 'Show current usage/limits' },
1661
+ { command: 'claude-flow daemon budget pause', description: 'Pause all autonomous launches' },
1662
+ { command: 'claude-flow daemon budget resume', description: 'Resume autonomous launches' },
1663
+ ],
1664
+ // Bare `daemon budget` (no subcommand) shows usage — same as `show`.
1665
+ action: async (ctx) => {
1666
+ const result = await budgetShowCommand.action(ctx);
1667
+ return result ?? { success: true };
1668
+ },
1669
+ };
1499
1670
  // Main daemon command
1500
1671
  export const daemonCommand = {
1501
1672
  name: 'daemon',
@@ -1506,6 +1677,7 @@ export const daemonCommand = {
1506
1677
  statusCommand,
1507
1678
  triggerCommand,
1508
1679
  enableCommand,
1680
+ budgetCommand,
1509
1681
  installSupervisorCommand,
1510
1682
  uninstallSupervisorCommand,
1511
1683
  ],
@@ -147,13 +147,13 @@ const searchCommand = {
147
147
  // Get all entries with embeddings from database
148
148
  // Parameterized query to prevent SQL injection (CRIT-01)
149
149
  const embeddingSql = namespace !== 'all'
150
- ? `SELECT id, key, namespace, content, embedding, embedding_dimensions
151
- FROM memory_entries
152
- WHERE status = 'active' AND embedding IS NOT NULL AND namespace = ?
150
+ ? `SELECT id, key, namespace, content, embedding, embedding_dimensions
151
+ FROM memory_entries
152
+ WHERE status = 'active' AND embedding IS NOT NULL AND namespace = ?
153
153
  LIMIT 1000`
154
- : `SELECT id, key, namespace, content, embedding, embedding_dimensions
155
- FROM memory_entries
156
- WHERE status = 'active' AND embedding IS NOT NULL
154
+ : `SELECT id, key, namespace, content, embedding, embedding_dimensions
155
+ FROM memory_entries
156
+ WHERE status = 'active' AND embedding IS NOT NULL
157
157
  LIMIT 1000`;
158
158
  const embeddingStmt = db.prepare(embeddingSql);
159
159
  if (namespace !== 'all') {
@@ -192,16 +192,16 @@ const searchCommand = {
192
192
  const likePattern = `%${query}%`;
193
193
  const remainingLimit = Math.max(0, limit - results.length);
194
194
  const keywordSql = namespace !== 'all'
195
- ? `SELECT id, key, namespace, content
196
- FROM memory_entries
197
- WHERE status = 'active'
198
- AND (content LIKE ? OR key LIKE ?)
199
- AND namespace = ?
195
+ ? `SELECT id, key, namespace, content
196
+ FROM memory_entries
197
+ WHERE status = 'active'
198
+ AND (content LIKE ? OR key LIKE ?)
199
+ AND namespace = ?
200
200
  LIMIT ?`
201
- : `SELECT id, key, namespace, content
202
- FROM memory_entries
203
- WHERE status = 'active'
204
- AND (content LIKE ? OR key LIKE ?)
201
+ : `SELECT id, key, namespace, content
202
+ FROM memory_entries
203
+ WHERE status = 'active'
204
+ AND (content LIKE ? OR key LIKE ?)
205
205
  LIMIT ?`;
206
206
  const keywordStmt = db.prepare(keywordSql);
207
207
  if (namespace !== 'all') {
@@ -408,17 +408,17 @@ const collectionsCommand = {
408
408
  const fileBuffer = fs.readFileSync(fullDbPath);
409
409
  const db = new SQL.Database(fileBuffer);
410
410
  // Get collection stats from database
411
- const statsQuery = db.exec(`
412
- SELECT
413
- namespace,
414
- COUNT(*) as total_entries,
415
- SUM(CASE WHEN embedding IS NOT NULL THEN 1 ELSE 0 END) as with_embeddings,
416
- AVG(embedding_dimensions) as avg_dimensions,
417
- SUM(LENGTH(content)) as total_content_size
418
- FROM memory_entries
419
- WHERE status = 'active'
420
- GROUP BY namespace
421
- ORDER BY total_entries DESC
411
+ const statsQuery = db.exec(`
412
+ SELECT
413
+ namespace,
414
+ COUNT(*) as total_entries,
415
+ SUM(CASE WHEN embedding IS NOT NULL THEN 1 ELSE 0 END) as with_embeddings,
416
+ AVG(embedding_dimensions) as avg_dimensions,
417
+ SUM(LENGTH(content)) as total_content_size
418
+ FROM memory_entries
419
+ WHERE status = 'active'
420
+ GROUP BY namespace
421
+ ORDER BY total_entries DESC
422
422
  `);
423
423
  // Get vector index info
424
424
  const indexQuery = db.exec(`SELECT name, dimensions, hnsw_m FROM vector_indexes`);
@@ -5,6 +5,8 @@
5
5
  * funnel status effective state and which precedence source decided it
6
6
  * funnel disable user-level opt-out (all surfaces) + delete funnel data
7
7
  * funnel enable re-enable at the user tier (cannot override env/enterprise)
8
+ * funnel accept acknowledge the disclosure so rotation starts immediately
9
+ * funnel open open the currently-shown promo URL in the default browser
8
10
  * funnel id print the pseudonymous funnel ID, if one exists
9
11
  */
10
12
  import type { Command } from '../types.js';
@@ -5,10 +5,16 @@
5
5
  * funnel status effective state and which precedence source decided it
6
6
  * funnel disable user-level opt-out (all surfaces) + delete funnel data
7
7
  * funnel enable re-enable at the user tier (cannot override env/enterprise)
8
+ * funnel accept acknowledge the disclosure so rotation starts immediately
9
+ * funnel open open the currently-shown promo URL in the default browser
8
10
  * funnel id print the pseudonymous funnel ID, if one exists
9
11
  */
12
+ import { execFile } from 'node:child_process';
13
+ import * as fs from 'node:fs';
14
+ import * as os from 'node:os';
15
+ import * as path from 'node:path';
10
16
  import { output } from '../output.js';
11
- import { deleteFunnelData, funnelStateDir, getDisclosure, getFunnelId, readConsents, recordDisclosureDeclined, recordDisclosureReenabled, resolveFunnelEnabled, } from '../funnel/index.js';
17
+ import { deleteFunnelData, funnelStateDir, getDisclosure, getFunnelId, promoEligible, readConsents, recordDisclosureAccepted, recordDisclosureDeclined, recordDisclosureReenabled, resolveFunnelEnabled, } from '../funnel/index.js';
12
18
  import { readStateJson, writeStateJson } from '../funnel/state.js';
13
19
  function setUserConfigEnabled(enabled) {
14
20
  const cfg = readStateJson('funnel.json') ?? {};
@@ -75,6 +81,106 @@ const enableSub = {
75
81
  return { success: true, data: decision };
76
82
  },
77
83
  };
84
+ const acceptSub = {
85
+ name: 'accept',
86
+ description: 'Acknowledge the disclosure so rotation starts immediately (skips the 24h grace window)',
87
+ action: async () => {
88
+ const decision = resolveFunnelEnabled();
89
+ if (!decision.enabled) {
90
+ output.printWarning(`Funnel is currently disabled by: ${decision.decidedBy}. Run 'ruflo funnel enable' first, then re-run accept.`);
91
+ return { success: false, data: decision };
92
+ }
93
+ const current = getDisclosure();
94
+ if (current.state === 'disclosed_disabled') {
95
+ output.printWarning("Disclosure is in a declined state. Run 'ruflo funnel enable' first, then re-run accept.");
96
+ return { success: false, data: current };
97
+ }
98
+ const rec = recordDisclosureAccepted();
99
+ const eligible = promoEligible();
100
+ output.printSuccess(`Disclosure accepted (firstShownAt backdated to ${rec.firstShownAt}). Promo rotation eligible: ${eligible}.`);
101
+ return { success: true, data: { record: rec, eligible } };
102
+ },
103
+ };
104
+ // Reads the memoized promo written by the statusline renderer. Same file
105
+ // path as .claude/helpers/statusline.cjs's PROMO_MEMO_FILE — kept in sync
106
+ // by convention. Returns null on any error so a broken memo can't crash
107
+ // the subcommand.
108
+ function readCurrentPromo() {
109
+ try {
110
+ const memoPath = path.join(os.homedir(), '.ruflo', 'statusline-promo.json');
111
+ const raw = JSON.parse(fs.readFileSync(memoPath, 'utf-8'));
112
+ if (raw && raw.promo && typeof raw.promo === 'object')
113
+ return raw.promo;
114
+ }
115
+ catch { /* memo absent or corrupt — treat as "nothing shown yet" */ }
116
+ return null;
117
+ }
118
+ // Allowlist mirrors the OSC 8 hyperlink allowlist in the statusline renderer.
119
+ // Never open a URL whose host isn't on this list, even if a corrupted memo
120
+ // somehow lands one there — the memo is user-writable so we must not treat
121
+ // it as trusted. Kept in sync with .claude/helpers/statusline.cjs's
122
+ // PROMO_LINK_HOSTS.
123
+ const OPEN_ALLOWED_HOSTS = new Set([
124
+ 'cognitum.one', 'www.cognitum.one', 'docs.cognitum.one',
125
+ 'agentics.org', 'www.agentics.org',
126
+ 'funnel.ruv.io',
127
+ 'cognitum-analytics-63rzcdswba-uc.a.run.app',
128
+ ]);
129
+ // Open a URL using the platform's default browser handler. execFile (not
130
+ // exec) — no shell involved, so nothing in the URL can be interpreted as a
131
+ // shell command even in the pathological case where allowlisting is
132
+ // bypassed. Runs detached + hidden so no cmd window flashes on Windows.
133
+ function openInBrowser(url) {
134
+ return new Promise((resolve, reject) => {
135
+ const platform = process.platform;
136
+ const [cmd, args] = platform === 'win32'
137
+ // "start" needs an empty title argument first, else the first quoted
138
+ // arg becomes the title and the URL is ignored. cmd /c is required to
139
+ // invoke the built-in start command.
140
+ ? ['cmd', ['/c', 'start', '""', url]]
141
+ : platform === 'darwin'
142
+ ? ['open', [url]]
143
+ : ['xdg-open', [url]];
144
+ execFile(cmd, args, { windowsHide: true }, (err) => (err ? reject(err) : resolve()));
145
+ });
146
+ }
147
+ const openSub = {
148
+ name: 'open',
149
+ description: 'Open the currently-shown statusline promo URL in the default browser',
150
+ action: async () => {
151
+ const promo = readCurrentPromo();
152
+ if (!promo) {
153
+ output.printWarning("No promo has been shown yet. Wait for the statusline to render one, then re-run 'ruflo funnel open'.");
154
+ return { success: false };
155
+ }
156
+ if (!promo.url) {
157
+ output.printWarning(`Current promo (kind=${promo.kind ?? 'unknown'}) has no URL. Nothing to open: "${promo.text}"`);
158
+ return { success: false, data: promo };
159
+ }
160
+ let parsed;
161
+ try {
162
+ parsed = new URL(promo.url);
163
+ }
164
+ catch {
165
+ output.printError(`Promo URL is malformed: ${promo.url}`);
166
+ return { success: false, data: promo };
167
+ }
168
+ if (parsed.protocol !== 'https:' || !OPEN_ALLOWED_HOSTS.has(parsed.hostname)) {
169
+ output.printError(`Refusing to open URL — not on the allowlist: ${parsed.protocol}//${parsed.hostname}`);
170
+ return { success: false, data: { url: promo.url } };
171
+ }
172
+ try {
173
+ await openInBrowser(parsed.href);
174
+ output.printSuccess(`Opened: ${parsed.href}`);
175
+ return { success: true, data: { url: parsed.href } };
176
+ }
177
+ catch (err) {
178
+ output.printError(`Failed to open URL: ${err instanceof Error ? err.message : String(err)}`);
179
+ output.writeln(`URL for manual copy: ${parsed.href}`);
180
+ return { success: false, data: { url: parsed.href } };
181
+ }
182
+ },
183
+ };
78
184
  const idSub = {
79
185
  name: 'id',
80
186
  description: 'Print the pseudonymous funnel ID (exists only with telemetry consent)',
@@ -92,9 +198,11 @@ const idSub = {
92
198
  export const funnelCommand = {
93
199
  name: 'funnel',
94
200
  description: 'Control the Cognitum lifecycle funnel surfaces (tips, enrollment, notices)',
95
- subcommands: [statusSub, disableSub, enableSub, idSub],
201
+ subcommands: [statusSub, disableSub, enableSub, acceptSub, openSub, idSub],
96
202
  examples: [
97
203
  { command: 'ruflo funnel status', description: 'Effective state + deciding source' },
204
+ { command: 'ruflo funnel accept', description: 'Skip the 24h grace so rotation starts now' },
205
+ { command: 'ruflo funnel open', description: 'Open the current promo URL in the browser' },
98
206
  { command: 'ruflo funnel disable', description: 'Turn off every funnel surface' },
99
207
  ],
100
208
  action: statusSub.action,