@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.
- package/.claude/agents/MIGRATION_SUMMARY.md +222 -0
- package/.claude/agents/analysis/analyze-code-quality.md +58 -0
- package/.claude/agents/analysis/code-analyzer.md +189 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +58 -0
- package/.claude/agents/architecture/arch-system-design.md +157 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +36 -0
- package/.claude/agents/base-template-generator.md +41 -0
- package/.claude/agents/browser/browser-agent.yaml +182 -0
- package/.claude/agents/consensus/byzantine-coordinator.md +43 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +977 -0
- package/.claude/agents/consensus/gossip-coordinator.md +43 -0
- package/.claude/agents/consensus/performance-benchmarker.md +831 -0
- package/.claude/agents/consensus/quorum-manager.md +803 -0
- package/.claude/agents/consensus/raft-manager.md +43 -0
- package/.claude/agents/consensus/security-manager.md +602 -0
- package/.claude/agents/core/coder.md +255 -0
- package/.claude/agents/core/planner.md +152 -0
- package/.claude/agents/core/researcher.md +174 -0
- package/.claude/agents/core/reviewer.md +309 -0
- package/.claude/agents/core/tester.md +300 -0
- package/.claude/agents/custom/test-long-runner.md +43 -0
- package/.claude/agents/data/data-ml-model.md +445 -0
- package/.claude/agents/data/ml/data-ml-model.md +76 -0
- package/.claude/agents/database-specialist.md +9 -0
- package/.claude/agents/development/backend/dev-backend-api.md +29 -0
- package/.claude/agents/development/dev-backend-api.md +178 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +52 -0
- package/.claude/agents/devops/ops-cicd-github.md +165 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +63 -0
- package/.claude/agents/documentation/docs-api-openapi.md +355 -0
- package/.claude/agents/dual-mode/codex-coordinator.md +206 -0
- package/.claude/agents/dual-mode/codex-worker.md +190 -0
- package/.claude/agents/dual-mode/dual-orchestrator.md +253 -0
- package/.claude/agents/flow-nexus/app-store.md +88 -0
- package/.claude/agents/flow-nexus/authentication.md +69 -0
- package/.claude/agents/flow-nexus/challenges.md +81 -0
- package/.claude/agents/flow-nexus/neural-network.md +88 -0
- package/.claude/agents/flow-nexus/payments.md +83 -0
- package/.claude/agents/flow-nexus/sandbox.md +76 -0
- package/.claude/agents/flow-nexus/swarm.md +76 -0
- package/.claude/agents/flow-nexus/user-tools.md +96 -0
- package/.claude/agents/flow-nexus/workflow.md +84 -0
- package/.claude/agents/github/code-review-swarm.md +521 -0
- package/.claude/agents/github/github-modes.md +154 -0
- package/.claude/agents/github/issue-tracker.md +299 -0
- package/.claude/agents/github/multi-repo-swarm.md +525 -0
- package/.claude/agents/github/pr-manager.md +163 -0
- package/.claude/agents/github/project-board-sync.md +478 -0
- package/.claude/agents/github/release-manager.md +336 -0
- package/.claude/agents/github/release-swarm.md +551 -0
- package/.claude/agents/github/repo-architect.md +365 -0
- package/.claude/agents/github/swarm-issue.md +548 -0
- package/.claude/agents/github/swarm-pr.md +399 -0
- package/.claude/agents/github/sync-coordinator.md +423 -0
- package/.claude/agents/github/workflow-automation.md +605 -0
- package/.claude/agents/goal/agent.md +817 -0
- package/.claude/agents/goal/code-goal-planner.md +445 -0
- package/.claude/agents/goal/goal-planner.md +168 -0
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -0
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -0
- package/.claude/agents/hive-mind/scout-explorer.md +241 -0
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -0
- package/.claude/agents/hive-mind/worker-specialist.md +216 -0
- package/.claude/agents/neural/safla-neural.md +74 -0
- package/.claude/agents/optimization/benchmark-suite.md +663 -0
- package/.claude/agents/optimization/load-balancer.md +429 -0
- package/.claude/agents/optimization/performance-monitor.md +670 -0
- package/.claude/agents/optimization/resource-allocator.md +672 -0
- package/.claude/agents/optimization/topology-optimizer.md +806 -0
- package/.claude/agents/payments/agentic-payments.md +126 -0
- package/.claude/agents/project-coordinator.md +8 -0
- package/.claude/agents/python-specialist.md +9 -0
- package/.claude/agents/reasoning/agent.md +817 -0
- package/.claude/agents/reasoning/goal-planner.md +73 -0
- package/.claude/agents/security-auditor.md +9 -0
- package/.claude/agents/sona/sona-learning-optimizer.md +65 -0
- package/.claude/agents/sparc/architecture.md +453 -0
- package/.claude/agents/sparc/pseudocode.md +299 -0
- package/.claude/agents/sparc/refinement.md +504 -0
- package/.claude/agents/sparc/specification.md +258 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +88 -0
- package/.claude/agents/specialized/spec-mobile-react-native.md +227 -0
- package/.claude/agents/sublinear/consensus-coordinator.md +338 -0
- package/.claude/agents/sublinear/matrix-optimizer.md +185 -0
- package/.claude/agents/sublinear/pagerank-analyzer.md +299 -0
- package/.claude/agents/sublinear/performance-optimizer.md +368 -0
- package/.claude/agents/sublinear/trading-predictor.md +246 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +364 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +300 -0
- package/.claude/agents/swarm/mesh-coordinator.md +363 -0
- package/.claude/agents/templates/automation-smart-agent.md +185 -0
- package/.claude/agents/templates/base-template-generator.md +289 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +83 -0
- package/.claude/agents/templates/github-pr-manager.md +155 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +243 -0
- package/.claude/agents/templates/memory-coordinator.md +163 -0
- package/.claude/agents/templates/migration-plan.md +724 -0
- package/.claude/agents/templates/orchestrator-task.md +120 -0
- package/.claude/agents/templates/performance-analyzer.md +179 -0
- package/.claude/agents/templates/sparc-coordinator.md +163 -0
- package/.claude/agents/testing/production-validator.md +373 -0
- package/.claude/agents/testing/tdd-london-swarm.md +222 -0
- package/.claude/agents/testing/unit/tdd-london-swarm.md +222 -0
- package/.claude/agents/testing/validation/production-validator.md +373 -0
- package/.claude/agents/typescript-specialist.md +9 -0
- package/.claude/agents/v3/adr-architect.md +184 -0
- package/.claude/agents/v3/aidefence-guardian.md +282 -0
- package/.claude/agents/v3/claims-authorizer.md +208 -0
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -0
- package/.claude/agents/v3/database-specialist.md +9 -0
- package/.claude/agents/v3/ddd-domain-expert.md +220 -0
- package/.claude/agents/v3/injection-analyst.md +236 -0
- package/.claude/agents/v3/memory-specialist.md +995 -0
- package/.claude/agents/v3/performance-engineer.md +1233 -0
- package/.claude/agents/v3/pii-detector.md +151 -0
- package/.claude/agents/v3/project-coordinator.md +8 -0
- package/.claude/agents/v3/python-specialist.md +9 -0
- package/.claude/agents/v3/reasoningbank-learner.md +213 -0
- package/.claude/agents/v3/security-architect-aidefence.md +410 -0
- package/.claude/agents/v3/security-architect.md +867 -0
- package/.claude/agents/v3/security-auditor.md +771 -0
- package/.claude/agents/v3/sparc-orchestrator.md +182 -0
- package/.claude/agents/v3/swarm-memory-manager.md +157 -0
- package/.claude/agents/v3/test-architect.md +9 -0
- package/.claude/agents/v3/typescript-specialist.md +9 -0
- package/.claude/agents/v3/v3-integration-architect.md +312 -0
- package/.claude/agents/v3/v3-memory-specialist.md +281 -0
- package/.claude/agents/v3/v3-performance-engineer.md +363 -0
- package/.claude/agents/v3/v3-queen-coordinator.md +63 -0
- package/.claude/agents/v3/v3-security-architect.md +140 -0
- package/.claude/checkpoints/1767754460.json +8 -0
- package/.claude/commands/agents/README.md +10 -0
- package/.claude/commands/agents/agent-capabilities.md +21 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +26 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/claude-flow-help.md +103 -0
- package/.claude/commands/claude-flow-memory.md +107 -0
- package/.claude/commands/claude-flow-swarm.md +205 -0
- package/.claude/commands/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/flow-nexus/app-store.md +124 -0
- package/.claude/commands/flow-nexus/challenges.md +120 -0
- package/.claude/commands/flow-nexus/login-registration.md +65 -0
- package/.claude/commands/flow-nexus/neural-network.md +134 -0
- package/.claude/commands/flow-nexus/payments.md +116 -0
- package/.claude/commands/flow-nexus/sandbox.md +83 -0
- package/.claude/commands/flow-nexus/swarm.md +87 -0
- package/.claude/commands/flow-nexus/user-tools.md +152 -0
- package/.claude/commands/flow-nexus/workflow.md +115 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +514 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +338 -0
- package/.claude/commands/github/release-swarm.md +544 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +367 -0
- package/.claude/commands/github/swarm-issue.md +482 -0
- package/.claude/commands/github/swarm-pr.md +285 -0
- package/.claude/commands/github/sync-coordinator.md +301 -0
- package/.claude/commands/github/workflow-automation.md +442 -0
- package/.claude/commands/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +58 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execute.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/ask.md +97 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/code.md +89 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debug.md +83 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/devops.md +109 -0
- package/.claude/commands/sparc/docs-writer.md +80 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/integration.md +83 -0
- package/.claude/commands/sparc/mcp.md +117 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/security-review.md +80 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/sparc.md +111 -0
- package/.claude/commands/sparc/spec-pseudocode.md +80 -0
- package/.claude/commands/sparc/supabase-admin.md +348 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/tutorial.md +79 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/commands/sparc.md +166 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-init.md +19 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-spawn.md +19 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +27 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +74 -0
- package/.claude/commands/training/neural-train.md +25 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/config/v3-dependency-optimization.json +266 -0
- package/.claude/config/v3-performance-targets.json +251 -0
- package/.claude/helpers/README.md +97 -0
- package/.claude/helpers/adr-compliance.sh +186 -0
- package/.claude/helpers/aggressive-microcompact.mjs +36 -0
- package/.claude/helpers/auto-commit.sh +178 -0
- package/.claude/helpers/auto-memory-hook.mjs +564 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/context-persistence-hook.mjs +1979 -0
- package/.claude/helpers/daemon-manager.sh +252 -0
- package/.claude/helpers/ddd-tracker.sh +144 -0
- package/.claude/helpers/github-safe.js +106 -0
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/guidance-hook.sh +13 -0
- package/.claude/helpers/guidance-hooks.sh +102 -0
- package/.claude/helpers/health-monitor.sh +108 -0
- package/.claude/helpers/hook-handler.cjs +269 -0
- package/.claude/helpers/intelligence.cjs +230 -0
- package/.claude/helpers/learning-hooks.sh +329 -0
- package/.claude/helpers/learning-optimizer.sh +127 -0
- package/.claude/helpers/learning-service.mjs +1144 -0
- package/.claude/helpers/memory.cjs +84 -0
- package/.claude/helpers/memory.js +83 -0
- package/.claude/helpers/metrics-db.mjs +488 -0
- package/.claude/helpers/patch-aggressive-prune.mjs +184 -0
- package/.claude/helpers/pattern-consolidator.sh +86 -0
- package/.claude/helpers/perf-worker.sh +160 -0
- package/.claude/helpers/post-commit +16 -0
- package/.claude/helpers/pre-commit +26 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/router.cjs +62 -0
- package/.claude/helpers/router.js +66 -0
- package/.claude/helpers/security-scanner.sh +127 -0
- package/.claude/helpers/session.cjs +125 -0
- package/.claude/helpers/session.js +135 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -0
- package/.claude/helpers/statusline-hook.sh +21 -0
- package/.claude/helpers/statusline.cjs +878 -0
- package/.claude/helpers/statusline.js +352 -0
- package/.claude/helpers/swarm-comms.sh +353 -0
- package/.claude/helpers/swarm-hooks.sh +761 -0
- package/.claude/helpers/swarm-monitor.sh +211 -0
- package/.claude/helpers/sync-v3-metrics.sh +245 -0
- package/.claude/helpers/update-v3-progress.sh +166 -0
- package/.claude/helpers/v3-quick-status.sh +58 -0
- package/.claude/helpers/v3.sh +111 -0
- package/.claude/helpers/validate-v3-config.sh +216 -0
- package/.claude/helpers/worker-manager.sh +170 -0
- package/.claude/mcp.json +13 -0
- package/.claude/scheduled_tasks.lock +1 -0
- package/.claude/settings.json +285 -0
- package/.claude/settings.json.bak +526 -0
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -0
- package/.claude/skills/agentdb-learning/SKILL.md +545 -0
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -0
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -0
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -0
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
- package/.claude/skills/browser/SKILL.md +204 -0
- package/.claude/skills/dual-mode/README.md +71 -0
- package/.claude/skills/dual-mode/dual-collect.md +103 -0
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -0
- package/.claude/skills/dual-mode/dual-spawn.md +81 -0
- package/.claude/skills/flow-nexus-neural/SKILL.md +727 -0
- package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -0
- package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -0
- package/.claude/skills/github-code-review/SKILL.md +1125 -0
- package/.claude/skills/github-multi-repo/SKILL.md +862 -0
- package/.claude/skills/github-project-management/SKILL.md +1263 -0
- package/.claude/skills/github-release-management/SKILL.md +1064 -0
- package/.claude/skills/github-workflow-automation/SKILL.md +1047 -0
- package/.claude/skills/hive-mind-advanced/SKILL.md +709 -0
- package/.claude/skills/hooks-automation/SKILL.md +1201 -0
- package/.claude/skills/pair-programming/SKILL.md +1202 -0
- package/.claude/skills/performance-analysis/SKILL.md +560 -0
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -0
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -0
- package/.claude/skills/skill-builder/SKILL.md +910 -0
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -0
- package/.claude/skills/stream-chain/SKILL.md +560 -0
- package/.claude/skills/swarm-advanced/SKILL.md +970 -0
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -0
- package/.claude/skills/v3-cli-modernization/SKILL.md +872 -0
- package/.claude/skills/v3-core-implementation/SKILL.md +797 -0
- package/.claude/skills/v3-ddd-architecture/SKILL.md +442 -0
- package/.claude/skills/v3-integration-deep/SKILL.md +241 -0
- package/.claude/skills/v3-mcp-optimization/SKILL.md +777 -0
- package/.claude/skills/v3-memory-unification/SKILL.md +174 -0
- package/.claude/skills/v3-performance-optimization/SKILL.md +390 -0
- package/.claude/skills/v3-security-overhaul/SKILL.md +82 -0
- package/.claude/skills/v3-swarm-coordination/SKILL.md +340 -0
- package/.claude/skills/verification-quality/SKILL.md +691 -0
- package/.claude/skills/worker-benchmarks/SKILL.md +129 -0
- package/.claude/skills/worker-integration/SKILL.md +147 -0
- package/.claude/statusline-command.sh +176 -0
- package/.claude/statusline.mjs +109 -0
- package/.claude/statusline.sh +431 -0
- package/.claude-plugin/README.md +720 -0
- package/.claude-plugin/docs/INSTALLATION.md +261 -0
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -0
- package/.claude-plugin/docs/QUICKSTART.md +361 -0
- package/.claude-plugin/docs/STRUCTURE.md +128 -0
- package/.claude-plugin/hooks/hooks.json +75 -0
- package/.claude-plugin/marketplace.json +170 -0
- package/.claude-plugin/plugin.json +71 -0
- package/.claude-plugin/scripts/install.sh +234 -0
- package/.claude-plugin/scripts/ruflo-hook.sh +33 -0
- package/.claude-plugin/scripts/uninstall.sh +36 -0
- package/.claude-plugin/scripts/verify.sh +108 -0
- package/LICENSE +21 -0
- package/README.md +410 -0
- package/bin/cli.js +11 -0
- package/bin/npx-repair.js +7 -0
- package/bin/npx-safe-launch.js +9 -0
- package/package.json +159 -0
- package/v3/@claude-flow/cli/README.md +410 -0
- package/v3/@claude-flow/cli/bin/cli.js +233 -0
- package/v3/@claude-flow/cli/bin/mcp-server.js +224 -0
- package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -0
- package/v3/@claude-flow/cli/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/v3/@claude-flow/cli/dist/src/appliance/gguf-engine.js +425 -0
- package/v3/@claude-flow/cli/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/v3/@claude-flow/cli/dist/src/appliance/ruvllm-bridge.js +292 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-builder.js +329 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-distribution.js +370 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-format.js +393 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-runner.js +237 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/v3/@claude-flow/cli/dist/src/appliance/rvfa-signing.js +347 -0
- package/v3/@claude-flow/cli/dist/src/autopilot-state.d.ts +77 -0
- package/v3/@claude-flow/cli/dist/src/autopilot-state.js +271 -0
- package/v3/@claude-flow/cli/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/v3/@claude-flow/cli/dist/src/benchmarks/pretrain/index.js +404 -0
- package/v3/@claude-flow/cli/dist/src/commands/agent-wasm.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/commands/agent-wasm.js +333 -0
- package/v3/@claude-flow/cli/dist/src/commands/agent.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/agent.js +927 -0
- package/v3/@claude-flow/cli/dist/src/commands/analyze.d.ts +19 -0
- package/v3/@claude-flow/cli/dist/src/commands/analyze.js +2048 -0
- package/v3/@claude-flow/cli/dist/src/commands/appliance-advanced.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/commands/appliance-advanced.js +215 -0
- package/v3/@claude-flow/cli/dist/src/commands/appliance.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/appliance.js +404 -0
- package/v3/@claude-flow/cli/dist/src/commands/autopilot.d.ts +15 -0
- package/v3/@claude-flow/cli/dist/src/commands/autopilot.js +362 -0
- package/v3/@claude-flow/cli/dist/src/commands/benchmark.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/benchmark.js +460 -0
- package/v3/@claude-flow/cli/dist/src/commands/claims.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/claims.js +620 -0
- package/v3/@claude-flow/cli/dist/src/commands/cleanup.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/commands/cleanup.js +250 -0
- package/v3/@claude-flow/cli/dist/src/commands/completions.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/completions.js +539 -0
- package/v3/@claude-flow/cli/dist/src/commands/config.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/config.js +430 -0
- package/v3/@claude-flow/cli/dist/src/commands/daemon.d.ts +28 -0
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +1093 -0
- package/v3/@claude-flow/cli/dist/src/commands/deployment.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/deployment.js +672 -0
- package/v3/@claude-flow/cli/dist/src/commands/doctor.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/doctor.js +885 -0
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.d.ts +18 -0
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +1623 -0
- package/v3/@claude-flow/cli/dist/src/commands/guidance.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/guidance.js +556 -0
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +1297 -0
- package/v3/@claude-flow/cli/dist/src/commands/hooks.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +4499 -0
- package/v3/@claude-flow/cli/dist/src/commands/index.d.ts +118 -0
- package/v3/@claude-flow/cli/dist/src/commands/index.js +344 -0
- package/v3/@claude-flow/cli/dist/src/commands/init.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/init.js +997 -0
- package/v3/@claude-flow/cli/dist/src/commands/issues.d.ts +21 -0
- package/v3/@claude-flow/cli/dist/src/commands/issues.js +567 -0
- package/v3/@claude-flow/cli/dist/src/commands/mcp.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/mcp.js +718 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +1456 -0
- package/v3/@claude-flow/cli/dist/src/commands/migrate.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/migrate.js +742 -0
- package/v3/@claude-flow/cli/dist/src/commands/neural.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/neural.js +1531 -0
- package/v3/@claude-flow/cli/dist/src/commands/performance.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/performance.js +583 -0
- package/v3/@claude-flow/cli/dist/src/commands/plugins.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/plugins.js +826 -0
- package/v3/@claude-flow/cli/dist/src/commands/process.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/process.js +694 -0
- package/v3/@claude-flow/cli/dist/src/commands/progress.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/progress.js +259 -0
- package/v3/@claude-flow/cli/dist/src/commands/providers.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/providers.js +502 -0
- package/v3/@claude-flow/cli/dist/src/commands/route.d.ts +16 -0
- package/v3/@claude-flow/cli/dist/src/commands/route.js +813 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +747 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +490 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.d.ts +18 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +373 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.d.ts +29 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.js +129 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +467 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +498 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +505 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/pg-utils.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/pg-utils.js +41 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.d.ts +18 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +765 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.d.ts +11 -0
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +479 -0
- package/v3/@claude-flow/cli/dist/src/commands/security.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/commands/security.js +920 -0
- package/v3/@claude-flow/cli/dist/src/commands/session.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/session.js +757 -0
- package/v3/@claude-flow/cli/dist/src/commands/start.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/start.js +418 -0
- package/v3/@claude-flow/cli/dist/src/commands/status.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/status.js +591 -0
- package/v3/@claude-flow/cli/dist/src/commands/swarm.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/swarm.js +887 -0
- package/v3/@claude-flow/cli/dist/src/commands/task.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/task.js +675 -0
- package/v3/@claude-flow/cli/dist/src/commands/transfer-store.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/commands/transfer-store.js +428 -0
- package/v3/@claude-flow/cli/dist/src/commands/update.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/update.js +276 -0
- package/v3/@claude-flow/cli/dist/src/commands/verify.d.ts +19 -0
- package/v3/@claude-flow/cli/dist/src/commands/verify.js +261 -0
- package/v3/@claude-flow/cli/dist/src/commands/workflow.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/commands/workflow.js +617 -0
- package/v3/@claude-flow/cli/dist/src/config-adapter.d.ts +15 -0
- package/v3/@claude-flow/cli/dist/src/config-adapter.js +186 -0
- package/v3/@claude-flow/cli/dist/src/encryption/vault.d.ts +94 -0
- package/v3/@claude-flow/cli/dist/src/encryption/vault.js +172 -0
- package/v3/@claude-flow/cli/dist/src/fs-secure.d.ts +67 -0
- package/v3/@claude-flow/cli/dist/src/fs-secure.js +74 -0
- package/v3/@claude-flow/cli/dist/src/index.d.ts +81 -0
- package/v3/@claude-flow/cli/dist/src/index.js +538 -0
- package/v3/@claude-flow/cli/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/v3/@claude-flow/cli/dist/src/infrastructure/in-memory-repositories.js +264 -0
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.d.ts +16 -0
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +363 -0
- package/v3/@claude-flow/cli/dist/src/init/executor.d.ts +41 -0
- package/v3/@claude-flow/cli/dist/src/init/executor.js +1904 -0
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.d.ts +60 -0
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +1185 -0
- package/v3/@claude-flow/cli/dist/src/init/index.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/init/index.js +15 -0
- package/v3/@claude-flow/cli/dist/src/init/mcp-generator.d.ts +26 -0
- package/v3/@claude-flow/cli/dist/src/init/mcp-generator.js +116 -0
- package/v3/@claude-flow/cli/dist/src/init/settings-generator.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +456 -0
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.d.ts +28 -0
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +937 -0
- package/v3/@claude-flow/cli/dist/src/init/types.d.ts +308 -0
- package/v3/@claude-flow/cli/dist/src/init/types.js +263 -0
- package/v3/@claude-flow/cli/dist/src/log-filters.d.ts +22 -0
- package/v3/@claude-flow/cli/dist/src/log-filters.js +36 -0
- package/v3/@claude-flow/cli/dist/src/mcp-client.d.ts +92 -0
- package/v3/@claude-flow/cli/dist/src/mcp-client.js +287 -0
- package/v3/@claude-flow/cli/dist/src/mcp-server.d.ts +163 -0
- package/v3/@claude-flow/cli/dist/src/mcp-server.js +732 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-execute-core.d.ts +92 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-execute-core.js +328 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agent-tools.js +716 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.d.ts +33 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +867 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/analyze-tools.js +346 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/auto-install.js +131 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/autopilot-tools.js +231 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-session-tools.d.ts +23 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-session-tools.js +324 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +757 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/claims-tools.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/claims-tools.js +863 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/config-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/config-tools.js +411 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/coordination-tools.js +729 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/daa-tools.js +534 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/embeddings-tools.js +904 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/github-tools.js +659 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/guidance-tools.js +639 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hive-mind-tools.js +953 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.d.ts +46 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +3939 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/index.d.ts +27 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/index.js +26 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/managed-agent-tools.js +357 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +1240 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.d.ts +16 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/neural-tools.js +793 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/performance-tools.d.ts +16 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/performance-tools.js +675 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/progress-tools.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/progress-tools.js +348 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/request-tracker.d.ts +17 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/request-tracker.js +27 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/ruvllm-tools.js +339 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.d.ts +18 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.js +556 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/session-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/session-tools.js +517 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/swarm-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/swarm-tools.js +388 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.js +674 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/task-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/task-tools.js +487 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/terminal-tools.js +306 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/transfer-tools.js +447 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/types.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/types.js +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/validate-input.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/validate-input.js +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/wasm-agent-tools.js +291 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/workflow-tools.js +884 -0
- package/v3/@claude-flow/cli/dist/src/memory/ewc-consolidation.d.ts +295 -0
- package/v3/@claude-flow/cli/dist/src/memory/ewc-consolidation.js +601 -0
- package/v3/@claude-flow/cli/dist/src/memory/intelligence.d.ts +357 -0
- package/v3/@claude-flow/cli/dist/src/memory/intelligence.js +1200 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +492 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +2101 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +420 -0
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +2376 -0
- package/v3/@claude-flow/cli/dist/src/memory/neural-package-bridge.d.ts +48 -0
- package/v3/@claude-flow/cli/dist/src/memory/neural-package-bridge.js +87 -0
- package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.d.ts +60 -0
- package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +242 -0
- package/v3/@claude-flow/cli/dist/src/memory/sona-optimizer.d.ts +267 -0
- package/v3/@claude-flow/cli/dist/src/memory/sona-optimizer.js +779 -0
- package/v3/@claude-flow/cli/dist/src/output.d.ts +9 -0
- package/v3/@claude-flow/cli/dist/src/output.js +9 -0
- package/v3/@claude-flow/cli/dist/src/parser.d.ts +69 -0
- package/v3/@claude-flow/cli/dist/src/parser.js +473 -0
- package/v3/@claude-flow/cli/dist/src/plugins/manager.d.ts +133 -0
- package/v3/@claude-flow/cli/dist/src/plugins/manager.js +402 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/discovery.d.ts +91 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/discovery.js +1202 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/index.d.ts +76 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/index.js +141 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/search.d.ts +46 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/search.js +230 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/types.d.ts +274 -0
- package/v3/@claude-flow/cli/dist/src/plugins/store/types.js +7 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/standalone-test.js +188 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/v3/@claude-flow/cli/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/v3/@claude-flow/cli/dist/src/production/circuit-breaker.d.ts +101 -0
- package/v3/@claude-flow/cli/dist/src/production/circuit-breaker.js +241 -0
- package/v3/@claude-flow/cli/dist/src/production/error-handler.d.ts +92 -0
- package/v3/@claude-flow/cli/dist/src/production/error-handler.js +299 -0
- package/v3/@claude-flow/cli/dist/src/production/index.d.ts +23 -0
- package/v3/@claude-flow/cli/dist/src/production/index.js +18 -0
- package/v3/@claude-flow/cli/dist/src/production/monitoring.d.ts +161 -0
- package/v3/@claude-flow/cli/dist/src/production/monitoring.js +356 -0
- package/v3/@claude-flow/cli/dist/src/production/rate-limiter.d.ts +80 -0
- package/v3/@claude-flow/cli/dist/src/production/rate-limiter.js +201 -0
- package/v3/@claude-flow/cli/dist/src/production/retry.d.ts +48 -0
- package/v3/@claude-flow/cli/dist/src/production/retry.js +179 -0
- package/v3/@claude-flow/cli/dist/src/prompt.d.ts +44 -0
- package/v3/@claude-flow/cli/dist/src/prompt.js +501 -0
- package/v3/@claude-flow/cli/dist/src/runtime/headless.d.ts +60 -0
- package/v3/@claude-flow/cli/dist/src/runtime/headless.js +284 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/agent-wasm.d.ts +193 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/agent-wasm.js +354 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/ast-analyzer.js +277 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/coverage-router.js +531 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/coverage-tools.js +157 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/diff-classifier.js +699 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.d.ts +78 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.js +310 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/enhanced-model-router.js +529 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/graph-analyzer.js +929 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/graph-backend.d.ts +79 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/graph-backend.js +220 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/index.d.ts +38 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/index.js +82 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/lora-adapter.d.ts +240 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/lora-adapter.js +550 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/model-router.d.ts +241 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/model-router.js +608 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/q-learning-router.js +681 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/ruvllm-wasm.js +367 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/semantic-router.js +178 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.d.ts +73 -0
- package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.js +264 -0
- package/v3/@claude-flow/cli/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/v3/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +95 -0
- package/v3/@claude-flow/cli/dist/src/services/claim-service.d.ts +204 -0
- package/v3/@claude-flow/cli/dist/src/services/claim-service.js +818 -0
- package/v3/@claude-flow/cli/dist/src/services/config-file-manager.d.ts +37 -0
- package/v3/@claude-flow/cli/dist/src/services/config-file-manager.js +233 -0
- package/v3/@claude-flow/cli/dist/src/services/container-worker-pool.d.ts +197 -0
- package/v3/@claude-flow/cli/dist/src/services/container-worker-pool.js +583 -0
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.d.ts +310 -0
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +1058 -0
- package/v3/@claude-flow/cli/dist/src/services/index.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/services/index.js +11 -0
- package/v3/@claude-flow/cli/dist/src/services/registry-api.d.ts +58 -0
- package/v3/@claude-flow/cli/dist/src/services/registry-api.js +146 -0
- package/v3/@claude-flow/cli/dist/src/services/ruvector-training.d.ts +222 -0
- package/v3/@claude-flow/cli/dist/src/services/ruvector-training.js +688 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +323 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +1323 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-queue.d.ts +194 -0
- package/v3/@claude-flow/cli/dist/src/services/worker-queue.js +513 -0
- package/v3/@claude-flow/cli/dist/src/suggest.d.ts +53 -0
- package/v3/@claude-flow/cli/dist/src/suggest.js +200 -0
- package/v3/@claude-flow/cli/dist/src/transfer/anonymization/index.d.ts +25 -0
- package/v3/@claude-flow/cli/dist/src/transfer/anonymization/index.js +175 -0
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +205 -0
- package/v3/@claude-flow/cli/dist/src/transfer/export.d.ts +25 -0
- package/v3/@claude-flow/cli/dist/src/transfer/export.js +113 -0
- package/v3/@claude-flow/cli/dist/src/transfer/index.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/transfer/index.js +31 -0
- package/v3/@claude-flow/cli/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/v3/@claude-flow/cli/dist/src/transfer/ipfs/client.js +307 -0
- package/v3/@claude-flow/cli/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/v3/@claude-flow/cli/dist/src/transfer/ipfs/upload.js +413 -0
- package/v3/@claude-flow/cli/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/v3/@claude-flow/cli/dist/src/transfer/models/seraphine.js +373 -0
- package/v3/@claude-flow/cli/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/v3/@claude-flow/cli/dist/src/transfer/serialization/cfp.js +183 -0
- package/v3/@claude-flow/cli/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/v3/@claude-flow/cli/dist/src/transfer/storage/gcs.js +272 -0
- package/v3/@claude-flow/cli/dist/src/transfer/storage/index.d.ts +6 -0
- package/v3/@claude-flow/cli/dist/src/transfer/storage/index.js +6 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/discovery.d.ts +84 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/discovery.js +382 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/download.d.ts +70 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/download.js +334 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/index.d.ts +84 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/index.js +153 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/publish.d.ts +76 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/publish.js +294 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/registry.d.ts +58 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/registry.js +285 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/search.d.ts +54 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/search.js +232 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/types.d.ts +193 -0
- package/v3/@claude-flow/cli/dist/src/transfer/store/types.js +6 -0
- package/v3/@claude-flow/cli/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/v3/@claude-flow/cli/dist/src/transfer/test-seraphine.js +105 -0
- package/v3/@claude-flow/cli/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/v3/@claude-flow/cli/dist/src/transfer/tests/test-store.js +214 -0
- package/v3/@claude-flow/cli/dist/src/transfer/types.d.ts +245 -0
- package/v3/@claude-flow/cli/dist/src/transfer/types.js +6 -0
- package/v3/@claude-flow/cli/dist/src/types.d.ts +13 -0
- package/v3/@claude-flow/cli/dist/src/types.js +13 -0
- package/v3/@claude-flow/cli/dist/src/update/checker.d.ts +34 -0
- package/v3/@claude-flow/cli/dist/src/update/checker.js +191 -0
- package/v3/@claude-flow/cli/dist/src/update/executor.d.ts +33 -0
- package/v3/@claude-flow/cli/dist/src/update/executor.js +217 -0
- package/v3/@claude-flow/cli/dist/src/update/index.d.ts +33 -0
- package/v3/@claude-flow/cli/dist/src/update/index.js +64 -0
- package/v3/@claude-flow/cli/dist/src/update/rate-limiter.d.ts +20 -0
- package/v3/@claude-flow/cli/dist/src/update/rate-limiter.js +96 -0
- package/v3/@claude-flow/cli/dist/src/update/validator.d.ts +17 -0
- package/v3/@claude-flow/cli/dist/src/update/validator.js +123 -0
- package/v3/@claude-flow/cli/package.json +133 -0
- package/v3/@claude-flow/guidance/README.md +1195 -0
- package/v3/@claude-flow/guidance/package.json +198 -0
- package/v3/@claude-flow/shared/README.md +323 -0
- package/v3/@claude-flow/shared/package.json +43 -0
- 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
|