@aigentic/claude-flow 3.7.0-alpha.69

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 (807) hide show
  1. package/.claude/agents/MIGRATION_SUMMARY.md +222 -0
  2. package/.claude/agents/analysis/analyze-code-quality.md +58 -0
  3. package/.claude/agents/analysis/code-analyzer.md +189 -0
  4. package/.claude/agents/analysis/code-review/analyze-code-quality.md +58 -0
  5. package/.claude/agents/architecture/arch-system-design.md +157 -0
  6. package/.claude/agents/architecture/system-design/arch-system-design.md +36 -0
  7. package/.claude/agents/base-template-generator.md +41 -0
  8. package/.claude/agents/browser/browser-agent.yaml +182 -0
  9. package/.claude/agents/consensus/byzantine-coordinator.md +43 -0
  10. package/.claude/agents/consensus/crdt-synchronizer.md +977 -0
  11. package/.claude/agents/consensus/gossip-coordinator.md +43 -0
  12. package/.claude/agents/consensus/performance-benchmarker.md +831 -0
  13. package/.claude/agents/consensus/quorum-manager.md +803 -0
  14. package/.claude/agents/consensus/raft-manager.md +43 -0
  15. package/.claude/agents/consensus/security-manager.md +602 -0
  16. package/.claude/agents/core/coder.md +255 -0
  17. package/.claude/agents/core/planner.md +152 -0
  18. package/.claude/agents/core/researcher.md +174 -0
  19. package/.claude/agents/core/reviewer.md +309 -0
  20. package/.claude/agents/core/tester.md +300 -0
  21. package/.claude/agents/custom/test-long-runner.md +43 -0
  22. package/.claude/agents/data/data-ml-model.md +445 -0
  23. package/.claude/agents/data/ml/data-ml-model.md +76 -0
  24. package/.claude/agents/database-specialist.md +9 -0
  25. package/.claude/agents/development/backend/dev-backend-api.md +29 -0
  26. package/.claude/agents/development/dev-backend-api.md +178 -0
  27. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +52 -0
  28. package/.claude/agents/devops/ops-cicd-github.md +165 -0
  29. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +63 -0
  30. package/.claude/agents/documentation/docs-api-openapi.md +355 -0
  31. package/.claude/agents/dual-mode/codex-coordinator.md +206 -0
  32. package/.claude/agents/dual-mode/codex-worker.md +190 -0
  33. package/.claude/agents/dual-mode/dual-orchestrator.md +253 -0
  34. package/.claude/agents/flow-nexus/app-store.md +88 -0
  35. package/.claude/agents/flow-nexus/authentication.md +69 -0
  36. package/.claude/agents/flow-nexus/challenges.md +81 -0
  37. package/.claude/agents/flow-nexus/neural-network.md +88 -0
  38. package/.claude/agents/flow-nexus/payments.md +83 -0
  39. package/.claude/agents/flow-nexus/sandbox.md +76 -0
  40. package/.claude/agents/flow-nexus/swarm.md +76 -0
  41. package/.claude/agents/flow-nexus/user-tools.md +96 -0
  42. package/.claude/agents/flow-nexus/workflow.md +84 -0
  43. package/.claude/agents/github/code-review-swarm.md +521 -0
  44. package/.claude/agents/github/github-modes.md +154 -0
  45. package/.claude/agents/github/issue-tracker.md +299 -0
  46. package/.claude/agents/github/multi-repo-swarm.md +525 -0
  47. package/.claude/agents/github/pr-manager.md +163 -0
  48. package/.claude/agents/github/project-board-sync.md +478 -0
  49. package/.claude/agents/github/release-manager.md +336 -0
  50. package/.claude/agents/github/release-swarm.md +551 -0
  51. package/.claude/agents/github/repo-architect.md +365 -0
  52. package/.claude/agents/github/swarm-issue.md +548 -0
  53. package/.claude/agents/github/swarm-pr.md +399 -0
  54. package/.claude/agents/github/sync-coordinator.md +423 -0
  55. package/.claude/agents/github/workflow-automation.md +605 -0
  56. package/.claude/agents/goal/agent.md +817 -0
  57. package/.claude/agents/goal/code-goal-planner.md +445 -0
  58. package/.claude/agents/goal/goal-planner.md +168 -0
  59. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -0
  60. package/.claude/agents/hive-mind/queen-coordinator.md +202 -0
  61. package/.claude/agents/hive-mind/scout-explorer.md +241 -0
  62. package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -0
  63. package/.claude/agents/hive-mind/worker-specialist.md +216 -0
  64. package/.claude/agents/neural/safla-neural.md +74 -0
  65. package/.claude/agents/optimization/benchmark-suite.md +663 -0
  66. package/.claude/agents/optimization/load-balancer.md +429 -0
  67. package/.claude/agents/optimization/performance-monitor.md +670 -0
  68. package/.claude/agents/optimization/resource-allocator.md +672 -0
  69. package/.claude/agents/optimization/topology-optimizer.md +806 -0
  70. package/.claude/agents/payments/agentic-payments.md +126 -0
  71. package/.claude/agents/project-coordinator.md +8 -0
  72. package/.claude/agents/python-specialist.md +9 -0
  73. package/.claude/agents/reasoning/agent.md +817 -0
  74. package/.claude/agents/reasoning/goal-planner.md +73 -0
  75. package/.claude/agents/security-auditor.md +9 -0
  76. package/.claude/agents/sona/sona-learning-optimizer.md +65 -0
  77. package/.claude/agents/sparc/architecture.md +453 -0
  78. package/.claude/agents/sparc/pseudocode.md +299 -0
  79. package/.claude/agents/sparc/refinement.md +504 -0
  80. package/.claude/agents/sparc/specification.md +258 -0
  81. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +88 -0
  82. package/.claude/agents/specialized/spec-mobile-react-native.md +227 -0
  83. package/.claude/agents/sublinear/consensus-coordinator.md +338 -0
  84. package/.claude/agents/sublinear/matrix-optimizer.md +185 -0
  85. package/.claude/agents/sublinear/pagerank-analyzer.md +299 -0
  86. package/.claude/agents/sublinear/performance-optimizer.md +368 -0
  87. package/.claude/agents/sublinear/trading-predictor.md +246 -0
  88. package/.claude/agents/swarm/adaptive-coordinator.md +364 -0
  89. package/.claude/agents/swarm/hierarchical-coordinator.md +300 -0
  90. package/.claude/agents/swarm/mesh-coordinator.md +363 -0
  91. package/.claude/agents/templates/automation-smart-agent.md +185 -0
  92. package/.claude/agents/templates/base-template-generator.md +289 -0
  93. package/.claude/agents/templates/coordinator-swarm-init.md +83 -0
  94. package/.claude/agents/templates/github-pr-manager.md +155 -0
  95. package/.claude/agents/templates/implementer-sparc-coder.md +243 -0
  96. package/.claude/agents/templates/memory-coordinator.md +163 -0
  97. package/.claude/agents/templates/migration-plan.md +724 -0
  98. package/.claude/agents/templates/orchestrator-task.md +120 -0
  99. package/.claude/agents/templates/performance-analyzer.md +179 -0
  100. package/.claude/agents/templates/sparc-coordinator.md +163 -0
  101. package/.claude/agents/testing/production-validator.md +373 -0
  102. package/.claude/agents/testing/tdd-london-swarm.md +222 -0
  103. package/.claude/agents/testing/unit/tdd-london-swarm.md +222 -0
  104. package/.claude/agents/testing/validation/production-validator.md +373 -0
  105. package/.claude/agents/typescript-specialist.md +9 -0
  106. package/.claude/agents/v3/adr-architect.md +184 -0
  107. package/.claude/agents/v3/aidefence-guardian.md +282 -0
  108. package/.claude/agents/v3/claims-authorizer.md +208 -0
  109. package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -0
  110. package/.claude/agents/v3/database-specialist.md +9 -0
  111. package/.claude/agents/v3/ddd-domain-expert.md +220 -0
  112. package/.claude/agents/v3/injection-analyst.md +236 -0
  113. package/.claude/agents/v3/memory-specialist.md +995 -0
  114. package/.claude/agents/v3/performance-engineer.md +1233 -0
  115. package/.claude/agents/v3/pii-detector.md +151 -0
  116. package/.claude/agents/v3/project-coordinator.md +8 -0
  117. package/.claude/agents/v3/python-specialist.md +9 -0
  118. package/.claude/agents/v3/reasoningbank-learner.md +213 -0
  119. package/.claude/agents/v3/security-architect-aidefence.md +410 -0
  120. package/.claude/agents/v3/security-architect.md +867 -0
  121. package/.claude/agents/v3/security-auditor.md +771 -0
  122. package/.claude/agents/v3/sparc-orchestrator.md +182 -0
  123. package/.claude/agents/v3/swarm-memory-manager.md +157 -0
  124. package/.claude/agents/v3/test-architect.md +9 -0
  125. package/.claude/agents/v3/typescript-specialist.md +9 -0
  126. package/.claude/agents/v3/v3-integration-architect.md +312 -0
  127. package/.claude/agents/v3/v3-memory-specialist.md +281 -0
  128. package/.claude/agents/v3/v3-performance-engineer.md +363 -0
  129. package/.claude/agents/v3/v3-queen-coordinator.md +63 -0
  130. package/.claude/agents/v3/v3-security-architect.md +140 -0
  131. package/.claude/checkpoints/1767754460.json +8 -0
  132. package/.claude/commands/agents/README.md +10 -0
  133. package/.claude/commands/agents/agent-capabilities.md +21 -0
  134. package/.claude/commands/agents/agent-coordination.md +28 -0
  135. package/.claude/commands/agents/agent-spawning.md +28 -0
  136. package/.claude/commands/agents/agent-types.md +26 -0
  137. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
  138. package/.claude/commands/analysis/README.md +9 -0
  139. package/.claude/commands/analysis/bottleneck-detect.md +162 -0
  140. package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
  141. package/.claude/commands/analysis/performance-report.md +25 -0
  142. package/.claude/commands/analysis/token-efficiency.md +45 -0
  143. package/.claude/commands/analysis/token-usage.md +25 -0
  144. package/.claude/commands/automation/README.md +9 -0
  145. package/.claude/commands/automation/auto-agent.md +122 -0
  146. package/.claude/commands/automation/self-healing.md +106 -0
  147. package/.claude/commands/automation/session-memory.md +90 -0
  148. package/.claude/commands/automation/smart-agents.md +73 -0
  149. package/.claude/commands/automation/smart-spawn.md +25 -0
  150. package/.claude/commands/automation/workflow-select.md +25 -0
  151. package/.claude/commands/claude-flow-help.md +103 -0
  152. package/.claude/commands/claude-flow-memory.md +107 -0
  153. package/.claude/commands/claude-flow-swarm.md +205 -0
  154. package/.claude/commands/coordination/README.md +9 -0
  155. package/.claude/commands/coordination/agent-spawn.md +25 -0
  156. package/.claude/commands/coordination/init.md +44 -0
  157. package/.claude/commands/coordination/orchestrate.md +43 -0
  158. package/.claude/commands/coordination/spawn.md +45 -0
  159. package/.claude/commands/coordination/swarm-init.md +85 -0
  160. package/.claude/commands/coordination/task-orchestrate.md +25 -0
  161. package/.claude/commands/flow-nexus/app-store.md +124 -0
  162. package/.claude/commands/flow-nexus/challenges.md +120 -0
  163. package/.claude/commands/flow-nexus/login-registration.md +65 -0
  164. package/.claude/commands/flow-nexus/neural-network.md +134 -0
  165. package/.claude/commands/flow-nexus/payments.md +116 -0
  166. package/.claude/commands/flow-nexus/sandbox.md +83 -0
  167. package/.claude/commands/flow-nexus/swarm.md +87 -0
  168. package/.claude/commands/flow-nexus/user-tools.md +152 -0
  169. package/.claude/commands/flow-nexus/workflow.md +115 -0
  170. package/.claude/commands/github/README.md +11 -0
  171. package/.claude/commands/github/code-review-swarm.md +514 -0
  172. package/.claude/commands/github/code-review.md +25 -0
  173. package/.claude/commands/github/github-modes.md +147 -0
  174. package/.claude/commands/github/github-swarm.md +121 -0
  175. package/.claude/commands/github/issue-tracker.md +292 -0
  176. package/.claude/commands/github/issue-triage.md +25 -0
  177. package/.claude/commands/github/multi-repo-swarm.md +519 -0
  178. package/.claude/commands/github/pr-enhance.md +26 -0
  179. package/.claude/commands/github/pr-manager.md +170 -0
  180. package/.claude/commands/github/project-board-sync.md +471 -0
  181. package/.claude/commands/github/release-manager.md +338 -0
  182. package/.claude/commands/github/release-swarm.md +544 -0
  183. package/.claude/commands/github/repo-analyze.md +25 -0
  184. package/.claude/commands/github/repo-architect.md +367 -0
  185. package/.claude/commands/github/swarm-issue.md +482 -0
  186. package/.claude/commands/github/swarm-pr.md +285 -0
  187. package/.claude/commands/github/sync-coordinator.md +301 -0
  188. package/.claude/commands/github/workflow-automation.md +442 -0
  189. package/.claude/commands/hive-mind/README.md +17 -0
  190. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
  191. package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
  192. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
  193. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
  194. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
  195. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
  196. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
  197. package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
  198. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
  199. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
  200. package/.claude/commands/hive-mind/hive-mind.md +27 -0
  201. package/.claude/commands/hooks/README.md +11 -0
  202. package/.claude/commands/hooks/overview.md +58 -0
  203. package/.claude/commands/hooks/post-edit.md +117 -0
  204. package/.claude/commands/hooks/post-task.md +112 -0
  205. package/.claude/commands/hooks/pre-edit.md +113 -0
  206. package/.claude/commands/hooks/pre-task.md +111 -0
  207. package/.claude/commands/hooks/session-end.md +118 -0
  208. package/.claude/commands/hooks/setup.md +103 -0
  209. package/.claude/commands/memory/README.md +9 -0
  210. package/.claude/commands/memory/memory-persist.md +25 -0
  211. package/.claude/commands/memory/memory-search.md +25 -0
  212. package/.claude/commands/memory/memory-usage.md +25 -0
  213. package/.claude/commands/memory/neural.md +47 -0
  214. package/.claude/commands/monitoring/README.md +9 -0
  215. package/.claude/commands/monitoring/agent-metrics.md +25 -0
  216. package/.claude/commands/monitoring/agents.md +44 -0
  217. package/.claude/commands/monitoring/real-time-view.md +25 -0
  218. package/.claude/commands/monitoring/status.md +46 -0
  219. package/.claude/commands/monitoring/swarm-monitor.md +25 -0
  220. package/.claude/commands/optimization/README.md +9 -0
  221. package/.claude/commands/optimization/auto-topology.md +62 -0
  222. package/.claude/commands/optimization/cache-manage.md +25 -0
  223. package/.claude/commands/optimization/parallel-execute.md +25 -0
  224. package/.claude/commands/optimization/parallel-execution.md +50 -0
  225. package/.claude/commands/optimization/topology-optimize.md +25 -0
  226. package/.claude/commands/pair/README.md +261 -0
  227. package/.claude/commands/pair/commands.md +546 -0
  228. package/.claude/commands/pair/config.md +510 -0
  229. package/.claude/commands/pair/examples.md +512 -0
  230. package/.claude/commands/pair/modes.md +348 -0
  231. package/.claude/commands/pair/session.md +407 -0
  232. package/.claude/commands/pair/start.md +209 -0
  233. package/.claude/commands/sparc/analyzer.md +52 -0
  234. package/.claude/commands/sparc/architect.md +53 -0
  235. package/.claude/commands/sparc/ask.md +97 -0
  236. package/.claude/commands/sparc/batch-executor.md +54 -0
  237. package/.claude/commands/sparc/code.md +89 -0
  238. package/.claude/commands/sparc/coder.md +54 -0
  239. package/.claude/commands/sparc/debug.md +83 -0
  240. package/.claude/commands/sparc/debugger.md +54 -0
  241. package/.claude/commands/sparc/designer.md +53 -0
  242. package/.claude/commands/sparc/devops.md +109 -0
  243. package/.claude/commands/sparc/docs-writer.md +80 -0
  244. package/.claude/commands/sparc/documenter.md +54 -0
  245. package/.claude/commands/sparc/innovator.md +54 -0
  246. package/.claude/commands/sparc/integration.md +83 -0
  247. package/.claude/commands/sparc/mcp.md +117 -0
  248. package/.claude/commands/sparc/memory-manager.md +54 -0
  249. package/.claude/commands/sparc/optimizer.md +54 -0
  250. package/.claude/commands/sparc/orchestrator.md +132 -0
  251. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
  252. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
  253. package/.claude/commands/sparc/researcher.md +54 -0
  254. package/.claude/commands/sparc/reviewer.md +54 -0
  255. package/.claude/commands/sparc/security-review.md +80 -0
  256. package/.claude/commands/sparc/sparc-modes.md +174 -0
  257. package/.claude/commands/sparc/sparc.md +111 -0
  258. package/.claude/commands/sparc/spec-pseudocode.md +80 -0
  259. package/.claude/commands/sparc/supabase-admin.md +348 -0
  260. package/.claude/commands/sparc/swarm-coordinator.md +54 -0
  261. package/.claude/commands/sparc/tdd.md +54 -0
  262. package/.claude/commands/sparc/tester.md +54 -0
  263. package/.claude/commands/sparc/tutorial.md +79 -0
  264. package/.claude/commands/sparc/workflow-manager.md +54 -0
  265. package/.claude/commands/sparc.md +166 -0
  266. package/.claude/commands/stream-chain/pipeline.md +121 -0
  267. package/.claude/commands/stream-chain/run.md +70 -0
  268. package/.claude/commands/swarm/README.md +15 -0
  269. package/.claude/commands/swarm/analysis.md +95 -0
  270. package/.claude/commands/swarm/development.md +96 -0
  271. package/.claude/commands/swarm/examples.md +168 -0
  272. package/.claude/commands/swarm/maintenance.md +102 -0
  273. package/.claude/commands/swarm/optimization.md +117 -0
  274. package/.claude/commands/swarm/research.md +136 -0
  275. package/.claude/commands/swarm/swarm-analysis.md +8 -0
  276. package/.claude/commands/swarm/swarm-background.md +8 -0
  277. package/.claude/commands/swarm/swarm-init.md +19 -0
  278. package/.claude/commands/swarm/swarm-modes.md +8 -0
  279. package/.claude/commands/swarm/swarm-monitor.md +8 -0
  280. package/.claude/commands/swarm/swarm-spawn.md +19 -0
  281. package/.claude/commands/swarm/swarm-status.md +8 -0
  282. package/.claude/commands/swarm/swarm-strategies.md +8 -0
  283. package/.claude/commands/swarm/swarm.md +27 -0
  284. package/.claude/commands/swarm/testing.md +131 -0
  285. package/.claude/commands/training/README.md +9 -0
  286. package/.claude/commands/training/model-update.md +25 -0
  287. package/.claude/commands/training/neural-patterns.md +74 -0
  288. package/.claude/commands/training/neural-train.md +25 -0
  289. package/.claude/commands/training/pattern-learn.md +25 -0
  290. package/.claude/commands/training/specialization.md +63 -0
  291. package/.claude/commands/truth/start.md +143 -0
  292. package/.claude/commands/verify/check.md +50 -0
  293. package/.claude/commands/verify/start.md +128 -0
  294. package/.claude/commands/workflows/README.md +9 -0
  295. package/.claude/commands/workflows/development.md +78 -0
  296. package/.claude/commands/workflows/research.md +63 -0
  297. package/.claude/commands/workflows/workflow-create.md +25 -0
  298. package/.claude/commands/workflows/workflow-execute.md +25 -0
  299. package/.claude/commands/workflows/workflow-export.md +25 -0
  300. package/.claude/config/v3-dependency-optimization.json +266 -0
  301. package/.claude/config/v3-performance-targets.json +251 -0
  302. package/.claude/helpers/README.md +97 -0
  303. package/.claude/helpers/adr-compliance.sh +186 -0
  304. package/.claude/helpers/aggressive-microcompact.mjs +36 -0
  305. package/.claude/helpers/auto-commit.sh +178 -0
  306. package/.claude/helpers/auto-memory-hook.mjs +564 -0
  307. package/.claude/helpers/checkpoint-manager.sh +251 -0
  308. package/.claude/helpers/context-persistence-hook.mjs +1979 -0
  309. package/.claude/helpers/daemon-manager.sh +252 -0
  310. package/.claude/helpers/ddd-tracker.sh +144 -0
  311. package/.claude/helpers/github-safe.js +106 -0
  312. package/.claude/helpers/github-setup.sh +28 -0
  313. package/.claude/helpers/guidance-hook.sh +13 -0
  314. package/.claude/helpers/guidance-hooks.sh +102 -0
  315. package/.claude/helpers/health-monitor.sh +108 -0
  316. package/.claude/helpers/hook-handler.cjs +269 -0
  317. package/.claude/helpers/intelligence.cjs +230 -0
  318. package/.claude/helpers/learning-hooks.sh +329 -0
  319. package/.claude/helpers/learning-optimizer.sh +127 -0
  320. package/.claude/helpers/learning-service.mjs +1144 -0
  321. package/.claude/helpers/memory.cjs +84 -0
  322. package/.claude/helpers/memory.js +83 -0
  323. package/.claude/helpers/metrics-db.mjs +488 -0
  324. package/.claude/helpers/patch-aggressive-prune.mjs +184 -0
  325. package/.claude/helpers/pattern-consolidator.sh +86 -0
  326. package/.claude/helpers/perf-worker.sh +160 -0
  327. package/.claude/helpers/post-commit +16 -0
  328. package/.claude/helpers/pre-commit +26 -0
  329. package/.claude/helpers/quick-start.sh +19 -0
  330. package/.claude/helpers/router.cjs +62 -0
  331. package/.claude/helpers/router.js +66 -0
  332. package/.claude/helpers/security-scanner.sh +127 -0
  333. package/.claude/helpers/session.cjs +125 -0
  334. package/.claude/helpers/session.js +135 -0
  335. package/.claude/helpers/setup-mcp.sh +18 -0
  336. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -0
  337. package/.claude/helpers/statusline-hook.sh +21 -0
  338. package/.claude/helpers/statusline.cjs +878 -0
  339. package/.claude/helpers/statusline.js +352 -0
  340. package/.claude/helpers/swarm-comms.sh +353 -0
  341. package/.claude/helpers/swarm-hooks.sh +761 -0
  342. package/.claude/helpers/swarm-monitor.sh +211 -0
  343. package/.claude/helpers/sync-v3-metrics.sh +245 -0
  344. package/.claude/helpers/update-v3-progress.sh +166 -0
  345. package/.claude/helpers/v3-quick-status.sh +58 -0
  346. package/.claude/helpers/v3.sh +111 -0
  347. package/.claude/helpers/validate-v3-config.sh +216 -0
  348. package/.claude/helpers/worker-manager.sh +170 -0
  349. package/.claude/mcp.json +13 -0
  350. package/.claude/scheduled_tasks.lock +1 -0
  351. package/.claude/settings.json +285 -0
  352. package/.claude/settings.json.bak +526 -0
  353. package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
  354. package/.claude/skills/agentdb-learning/SKILL.md +545 -0
  355. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
  356. package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
  357. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
  358. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
  359. package/.claude/skills/browser/SKILL.md +204 -0
  360. package/.claude/skills/dual-mode/README.md +71 -0
  361. package/.claude/skills/dual-mode/dual-collect.md +103 -0
  362. package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
  363. package/.claude/skills/dual-mode/dual-spawn.md +81 -0
  364. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -0
  365. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -0
  366. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -0
  367. package/.claude/skills/github-code-review/SKILL.md +1125 -0
  368. package/.claude/skills/github-multi-repo/SKILL.md +862 -0
  369. package/.claude/skills/github-project-management/SKILL.md +1263 -0
  370. package/.claude/skills/github-release-management/SKILL.md +1064 -0
  371. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -0
  372. package/.claude/skills/hive-mind-advanced/SKILL.md +709 -0
  373. package/.claude/skills/hooks-automation/SKILL.md +1201 -0
  374. package/.claude/skills/pair-programming/SKILL.md +1202 -0
  375. package/.claude/skills/performance-analysis/SKILL.md +560 -0
  376. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
  377. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
  378. package/.claude/skills/skill-builder/SKILL.md +910 -0
  379. package/.claude/skills/sparc-methodology/SKILL.md +1106 -0
  380. package/.claude/skills/stream-chain/SKILL.md +560 -0
  381. package/.claude/skills/swarm-advanced/SKILL.md +970 -0
  382. package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
  383. package/.claude/skills/v3-cli-modernization/SKILL.md +872 -0
  384. package/.claude/skills/v3-core-implementation/SKILL.md +797 -0
  385. package/.claude/skills/v3-ddd-architecture/SKILL.md +442 -0
  386. package/.claude/skills/v3-integration-deep/SKILL.md +241 -0
  387. package/.claude/skills/v3-mcp-optimization/SKILL.md +777 -0
  388. package/.claude/skills/v3-memory-unification/SKILL.md +174 -0
  389. package/.claude/skills/v3-performance-optimization/SKILL.md +390 -0
  390. package/.claude/skills/v3-security-overhaul/SKILL.md +82 -0
  391. package/.claude/skills/v3-swarm-coordination/SKILL.md +340 -0
  392. package/.claude/skills/verification-quality/SKILL.md +691 -0
  393. package/.claude/skills/worker-benchmarks/SKILL.md +129 -0
  394. package/.claude/skills/worker-integration/SKILL.md +147 -0
  395. package/.claude/statusline-command.sh +176 -0
  396. package/.claude/statusline.mjs +109 -0
  397. package/.claude/statusline.sh +431 -0
  398. package/.claude-plugin/README.md +720 -0
  399. package/.claude-plugin/docs/INSTALLATION.md +261 -0
  400. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -0
  401. package/.claude-plugin/docs/QUICKSTART.md +361 -0
  402. package/.claude-plugin/docs/STRUCTURE.md +128 -0
  403. package/.claude-plugin/hooks/hooks.json +75 -0
  404. package/.claude-plugin/marketplace.json +170 -0
  405. package/.claude-plugin/plugin.json +71 -0
  406. package/.claude-plugin/scripts/install.sh +234 -0
  407. package/.claude-plugin/scripts/ruflo-hook.sh +33 -0
  408. package/.claude-plugin/scripts/uninstall.sh +36 -0
  409. package/.claude-plugin/scripts/verify.sh +108 -0
  410. package/LICENSE +21 -0
  411. package/README.md +410 -0
  412. package/bin/cli.js +11 -0
  413. package/bin/npx-repair.js +7 -0
  414. package/bin/npx-safe-launch.js +9 -0
  415. package/package.json +159 -0
  416. package/v3/@claude-flow/cli/README.md +410 -0
  417. package/v3/@claude-flow/cli/bin/cli.js +233 -0
  418. package/v3/@claude-flow/cli/bin/mcp-server.js +224 -0
  419. package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -0
  420. package/v3/@claude-flow/cli/dist/src/appliance/gguf-engine.d.ts +91 -0
  421. package/v3/@claude-flow/cli/dist/src/appliance/gguf-engine.js +425 -0
  422. package/v3/@claude-flow/cli/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
  423. package/v3/@claude-flow/cli/dist/src/appliance/ruvllm-bridge.js +292 -0
  424. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-builder.d.ts +44 -0
  425. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-builder.js +329 -0
  426. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-distribution.d.ts +97 -0
  427. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-distribution.js +370 -0
  428. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-format.d.ts +111 -0
  429. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-format.js +393 -0
  430. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-runner.d.ts +69 -0
  431. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-runner.js +237 -0
  432. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-signing.d.ts +123 -0
  433. package/v3/@claude-flow/cli/dist/src/appliance/rvfa-signing.js +347 -0
  434. package/v3/@claude-flow/cli/dist/src/autopilot-state.d.ts +77 -0
  435. package/v3/@claude-flow/cli/dist/src/autopilot-state.js +271 -0
  436. package/v3/@claude-flow/cli/dist/src/benchmarks/pretrain/index.d.ts +58 -0
  437. package/v3/@claude-flow/cli/dist/src/benchmarks/pretrain/index.js +404 -0
  438. package/v3/@claude-flow/cli/dist/src/commands/agent-wasm.d.ts +14 -0
  439. package/v3/@claude-flow/cli/dist/src/commands/agent-wasm.js +333 -0
  440. package/v3/@claude-flow/cli/dist/src/commands/agent.d.ts +8 -0
  441. package/v3/@claude-flow/cli/dist/src/commands/agent.js +927 -0
  442. package/v3/@claude-flow/cli/dist/src/commands/analyze.d.ts +19 -0
  443. package/v3/@claude-flow/cli/dist/src/commands/analyze.js +2048 -0
  444. package/v3/@claude-flow/cli/dist/src/commands/appliance-advanced.d.ts +9 -0
  445. package/v3/@claude-flow/cli/dist/src/commands/appliance-advanced.js +215 -0
  446. package/v3/@claude-flow/cli/dist/src/commands/appliance.d.ts +8 -0
  447. package/v3/@claude-flow/cli/dist/src/commands/appliance.js +404 -0
  448. package/v3/@claude-flow/cli/dist/src/commands/autopilot.d.ts +15 -0
  449. package/v3/@claude-flow/cli/dist/src/commands/autopilot.js +362 -0
  450. package/v3/@claude-flow/cli/dist/src/commands/benchmark.d.ts +10 -0
  451. package/v3/@claude-flow/cli/dist/src/commands/benchmark.js +460 -0
  452. package/v3/@claude-flow/cli/dist/src/commands/claims.d.ts +10 -0
  453. package/v3/@claude-flow/cli/dist/src/commands/claims.js +620 -0
  454. package/v3/@claude-flow/cli/dist/src/commands/cleanup.d.ts +13 -0
  455. package/v3/@claude-flow/cli/dist/src/commands/cleanup.js +250 -0
  456. package/v3/@claude-flow/cli/dist/src/commands/completions.d.ts +10 -0
  457. package/v3/@claude-flow/cli/dist/src/commands/completions.js +539 -0
  458. package/v3/@claude-flow/cli/dist/src/commands/config.d.ts +8 -0
  459. package/v3/@claude-flow/cli/dist/src/commands/config.js +430 -0
  460. package/v3/@claude-flow/cli/dist/src/commands/daemon.d.ts +28 -0
  461. package/v3/@claude-flow/cli/dist/src/commands/daemon.js +1093 -0
  462. package/v3/@claude-flow/cli/dist/src/commands/deployment.d.ts +10 -0
  463. package/v3/@claude-flow/cli/dist/src/commands/deployment.js +672 -0
  464. package/v3/@claude-flow/cli/dist/src/commands/doctor.d.ts +10 -0
  465. package/v3/@claude-flow/cli/dist/src/commands/doctor.js +885 -0
  466. package/v3/@claude-flow/cli/dist/src/commands/embeddings.d.ts +18 -0
  467. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +1623 -0
  468. package/v3/@claude-flow/cli/dist/src/commands/guidance.d.ts +8 -0
  469. package/v3/@claude-flow/cli/dist/src/commands/guidance.js +556 -0
  470. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.d.ts +11 -0
  471. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +1297 -0
  472. package/v3/@claude-flow/cli/dist/src/commands/hooks.d.ts +8 -0
  473. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +4499 -0
  474. package/v3/@claude-flow/cli/dist/src/commands/index.d.ts +118 -0
  475. package/v3/@claude-flow/cli/dist/src/commands/index.js +344 -0
  476. package/v3/@claude-flow/cli/dist/src/commands/init.d.ts +8 -0
  477. package/v3/@claude-flow/cli/dist/src/commands/init.js +997 -0
  478. package/v3/@claude-flow/cli/dist/src/commands/issues.d.ts +21 -0
  479. package/v3/@claude-flow/cli/dist/src/commands/issues.js +567 -0
  480. package/v3/@claude-flow/cli/dist/src/commands/mcp.d.ts +11 -0
  481. package/v3/@claude-flow/cli/dist/src/commands/mcp.js +718 -0
  482. package/v3/@claude-flow/cli/dist/src/commands/memory.d.ts +8 -0
  483. package/v3/@claude-flow/cli/dist/src/commands/memory.js +1456 -0
  484. package/v3/@claude-flow/cli/dist/src/commands/migrate.d.ts +8 -0
  485. package/v3/@claude-flow/cli/dist/src/commands/migrate.js +742 -0
  486. package/v3/@claude-flow/cli/dist/src/commands/neural.d.ts +10 -0
  487. package/v3/@claude-flow/cli/dist/src/commands/neural.js +1531 -0
  488. package/v3/@claude-flow/cli/dist/src/commands/performance.d.ts +10 -0
  489. package/v3/@claude-flow/cli/dist/src/commands/performance.js +583 -0
  490. package/v3/@claude-flow/cli/dist/src/commands/plugins.d.ts +11 -0
  491. package/v3/@claude-flow/cli/dist/src/commands/plugins.js +826 -0
  492. package/v3/@claude-flow/cli/dist/src/commands/process.d.ts +10 -0
  493. package/v3/@claude-flow/cli/dist/src/commands/process.js +694 -0
  494. package/v3/@claude-flow/cli/dist/src/commands/progress.d.ts +11 -0
  495. package/v3/@claude-flow/cli/dist/src/commands/progress.js +259 -0
  496. package/v3/@claude-flow/cli/dist/src/commands/providers.d.ts +10 -0
  497. package/v3/@claude-flow/cli/dist/src/commands/providers.js +502 -0
  498. package/v3/@claude-flow/cli/dist/src/commands/route.d.ts +16 -0
  499. package/v3/@claude-flow/cli/dist/src/commands/route.js +813 -0
  500. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.d.ts +11 -0
  501. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +747 -0
  502. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.d.ts +11 -0
  503. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +490 -0
  504. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.d.ts +18 -0
  505. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +373 -0
  506. package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.d.ts +29 -0
  507. package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.js +129 -0
  508. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.d.ts +11 -0
  509. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +467 -0
  510. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.d.ts +11 -0
  511. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +498 -0
  512. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.d.ts +11 -0
  513. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +505 -0
  514. package/v3/@claude-flow/cli/dist/src/commands/ruvector/pg-utils.d.ts +14 -0
  515. package/v3/@claude-flow/cli/dist/src/commands/ruvector/pg-utils.js +41 -0
  516. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.d.ts +18 -0
  517. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +765 -0
  518. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.d.ts +11 -0
  519. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +479 -0
  520. package/v3/@claude-flow/cli/dist/src/commands/security.d.ts +10 -0
  521. package/v3/@claude-flow/cli/dist/src/commands/security.js +920 -0
  522. package/v3/@claude-flow/cli/dist/src/commands/session.d.ts +8 -0
  523. package/v3/@claude-flow/cli/dist/src/commands/session.js +757 -0
  524. package/v3/@claude-flow/cli/dist/src/commands/start.d.ts +8 -0
  525. package/v3/@claude-flow/cli/dist/src/commands/start.js +418 -0
  526. package/v3/@claude-flow/cli/dist/src/commands/status.d.ts +8 -0
  527. package/v3/@claude-flow/cli/dist/src/commands/status.js +591 -0
  528. package/v3/@claude-flow/cli/dist/src/commands/swarm.d.ts +8 -0
  529. package/v3/@claude-flow/cli/dist/src/commands/swarm.js +887 -0
  530. package/v3/@claude-flow/cli/dist/src/commands/task.d.ts +8 -0
  531. package/v3/@claude-flow/cli/dist/src/commands/task.js +675 -0
  532. package/v3/@claude-flow/cli/dist/src/commands/transfer-store.d.ts +13 -0
  533. package/v3/@claude-flow/cli/dist/src/commands/transfer-store.js +428 -0
  534. package/v3/@claude-flow/cli/dist/src/commands/update.d.ts +8 -0
  535. package/v3/@claude-flow/cli/dist/src/commands/update.js +276 -0
  536. package/v3/@claude-flow/cli/dist/src/commands/verify.d.ts +19 -0
  537. package/v3/@claude-flow/cli/dist/src/commands/verify.js +261 -0
  538. package/v3/@claude-flow/cli/dist/src/commands/workflow.d.ts +8 -0
  539. package/v3/@claude-flow/cli/dist/src/commands/workflow.js +617 -0
  540. package/v3/@claude-flow/cli/dist/src/config-adapter.d.ts +15 -0
  541. package/v3/@claude-flow/cli/dist/src/config-adapter.js +186 -0
  542. package/v3/@claude-flow/cli/dist/src/encryption/vault.d.ts +94 -0
  543. package/v3/@claude-flow/cli/dist/src/encryption/vault.js +172 -0
  544. package/v3/@claude-flow/cli/dist/src/fs-secure.d.ts +67 -0
  545. package/v3/@claude-flow/cli/dist/src/fs-secure.js +74 -0
  546. package/v3/@claude-flow/cli/dist/src/index.d.ts +81 -0
  547. package/v3/@claude-flow/cli/dist/src/index.js +538 -0
  548. package/v3/@claude-flow/cli/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  549. package/v3/@claude-flow/cli/dist/src/infrastructure/in-memory-repositories.js +264 -0
  550. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +16 -0
  551. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +363 -0
  552. package/v3/@claude-flow/cli/dist/src/init/executor.d.ts +41 -0
  553. package/v3/@claude-flow/cli/dist/src/init/executor.js +1904 -0
  554. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +60 -0
  555. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +1185 -0
  556. package/v3/@claude-flow/cli/dist/src/init/index.d.ts +13 -0
  557. package/v3/@claude-flow/cli/dist/src/init/index.js +15 -0
  558. package/v3/@claude-flow/cli/dist/src/init/mcp-generator.d.ts +26 -0
  559. package/v3/@claude-flow/cli/dist/src/init/mcp-generator.js +116 -0
  560. package/v3/@claude-flow/cli/dist/src/init/settings-generator.d.ts +14 -0
  561. package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +456 -0
  562. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.d.ts +28 -0
  563. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +937 -0
  564. package/v3/@claude-flow/cli/dist/src/init/types.d.ts +308 -0
  565. package/v3/@claude-flow/cli/dist/src/init/types.js +263 -0
  566. package/v3/@claude-flow/cli/dist/src/log-filters.d.ts +22 -0
  567. package/v3/@claude-flow/cli/dist/src/log-filters.js +36 -0
  568. package/v3/@claude-flow/cli/dist/src/mcp-client.d.ts +92 -0
  569. package/v3/@claude-flow/cli/dist/src/mcp-client.js +287 -0
  570. package/v3/@claude-flow/cli/dist/src/mcp-server.d.ts +163 -0
  571. package/v3/@claude-flow/cli/dist/src/mcp-server.js +732 -0
  572. package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-execute-core.d.ts +92 -0
  573. package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-execute-core.js +328 -0
  574. package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-tools.d.ts +9 -0
  575. package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-tools.js +716 -0
  576. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.d.ts +33 -0
  577. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +867 -0
  578. package/v3/@claude-flow/cli/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
  579. package/v3/@claude-flow/cli/dist/src/mcp-tools/analyze-tools.js +346 -0
  580. package/v3/@claude-flow/cli/dist/src/mcp-tools/auto-install.d.ts +83 -0
  581. package/v3/@claude-flow/cli/dist/src/mcp-tools/auto-install.js +131 -0
  582. package/v3/@claude-flow/cli/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
  583. package/v3/@claude-flow/cli/dist/src/mcp-tools/autopilot-tools.js +231 -0
  584. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-session-tools.d.ts +23 -0
  585. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-session-tools.js +324 -0
  586. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.d.ts +13 -0
  587. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +757 -0
  588. package/v3/@claude-flow/cli/dist/src/mcp-tools/claims-tools.d.ts +12 -0
  589. package/v3/@claude-flow/cli/dist/src/mcp-tools/claims-tools.js +863 -0
  590. package/v3/@claude-flow/cli/dist/src/mcp-tools/config-tools.d.ts +8 -0
  591. package/v3/@claude-flow/cli/dist/src/mcp-tools/config-tools.js +411 -0
  592. package/v3/@claude-flow/cli/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
  593. package/v3/@claude-flow/cli/dist/src/mcp-tools/coordination-tools.js +729 -0
  594. package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.d.ts +13 -0
  595. package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.js +534 -0
  596. package/v3/@claude-flow/cli/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
  597. package/v3/@claude-flow/cli/dist/src/mcp-tools/embeddings-tools.js +904 -0
  598. package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.d.ts +9 -0
  599. package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.js +659 -0
  600. package/v3/@claude-flow/cli/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
  601. package/v3/@claude-flow/cli/dist/src/mcp-tools/guidance-tools.js +639 -0
  602. package/v3/@claude-flow/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
  603. package/v3/@claude-flow/cli/dist/src/mcp-tools/hive-mind-tools.js +953 -0
  604. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.d.ts +46 -0
  605. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +3939 -0
  606. package/v3/@claude-flow/cli/dist/src/mcp-tools/index.d.ts +27 -0
  607. package/v3/@claude-flow/cli/dist/src/mcp-tools/index.js +26 -0
  608. package/v3/@claude-flow/cli/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
  609. package/v3/@claude-flow/cli/dist/src/mcp-tools/managed-agent-tools.js +357 -0
  610. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.d.ts +14 -0
  611. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +1240 -0
  612. package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.d.ts +16 -0
  613. package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.js +793 -0
  614. package/v3/@claude-flow/cli/dist/src/mcp-tools/performance-tools.d.ts +16 -0
  615. package/v3/@claude-flow/cli/dist/src/mcp-tools/performance-tools.js +675 -0
  616. package/v3/@claude-flow/cli/dist/src/mcp-tools/progress-tools.d.ts +14 -0
  617. package/v3/@claude-flow/cli/dist/src/mcp-tools/progress-tools.js +348 -0
  618. package/v3/@claude-flow/cli/dist/src/mcp-tools/request-tracker.d.ts +17 -0
  619. package/v3/@claude-flow/cli/dist/src/mcp-tools/request-tracker.js +27 -0
  620. package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
  621. package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.js +339 -0
  622. package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.d.ts +18 -0
  623. package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.js +556 -0
  624. package/v3/@claude-flow/cli/dist/src/mcp-tools/session-tools.d.ts +8 -0
  625. package/v3/@claude-flow/cli/dist/src/mcp-tools/session-tools.js +517 -0
  626. package/v3/@claude-flow/cli/dist/src/mcp-tools/swarm-tools.d.ts +9 -0
  627. package/v3/@claude-flow/cli/dist/src/mcp-tools/swarm-tools.js +388 -0
  628. package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.d.ts +13 -0
  629. package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.js +674 -0
  630. package/v3/@claude-flow/cli/dist/src/mcp-tools/task-tools.d.ts +8 -0
  631. package/v3/@claude-flow/cli/dist/src/mcp-tools/task-tools.js +487 -0
  632. package/v3/@claude-flow/cli/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
  633. package/v3/@claude-flow/cli/dist/src/mcp-tools/terminal-tools.js +306 -0
  634. package/v3/@claude-flow/cli/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
  635. package/v3/@claude-flow/cli/dist/src/mcp-tools/transfer-tools.js +447 -0
  636. package/v3/@claude-flow/cli/dist/src/mcp-tools/types.d.ts +8 -0
  637. package/v3/@claude-flow/cli/dist/src/mcp-tools/types.js +8 -0
  638. package/v3/@claude-flow/cli/dist/src/mcp-tools/validate-input.d.ts +9 -0
  639. package/v3/@claude-flow/cli/dist/src/mcp-tools/validate-input.js +9 -0
  640. package/v3/@claude-flow/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  641. package/v3/@claude-flow/cli/dist/src/mcp-tools/wasm-agent-tools.js +291 -0
  642. package/v3/@claude-flow/cli/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
  643. package/v3/@claude-flow/cli/dist/src/mcp-tools/workflow-tools.js +884 -0
  644. package/v3/@claude-flow/cli/dist/src/memory/ewc-consolidation.d.ts +295 -0
  645. package/v3/@claude-flow/cli/dist/src/memory/ewc-consolidation.js +601 -0
  646. package/v3/@claude-flow/cli/dist/src/memory/intelligence.d.ts +357 -0
  647. package/v3/@claude-flow/cli/dist/src/memory/intelligence.js +1200 -0
  648. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +492 -0
  649. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +2101 -0
  650. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +420 -0
  651. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +2376 -0
  652. package/v3/@claude-flow/cli/dist/src/memory/neural-package-bridge.d.ts +48 -0
  653. package/v3/@claude-flow/cli/dist/src/memory/neural-package-bridge.js +87 -0
  654. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.d.ts +60 -0
  655. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +242 -0
  656. package/v3/@claude-flow/cli/dist/src/memory/sona-optimizer.d.ts +267 -0
  657. package/v3/@claude-flow/cli/dist/src/memory/sona-optimizer.js +779 -0
  658. package/v3/@claude-flow/cli/dist/src/output.d.ts +9 -0
  659. package/v3/@claude-flow/cli/dist/src/output.js +9 -0
  660. package/v3/@claude-flow/cli/dist/src/parser.d.ts +69 -0
  661. package/v3/@claude-flow/cli/dist/src/parser.js +473 -0
  662. package/v3/@claude-flow/cli/dist/src/plugins/manager.d.ts +133 -0
  663. package/v3/@claude-flow/cli/dist/src/plugins/manager.js +402 -0
  664. package/v3/@claude-flow/cli/dist/src/plugins/store/discovery.d.ts +91 -0
  665. package/v3/@claude-flow/cli/dist/src/plugins/store/discovery.js +1202 -0
  666. package/v3/@claude-flow/cli/dist/src/plugins/store/index.d.ts +76 -0
  667. package/v3/@claude-flow/cli/dist/src/plugins/store/index.js +141 -0
  668. package/v3/@claude-flow/cli/dist/src/plugins/store/search.d.ts +46 -0
  669. package/v3/@claude-flow/cli/dist/src/plugins/store/search.js +230 -0
  670. package/v3/@claude-flow/cli/dist/src/plugins/store/types.d.ts +274 -0
  671. package/v3/@claude-flow/cli/dist/src/plugins/store/types.js +7 -0
  672. package/v3/@claude-flow/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  673. package/v3/@claude-flow/cli/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  674. package/v3/@claude-flow/cli/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  675. package/v3/@claude-flow/cli/dist/src/plugins/tests/standalone-test.js +188 -0
  676. package/v3/@claude-flow/cli/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  677. package/v3/@claude-flow/cli/dist/src/plugins/tests/test-plugin-store.js +206 -0
  678. package/v3/@claude-flow/cli/dist/src/production/circuit-breaker.d.ts +101 -0
  679. package/v3/@claude-flow/cli/dist/src/production/circuit-breaker.js +241 -0
  680. package/v3/@claude-flow/cli/dist/src/production/error-handler.d.ts +92 -0
  681. package/v3/@claude-flow/cli/dist/src/production/error-handler.js +299 -0
  682. package/v3/@claude-flow/cli/dist/src/production/index.d.ts +23 -0
  683. package/v3/@claude-flow/cli/dist/src/production/index.js +18 -0
  684. package/v3/@claude-flow/cli/dist/src/production/monitoring.d.ts +161 -0
  685. package/v3/@claude-flow/cli/dist/src/production/monitoring.js +356 -0
  686. package/v3/@claude-flow/cli/dist/src/production/rate-limiter.d.ts +80 -0
  687. package/v3/@claude-flow/cli/dist/src/production/rate-limiter.js +201 -0
  688. package/v3/@claude-flow/cli/dist/src/production/retry.d.ts +48 -0
  689. package/v3/@claude-flow/cli/dist/src/production/retry.js +179 -0
  690. package/v3/@claude-flow/cli/dist/src/prompt.d.ts +44 -0
  691. package/v3/@claude-flow/cli/dist/src/prompt.js +501 -0
  692. package/v3/@claude-flow/cli/dist/src/runtime/headless.d.ts +60 -0
  693. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +284 -0
  694. package/v3/@claude-flow/cli/dist/src/ruvector/agent-wasm.d.ts +193 -0
  695. package/v3/@claude-flow/cli/dist/src/ruvector/agent-wasm.js +354 -0
  696. package/v3/@claude-flow/cli/dist/src/ruvector/ast-analyzer.d.ts +67 -0
  697. package/v3/@claude-flow/cli/dist/src/ruvector/ast-analyzer.js +277 -0
  698. package/v3/@claude-flow/cli/dist/src/ruvector/coverage-router.d.ts +160 -0
  699. package/v3/@claude-flow/cli/dist/src/ruvector/coverage-router.js +531 -0
  700. package/v3/@claude-flow/cli/dist/src/ruvector/coverage-tools.d.ts +33 -0
  701. package/v3/@claude-flow/cli/dist/src/ruvector/coverage-tools.js +157 -0
  702. package/v3/@claude-flow/cli/dist/src/ruvector/diff-classifier.d.ts +175 -0
  703. package/v3/@claude-flow/cli/dist/src/ruvector/diff-classifier.js +699 -0
  704. package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.d.ts +78 -0
  705. package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.js +310 -0
  706. package/v3/@claude-flow/cli/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
  707. package/v3/@claude-flow/cli/dist/src/ruvector/enhanced-model-router.js +529 -0
  708. package/v3/@claude-flow/cli/dist/src/ruvector/graph-analyzer.d.ts +187 -0
  709. package/v3/@claude-flow/cli/dist/src/ruvector/graph-analyzer.js +929 -0
  710. package/v3/@claude-flow/cli/dist/src/ruvector/graph-backend.d.ts +79 -0
  711. package/v3/@claude-flow/cli/dist/src/ruvector/graph-backend.js +220 -0
  712. package/v3/@claude-flow/cli/dist/src/ruvector/index.d.ts +38 -0
  713. package/v3/@claude-flow/cli/dist/src/ruvector/index.js +82 -0
  714. package/v3/@claude-flow/cli/dist/src/ruvector/lora-adapter.d.ts +240 -0
  715. package/v3/@claude-flow/cli/dist/src/ruvector/lora-adapter.js +550 -0
  716. package/v3/@claude-flow/cli/dist/src/ruvector/model-router.d.ts +241 -0
  717. package/v3/@claude-flow/cli/dist/src/ruvector/model-router.js +608 -0
  718. package/v3/@claude-flow/cli/dist/src/ruvector/q-learning-router.d.ts +211 -0
  719. package/v3/@claude-flow/cli/dist/src/ruvector/q-learning-router.js +681 -0
  720. package/v3/@claude-flow/cli/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
  721. package/v3/@claude-flow/cli/dist/src/ruvector/ruvllm-wasm.js +367 -0
  722. package/v3/@claude-flow/cli/dist/src/ruvector/semantic-router.d.ts +77 -0
  723. package/v3/@claude-flow/cli/dist/src/ruvector/semantic-router.js +178 -0
  724. package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.d.ts +73 -0
  725. package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.js +264 -0
  726. package/v3/@claude-flow/cli/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  727. package/v3/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +95 -0
  728. package/v3/@claude-flow/cli/dist/src/services/claim-service.d.ts +204 -0
  729. package/v3/@claude-flow/cli/dist/src/services/claim-service.js +818 -0
  730. package/v3/@claude-flow/cli/dist/src/services/config-file-manager.d.ts +37 -0
  731. package/v3/@claude-flow/cli/dist/src/services/config-file-manager.js +233 -0
  732. package/v3/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
  733. package/v3/@claude-flow/cli/dist/src/services/container-worker-pool.js +583 -0
  734. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.d.ts +310 -0
  735. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +1058 -0
  736. package/v3/@claude-flow/cli/dist/src/services/index.d.ts +13 -0
  737. package/v3/@claude-flow/cli/dist/src/services/index.js +11 -0
  738. package/v3/@claude-flow/cli/dist/src/services/registry-api.d.ts +58 -0
  739. package/v3/@claude-flow/cli/dist/src/services/registry-api.js +146 -0
  740. package/v3/@claude-flow/cli/dist/src/services/ruvector-training.d.ts +222 -0
  741. package/v3/@claude-flow/cli/dist/src/services/ruvector-training.js +688 -0
  742. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +323 -0
  743. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +1323 -0
  744. package/v3/@claude-flow/cli/dist/src/services/worker-queue.d.ts +194 -0
  745. package/v3/@claude-flow/cli/dist/src/services/worker-queue.js +513 -0
  746. package/v3/@claude-flow/cli/dist/src/suggest.d.ts +53 -0
  747. package/v3/@claude-flow/cli/dist/src/suggest.js +200 -0
  748. package/v3/@claude-flow/cli/dist/src/transfer/anonymization/index.d.ts +25 -0
  749. package/v3/@claude-flow/cli/dist/src/transfer/anonymization/index.js +175 -0
  750. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  751. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +205 -0
  752. package/v3/@claude-flow/cli/dist/src/transfer/export.d.ts +25 -0
  753. package/v3/@claude-flow/cli/dist/src/transfer/export.js +113 -0
  754. package/v3/@claude-flow/cli/dist/src/transfer/index.d.ts +12 -0
  755. package/v3/@claude-flow/cli/dist/src/transfer/index.js +31 -0
  756. package/v3/@claude-flow/cli/dist/src/transfer/ipfs/client.d.ts +109 -0
  757. package/v3/@claude-flow/cli/dist/src/transfer/ipfs/client.js +307 -0
  758. package/v3/@claude-flow/cli/dist/src/transfer/ipfs/upload.d.ts +95 -0
  759. package/v3/@claude-flow/cli/dist/src/transfer/ipfs/upload.js +413 -0
  760. package/v3/@claude-flow/cli/dist/src/transfer/models/seraphine.d.ts +72 -0
  761. package/v3/@claude-flow/cli/dist/src/transfer/models/seraphine.js +373 -0
  762. package/v3/@claude-flow/cli/dist/src/transfer/serialization/cfp.d.ts +49 -0
  763. package/v3/@claude-flow/cli/dist/src/transfer/serialization/cfp.js +183 -0
  764. package/v3/@claude-flow/cli/dist/src/transfer/storage/gcs.d.ts +82 -0
  765. package/v3/@claude-flow/cli/dist/src/transfer/storage/gcs.js +272 -0
  766. package/v3/@claude-flow/cli/dist/src/transfer/storage/index.d.ts +6 -0
  767. package/v3/@claude-flow/cli/dist/src/transfer/storage/index.js +6 -0
  768. package/v3/@claude-flow/cli/dist/src/transfer/store/discovery.d.ts +84 -0
  769. package/v3/@claude-flow/cli/dist/src/transfer/store/discovery.js +382 -0
  770. package/v3/@claude-flow/cli/dist/src/transfer/store/download.d.ts +70 -0
  771. package/v3/@claude-flow/cli/dist/src/transfer/store/download.js +334 -0
  772. package/v3/@claude-flow/cli/dist/src/transfer/store/index.d.ts +84 -0
  773. package/v3/@claude-flow/cli/dist/src/transfer/store/index.js +153 -0
  774. package/v3/@claude-flow/cli/dist/src/transfer/store/publish.d.ts +76 -0
  775. package/v3/@claude-flow/cli/dist/src/transfer/store/publish.js +294 -0
  776. package/v3/@claude-flow/cli/dist/src/transfer/store/registry.d.ts +58 -0
  777. package/v3/@claude-flow/cli/dist/src/transfer/store/registry.js +285 -0
  778. package/v3/@claude-flow/cli/dist/src/transfer/store/search.d.ts +54 -0
  779. package/v3/@claude-flow/cli/dist/src/transfer/store/search.js +232 -0
  780. package/v3/@claude-flow/cli/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  781. package/v3/@claude-flow/cli/dist/src/transfer/store/tests/standalone-test.js +190 -0
  782. package/v3/@claude-flow/cli/dist/src/transfer/store/types.d.ts +193 -0
  783. package/v3/@claude-flow/cli/dist/src/transfer/store/types.js +6 -0
  784. package/v3/@claude-flow/cli/dist/src/transfer/test-seraphine.d.ts +6 -0
  785. package/v3/@claude-flow/cli/dist/src/transfer/test-seraphine.js +105 -0
  786. package/v3/@claude-flow/cli/dist/src/transfer/tests/test-store.d.ts +7 -0
  787. package/v3/@claude-flow/cli/dist/src/transfer/tests/test-store.js +214 -0
  788. package/v3/@claude-flow/cli/dist/src/transfer/types.d.ts +245 -0
  789. package/v3/@claude-flow/cli/dist/src/transfer/types.js +6 -0
  790. package/v3/@claude-flow/cli/dist/src/types.d.ts +13 -0
  791. package/v3/@claude-flow/cli/dist/src/types.js +13 -0
  792. package/v3/@claude-flow/cli/dist/src/update/checker.d.ts +34 -0
  793. package/v3/@claude-flow/cli/dist/src/update/checker.js +191 -0
  794. package/v3/@claude-flow/cli/dist/src/update/executor.d.ts +33 -0
  795. package/v3/@claude-flow/cli/dist/src/update/executor.js +217 -0
  796. package/v3/@claude-flow/cli/dist/src/update/index.d.ts +33 -0
  797. package/v3/@claude-flow/cli/dist/src/update/index.js +64 -0
  798. package/v3/@claude-flow/cli/dist/src/update/rate-limiter.d.ts +20 -0
  799. package/v3/@claude-flow/cli/dist/src/update/rate-limiter.js +96 -0
  800. package/v3/@claude-flow/cli/dist/src/update/validator.d.ts +17 -0
  801. package/v3/@claude-flow/cli/dist/src/update/validator.js +123 -0
  802. package/v3/@claude-flow/cli/package.json +133 -0
  803. package/v3/@claude-flow/guidance/README.md +1195 -0
  804. package/v3/@claude-flow/guidance/package.json +198 -0
  805. package/v3/@claude-flow/shared/README.md +323 -0
  806. package/v3/@claude-flow/shared/package.json +43 -0
  807. package/v3/README.md +493 -0
