claude-flow 3.32.9 → 3.32.10
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/.proven-config-version +1 -0
- package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
- package/.claude/agents/analysis/analyze-code-quality.md +57 -57
- package/.claude/agents/analysis/code-analyzer.md +188 -188
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +57 -57
- package/.claude/agents/architecture/system-design/arch-system-design.md +35 -35
- package/.claude/agents/base-template-generator.md +41 -41
- package/.claude/agents/consensus/byzantine-coordinator.md +42 -42
- package/.claude/agents/consensus/crdt-synchronizer.md +976 -976
- package/.claude/agents/consensus/gossip-coordinator.md +42 -42
- package/.claude/agents/consensus/performance-benchmarker.md +830 -830
- package/.claude/agents/consensus/quorum-manager.md +802 -802
- package/.claude/agents/consensus/raft-manager.md +42 -42
- package/.claude/agents/consensus/security-manager.md +601 -601
- package/.claude/agents/core/coder.md +254 -254
- package/.claude/agents/core/planner.md +151 -151
- package/.claude/agents/core/researcher.md +173 -173
- package/.claude/agents/core/reviewer.md +308 -308
- package/.claude/agents/core/tester.md +299 -299
- package/.claude/agents/custom/test-long-runner.md +43 -43
- package/.claude/agents/data/ml/data-ml-model.md +75 -75
- package/.claude/agents/database-specialist.md +9 -9
- package/.claude/agents/development/backend/dev-backend-api.md +28 -28
- package/.claude/agents/development/dev-backend-api.md +177 -177
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +51 -51
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +62 -62
- package/.claude/agents/dual-mode/codex-coordinator.md +206 -206
- package/.claude/agents/dual-mode/codex-worker.md +190 -190
- package/.claude/agents/dual-mode/dual-orchestrator.md +253 -253
- package/.claude/agents/flow-nexus/app-store.md +87 -87
- package/.claude/agents/flow-nexus/authentication.md +68 -68
- package/.claude/agents/flow-nexus/challenges.md +80 -80
- package/.claude/agents/flow-nexus/neural-network.md +87 -87
- package/.claude/agents/flow-nexus/payments.md +82 -82
- package/.claude/agents/flow-nexus/sandbox.md +75 -75
- package/.claude/agents/flow-nexus/swarm.md +75 -75
- package/.claude/agents/flow-nexus/user-tools.md +95 -95
- package/.claude/agents/flow-nexus/workflow.md +83 -83
- package/.claude/agents/github/code-review-swarm.md +520 -520
- package/.claude/agents/github/github-modes.md +153 -153
- package/.claude/agents/github/issue-tracker.md +298 -298
- package/.claude/agents/github/multi-repo-swarm.md +524 -524
- package/.claude/agents/github/pr-manager.md +162 -162
- package/.claude/agents/github/project-board-sync.md +477 -477
- package/.claude/agents/github/release-manager.md +337 -337
- package/.claude/agents/github/release-swarm.md +550 -550
- package/.claude/agents/github/repo-architect.md +364 -364
- package/.claude/agents/github/swarm-issue.md +550 -550
- package/.claude/agents/github/swarm-pr.md +401 -401
- package/.claude/agents/github/sync-coordinator.md +424 -424
- package/.claude/agents/github/workflow-automation.md +604 -604
- package/.claude/agents/goal/agent.md +816 -816
- package/.claude/agents/goal/code-goal-planner.md +444 -444
- package/.claude/agents/goal/goal-planner.md +167 -167
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +128 -128
- package/.claude/agents/hive-mind/queen-coordinator.md +201 -201
- package/.claude/agents/hive-mind/scout-explorer.md +240 -240
- package/.claude/agents/hive-mind/swarm-memory-manager.md +191 -191
- package/.claude/agents/hive-mind/worker-specialist.md +215 -215
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/optimization/benchmark-suite.md +662 -662
- package/.claude/agents/optimization/load-balancer.md +428 -428
- package/.claude/agents/optimization/performance-monitor.md +669 -669
- package/.claude/agents/optimization/resource-allocator.md +671 -671
- package/.claude/agents/optimization/topology-optimizer.md +805 -805
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/project-coordinator.md +8 -8
- package/.claude/agents/python-specialist.md +9 -9
- package/.claude/agents/reasoning/agent.md +816 -816
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.md +9 -9
- package/.claude/agents/sona/sona-learning-optimizer.md +65 -65
- package/.claude/agents/sparc/architecture.md +452 -452
- package/.claude/agents/sparc/pseudocode.md +298 -298
- package/.claude/agents/sparc/refinement.md +503 -503
- package/.claude/agents/sparc/specification.md +257 -257
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +87 -87
- package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
- package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
- package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
- package/.claude/agents/sublinear/performance-optimizer.md +367 -367
- package/.claude/agents/sublinear/trading-predictor.md +245 -245
- package/.claude/agents/swarm/adaptive-coordinator.md +363 -363
- package/.claude/agents/swarm/hierarchical-coordinator.md +299 -299
- package/.claude/agents/swarm/mesh-coordinator.md +362 -362
- package/.claude/agents/templates/automation-smart-agent.md +184 -184
- package/.claude/agents/templates/coordinator-swarm-init.md +82 -82
- package/.claude/agents/templates/github-pr-manager.md +154 -154
- package/.claude/agents/templates/implementer-sparc-coder.md +242 -242
- package/.claude/agents/templates/memory-coordinator.md +162 -162
- package/.claude/agents/templates/migration-plan.md +723 -723
- package/.claude/agents/templates/orchestrator-task.md +119 -119
- package/.claude/agents/templates/performance-analyzer.md +178 -178
- package/.claude/agents/templates/sparc-coordinator.md +162 -162
- package/.claude/agents/testing/production-validator.md +372 -372
- package/.claude/agents/testing/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/unit/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/validation/production-validator.md +372 -372
- package/.claude/agents/typescript-specialist.md +9 -9
- package/.claude/agents/v3/database-specialist.md +9 -9
- package/.claude/agents/v3/project-coordinator.md +8 -8
- package/.claude/agents/v3/python-specialist.md +9 -9
- package/.claude/agents/v3/test-architect.md +9 -9
- package/.claude/agents/v3/typescript-specialist.md +9 -9
- package/.claude/agents/v3/v3-integration-architect.md +311 -311
- package/.claude/agents/v3/v3-memory-specialist.md +280 -280
- package/.claude/agents/v3/v3-performance-engineer.md +362 -362
- package/.claude/agents/v3/v3-queen-coordinator.md +62 -62
- package/.claude/agents/v3/v3-security-architect.md +139 -139
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/README.md +10 -10
- package/.claude/commands/agents/agent-capabilities.md +21 -21
- package/.claude/commands/agents/agent-coordination.md +28 -28
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/agents/agent-types.md +26 -26
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
- package/.claude/commands/analysis/README.md +9 -9
- package/.claude/commands/analysis/bottleneck-detect.md +162 -162
- package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
- package/.claude/commands/analysis/performance-report.md +25 -25
- package/.claude/commands/analysis/token-efficiency.md +44 -44
- package/.claude/commands/analysis/token-usage.md +25 -25
- package/.claude/commands/automation/README.md +9 -9
- package/.claude/commands/automation/auto-agent.md +122 -122
- package/.claude/commands/automation/self-healing.md +105 -105
- package/.claude/commands/automation/session-memory.md +89 -89
- package/.claude/commands/automation/smart-agents.md +72 -72
- package/.claude/commands/automation/smart-spawn.md +25 -25
- package/.claude/commands/automation/workflow-select.md +25 -25
- package/.claude/commands/claude-flow-help.md +103 -103
- package/.claude/commands/claude-flow-memory.md +107 -107
- package/.claude/commands/claude-flow-swarm.md +205 -205
- package/.claude/commands/coordination/README.md +9 -9
- package/.claude/commands/coordination/agent-spawn.md +25 -25
- package/.claude/commands/coordination/init.md +44 -44
- package/.claude/commands/coordination/orchestrate.md +43 -43
- package/.claude/commands/coordination/spawn.md +45 -45
- package/.claude/commands/coordination/swarm-init.md +85 -85
- package/.claude/commands/coordination/task-orchestrate.md +25 -25
- package/.claude/commands/flow-nexus/app-store.md +123 -123
- package/.claude/commands/flow-nexus/challenges.md +119 -119
- package/.claude/commands/flow-nexus/login-registration.md +64 -64
- package/.claude/commands/flow-nexus/neural-network.md +133 -133
- package/.claude/commands/flow-nexus/payments.md +115 -115
- package/.claude/commands/flow-nexus/sandbox.md +82 -82
- package/.claude/commands/flow-nexus/swarm.md +86 -86
- package/.claude/commands/flow-nexus/user-tools.md +151 -151
- package/.claude/commands/flow-nexus/workflow.md +114 -114
- package/.claude/commands/github/README.md +11 -11
- package/.claude/commands/github/code-review-swarm.md +513 -513
- package/.claude/commands/github/code-review.md +25 -25
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/issue-triage.md +25 -25
- package/.claude/commands/github/multi-repo-swarm.md +518 -518
- package/.claude/commands/github/pr-enhance.md +26 -26
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/project-board-sync.md +470 -470
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/release-swarm.md +543 -543
- package/.claude/commands/github/repo-analyze.md +25 -25
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/swarm-issue.md +481 -481
- package/.claude/commands/github/swarm-pr.md +284 -284
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/github/workflow-automation.md +441 -441
- package/.claude/commands/hive-mind/README.md +17 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
- package/.claude/commands/hive-mind/hive-mind.md +27 -27
- package/.claude/commands/hooks/README.md +11 -11
- package/.claude/commands/hooks/overview.md +57 -57
- package/.claude/commands/hooks/post-edit.md +117 -117
- package/.claude/commands/hooks/post-task.md +112 -112
- package/.claude/commands/hooks/pre-edit.md +113 -113
- package/.claude/commands/hooks/pre-task.md +111 -111
- package/.claude/commands/hooks/session-end.md +118 -118
- package/.claude/commands/hooks/setup.md +102 -102
- package/.claude/commands/memory/README.md +9 -9
- package/.claude/commands/memory/memory-persist.md +25 -25
- package/.claude/commands/memory/memory-search.md +25 -25
- package/.claude/commands/memory/memory-usage.md +25 -25
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/monitoring/README.md +9 -9
- package/.claude/commands/monitoring/agent-metrics.md +25 -25
- package/.claude/commands/monitoring/agents.md +44 -44
- package/.claude/commands/monitoring/real-time-view.md +25 -25
- package/.claude/commands/monitoring/status.md +46 -46
- package/.claude/commands/monitoring/swarm-monitor.md +25 -25
- package/.claude/commands/optimization/README.md +9 -9
- package/.claude/commands/optimization/auto-topology.md +61 -61
- package/.claude/commands/optimization/cache-manage.md +25 -25
- package/.claude/commands/optimization/parallel-execute.md +25 -25
- package/.claude/commands/optimization/parallel-execution.md +49 -49
- package/.claude/commands/optimization/topology-optimize.md +25 -25
- package/.claude/commands/pair/README.md +260 -260
- package/.claude/commands/pair/commands.md +545 -545
- package/.claude/commands/pair/config.md +509 -509
- package/.claude/commands/pair/examples.md +511 -511
- package/.claude/commands/pair/modes.md +347 -347
- package/.claude/commands/pair/session.md +406 -406
- package/.claude/commands/pair/start.md +208 -208
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/stream-chain/pipeline.md +120 -120
- package/.claude/commands/stream-chain/run.md +69 -69
- package/.claude/commands/swarm/README.md +15 -15
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/swarm-analysis.md +8 -8
- package/.claude/commands/swarm/swarm-background.md +8 -8
- package/.claude/commands/swarm/swarm-init.md +19 -19
- package/.claude/commands/swarm/swarm-modes.md +8 -8
- package/.claude/commands/swarm/swarm-monitor.md +8 -8
- package/.claude/commands/swarm/swarm-spawn.md +19 -19
- package/.claude/commands/swarm/swarm-status.md +8 -8
- package/.claude/commands/swarm/swarm-strategies.md +8 -8
- package/.claude/commands/swarm/swarm.md +27 -27
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/training/README.md +9 -9
- package/.claude/commands/training/model-update.md +25 -25
- package/.claude/commands/training/neural-patterns.md +73 -73
- package/.claude/commands/training/neural-train.md +25 -25
- package/.claude/commands/training/pattern-learn.md +25 -25
- package/.claude/commands/training/specialization.md +62 -62
- package/.claude/commands/truth/start.md +142 -142
- package/.claude/commands/verify/check.md +49 -49
- package/.claude/commands/verify/start.md +127 -127
- package/.claude/commands/workflows/README.md +9 -9
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/commands/workflows/workflow-create.md +25 -25
- package/.claude/commands/workflows/workflow-execute.md +25 -25
- package/.claude/commands/workflows/workflow-export.md +25 -25
- package/.claude/config/v3-dependency-optimization.json +265 -265
- package/.claude/config/v3-performance-targets.json +250 -250
- package/.claude/helpers/.LOCKED +2 -2
- package/.claude/helpers/.helpers-version +1 -0
- package/.claude/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- package/.claude/helpers/aggressive-microcompact.mjs +36 -36
- package/.claude/helpers/auto-commit.sh +178 -178
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/checkpoint-manager.sh +251 -251
- package/.claude/helpers/context-persistence-hook.mjs +2001 -2001
- package/.claude/helpers/daemon-manager.sh +252 -252
- package/.claude/helpers/ddd-tracker.sh +144 -144
- package/.claude/helpers/github-safe.js +156 -156
- package/.claude/helpers/github-setup.sh +45 -45
- package/.claude/helpers/guidance-hook.sh +13 -13
- package/.claude/helpers/guidance-hooks.sh +102 -102
- package/.claude/helpers/health-monitor.sh +108 -108
- package/.claude/helpers/helpers.manifest.json +13 -0
- package/.claude/helpers/hook-handler.cjs +464 -464
- package/.claude/helpers/intelligence.cjs +1058 -1058
- package/.claude/helpers/learning-hooks.sh +329 -329
- package/.claude/helpers/learning-optimizer.sh +127 -127
- package/.claude/helpers/learning-service.mjs +1144 -1144
- package/.claude/helpers/memory.cjs +84 -84
- package/.claude/helpers/metrics-db.mjs +503 -503
- package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.cjs +62 -62
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.cjs +125 -125
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline.cjs +156 -1
- package/.claude/helpers/swarm-comms.sh +353 -353
- package/.claude/helpers/swarm-hooks.sh +761 -761
- package/.claude/helpers/swarm-monitor.sh +210 -210
- package/.claude/helpers/sync-v3-metrics.sh +245 -245
- package/.claude/helpers/update-v3-progress.sh +165 -165
- package/.claude/helpers/v3-quick-status.sh +57 -57
- package/.claude/helpers/v3.sh +110 -110
- package/.claude/helpers/validate-v3-config.sh +215 -215
- package/.claude/helpers/worker-manager.sh +170 -170
- package/.claude/mcp.json +12 -12
- package/.claude/proven-config.json +42 -0
- package/.claude/settings.json +284 -284
- package/.claude/settings.json.bak +526 -526
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
- package/.claude/skills/agentdb-learning/SKILL.md +545 -545
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
- package/.claude/skills/browser/SKILL.md +204 -204
- package/.claude/skills/dual-mode/README.md +71 -71
- package/.claude/skills/dual-mode/dual-collect.md +103 -103
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
- package/.claude/skills/dual-mode/dual-spawn.md +81 -81
- package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
- package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
- package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
- package/.claude/skills/github-code-review/SKILL.md +1125 -1125
- package/.claude/skills/github-multi-repo/SKILL.md +862 -862
- package/.claude/skills/github-project-management/SKILL.md +1262 -1262
- package/.claude/skills/github-release-management/SKILL.md +1064 -1064
- package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
- package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/pair-programming/SKILL.md +1202 -1202
- package/.claude/skills/performance-analysis/SKILL.md +560 -560
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
- package/.claude/skills/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
- package/.claude/skills/stream-chain/SKILL.md +560 -560
- package/.claude/skills/swarm-advanced/SKILL.md +970 -970
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
- package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
- package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
- package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
- package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
- package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
- package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
- package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
- package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
- package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
- package/.claude/skills/verification-quality/SKILL.md +691 -691
- package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
- package/.claude/skills/worker-integration/SKILL.md +147 -147
- package/.claude/statusline-command.sh +176 -176
- package/.claude/statusline.mjs +109 -109
- package/.claude/statusline.sh +431 -431
- package/.claude/workflows/full-system-test.js +65 -65
- package/.claude/workflows/intelligence-system-hardening.js +120 -120
- package/.claude/workflows/plugin-contract-audit.js +91 -91
- package/.claude-plugin/README.md +720 -720
- package/.claude-plugin/docs/INSTALLATION.md +261 -261
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
- package/.claude-plugin/docs/QUICKSTART.md +361 -361
- package/.claude-plugin/docs/STRUCTURE.md +128 -128
- package/.claude-plugin/hooks/hooks.json +79 -79
- package/.claude-plugin/marketplace.json +185 -185
- package/.claude-plugin/plugin.json +71 -71
- package/.claude-plugin/scripts/install.sh +234 -234
- package/.claude-plugin/scripts/ruflo-hook.cjs +166 -166
- package/.claude-plugin/scripts/ruflo-hook.sh +52 -52
- package/.claude-plugin/scripts/uninstall.sh +36 -36
- package/.claude-plugin/scripts/verify.sh +108 -108
- package/LICENSE +21 -21
- package/README.md +419 -419
- package/bin/cli.js +11 -11
- package/bin/npx-repair.js +7 -7
- package/bin/npx-safe-launch.js +9 -9
- package/package.json +192 -192
- package/v3/@claude-flow/cli/README.md +419 -419
- package/v3/@claude-flow/cli/bin/cli.js +314 -314
- package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
- package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
- package/v3/@claude-flow/cli/dist/src/autopilot-state.js +24 -7
- package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
- package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
- package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +31 -10
- package/v3/@claude-flow/cli/dist/src/commands/init.js +202 -34
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +12 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
- package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
- package/v3/@claude-flow/cli/dist/src/funnel/disclosure.js +13 -2
- package/v3/@claude-flow/cli/dist/src/funnel/messages.d.ts +12 -10
- package/v3/@claude-flow/cli/dist/src/funnel/messages.js +83 -11
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +231 -231
- package/v3/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +751 -751
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +24 -24
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +21 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +4 -3
- package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +22 -22
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +192 -123
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +407 -407
- package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
- package/v3/@claude-flow/cli/dist/src/parser.js +25 -9
- package/v3/@claude-flow/cli/dist/src/proxy/verify.js +2 -2
- package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +4 -4
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +7 -4
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
- package/v3/@claude-flow/cli/package.json +137 -137
- package/v3/@claude-flow/guidance/README.md +1195 -1195
- package/v3/@claude-flow/guidance/package.json +198 -198
- package/v3/@claude-flow/shared/README.md +323 -323
- package/v3/@claude-flow/shared/dist/events/event-store.js +31 -31
- package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
- package/v3/@claude-flow/shared/package.json +43 -43
- package/v3/README.md +493 -493
|
@@ -146,18 +146,153 @@ async function maybeAutoDetectCodex(ctx, options) {
|
|
|
146
146
|
// Codex auto-detect is a bonus, never a requirement — swallow everything.
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
|
-
// Cross-agent skill registration
|
|
150
|
-
//
|
|
151
|
-
// (
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
// can run `npx skills add ruvnet/ruflo --all` themselves. Best-effort — never
|
|
155
|
-
// fails init. Opt-out: --no-skills-sh flag OR RUFLO_NO_SKILLS_SH=1. Skipped
|
|
156
|
-
// under --skip-claude and scripted `--format json` output.
|
|
149
|
+
// Cross-agent skill registration. Materializes the *single* canonical ruflo
|
|
150
|
+
// platform skill at `.agents/skills/ruflo/SKILL.md` so any agent in the
|
|
151
|
+
// project (Claude Code, Cursor, Copilot, Gemini, Cline, …) that reads
|
|
152
|
+
// `.agents/skills/` picks it up. Users who want the full plugin skill catalog
|
|
153
|
+
// can run `npx skills add ruvnet/ruflo --all` themselves.
|
|
157
154
|
//
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
155
|
+
// #2777 — earlier versions shelled out to `npx --yes skills add ruvnet/ruflo
|
|
156
|
+
// --skill ruflo --yes`, but the skills CLI implements its `--skill` filter by
|
|
157
|
+
// cloning the entire target repo and copying `dirname(SKILL.md)` recursively.
|
|
158
|
+
// Because ruflo's canonical SKILL.md sits at the ruvnet/ruflo repo root, that
|
|
159
|
+
// dirname *is* the whole repository — the "one file" install pulled in ~97MB
|
|
160
|
+
// of Cargo.toml, crates/, docs/, agentdb.rvf, and 384 unrelated plugin
|
|
161
|
+
// SKILL.md descriptors. We now write the single ~2KB SKILL.md directly, no
|
|
162
|
+
// repo clone at all.
|
|
163
|
+
//
|
|
164
|
+
// Best-effort — never fails init. Opt-out: --no-skills-sh flag OR
|
|
165
|
+
// RUFLO_NO_SKILLS_SH=1. Skipped under --skip-claude and scripted
|
|
166
|
+
// `--format json` output.
|
|
167
|
+
const RUFLO_PLATFORM_SKILL_MD = `---
|
|
168
|
+
name: ruflo
|
|
169
|
+
description: Ruflo is a multi-agent orchestration platform for AI coding agents (Claude Code, Cursor, Codex, Copilot, Gemini, Amp, +12 more). Use this skill when the user wants to (1) install/init ruflo in a project, (2) run multi-agent swarms with hierarchical coordination, (3) use ruflo's 314+ MCP tools for memory, routing, hooks, sub-agents, or workflows, (4) check ruflo status/version/doctor health, or (5) discover which of ruflo's 30+ plugins fits their task.
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
# Ruflo
|
|
173
|
+
|
|
174
|
+
Ruflo is a cross-agent orchestration layer that ships as three npm packages: \`ruflo\` (thin wrapper), \`claude-flow\` (umbrella), and \`@claude-flow/cli\` (implementation). Users invoke it as \`npx ruflo <command>\`.
|
|
175
|
+
|
|
176
|
+
## When to invoke ruflo
|
|
177
|
+
|
|
178
|
+
Suggest ruflo when the task involves any of:
|
|
179
|
+
|
|
180
|
+
- **Multi-agent work**: coordinated swarms, sub-agents, cross-agent handoffs, or parallel task execution
|
|
181
|
+
- **Persistent memory across sessions**: HNSW vector search, hybrid SQLite+AgentDB backend, semantic retrieval
|
|
182
|
+
- **Learning routing decisions**: 3-tier model routing (deterministic codemod → Haiku → Sonnet/Opus), pattern-based agent selection
|
|
183
|
+
- **Hooks + observability**: pre/post edit hooks, session lifecycle, background workers (12 built-in), tracing
|
|
184
|
+
- **Workflows + benchmarks**: SPARC methodology, GAIA benchmark runs, custom multi-step pipelines
|
|
185
|
+
- **Plugin ecosystem**: 30+ plugins covering ADR, DDD, security audit, cost tracking, browser automation, IoT device fleets, market data, neural training, and more
|
|
186
|
+
|
|
187
|
+
Do NOT suggest ruflo for one-shot edits, simple bug fixes, or tasks a single agent can complete in one turn — the orchestration overhead isn't worth it.
|
|
188
|
+
|
|
189
|
+
## Getting started (three commands)
|
|
190
|
+
|
|
191
|
+
\`\`\`bash
|
|
192
|
+
# 1. Initialize ruflo in the current project (creates .claude/, MCP config, hooks)
|
|
193
|
+
npx ruflo init
|
|
194
|
+
|
|
195
|
+
# 2. Check health — verifies Node 20+, npm 9+, MCP servers, memory DB, API keys
|
|
196
|
+
npx ruflo doctor --fix
|
|
197
|
+
|
|
198
|
+
# 3. Discover which plugins match the current work
|
|
199
|
+
npx ruflo discover-plugins
|
|
200
|
+
\`\`\`
|
|
201
|
+
|
|
202
|
+
## MCP tools (314 available)
|
|
203
|
+
|
|
204
|
+
After \`ruflo init\`, Claude Code (or any MCP-compatible agent) auto-loads ruflo's MCP servers. Key namespaces:
|
|
205
|
+
|
|
206
|
+
- \`mcp__claude-flow__memory_*\` — store/search/list/retrieve with HNSW-indexed semantic search
|
|
207
|
+
- \`mcp__claude-flow__swarm_*\` — init hierarchical/mesh swarms with anti-drift topology
|
|
208
|
+
- \`mcp__claude-flow__agent_spawn\` — spawn specialized agents (coder, reviewer, tester, security-architect, +55 more)
|
|
209
|
+
- \`mcp__claude-flow__hooks_*\` — routing, pattern learning, background worker dispatch
|
|
210
|
+
- \`mcp__claude-flow__task_*\` — task lifecycle (create/assign/complete/summary)
|
|
211
|
+
- \`mcp__claude-flow__intelligence_*\` — 4-step pipeline (RETRIEVE → JUDGE → DISTILL → CONSOLIDATE)
|
|
212
|
+
|
|
213
|
+
Full catalog: \`npx ruflo mcp list\`.
|
|
214
|
+
|
|
215
|
+
## Plugin discovery
|
|
216
|
+
|
|
217
|
+
Ruflo ships 30+ optional plugins. Some highlights:
|
|
218
|
+
|
|
219
|
+
- \`ruflo-goals\` — deep research + goal-oriented action planning
|
|
220
|
+
- \`ruflo-cost-tracker\` — session cost telemetry, budgets, burn tracking
|
|
221
|
+
- \`ruflo-metaharness\` — harness scoring, MCP security scans, red/blue adversarial testing
|
|
222
|
+
- \`ruflo-browser\` — session-recorded browser automation with RVF-backed replay
|
|
223
|
+
- \`ruflo-jujutsu\` — git diff risk analysis + PR lifecycle
|
|
224
|
+
- \`ruflo-security-audit\` — codebase scans + CVE checks
|
|
225
|
+
|
|
226
|
+
Full plugin list + descriptions: \`npx ruflo plugins list\`.
|
|
227
|
+
|
|
228
|
+
## Cross-agent installation
|
|
229
|
+
|
|
230
|
+
Ruflo installs into whatever agent the project uses. To pull the full plugin
|
|
231
|
+
skill catalog (30+ plugins, ~267 skills), run:
|
|
232
|
+
|
|
233
|
+
\`\`\`bash
|
|
234
|
+
npx skills add ruvnet/ruflo --all
|
|
235
|
+
\`\`\`
|
|
236
|
+
|
|
237
|
+
## Documentation
|
|
238
|
+
|
|
239
|
+
- Repository: https://github.com/ruvnet/ruflo
|
|
240
|
+
- Issues: https://github.com/ruvnet/ruflo/issues
|
|
241
|
+
- Sponsor: https://github.com/sponsors/ruvnet
|
|
242
|
+
`;
|
|
243
|
+
// #2777 — detect the "bloated" install left behind by earlier versions that
|
|
244
|
+
// shelled out to `npx skills add`. If the .agents/skills/ruflo directory
|
|
245
|
+
// contains any of Cargo.toml, crates/, package.json, .git, or its recursive
|
|
246
|
+
// on-disk size exceeds a small budget (~1MB), it was almost certainly created
|
|
247
|
+
// by the full-repo clone bug — return true so the caller can wipe + rewrite
|
|
248
|
+
// just the single SKILL.md. Any recursive-stat or read errors are swallowed
|
|
249
|
+
// and reported as "not bloated" to avoid false-positive deletions.
|
|
250
|
+
function isBloatedRufloSkillDir(dir) {
|
|
251
|
+
try {
|
|
252
|
+
const bloatMarkers = ['Cargo.toml', 'crates', 'package.json', '.git', 'agentdb.rvf', 'docs', 'plugins'];
|
|
253
|
+
for (const marker of bloatMarkers) {
|
|
254
|
+
if (fs.existsSync(path.join(dir, marker)))
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
const BLOAT_BYTES_THRESHOLD = 1_048_576; // 1 MB — a canonical SKILL.md is ~2KB
|
|
258
|
+
let bytes = 0;
|
|
259
|
+
const walk = (p) => {
|
|
260
|
+
const entries = fs.readdirSync(p, { withFileTypes: true });
|
|
261
|
+
for (const entry of entries) {
|
|
262
|
+
const child = path.join(p, entry.name);
|
|
263
|
+
if (entry.isDirectory()) {
|
|
264
|
+
walk(child);
|
|
265
|
+
}
|
|
266
|
+
else if (entry.isFile()) {
|
|
267
|
+
try {
|
|
268
|
+
bytes += fs.statSync(child).size;
|
|
269
|
+
if (bytes > BLOAT_BYTES_THRESHOLD)
|
|
270
|
+
throw new Error('__bloat_threshold__');
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
if (err instanceof Error && err.message === '__bloat_threshold__')
|
|
274
|
+
throw err;
|
|
275
|
+
// Ignore stat errors for individual files.
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (bytes > BLOAT_BYTES_THRESHOLD)
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
try {
|
|
283
|
+
walk(dir);
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
if (err instanceof Error && err.message === '__bloat_threshold__')
|
|
287
|
+
return true;
|
|
288
|
+
// Any other walk error → don't declare bloat.
|
|
289
|
+
}
|
|
290
|
+
return bytes > BLOAT_BYTES_THRESHOLD;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
161
296
|
async function maybeInstallSkillsSh(ctx) {
|
|
162
297
|
try {
|
|
163
298
|
if (ctx.flags['no-skills-sh'] === true)
|
|
@@ -166,37 +301,52 @@ async function maybeInstallSkillsSh(ctx) {
|
|
|
166
301
|
return;
|
|
167
302
|
if (/^(1|true|on|yes)$/i.test(String(process.env.RUFLO_NO_SKILLS_SH || '')))
|
|
168
303
|
return;
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (
|
|
304
|
+
const skillDir = path.join(ctx.cwd, '.agents', 'skills', 'ruflo');
|
|
305
|
+
const skillFile = path.join(skillDir, 'SKILL.md');
|
|
306
|
+
// Idempotency gate. Three cases:
|
|
307
|
+
// 1. Directory absent → materialize.
|
|
308
|
+
// 2. Directory present but "bloated" (Cargo.toml/crates/ or >1MB) →
|
|
309
|
+
// previous `npx skills add` full-repo clone left junk behind
|
|
310
|
+
// (#2777). Wipe and re-materialize so `rm -rf .agents/skills/ruflo`
|
|
311
|
+
// + re-init is a valid recovery path.
|
|
312
|
+
// 3. Directory present and healthy (just our SKILL.md) → skip.
|
|
313
|
+
let mode = 'create';
|
|
314
|
+
if (fs.existsSync(skillDir)) {
|
|
315
|
+
if (isBloatedRufloSkillDir(skillDir)) {
|
|
316
|
+
mode = 'rewrite';
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
mode = 'skip';
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (mode === 'skip') {
|
|
180
323
|
output.writeln();
|
|
181
324
|
output.writeln(output.dim(' skills.sh registration already present at .agents/skills/ruflo — skipping'));
|
|
182
325
|
return;
|
|
183
326
|
}
|
|
184
|
-
const npxCmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
185
|
-
if (!commandExists('npx'))
|
|
186
|
-
return;
|
|
187
327
|
output.writeln();
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
328
|
+
if (mode === 'rewrite') {
|
|
329
|
+
output.printInfo('Cleaning up bloated .agents/skills/ruflo/ from a prior init (#2777) and re-materializing the single platform SKILL.md…');
|
|
330
|
+
try {
|
|
331
|
+
fs.rmSync(skillDir, { recursive: true, force: true });
|
|
332
|
+
}
|
|
333
|
+
catch (err) {
|
|
334
|
+
output.writeln(output.dim(` Could not remove ${skillDir}: ${err instanceof Error ? err.message : String(err)}`));
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
output.printInfo('Registering the core `ruflo` skill for cross-agent discovery (.agents/skills/ruflo/SKILL.md)…');
|
|
340
|
+
}
|
|
341
|
+
try {
|
|
342
|
+
fs.mkdirSync(skillDir, { recursive: true });
|
|
343
|
+
fs.writeFileSync(skillFile, RUFLO_PLATFORM_SKILL_MD, 'utf-8');
|
|
344
|
+
output.writeln(output.success(' ✓ ruflo skill materialized at .agents/skills/ruflo/SKILL.md — available to any agent in this project'));
|
|
193
345
|
output.writeln(output.dim(' Want all 267 plugin skills? npx skills add ruvnet/ruflo --all'));
|
|
194
346
|
output.writeln(output.dim(' Opt out next time: --no-skills-sh or RUFLO_NO_SKILLS_SH=1'));
|
|
195
347
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
// mismatch, unknown package. Log a soft note; users can retry manually.
|
|
199
|
-
output.writeln(output.dim(' skills.sh registration skipped (network or npx cache) — retry with: npx skills add ruvnet/ruflo --skill ruflo --yes'));
|
|
348
|
+
catch (err) {
|
|
349
|
+
output.writeln(output.dim(` skills.sh registration skipped (write failed: ${err instanceof Error ? err.message : String(err)})`));
|
|
200
350
|
}
|
|
201
351
|
}
|
|
202
352
|
catch {
|
|
@@ -583,6 +733,13 @@ const initAction = async (ctx) => {
|
|
|
583
733
|
try {
|
|
584
734
|
output.writeln(output.dim(` Model: ${embeddingModel}`));
|
|
585
735
|
output.writeln(output.dim(' Hyperbolic: Enabled (Poincaré ball)'));
|
|
736
|
+
// #2770: On Windows, `npx` ships as `npx.cmd`; execFileSync cannot spawn
|
|
737
|
+
// a .cmd file without going through cmd.exe. Enable shell on win32 so
|
|
738
|
+
// cmd.exe resolves the .cmd extension. POSIX keeps shell:false.
|
|
739
|
+
// NOTE: shell:true joins args by spaces and passes to cmd.exe — the args
|
|
740
|
+
// here are hard-coded flags + an npm package name pre-validated against
|
|
741
|
+
// /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/, so no injection risk. If
|
|
742
|
+
// user-controlled args are ever added, escape them before spawn.
|
|
586
743
|
execFileInit('npx', [
|
|
587
744
|
'@claude-flow/cli@latest', 'embeddings', 'init',
|
|
588
745
|
'--model', embeddingModel,
|
|
@@ -591,6 +748,8 @@ const initAction = async (ctx) => {
|
|
|
591
748
|
stdio: 'pipe',
|
|
592
749
|
cwd: ctx.cwd,
|
|
593
750
|
timeout: 30000,
|
|
751
|
+
shell: process.platform === 'win32',
|
|
752
|
+
windowsHide: true,
|
|
594
753
|
});
|
|
595
754
|
output.writeln(output.success(' ✓ Embeddings initialized'));
|
|
596
755
|
output.writeln(output.dim(' Run "embeddings init --download" to download model'));
|
|
@@ -822,6 +981,13 @@ const wizardCommand = {
|
|
|
822
981
|
throw new Error(`Invalid embedding model name: ${embeddingModel}`);
|
|
823
982
|
}
|
|
824
983
|
try {
|
|
984
|
+
// #2770: On Windows, `npx` ships as `npx.cmd`; execFileSync cannot spawn
|
|
985
|
+
// a .cmd file without going through cmd.exe. Enable shell on win32 so
|
|
986
|
+
// cmd.exe resolves the .cmd extension. POSIX keeps shell:false.
|
|
987
|
+
// NOTE: shell:true joins args by spaces and passes to cmd.exe — the args
|
|
988
|
+
// here are hard-coded flags + an npm package name pre-validated against
|
|
989
|
+
// /^[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/, so no injection risk. If
|
|
990
|
+
// user-controlled args are ever added, escape them before spawn.
|
|
825
991
|
execFileSync('npx', [
|
|
826
992
|
'@claude-flow/cli@latest', 'embeddings', 'init',
|
|
827
993
|
'--model', embeddingModel,
|
|
@@ -830,6 +996,8 @@ const wizardCommand = {
|
|
|
830
996
|
stdio: 'pipe',
|
|
831
997
|
cwd: ctx.cwd,
|
|
832
998
|
timeout: 30000,
|
|
999
|
+
shell: process.platform === 'win32',
|
|
1000
|
+
windowsHide: true,
|
|
833
1001
|
});
|
|
834
1002
|
output.writeln(output.success(' ✓ Embeddings configured'));
|
|
835
1003
|
embeddingsInitialized = true;
|
|
@@ -89,7 +89,18 @@ const storeCommand = {
|
|
|
89
89
|
const ttl = ctx.flags.ttl;
|
|
90
90
|
const tags = ctx.flags.tags ? ctx.flags.tags.split(',') : [];
|
|
91
91
|
const asVector = ctx.flags.vector;
|
|
92
|
-
|
|
92
|
+
// #2775: the parser's `applyDefaults` only materializes global-option
|
|
93
|
+
// defaults, not per-subcommand ones — so despite the `default: true`
|
|
94
|
+
// above, `ctx.flags.upsert` arrives as `undefined` unless the user
|
|
95
|
+
// passes `--upsert` explicitly. That is exactly the trap #2594 tried
|
|
96
|
+
// to close: `store → delete → store` and even plain `store → store`
|
|
97
|
+
// (against an active row) both fall through to the bridge's strict
|
|
98
|
+
// insert, and before #2775's ON-CONFLICT-DO-UPDATE-WHERE-status-
|
|
99
|
+
// 'deleted' fix, both dead-ended with the misleading #2735 guard.
|
|
100
|
+
// Materialize the declared default locally so it takes effect
|
|
101
|
+
// regardless of the parser gap: only an explicit `--no-upsert` (which
|
|
102
|
+
// arrives as `false`) turns it off.
|
|
103
|
+
const upsert = ctx.flags.upsert !== false;
|
|
93
104
|
if (!key) {
|
|
94
105
|
output.printError('Key is required. Use --key or -k');
|
|
95
106
|
return { success: false, exitCode: 1 };
|
|
@@ -182,10 +182,10 @@ const backupSubcommand = {
|
|
|
182
182
|
tables = tablesFilter.split(',').map(t => t.trim());
|
|
183
183
|
}
|
|
184
184
|
else {
|
|
185
|
-
const tablesResult = await client.query(`
|
|
186
|
-
SELECT table_name FROM information_schema.tables
|
|
187
|
-
WHERE table_schema = $1 AND table_type = 'BASE TABLE'
|
|
188
|
-
ORDER BY table_name
|
|
185
|
+
const tablesResult = await client.query(`
|
|
186
|
+
SELECT table_name FROM information_schema.tables
|
|
187
|
+
WHERE table_schema = $1 AND table_type = 'BASE TABLE'
|
|
188
|
+
ORDER BY table_name
|
|
189
189
|
`, [config.schema]);
|
|
190
190
|
tables = tablesResult.rows.map(r => r.table_name);
|
|
191
191
|
}
|
|
@@ -209,16 +209,16 @@ const backupSubcommand = {
|
|
|
209
209
|
spinner.setText(`Exporting ${tableName}...`);
|
|
210
210
|
spinner.start();
|
|
211
211
|
// Get columns
|
|
212
|
-
const columnsResult = await client.query(`
|
|
213
|
-
SELECT column_name, data_type
|
|
214
|
-
FROM information_schema.columns
|
|
215
|
-
WHERE table_schema = $1 AND table_name = $2
|
|
216
|
-
ORDER BY ordinal_position
|
|
212
|
+
const columnsResult = await client.query(`
|
|
213
|
+
SELECT column_name, data_type
|
|
214
|
+
FROM information_schema.columns
|
|
215
|
+
WHERE table_schema = $1 AND table_name = $2
|
|
216
|
+
ORDER BY ordinal_position
|
|
217
217
|
`, [config.schema, tableName]);
|
|
218
218
|
const columns = columnsResult.rows.map(r => r.column_name);
|
|
219
219
|
// Get data
|
|
220
|
-
const dataResult = await client.query(`
|
|
221
|
-
SELECT * FROM ${config.schema}.${tableName}
|
|
220
|
+
const dataResult = await client.query(`
|
|
221
|
+
SELECT * FROM ${config.schema}.${tableName}
|
|
222
222
|
`);
|
|
223
223
|
backupData.tables.push({
|
|
224
224
|
name: tableName,
|
|
@@ -233,14 +233,14 @@ const backupSubcommand = {
|
|
|
233
233
|
if (includeIndexes) {
|
|
234
234
|
spinner.setText('Exporting index definitions...');
|
|
235
235
|
spinner.start();
|
|
236
|
-
const indexResult = await client.query(`
|
|
237
|
-
SELECT pg_get_indexdef(i.oid) as indexdef
|
|
238
|
-
FROM pg_index idx
|
|
239
|
-
JOIN pg_class i ON i.oid = idx.indexrelid
|
|
240
|
-
JOIN pg_class t ON t.oid = idx.indrelid
|
|
241
|
-
JOIN pg_namespace n ON n.oid = t.relnamespace
|
|
242
|
-
WHERE n.nspname = $1
|
|
243
|
-
AND NOT idx.indisprimary
|
|
236
|
+
const indexResult = await client.query(`
|
|
237
|
+
SELECT pg_get_indexdef(i.oid) as indexdef
|
|
238
|
+
FROM pg_index idx
|
|
239
|
+
JOIN pg_class i ON i.oid = idx.indexrelid
|
|
240
|
+
JOIN pg_class t ON t.oid = idx.indrelid
|
|
241
|
+
JOIN pg_namespace n ON n.oid = t.relnamespace
|
|
242
|
+
WHERE n.nspname = $1
|
|
243
|
+
AND NOT idx.indisprimary
|
|
244
244
|
`, [config.schema]);
|
|
245
245
|
backupData.indexes = indexResult.rows.map(r => r.indexdef);
|
|
246
246
|
spinner.succeed(`Exported ${backupData.indexes.length} index definitions`);
|
|
@@ -566,10 +566,10 @@ const restoreSubcommand = {
|
|
|
566
566
|
return typeof val === 'object' ? JSON.stringify(val) : val;
|
|
567
567
|
});
|
|
568
568
|
try {
|
|
569
|
-
await client.query(`
|
|
570
|
-
INSERT INTO ${config.schema}.${table.name} (${columns.join(', ')})
|
|
571
|
-
VALUES (${values.join(', ')})
|
|
572
|
-
ON CONFLICT DO NOTHING
|
|
569
|
+
await client.query(`
|
|
570
|
+
INSERT INTO ${config.schema}.${table.name} (${columns.join(', ')})
|
|
571
|
+
VALUES (${values.join(', ')})
|
|
572
|
+
ON CONFLICT DO NOTHING
|
|
573
573
|
`, params);
|
|
574
574
|
restoredRows++;
|
|
575
575
|
}
|
|
@@ -228,8 +228,8 @@ export const benchmarkCommand = {
|
|
|
228
228
|
spinner.succeed('Connected to PostgreSQL');
|
|
229
229
|
// Detect vector extension type: prefer ruvector, fall back to pgvector
|
|
230
230
|
let vectorTypeName = 'vector';
|
|
231
|
-
const ruvectorCheck = await client.query(`
|
|
232
|
-
SELECT extname FROM pg_extension WHERE extname = 'ruvector'
|
|
231
|
+
const ruvectorCheck = await client.query(`
|
|
232
|
+
SELECT extname FROM pg_extension WHERE extname = 'ruvector'
|
|
233
233
|
`);
|
|
234
234
|
if (ruvectorCheck.rows.length > 0) {
|
|
235
235
|
vectorTypeName = 'ruvector';
|
|
@@ -238,12 +238,12 @@ export const benchmarkCommand = {
|
|
|
238
238
|
const benchmarkTable = `${config.schema}.benchmark_${Date.now()}`;
|
|
239
239
|
spinner.setText('Creating benchmark table...');
|
|
240
240
|
spinner.start();
|
|
241
|
-
await client.query(`
|
|
242
|
-
CREATE TABLE ${benchmarkTable} (
|
|
243
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
244
|
-
embedding ${vectorTypeName}(${dimensions}),
|
|
245
|
-
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
246
|
-
)
|
|
241
|
+
await client.query(`
|
|
242
|
+
CREATE TABLE ${benchmarkTable} (
|
|
243
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
244
|
+
embedding ${vectorTypeName}(${dimensions}),
|
|
245
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
246
|
+
)
|
|
247
247
|
`);
|
|
248
248
|
spinner.succeed('Benchmark table created');
|
|
249
249
|
// Insert vectors
|
|
@@ -259,9 +259,9 @@ export const benchmarkCommand = {
|
|
|
259
259
|
const vector = generateRandomVector(dimensions);
|
|
260
260
|
batchVectors.push(`('[${vector.join(',')}]')`);
|
|
261
261
|
}
|
|
262
|
-
await client.query(`
|
|
263
|
-
INSERT INTO ${benchmarkTable} (embedding)
|
|
264
|
-
VALUES ${batchVectors.join(',')}
|
|
262
|
+
await client.query(`
|
|
263
|
+
INSERT INTO ${benchmarkTable} (embedding)
|
|
264
|
+
VALUES ${batchVectors.join(',')}
|
|
265
265
|
`);
|
|
266
266
|
insertedCount = batchEnd;
|
|
267
267
|
spinner.setText(`Inserting vectors... ${insertedCount.toLocaleString()}/${numVectors.toLocaleString()}`);
|
|
@@ -283,21 +283,21 @@ export const benchmarkCommand = {
|
|
|
283
283
|
const metricOp = metric === 'cosine' ? `${opsPrefix}_cosine_ops` :
|
|
284
284
|
metric === 'l2' ? `${opsPrefix}_l2_ops` : `${opsPrefix}_ip_ops`;
|
|
285
285
|
if (indexType === 'hnsw') {
|
|
286
|
-
await client.query(`
|
|
287
|
-
CREATE INDEX idx_benchmark_hnsw
|
|
288
|
-
ON ${benchmarkTable}
|
|
289
|
-
USING hnsw (embedding ${metricOp})
|
|
290
|
-
WITH (m = 16, ef_construction = 64)
|
|
286
|
+
await client.query(`
|
|
287
|
+
CREATE INDEX idx_benchmark_hnsw
|
|
288
|
+
ON ${benchmarkTable}
|
|
289
|
+
USING hnsw (embedding ${metricOp})
|
|
290
|
+
WITH (m = 16, ef_construction = 64)
|
|
291
291
|
`);
|
|
292
292
|
}
|
|
293
293
|
else if (indexType === 'ivfflat') {
|
|
294
294
|
// Need to train IVFFlat with existing data
|
|
295
295
|
const lists = Math.max(100, Math.floor(numVectors / 1000));
|
|
296
|
-
await client.query(`
|
|
297
|
-
CREATE INDEX idx_benchmark_ivfflat
|
|
298
|
-
ON ${benchmarkTable}
|
|
299
|
-
USING ivfflat (embedding ${metricOp})
|
|
300
|
-
WITH (lists = ${lists})
|
|
296
|
+
await client.query(`
|
|
297
|
+
CREATE INDEX idx_benchmark_ivfflat
|
|
298
|
+
ON ${benchmarkTable}
|
|
299
|
+
USING ivfflat (embedding ${metricOp})
|
|
300
|
+
WITH (lists = ${lists})
|
|
301
301
|
`);
|
|
302
302
|
}
|
|
303
303
|
const indexDuration = Date.now() - indexStart;
|
|
@@ -320,11 +320,11 @@ export const benchmarkCommand = {
|
|
|
320
320
|
for (let q = 0; q < numQueries; q++) {
|
|
321
321
|
const queryVector = generateRandomVector(dimensions);
|
|
322
322
|
const queryStart = Date.now();
|
|
323
|
-
await client.query(`
|
|
324
|
-
SELECT id, embedding ${distanceOp} '[${queryVector.join(',')}]' as distance
|
|
325
|
-
FROM ${benchmarkTable}
|
|
326
|
-
ORDER BY embedding ${distanceOp} '[${queryVector.join(',')}]'
|
|
327
|
-
LIMIT ${topK}
|
|
323
|
+
await client.query(`
|
|
324
|
+
SELECT id, embedding ${distanceOp} '[${queryVector.join(',')}]' as distance
|
|
325
|
+
FROM ${benchmarkTable}
|
|
326
|
+
ORDER BY embedding ${distanceOp} '[${queryVector.join(',')}]'
|
|
327
|
+
LIMIT ${topK}
|
|
328
328
|
`);
|
|
329
329
|
queryLatencies.push(Date.now() - queryStart);
|
|
330
330
|
if (q % 10 === 0) {
|
|
@@ -354,11 +354,11 @@ export const benchmarkCommand = {
|
|
|
354
354
|
// Get memory usage
|
|
355
355
|
spinner.setText('Analyzing memory usage...');
|
|
356
356
|
spinner.start();
|
|
357
|
-
const sizeResult = await client.query(`
|
|
358
|
-
SELECT
|
|
359
|
-
pg_relation_size('${benchmarkTable}') as table_size,
|
|
360
|
-
pg_total_relation_size('${benchmarkTable}') as total_size,
|
|
361
|
-
pg_indexes_size('${benchmarkTable}') as index_size
|
|
357
|
+
const sizeResult = await client.query(`
|
|
358
|
+
SELECT
|
|
359
|
+
pg_relation_size('${benchmarkTable}') as table_size,
|
|
360
|
+
pg_total_relation_size('${benchmarkTable}') as total_size,
|
|
361
|
+
pg_indexes_size('${benchmarkTable}') as index_size
|
|
362
362
|
`);
|
|
363
363
|
const tableSize = parseInt(sizeResult.rows[0].table_size, 10);
|
|
364
364
|
const totalSize = parseInt(sizeResult.rows[0].total_size, 10);
|
|
@@ -61,20 +61,20 @@ function generateInsertSQL(entry) {
|
|
|
61
61
|
const updatedAt = entry.updated_at
|
|
62
62
|
? `'${escapeString(validateTimestamp(String(entry.updated_at)))}'::timestamptz`
|
|
63
63
|
: 'NOW()';
|
|
64
|
-
return `INSERT INTO claude_flow.memory_entries (key, value, embedding, namespace, metadata, created_at, updated_at)
|
|
65
|
-
VALUES (
|
|
66
|
-
'${key}',
|
|
67
|
-
'${value}',
|
|
68
|
-
${embeddingClause},
|
|
69
|
-
'${namespace}',
|
|
70
|
-
'${metadata}'::jsonb,
|
|
71
|
-
${createdAt},
|
|
72
|
-
${updatedAt}
|
|
73
|
-
)
|
|
74
|
-
ON CONFLICT (key, namespace) DO UPDATE SET
|
|
75
|
-
value = EXCLUDED.value,
|
|
76
|
-
embedding = COALESCE(EXCLUDED.embedding, claude_flow.memory_entries.embedding),
|
|
77
|
-
metadata = EXCLUDED.metadata,
|
|
64
|
+
return `INSERT INTO claude_flow.memory_entries (key, value, embedding, namespace, metadata, created_at, updated_at)
|
|
65
|
+
VALUES (
|
|
66
|
+
'${key}',
|
|
67
|
+
'${value}',
|
|
68
|
+
${embeddingClause},
|
|
69
|
+
'${namespace}',
|
|
70
|
+
'${metadata}'::jsonb,
|
|
71
|
+
${createdAt},
|
|
72
|
+
${updatedAt}
|
|
73
|
+
)
|
|
74
|
+
ON CONFLICT (key, namespace) DO UPDATE SET
|
|
75
|
+
value = EXCLUDED.value,
|
|
76
|
+
embedding = COALESCE(EXCLUDED.embedding, claude_flow.memory_entries.embedding),
|
|
77
|
+
metadata = EXCLUDED.metadata,
|
|
78
78
|
updated_at = NOW();`;
|
|
79
79
|
}
|
|
80
80
|
/**
|