@@ -0,0 +1,885 @@
1
+ /**
2
+ * V3 CLI Doctor Command
3
+ * System diagnostics, dependency checks, config validation
4
+ *
5
+ * Created with ruv.io
6
+ */
7
+ import { output } from '../output.js';
8
+ import { existsSync, readFileSync, statSync } from 'fs';
9
+ import { join, dirname } from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import { createHash } from 'crypto';
12
+ import { execSync, exec } from 'child_process';
13
+ import { promisify } from 'util';
14
+ import { decodeKey, isEncryptionEnabled } from '../encryption/vault.js';
15
+ import { isEncryptedBlob } from '../encryption/vault.js';
16
+ // Promisified exec with proper shell and env inheritance for cross-platform support
17
+ const execAsync = promisify(exec);
18
+ /**
19
+ * Execute command asynchronously with proper environment inheritance
20
+ * Critical for Windows where PATH may not be inherited properly
21
+ */
22
+ async function runCommand(command, timeoutMs = 5000) {
23
+ const { stdout } = await execAsync(command, {
24
+ encoding: 'utf8',
25
+ timeout: timeoutMs,
26
+ shell: process.platform === 'win32' ? 'cmd.exe' : '/bin/sh', // Use proper shell per platform
27
+ env: { ...process.env }, // Explicitly inherit full environment
28
+ windowsHide: true, // Hide window on Windows
29
+ });
30
+ return stdout.trim();
31
+ }
32
+ // Check Node.js version
33
+ async function checkNodeVersion() {
34
+ const requiredMajor = 20;
35
+ const version = process.version;
36
+ const major = parseInt(version.slice(1).split('.')[0], 10);
37
+ if (major >= requiredMajor) {
38
+ return { name: 'Node.js Version', status: 'pass', message: `${version} (>= ${requiredMajor} required)` };
39
+ }
40
+ else if (major >= 18) {
41
+ return { name: 'Node.js Version', status: 'warn', message: `${version} (>= ${requiredMajor} recommended)`, fix: 'nvm install 20 && nvm use 20' };
42
+ }
43
+ else {
44
+ return { name: 'Node.js Version', status: 'fail', message: `${version} (>= ${requiredMajor} required)`, fix: 'nvm install 20 && nvm use 20' };
45
+ }
46
+ }
47
+ // Check npm version (async with proper env inheritance)
48
+ async function checkNpmVersion() {
49
+ try {
50
+ const version = await runCommand('npm --version');
51
+ const major = parseInt(version.split('.')[0], 10);
52
+ if (major >= 9) {
53
+ return { name: 'npm Version', status: 'pass', message: `v${version}` };
54
+ }
55
+ else {
56
+ return { name: 'npm Version', status: 'warn', message: `v${version} (>= 9 recommended)`, fix: 'npm install -g npm@latest' };
57
+ }
58
+ }
59
+ catch {
60
+ return { name: 'npm Version', status: 'fail', message: 'npm not found', fix: 'Install Node.js from https://nodejs.org' };
61
+ }
62
+ }
63
+ // Check config file
64
+ async function checkConfigFile() {
65
+ // JSON configs (parse-validated). The first three are LEGACY shapes from
66
+ // pre-v3 init flows; v3 init writes only `.claude-flow/config.yaml`.
67
+ const jsonPaths = [
68
+ '.claude-flow/config.json',
69
+ 'claude-flow.config.json',
70
+ '.claude-flow.json'
71
+ ];
72
+ // YAML configs (existence-checked only — no heavy yaml parser dependency).
73
+ const yamlPaths = [
74
+ '.claude-flow/config.yaml',
75
+ '.claude-flow/config.yml',
76
+ 'claude-flow.config.yaml'
77
+ ];
78
+ // #1798 — collect ALL configs that exist instead of returning at the first
79
+ // hit. The previous early-return masked silent collisions: if both a v2
80
+ // JSON and a v3 YAML existed, doctor reported only the JSON while the
81
+ // daemon was actually reading from the YAML. Surfacing both lets the user
82
+ // see and resolve the disagreement.
83
+ const foundJson = [];
84
+ const invalidJson = [];
85
+ for (const configPath of jsonPaths) {
86
+ if (!existsSync(configPath))
87
+ continue;
88
+ try {
89
+ JSON.parse(readFileSync(configPath, 'utf8'));
90
+ foundJson.push(configPath);
91
+ }
92
+ catch {
93
+ invalidJson.push(configPath);
94
+ }
95
+ }
96
+ const foundYaml = yamlPaths.filter(p => existsSync(p));
97
+ // Hard failures first: malformed JSON wins.
98
+ if (invalidJson.length > 0) {
99
+ return { name: 'Config File', status: 'fail', message: `Invalid JSON: ${invalidJson.join(', ')}`, fix: 'Fix JSON syntax in config file' };
100
+ }
101
+ // #1798 — collision: legacy JSON + new YAML both present. Subsystems can
102
+ // disagree on which to read; surface this as a warn with the recommended
103
+ // resolution (keep the YAML, archive the JSON).
104
+ if (foundJson.length > 0 && foundYaml.length > 0) {
105
+ return {
106
+ name: 'Config File',
107
+ status: 'warn',
108
+ message: `Config collision: legacy ${foundJson.join(', ')} + ${foundYaml.join(', ')} — subsystems may disagree silently`,
109
+ fix: `Archive the legacy JSON (mv ${foundJson[0]} ${foundJson[0]}.bak) and keep ${foundYaml[0]} as the canonical config`,
110
+ };
111
+ }
112
+ if (foundYaml.length > 0) {
113
+ return { name: 'Config File', status: 'pass', message: `Found: ${foundYaml[0]}` };
114
+ }
115
+ if (foundJson.length > 0) {
116
+ return { name: 'Config File', status: 'pass', message: `Found: ${foundJson[0]}` };
117
+ }
118
+ return { name: 'Config File', status: 'warn', message: 'No config file (using defaults)', fix: 'claude-flow config init' };
119
+ }
120
+ // Check daemon status
121
+ async function checkDaemonStatus() {
122
+ try {
123
+ const pidFile = '.claude-flow/daemon.pid';
124
+ if (existsSync(pidFile)) {
125
+ const pid = readFileSync(pidFile, 'utf8').trim();
126
+ try {
127
+ process.kill(parseInt(pid, 10), 0); // Check if process exists
128
+ return { name: 'Daemon Status', status: 'pass', message: `Running (PID: ${pid})` };
129
+ }
130
+ catch {
131
+ return { name: 'Daemon Status', status: 'warn', message: 'Stale PID file', fix: 'rm .claude-flow/daemon.pid && claude-flow daemon start' };
132
+ }
133
+ }
134
+ return { name: 'Daemon Status', status: 'warn', message: 'Not running', fix: 'claude-flow daemon start' };
135
+ }
136
+ catch {
137
+ return { name: 'Daemon Status', status: 'warn', message: 'Unable to check', fix: 'claude-flow daemon status' };
138
+ }
139
+ }
140
+ // Check memory database
141
+ async function checkMemoryDatabase() {
142
+ // Authoritative path comes from `getMemoryRoot()` (honors
143
+ // `CLAUDE_FLOW_MEMORY_PATH`, claude-flow.config.json's `memory.persistPath`,
144
+ // then defaults to `.swarm/`). #1946: the previous hard-coded list missed
145
+ // `data/memory/memory.db` (a common config) and ignored the env var
146
+ // entirely, so doctor reported "Not initialized" on perfectly-init'd DBs.
147
+ // Try the configured path first, then fall back to the historic candidates.
148
+ const candidates = [];
149
+ try {
150
+ const { getMemoryRoot } = await import('../memory/memory-initializer.js');
151
+ candidates.push(join(getMemoryRoot(), 'memory.db'));
152
+ }
153
+ catch {
154
+ /* memory-initializer not available — fall through to legacy candidates */
155
+ }
156
+ candidates.push('.swarm/memory.db', '.claude-flow/memory.db', 'data/memory/memory.db', // matches `CLAUDE_FLOW_MEMORY_PATH=data/memory`
157
+ 'data/memory.db');
158
+ for (const dbPath of candidates) {
159
+ if (existsSync(dbPath)) {
160
+ try {
161
+ const stats = statSync(dbPath);
162
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
163
+ return { name: 'Memory Database', status: 'pass', message: `${dbPath} (${sizeMB} MB)` };
164
+ }
165
+ catch {
166
+ return { name: 'Memory Database', status: 'warn', message: `${dbPath} (unable to stat)` };
167
+ }
168
+ }
169
+ }
170
+ return { name: 'Memory Database', status: 'warn', message: 'Not initialized', fix: 'claude-flow memory configure --backend hybrid' };
171
+ }
172
+ // Check API keys
173
+ async function checkApiKeys() {
174
+ const keys = ['ANTHROPIC_API_KEY', 'CLAUDE_API_KEY', 'OPENAI_API_KEY'];
175
+ const found = [];
176
+ for (const key of keys) {
177
+ if (process.env[key]) {
178
+ found.push(key);
179
+ }
180
+ }
181
+ // Detect Claude Code environment — API keys are managed internally
182
+ const inClaudeCode = !!(process.env.CLAUDE_CODE || process.env.CLAUDE_PROJECT_DIR || process.env.MCP_SESSION_ID);
183
+ if (found.includes('ANTHROPIC_API_KEY') || found.includes('CLAUDE_API_KEY')) {
184
+ return { name: 'API Keys', status: 'pass', message: `Found: ${found.join(', ')}` };
185
+ }
186
+ else if (inClaudeCode) {
187
+ return { name: 'API Keys', status: 'pass', message: 'Claude Code (managed internally)' };
188
+ }
189
+ else if (found.length > 0) {
190
+ return { name: 'API Keys', status: 'warn', message: `Found: ${found.join(', ')} (no Claude key)`, fix: 'export ANTHROPIC_API_KEY=your_key' };
191
+ }
192
+ else {
193
+ return { name: 'API Keys', status: 'warn', message: 'No API keys found', fix: 'export ANTHROPIC_API_KEY=your_key' };
194
+ }
195
+ }
196
+ // Check git (async with proper env inheritance)
197
+ async function checkGit() {
198
+ try {
199
+ const version = await runCommand('git --version');
200
+ return { name: 'Git', status: 'pass', message: version.replace('git version ', 'v') };
201
+ }
202
+ catch {
203
+ return { name: 'Git', status: 'warn', message: 'Not installed', fix: 'Install git from https://git-scm.com' };
204
+ }
205
+ }
206
+ // Check if in git repo (async with proper env inheritance)
207
+ //
208
+ // #1791.7 — `git rev-parse` was reported as failing on hosts where `.git`
209
+ // clearly exists in cwd (linux-arm64 daemon contexts). Treat the git binary
210
+ // as authoritative when it succeeds, but fall back to a `.git` walk-up so a
211
+ // present repository is recognized even when the git invocation fails for
212
+ // environment reasons (PATH, broken global config, EBADCWD, etc.).
213
+ async function checkGitRepo() {
214
+ try {
215
+ await runCommand('git rev-parse --is-inside-work-tree');
216
+ return { name: 'Git Repository', status: 'pass', message: 'In a git repository' };
217
+ }
218
+ catch {
219
+ // Walk parents of cwd for a .git directory before reporting "not a repo"
220
+ let dir = process.cwd();
221
+ while (true) {
222
+ if (existsSync(join(dir, '.git'))) {
223
+ return {
224
+ name: 'Git Repository',
225
+ status: 'warn',
226
+ message: `Repo detected on disk (${join(dir, '.git')}) but \`git rev-parse\` failed — check git installation and PATH`,
227
+ fix: 'Verify git is on PATH (try `git --version`) and that the working tree is not corrupted',
228
+ };
229
+ }
230
+ const parent = dirname(dir);
231
+ if (parent === dir)
232
+ break;
233
+ dir = parent;
234
+ }
235
+ return { name: 'Git Repository', status: 'warn', message: 'Not a git repository', fix: 'git init' };
236
+ }
237
+ }
238
+ // Check AIDefence package availability (#1807)
239
+ //
240
+ // `aidefence_*` MCP tools (scan, analyze, has_pii, stats, learn) require
241
+ // `@claude-flow/aidefence` to be installed and loadable. The package is an
242
+ // optional dependency — present in some installs (project-local) but
243
+ // missing in others (npm-global of `claude-flow`). Without it, every
244
+ // aidefence MCP call fails at runtime with "Cannot find module".
245
+ //
246
+ // Surface that state in `doctor` so operators know BEFORE they rely on
247
+ // AI-defence scanning. The probe is the same dynamic `import()` the MCP
248
+ // tool's handler uses, so a `pass` here means the actual tools will work.
249
+ async function checkAIDefence() {
250
+ try {
251
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
252
+ await import('@claude-flow/aidefence');
253
+ return {
254
+ name: 'AIDefence',
255
+ status: 'pass',
256
+ message: '@claude-flow/aidefence loadable — aidefence_* MCP tools functional',
257
+ };
258
+ }
259
+ catch {
260
+ return {
261
+ name: 'AIDefence',
262
+ status: 'warn',
263
+ message: '@claude-flow/aidefence not loadable — aidefence_* MCP tools will fail (optional package)',
264
+ fix: 'npm install --save @claude-flow/aidefence (in your project), or run `claude-flow mcp start` from a directory that has it installed',
265
+ };
266
+ }
267
+ }
268
+ /**
269
+ * ADR-097 Phase 4: federation peer-state surface for doctor.
270
+ *
271
+ * Probes the federation plugin loadability + asserts the breaker entity
272
+ * layer is present in the installed version. Without the plugin
273
+ * installed this is a "not configured" pass — federation is opt-in.
274
+ *
275
+ * Live coordinator state (per-peer counts) requires a running MCP server
276
+ * with `federation_init` called; operators inspect that via the
277
+ * `federation_breaker_status` MCP tool, not the doctor (which is a
278
+ * one-shot CLI process with no coordinator session).
279
+ */
280
+ async function checkFederationBreaker() {
281
+ try {
282
+ // Optional plugin — not a hard dep of @claude-flow/cli. Build the
283
+ // module specifier dynamically so TypeScript cannot statically
284
+ // resolve it (which would emit TS2307); at runtime the import
285
+ // either resolves (plugin installed) or throws (handled below).
286
+ const specifier = ['@claude-flow', 'plugin-agent-federation'].join('/');
287
+ const mod = await import(specifier);
288
+ if (!mod.FederationNodeState) {
289
+ return {
290
+ name: 'Federation Breaker',
291
+ status: 'warn',
292
+ message: '@claude-flow/plugin-agent-federation loaded but FederationNodeState export missing — version older than ADR-097 Phase 2',
293
+ fix: 'Upgrade: npm install @claude-flow/plugin-agent-federation@alpha',
294
+ };
295
+ }
296
+ return {
297
+ name: 'Federation Breaker',
298
+ status: 'pass',
299
+ message: 'ADR-097 breaker loadable — federation_breaker_status / federation_evict / federation_reactivate MCP tools available',
300
+ };
301
+ }
302
+ catch {
303
+ return {
304
+ name: 'Federation Breaker',
305
+ status: 'pass',
306
+ message: 'Federation plugin not installed (optional) — install only if you need cross-installation peering',
307
+ fix: 'npm install --save @claude-flow/plugin-agent-federation@alpha',
308
+ };
309
+ }
310
+ }
311
+ // Check MCP servers
312
+ async function checkMcpServers() {
313
+ const home = process.env.HOME || process.env.USERPROFILE || '';
314
+ // #1842: ~/.claude.json holds project-scoped registrations under
315
+ // parsed.projects[<projectPath>].mcpServers.ruflo, in addition to any
316
+ // top-level mcpServers. Check both shapes plus the legacy desktop and
317
+ // local .mcp.json paths.
318
+ const mcpConfigPaths = [
319
+ join(home, '.claude.json'),
320
+ join(home, '.claude/claude_desktop_config.json'),
321
+ join(home, '.config/claude/mcp.json'),
322
+ '.mcp.json',
323
+ ];
324
+ const isRufloKey = (k) => k === 'ruflo' || k === 'ruflo_alpha' || k === 'claude-flow' || k === 'claude-flow_alpha';
325
+ for (const configPath of mcpConfigPaths) {
326
+ if (!existsSync(configPath))
327
+ continue;
328
+ try {
329
+ const content = JSON.parse(readFileSync(configPath, 'utf8'));
330
+ // Top-level mcpServers (legacy / desktop form)
331
+ const topServers = content.mcpServers || content.servers || {};
332
+ const topServerKeys = Object.keys(topServers);
333
+ const topHasRuflo = topServerKeys.some(isRufloKey);
334
+ // Project-scoped (Claude Code shape): projects[*].mcpServers.ruflo
335
+ let projectHits = 0;
336
+ let projectScannedServers = 0;
337
+ if (content.projects && typeof content.projects === 'object') {
338
+ for (const projectVal of Object.values(content.projects)) {
339
+ const pm = projectVal?.mcpServers;
340
+ if (pm && typeof pm === 'object') {
341
+ const keys = Object.keys(pm);
342
+ projectScannedServers += keys.length;
343
+ if (keys.some(isRufloKey))
344
+ projectHits += 1;
345
+ }
346
+ }
347
+ }
348
+ const totalServers = topServerKeys.length + projectScannedServers;
349
+ if (topHasRuflo || projectHits > 0) {
350
+ const where = topHasRuflo
351
+ ? 'top-level'
352
+ : `${projectHits} project-scoped`;
353
+ return {
354
+ name: 'MCP Servers',
355
+ status: 'pass',
356
+ message: `${totalServers} servers (ruflo configured: ${where})`,
357
+ };
358
+ }
359
+ if (totalServers > 0) {
360
+ return {
361
+ name: 'MCP Servers',
362
+ status: 'warn',
363
+ message: `${totalServers} servers (ruflo not found)`,
364
+ fix: 'claude mcp add ruflo -- npx -y ruflo@latest mcp start',
365
+ };
366
+ }
367
+ }
368
+ catch {
369
+ // continue to next path
370
+ }
371
+ }
372
+ return {
373
+ name: 'MCP Servers',
374
+ status: 'warn',
375
+ message: 'No MCP config found',
376
+ fix: 'claude mcp add ruflo -- npx -y ruflo@latest mcp start',
377
+ };
378
+ }
379
+ // Check disk space (async with proper env inheritance)
380
+ async function checkDiskSpace() {
381
+ try {
382
+ if (process.platform === 'win32') {
383
+ return { name: 'Disk Space', status: 'pass', message: 'Check skipped on Windows' };
384
+ }
385
+ // Use df -Ph for POSIX mode (guarantees single-line output even with long device names)
386
+ const output_str = await runCommand('df -Ph . | tail -1');
387
+ const parts = output_str.split(/\s+/);
388
+ // POSIX format: Filesystem Size Used Avail Capacity Mounted
389
+ const available = parts[3];
390
+ const usePercent = parseInt(parts[4]?.replace('%', '') || '0', 10);
391
+ if (isNaN(usePercent)) {
392
+ return { name: 'Disk Space', status: 'warn', message: `${available || 'unknown'} available (unable to parse usage)` };
393
+ }
394
+ if (usePercent > 90) {
395
+ return { name: 'Disk Space', status: 'fail', message: `${available} available (${usePercent}% used)`, fix: 'Free up disk space' };
396
+ }
397
+ else if (usePercent > 80) {
398
+ return { name: 'Disk Space', status: 'warn', message: `${available} available (${usePercent}% used)` };
399
+ }
400
+ return { name: 'Disk Space', status: 'pass', message: `${available} available` };
401
+ }
402
+ catch {
403
+ return { name: 'Disk Space', status: 'warn', message: 'Unable to check' };
404
+ }
405
+ }
406
+ // Check TypeScript/build (async with proper env inheritance)
407
+ async function checkBuildTools() {
408
+ try {
409
+ const tscVersion = await runCommand('npx tsc --version', 10000); // tsc can be slow
410
+ if (!tscVersion || tscVersion.includes('not found')) {
411
+ return { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' };
412
+ }
413
+ return { name: 'TypeScript', status: 'pass', message: tscVersion.replace('Version ', 'v') };
414
+ }
415
+ catch {
416
+ return { name: 'TypeScript', status: 'warn', message: 'Not installed locally', fix: 'npm install -D typescript' };
417
+ }
418
+ }
419
+ // Check for stale npx cache (version freshness)
420
+ async function checkVersionFreshness() {
421
+ try {
422
+ // Get current CLI version from package.json
423
+ // Use import.meta.url to reliably locate our own package.json,
424
+ // regardless of how deep the compiled file sits (e.g. dist/src/commands/).
425
+ let currentVersion = '0.0.0';
426
+ try {
427
+ const thisFile = fileURLToPath(import.meta.url);
428
+ let dir = dirname(thisFile);
429
+ // Walk up from the current file's directory until we find the
430
+ // package.json that belongs to @claude-flow/cli (or claude-flow/cli).
431
+ // Walk until dirname(dir) === dir (filesystem root on any platform).
432
+ for (;;) {
433
+ const candidate = join(dir, 'package.json');
434
+ try {
435
+ if (existsSync(candidate)) {
436
+ const pkg = JSON.parse(readFileSync(candidate, 'utf8'));
437
+ if (pkg.version &&
438
+ typeof pkg.name === 'string' &&
439
+ (pkg.name === '@claude-flow/cli' || pkg.name === 'claude-flow' || pkg.name === 'ruflo')) {
440
+ currentVersion = pkg.version;
441
+ break;
442
+ }
443
+ }
444
+ }
445
+ catch {
446
+ // Unreadable/invalid JSON -- skip and keep walking up
447
+ }
448
+ const parent = dirname(dir);
449
+ if (parent === dir)
450
+ break; // reached root
451
+ dir = parent;
452
+ }
453
+ }
454
+ catch {
455
+ // Fall back to a default
456
+ currentVersion = '0.0.0';
457
+ }
458
+ // Check if running via npx (look for _npx in process path or argv)
459
+ const isNpx = process.argv[1]?.includes('_npx') ||
460
+ process.env.npm_execpath?.includes('npx') ||
461
+ process.cwd().includes('_npx');
462
+ // Query npm for latest version (using alpha tag since that's what we publish to)
463
+ let latestVersion = currentVersion;
464
+ try {
465
+ const npmInfo = await runCommand('npm view @claude-flow/cli@alpha version', 5000);
466
+ latestVersion = npmInfo.trim();
467
+ }
468
+ catch {
469
+ // Can't reach npm registry - skip check
470
+ return {
471
+ name: 'Version Freshness',
472
+ status: 'warn',
473
+ message: `v${currentVersion} (cannot check registry)`
474
+ };
475
+ }
476
+ // Parse version numbers for comparison (handle prerelease like 3.0.0-alpha.84)
477
+ const parseVersion = (v) => {
478
+ const match = v.match(/^(\d+)\.(\d+)\.(\d+)(?:-[a-zA-Z]+\.(\d+))?/);
479
+ if (!match)
480
+ return { major: 0, minor: 0, patch: 0, prerelease: 0 };
481
+ return {
482
+ major: parseInt(match[1], 10) || 0,
483
+ minor: parseInt(match[2], 10) || 0,
484
+ patch: parseInt(match[3], 10) || 0,
485
+ prerelease: parseInt(match[4], 10) || 0
486
+ };
487
+ };
488
+ const current = parseVersion(currentVersion);
489
+ const latest = parseVersion(latestVersion);
490
+ // Compare versions (including prerelease number)
491
+ const isOutdated = (latest.major > current.major ||
492
+ (latest.major === current.major && latest.minor > current.minor) ||
493
+ (latest.major === current.major && latest.minor === current.minor && latest.patch > current.patch) ||
494
+ (latest.major === current.major && latest.minor === current.minor && latest.patch === current.patch && latest.prerelease > current.prerelease));
495
+ if (isOutdated) {
496
+ const fix = isNpx
497
+ ? 'rm -rf ~/.npm/_npx/* && npx -y @claude-flow/cli@latest'
498
+ : 'npm update @claude-flow/cli';
499
+ return {
500
+ name: 'Version Freshness',
501
+ status: 'warn',
502
+ message: `v${currentVersion} (latest: v${latestVersion})${isNpx ? ' [npx cache stale]' : ''}`,
503
+ fix
504
+ };
505
+ }
506
+ return {
507
+ name: 'Version Freshness',
508
+ status: 'pass',
509
+ message: `v${currentVersion} (up to date)`
510
+ };
511
+ }
512
+ catch (error) {
513
+ return {
514
+ name: 'Version Freshness',
515
+ status: 'warn',
516
+ message: 'Unable to check version freshness'
517
+ };
518
+ }
519
+ }
520
+ // Check Claude Code CLI (async with proper env inheritance)
521
+ async function checkClaudeCode() {
522
+ try {
523
+ const version = await runCommand('claude --version');
524
+ // Parse version from output like "claude 1.0.0" or "Claude Code v1.0.0"
525
+ const versionMatch = version.match(/v?(\d+\.\d+\.\d+)/);
526
+ const versionStr = versionMatch ? `v${versionMatch[1]}` : version;
527
+ return { name: 'Claude Code CLI', status: 'pass', message: versionStr };
528
+ }
529
+ catch {
530
+ return {
531
+ name: 'Claude Code CLI',
532
+ status: 'warn',
533
+ message: 'Not installed',
534
+ fix: 'npm install -g @anthropic-ai/claude-code'
535
+ };
536
+ }
537
+ }
538
+ // Install Claude Code CLI
539
+ async function installClaudeCode() {
540
+ try {
541
+ output.writeln();
542
+ output.writeln(output.bold('Installing Claude Code CLI...'));
543
+ execSync('npm install -g @anthropic-ai/claude-code', {
544
+ encoding: 'utf8',
545
+ stdio: 'inherit'
546
+ });
547
+ output.writeln(output.success('Claude Code CLI installed successfully!'));
548
+ return true;
549
+ }
550
+ catch (error) {
551
+ output.writeln(output.error('Failed to install Claude Code CLI'));
552
+ if (error instanceof Error) {
553
+ output.writeln(output.dim(error.message));
554
+ }
555
+ return false;
556
+ }
557
+ }
558
+ // Check agentic-flow v3 integration (filesystem-based to avoid slow WASM/DB init)
559
+ async function checkAgenticFlow() {
560
+ try {
561
+ // Walk common node_modules paths to find agentic-flow/package.json
562
+ const candidates = [
563
+ join(process.cwd(), 'node_modules', 'agentic-flow', 'package.json'),
564
+ join(process.cwd(), '..', 'node_modules', 'agentic-flow', 'package.json'),
565
+ ];
566
+ let pkgJsonPath = null;
567
+ for (const p of candidates) {
568
+ if (existsSync(p)) {
569
+ pkgJsonPath = p;
570
+ break;
571
+ }
572
+ }
573
+ if (!pkgJsonPath) {
574
+ return {
575
+ name: 'agentic-flow',
576
+ status: 'warn',
577
+ message: 'Not installed (optional — embeddings/routing will use fallbacks)',
578
+ fix: 'npm install agentic-flow@latest'
579
+ };
580
+ }
581
+ const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
582
+ const version = pkg.version || 'unknown';
583
+ const exports = pkg.exports || {};
584
+ const features = [
585
+ exports['./reasoningbank'] ? 'ReasoningBank' : null,
586
+ exports['./router'] ? 'Router' : null,
587
+ exports['./transport/quic'] ? 'QUIC' : null,
588
+ ].filter(Boolean);
589
+ return {
590
+ name: 'agentic-flow',
591
+ status: 'pass',
592
+ message: `v${version} (${features.join(', ')})`
593
+ };
594
+ }
595
+ catch {
596
+ return { name: 'agentic-flow', status: 'warn', message: 'Check failed' };
597
+ }
598
+ }
599
+ // Check encryption-at-rest status (ADR-096 Phase 5)
600
+ //
601
+ // Reports four facets without disclosing the key itself:
602
+ // 1. Gate status — is CLAUDE_FLOW_ENCRYPT_AT_REST set?
603
+ // 2. Key resolution — does CLAUDE_FLOW_ENCRYPTION_KEY resolve to a valid
604
+ // 32-byte key (env-var path only; keychain/passphrase are deferred)?
605
+ // 3. Key fingerprint — first 16 hex chars of sha256(key) so users can
606
+ // sanity-check across machines without ever logging the key bytes.
607
+ // 4. High-tier store presence — for sessions/, terminals/, .swarm/memory.db
608
+ // report whether on-disk bytes carry the RFE1 magic (encrypted) or not.
609
+ async function checkEncryptionAtRest() {
610
+ if (!isEncryptionEnabled()) {
611
+ return {
612
+ name: 'Encryption at Rest',
613
+ status: 'warn',
614
+ message: 'Off — session/terminal/memory stores are plaintext (mode 0600 only)',
615
+ fix: 'export CLAUDE_FLOW_ENCRYPT_AT_REST=1 && export CLAUDE_FLOW_ENCRYPTION_KEY=<64-char-hex>',
616
+ };
617
+ }
618
+ // Gate is on — try to resolve the key. Fail-closed if missing or malformed.
619
+ const rawKey = process.env.CLAUDE_FLOW_ENCRYPTION_KEY;
620
+ if (!rawKey) {
621
+ return {
622
+ name: 'Encryption at Rest',
623
+ status: 'fail',
624
+ message: 'Gate is on but CLAUDE_FLOW_ENCRYPTION_KEY is unset (fail-closed)',
625
+ fix: 'Generate a key: openssl rand -hex 32 → export CLAUDE_FLOW_ENCRYPTION_KEY=<value>',
626
+ };
627
+ }
628
+ let keyFingerprint;
629
+ try {
630
+ const key = decodeKey(rawKey);
631
+ keyFingerprint = createHash('sha256').update(key).digest('hex').slice(0, 16);
632
+ }
633
+ catch (err) {
634
+ return {
635
+ name: 'Encryption at Rest',
636
+ status: 'fail',
637
+ message: `CLAUDE_FLOW_ENCRYPTION_KEY invalid: ${err instanceof Error ? err.message : String(err)}`,
638
+ fix: 'Provide a 64-char hex or 44-char base64 key (32 bytes)',
639
+ };
640
+ }
641
+ // Check the three high-tier store paths for RFE1 magic
642
+ const cwd = process.cwd();
643
+ const stores = [
644
+ { label: 'sessions/', path: join(cwd, '.claude-flow', 'sessions') },
645
+ { label: 'terminals', path: join(cwd, '.claude-flow', 'terminals', 'store.json') },
646
+ { label: 'memory.db', path: join(cwd, '.swarm', 'memory.db') },
647
+ ];
648
+ const status = [];
649
+ for (const s of stores) {
650
+ if (!existsSync(s.path)) {
651
+ status.push(`${s.label}=∅`);
652
+ continue;
653
+ }
654
+ try {
655
+ const stat = statSync(s.path);
656
+ if (stat.isDirectory()) {
657
+ // Sessions: probe the first .json file
658
+ const { readdirSync } = await import('fs');
659
+ const files = readdirSync(s.path).filter(f => f.endsWith('.json'));
660
+ if (files.length === 0) {
661
+ status.push(`${s.label}=∅`);
662
+ continue;
663
+ }
664
+ const first = readFileSync(join(s.path, files[0]));
665
+ status.push(`${s.label}=${isEncryptedBlob(first) ? 'enc' : 'plain'}`);
666
+ }
667
+ else {
668
+ const buf = readFileSync(s.path);
669
+ status.push(`${s.label}=${isEncryptedBlob(buf) ? 'enc' : 'plain'}`);
670
+ }
671
+ }
672
+ catch {
673
+ status.push(`${s.label}=err`);
674
+ }
675
+ }
676
+ return {
677
+ name: 'Encryption at Rest',
678
+ status: 'pass',
679
+ message: `On — key fp:${keyFingerprint}… (${status.join(' ')})`,
680
+ };
681
+ }
682
+ // Format health check result
683
+ function formatCheck(check) {
684
+ const icon = check.status === 'pass' ? output.success('✓') :
685
+ check.status === 'warn' ? output.warning('⚠') :
686
+ output.error('✗');
687
+ return `${icon} ${check.name}: ${check.message}`;
688
+ }
689
+ // Main doctor command
690
+ export const doctorCommand = {
691
+ name: 'doctor',
692
+ description: 'System diagnostics and health checks',
693
+ options: [
694
+ {
695
+ name: 'fix',
696
+ short: 'f',
697
+ // #1791.5 — flag name was misleading: it does NOT auto-apply fixes,
698
+ // it only prints the suggested commands so the user can run them
699
+ // themselves. Make that explicit in the help output.
700
+ description: 'Print suggested fix commands (does not auto-apply — copy/paste them yourself)',
701
+ type: 'boolean',
702
+ default: false
703
+ },
704
+ {
705
+ name: 'install',
706
+ short: 'i',
707
+ description: 'Auto-install missing dependencies (Claude Code CLI)',
708
+ type: 'boolean',
709
+ default: false
710
+ },
711
+ {
712
+ name: 'component',
713
+ short: 'c',
714
+ description: 'Check specific component (version, node, npm, config, daemon, memory, api, git, mcp, claude, disk, typescript)',
715
+ type: 'string'
716
+ },
717
+ {
718
+ name: 'verbose',
719
+ short: 'v',
720
+ description: 'Verbose output',
721
+ type: 'boolean',
722
+ default: false
723
+ }
724
+ ],
725
+ examples: [
726
+ { command: 'claude-flow doctor', description: 'Run full health check' },
727
+ { command: 'claude-flow doctor --fix', description: 'Print suggested fix commands (does not auto-apply)' },
728
+ { command: 'claude-flow doctor --install', description: 'Auto-install missing dependencies' },
729
+ { command: 'claude-flow doctor -c version', description: 'Check for stale npx cache' },
730
+ { command: 'claude-flow doctor -c claude', description: 'Check Claude Code CLI only' }
731
+ ],
732
+ action: async (ctx) => {
733
+ const showFix = ctx.flags.fix;
734
+ const autoInstall = ctx.flags.install;
735
+ const component = ctx.flags.component;
736
+ const verbose = ctx.flags.verbose;
737
+ output.writeln();
738
+ output.writeln(output.bold('RuFlo Doctor'));
739
+ output.writeln(output.dim('System diagnostics and health check'));
740
+ output.writeln(output.dim('─'.repeat(50)));
741
+ output.writeln();
742
+ const allChecks = [
743
+ checkVersionFreshness,
744
+ checkNodeVersion,
745
+ checkNpmVersion,
746
+ checkClaudeCode,
747
+ checkGit,
748
+ checkGitRepo,
749
+ checkConfigFile,
750
+ checkDaemonStatus,
751
+ checkMemoryDatabase,
752
+ checkApiKeys,
753
+ checkMcpServers,
754
+ checkAIDefence, // #1807
755
+ checkDiskSpace,
756
+ checkBuildTools,
757
+ checkAgenticFlow,
758
+ checkEncryptionAtRest, // ADR-096 Phase 5
759
+ checkFederationBreaker, // ADR-097 Phase 4
760
+ ];
761
+ const componentMap = {
762
+ 'version': checkVersionFreshness,
763
+ 'freshness': checkVersionFreshness,
764
+ 'node': checkNodeVersion,
765
+ 'npm': checkNpmVersion,
766
+ 'claude': checkClaudeCode,
767
+ 'config': checkConfigFile,
768
+ 'daemon': checkDaemonStatus,
769
+ 'memory': checkMemoryDatabase,
770
+ 'api': checkApiKeys,
771
+ 'git': checkGit,
772
+ 'mcp': checkMcpServers,
773
+ 'aidefence': checkAIDefence, // #1807
774
+ 'disk': checkDiskSpace,
775
+ 'typescript': checkBuildTools,
776
+ 'agentic-flow': checkAgenticFlow,
777
+ 'encryption': checkEncryptionAtRest, // ADR-096 Phase 5
778
+ 'federation': checkFederationBreaker, // ADR-097 Phase 4
779
+ };
780
+ let checksToRun = allChecks;
781
+ if (component && componentMap[component]) {
782
+ checksToRun = [componentMap[component]];
783
+ }
784
+ const results = [];
785
+ const fixes = [];
786
+ // OPTIMIZATION: Run all checks in parallel for 3-5x faster execution
787
+ const spinner = output.createSpinner({ text: 'Running health checks in parallel...', spinner: 'dots' });
788
+ spinner.start();
789
+ try {
790
+ // Execute all checks concurrently
791
+ const checkResults = await Promise.allSettled(checksToRun.map(check => check()));
792
+ spinner.stop();
793
+ // Process results in order
794
+ for (const settledResult of checkResults) {
795
+ if (settledResult.status === 'fulfilled') {
796
+ const result = settledResult.value;
797
+ results.push(result);
798
+ output.writeln(formatCheck(result));
799
+ if (result.fix && (result.status === 'fail' || result.status === 'warn')) {
800
+ fixes.push(`${result.name}: ${result.fix}`);
801
+ }
802
+ }
803
+ else {
804
+ const errorResult = {
805
+ name: 'Check',
806
+ status: 'fail',
807
+ message: settledResult.reason?.message || 'Unknown error'
808
+ };
809
+ results.push(errorResult);
810
+ output.writeln(formatCheck(errorResult));
811
+ }
812
+ }
813
+ }
814
+ catch (error) {
815
+ spinner.stop();
816
+ output.writeln(output.error('Failed to run health checks'));
817
+ }
818
+ // Auto-install missing dependencies if requested
819
+ if (autoInstall) {
820
+ const claudeCodeResult = results.find(r => r.name === 'Claude Code CLI');
821
+ if (claudeCodeResult && claudeCodeResult.status !== 'pass') {
822
+ const installed = await installClaudeCode();
823
+ if (installed) {
824
+ // Re-check Claude Code after installation
825
+ const newCheck = await checkClaudeCode();
826
+ const idx = results.findIndex(r => r.name === 'Claude Code CLI');
827
+ if (idx !== -1) {
828
+ results[idx] = newCheck;
829
+ // Update fixes list
830
+ const fixIdx = fixes.findIndex(f => f.startsWith('Claude Code CLI:'));
831
+ if (fixIdx !== -1 && newCheck.status === 'pass') {
832
+ fixes.splice(fixIdx, 1);
833
+ }
834
+ }
835
+ output.writeln(formatCheck(newCheck));
836
+ }
837
+ }
838
+ }
839
+ // Summary
840
+ const passed = results.filter(r => r.status === 'pass').length;
841
+ const warnings = results.filter(r => r.status === 'warn').length;
842
+ const failed = results.filter(r => r.status === 'fail').length;
843
+ output.writeln();
844
+ output.writeln(output.dim('─'.repeat(50)));
845
+ output.writeln();
846
+ const summaryParts = [
847
+ output.success(`${passed} passed`),
848
+ warnings > 0 ? output.warning(`${warnings} warnings`) : null,
849
+ failed > 0 ? output.error(`${failed} failed`) : null
850
+ ].filter(Boolean);
851
+ output.writeln(`Summary: ${summaryParts.join(', ')}`);
852
+ // Show fixes — #1791.5: header makes it explicit these are commands you
853
+ // run yourself, not actions doctor took.
854
+ if (showFix && fixes.length > 0) {
855
+ output.writeln();
856
+ output.writeln(output.bold('Suggested commands (run them yourself):'));
857
+ output.writeln();
858
+ for (const fix of fixes) {
859
+ output.writeln(output.dim(` ${fix}`));
860
+ }
861
+ }
862
+ else if (fixes.length > 0 && !showFix) {
863
+ output.writeln();
864
+ output.writeln(output.dim(`Run with --fix to see ${fixes.length} suggested command${fixes.length > 1 ? 's' : ''} (does not auto-apply)`));
865
+ }
866
+ // Overall result
867
+ if (failed > 0) {
868
+ output.writeln();
869
+ output.writeln(output.error('Some checks failed. Please address the issues above.'));
870
+ return { success: false, exitCode: 1, data: { passed, warnings, failed, results } };
871
+ }
872
+ else if (warnings > 0) {
873
+ output.writeln();
874
+ output.writeln(output.warning('All checks passed with some warnings.'));
875
+ return { success: true, data: { passed, warnings, failed, results } };
876
+ }
877
+ else {
878
+ output.writeln();
879
+ output.writeln(output.success('All checks passed! System is healthy.'));
880
+ return { success: true, data: { passed, warnings, failed, results } };
881
+ }
882
+ }
883
+ };
884
+ export default doctorCommand;
885
+ //# sourceMappingURL=doctor.js.map