@claude-flow/cli 3.7.0-alpha.1 → 3.7.0-alpha.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/agents/analysis/analyze-code-quality.md +178 -178
- package/.claude/agents/analysis/code-analyzer.md +209 -209
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
- package/.claude/agents/architecture/arch-system-design.md +156 -156
- package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
- package/.claude/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
- package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
- package/.claude/agents/consensus/gossip-coordinator.md +62 -62
- package/.claude/agents/consensus/performance-benchmarker.md +850 -850
- package/.claude/agents/consensus/quorum-manager.md +822 -822
- package/.claude/agents/consensus/raft-manager.md +62 -62
- package/.claude/agents/consensus/security-manager.md +621 -621
- package/.claude/agents/core/coder.md +452 -452
- package/.claude/agents/core/planner.md +374 -374
- package/.claude/agents/core/researcher.md +368 -368
- package/.claude/agents/core/reviewer.md +519 -519
- package/.claude/agents/core/tester.md +511 -511
- package/.claude/agents/custom/test-long-runner.md +44 -44
- package/.claude/agents/data/data-ml-model.md +444 -444
- package/.claude/agents/data/ml/data-ml-model.md +192 -192
- package/.claude/agents/development/backend/dev-backend-api.md +141 -141
- package/.claude/agents/development/dev-backend-api.md +344 -344
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
- package/.claude/agents/devops/ops-cicd-github.md +164 -164
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
- package/.claude/agents/documentation/docs-api-openapi.md +354 -354
- 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 +377 -377
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +575 -575
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +437 -437
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +604 -604
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +902 -902
- package/.claude/agents/goal/agent.md +815 -815
- package/.claude/agents/goal/goal-planner.md +72 -72
- package/.claude/agents/optimization/benchmark-suite.md +664 -664
- package/.claude/agents/optimization/load-balancer.md +430 -430
- package/.claude/agents/optimization/performance-monitor.md +671 -671
- package/.claude/agents/optimization/resource-allocator.md +673 -673
- package/.claude/agents/optimization/topology-optimizer.md +807 -807
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
- package/.claude/agents/sparc/architecture.md +698 -698
- package/.claude/agents/sparc/pseudocode.md +519 -519
- package/.claude/agents/sparc/refinement.md +801 -801
- package/.claude/agents/sparc/specification.md +477 -477
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
- package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
- 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 +1126 -1126
- package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
- package/.claude/agents/swarm/mesh-coordinator.md +962 -962
- package/.claude/agents/templates/automation-smart-agent.md +204 -204
- package/.claude/agents/templates/base-template-generator.md +289 -289
- package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
- package/.claude/agents/templates/github-pr-manager.md +176 -176
- package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
- package/.claude/agents/templates/memory-coordinator.md +186 -186
- package/.claude/agents/templates/orchestrator-task.md +138 -138
- package/.claude/agents/templates/performance-analyzer.md +198 -198
- package/.claude/agents/templates/sparc-coordinator.md +513 -513
- package/.claude/agents/testing/production-validator.md +394 -394
- package/.claude/agents/testing/tdd-london-swarm.md +243 -243
- package/.claude/agents/v3/adr-architect.md +184 -184
- package/.claude/agents/v3/aidefence-guardian.md +282 -282
- package/.claude/agents/v3/claims-authorizer.md +208 -208
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
- package/.claude/agents/v3/ddd-domain-expert.md +220 -220
- package/.claude/agents/v3/injection-analyst.md +236 -236
- package/.claude/agents/v3/memory-specialist.md +995 -995
- package/.claude/agents/v3/performance-engineer.md +1233 -1233
- package/.claude/agents/v3/pii-detector.md +151 -151
- package/.claude/agents/v3/reasoningbank-learner.md +213 -213
- package/.claude/agents/v3/security-architect-aidefence.md +410 -410
- package/.claude/agents/v3/security-architect.md +867 -867
- package/.claude/agents/v3/security-auditor.md +771 -771
- package/.claude/agents/v3/sparc-orchestrator.md +182 -182
- package/.claude/agents/v3/swarm-memory-manager.md +157 -157
- package/.claude/agents/v3/v3-integration-architect.md +205 -205
- package/.claude/commands/agents/README.md +50 -50
- package/.claude/commands/agents/agent-capabilities.md +140 -140
- 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 +216 -216
- package/.claude/commands/agents/health.md +139 -139
- package/.claude/commands/agents/list.md +100 -100
- package/.claude/commands/agents/logs.md +130 -130
- package/.claude/commands/agents/metrics.md +122 -122
- package/.claude/commands/agents/pool.md +127 -127
- package/.claude/commands/agents/spawn.md +140 -140
- package/.claude/commands/agents/status.md +115 -115
- package/.claude/commands/agents/stop.md +102 -102
- 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 +87 -87
- 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 +107 -107
- package/.claude/commands/training/neural-train.md +75 -75
- 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/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- package/.claude/helpers/auto-commit.sh +178 -178
- package/.claude/helpers/auto-memory-hook.mjs +368 -368
- package/.claude/helpers/checkpoint-manager.sh +251 -251
- package/.claude/helpers/daemon-manager.sh +252 -252
- package/.claude/helpers/ddd-tracker.sh +144 -144
- package/.claude/helpers/github-safe.js +121 -121
- package/.claude/helpers/github-setup.sh +28 -28
- 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/hook-handler.cjs +278 -278
- package/.claude/helpers/intelligence.cjs +1031 -1031
- 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.js +83 -83
- package/.claude/helpers/metrics-db.mjs +488 -488
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/post-commit +16 -16
- package/.claude/helpers/pre-commit +26 -26
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.js +66 -66
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.js +135 -135
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline-hook.sh +21 -21
- package/.claude/helpers/statusline.cjs +575 -575
- package/.claude/helpers/statusline.js +321 -321
- 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/settings.json +182 -182
- 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/aidefence-scan.md +151 -151
- package/.claude/skills/aidefence.yaml +297 -297
- package/.claude/skills/browser/SKILL.md +204 -204
- package/.claude/skills/flow-nexus-neural/SKILL.md +738 -738
- package/.claude/skills/flow-nexus-platform/SKILL.md +1157 -1157
- package/.claude/skills/flow-nexus-swarm/SKILL.md +610 -610
- package/.claude/skills/github-code-review/SKILL.md +1140 -1140
- package/.claude/skills/github-multi-repo/SKILL.md +874 -874
- package/.claude/skills/github-project-management/SKILL.md +1290 -1277
- package/.claude/skills/github-release-management/SKILL.md +1081 -1081
- package/.claude/skills/github-workflow-automation/SKILL.md +1065 -1065
- package/.claude/skills/hive-mind-advanced/SKILL.md +712 -712
- 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 +563 -563
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
- package/.claude/skills/secure-review.md +181 -181
- package/.claude/skills/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +1115 -1115
- package/.claude/skills/stream-chain/SKILL.md +563 -563
- package/.claude/skills/swarm-advanced/SKILL.md +973 -973
- 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 +649 -649
- package/.claude/skills/worker-benchmarks/skill.md +135 -135
- package/.claude/skills/worker-integration/skill.md +154 -154
- package/README.md +393 -391
- package/bin/cli.js +220 -220
- package/bin/mcp-server.js +224 -224
- package/bin/preinstall.cjs +2 -2
- package/dist/src/commands/agent-wasm.js +2 -2
- package/dist/src/commands/agent-wasm.js.map +1 -1
- package/dist/src/commands/completions.js +409 -409
- package/dist/src/commands/daemon.d.ts.map +1 -1
- package/dist/src/commands/daemon.js +19 -3
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +105 -23
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +26 -26
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +122 -104
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +34 -21
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +68 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +23 -23
- package/dist/src/commands/ruvector/benchmark.js +31 -31
- package/dist/src/commands/ruvector/import.js +14 -14
- package/dist/src/commands/ruvector/init.js +115 -115
- package/dist/src/commands/ruvector/migrate.js +99 -99
- package/dist/src/commands/ruvector/optimize.js +51 -51
- package/dist/src/commands/ruvector/setup.js +624 -624
- package/dist/src/commands/ruvector/status.js +38 -38
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +59 -18
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.js +226 -226
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +511 -453
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +645 -645
- package/dist/src/init/settings-generator.d.ts.map +1 -1
- package/dist/src/init/settings-generator.js +11 -5
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +858 -858
- package/dist/src/init/types.d.ts +7 -0
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.d.ts +3 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +108 -0
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +4 -2
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +19 -0
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +14 -1
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +28 -3
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +72 -3
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +28 -3
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +69 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +319 -66
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +5 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +369 -363
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/neural-package-bridge.d.ts +48 -0
- package/dist/src/memory/neural-package-bridge.d.ts.map +1 -0
- package/dist/src/memory/neural-package-bridge.js +87 -0
- package/dist/src/memory/neural-package-bridge.js.map +1 -0
- package/dist/src/memory/rabitq-index.js +5 -5
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +1 -0
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/parser.d.ts +9 -0
- package/dist/src/parser.d.ts.map +1 -1
- package/dist/src/parser.js +11 -0
- package/dist/src/parser.js.map +1 -1
- package/dist/src/runtime/headless.js +28 -28
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -1
- package/dist/src/ruvector/agent-wasm.js +4 -1
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +0 -2
- package/dist/src/ruvector/index.d.ts.map +1 -1
- package/dist/src/ruvector/index.js +8 -2
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +22 -1
- package/dist/src/ruvector/model-router.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.js +125 -5
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/services/headless-worker-executor.js +84 -84
- package/dist/src/transfer/deploy-seraphine.js +23 -23
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/scripts/deploy-ipfs-node.sh +153 -153
- package/scripts/postinstall.cjs +153 -153
- package/scripts/publish-registry.ts +345 -345
- package/scripts/publish.sh +57 -57
- package/scripts/setup-ipfs-registry.md +366 -366
- package/dist/src/services/event-stream.d.ts.map +0 -1
- package/dist/src/services/event-stream.js.map +0 -1
- package/dist/src/services/loop-worker-runner.d.ts.map +0 -1
- package/dist/src/services/loop-worker-runner.js.map +0 -1
- package/dist/src/services/runtime-capabilities.d.ts.map +0 -1
- package/dist/src/services/runtime-capabilities.js.map +0 -1
|
@@ -1,366 +1,366 @@
|
|
|
1
|
-
# IPFS Plugin Registry Setup Guide
|
|
2
|
-
|
|
3
|
-
This guide walks through setting up a live IPFS plugin registry using Google Cloud and Pinata.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- Google Cloud account with billing enabled
|
|
8
|
-
- Node.js 20+
|
|
9
|
-
- `gcloud` CLI installed
|
|
10
|
-
|
|
11
|
-
## Step 1: Pinata Setup (IPFS Pinning Service)
|
|
12
|
-
|
|
13
|
-
### 1.1 Create Pinata Account
|
|
14
|
-
|
|
15
|
-
1. Go to https://pinata.cloud and create an account
|
|
16
|
-
2. Navigate to API Keys section
|
|
17
|
-
3. Create a new API key with these permissions:
|
|
18
|
-
- `pinning/pinFileToIPFS`: true
|
|
19
|
-
- `pinning/pinJSONToIPFS`: true
|
|
20
|
-
- `pinning/unpin`: true
|
|
21
|
-
|
|
22
|
-
### 1.2 Save Your Credentials
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# Add to your shell profile (~/.zshrc or ~/.bashrc)
|
|
26
|
-
export PINATA_JWT="your-jwt-token-here"
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 1.3 Generate IPNS Key (Optional - for stable addressing)
|
|
30
|
-
|
|
31
|
-
If you have Pinata's paid plan with Dedicated Gateways:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Via Pinata dashboard or API
|
|
35
|
-
curl -X POST "https://api.pinata.cloud/v3/ipfs/keys" \
|
|
36
|
-
-H "Authorization: Bearer $PINATA_JWT" \
|
|
37
|
-
-H "Content-Type: application/json" \
|
|
38
|
-
-d '{"name": "claude-flow-registry"}'
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Step 2: Google Cloud Setup
|
|
42
|
-
|
|
43
|
-
### 2.1 Create Project
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
# Create new project
|
|
47
|
-
gcloud projects create claude-flow-registry --name="Claude Flow Registry"
|
|
48
|
-
|
|
49
|
-
# Set as active project
|
|
50
|
-
gcloud config set project claude-flow-registry
|
|
51
|
-
|
|
52
|
-
# Enable billing (required for Cloud Functions)
|
|
53
|
-
gcloud beta billing projects link claude-flow-registry \
|
|
54
|
-
--billing-account=YOUR_BILLING_ACCOUNT_ID
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### 2.2 Enable Required APIs
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
gcloud services enable \
|
|
61
|
-
cloudfunctions.googleapis.com \
|
|
62
|
-
cloudbuild.googleapis.com \
|
|
63
|
-
storage.googleapis.com \
|
|
64
|
-
secretmanager.googleapis.com
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### 2.3 Create Storage Bucket
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# Create bucket for registry source data
|
|
71
|
-
gcloud storage buckets create gs://claude-flow-plugin-registry \
|
|
72
|
-
--location=US \
|
|
73
|
-
--uniform-bucket-level-access
|
|
74
|
-
|
|
75
|
-
# Enable versioning for rollback
|
|
76
|
-
gsutil versioning set on gs://claude-flow-plugin-registry
|
|
77
|
-
|
|
78
|
-
# Make registry.json publicly readable (optional)
|
|
79
|
-
gsutil iam ch allUsers:objectViewer gs://claude-flow-plugin-registry
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### 2.4 Create Service Account
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
# Create service account
|
|
86
|
-
gcloud iam service-accounts create plugin-registry-publisher \
|
|
87
|
-
--display-name="Plugin Registry Publisher"
|
|
88
|
-
|
|
89
|
-
# Grant permissions
|
|
90
|
-
gcloud projects add-iam-policy-binding claude-flow-registry \
|
|
91
|
-
--member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
|
|
92
|
-
--role="roles/storage.objectAdmin"
|
|
93
|
-
|
|
94
|
-
gcloud projects add-iam-policy-binding claude-flow-registry \
|
|
95
|
-
--member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
|
|
96
|
-
--role="roles/secretmanager.secretAccessor"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 2.5 Store Secrets
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Store Pinata JWT
|
|
103
|
-
echo -n "$PINATA_JWT" | gcloud secrets create pinata-jwt --data-file=-
|
|
104
|
-
|
|
105
|
-
# Generate and store Ed25519 signing key
|
|
106
|
-
node -e "
|
|
107
|
-
const crypto = require('crypto');
|
|
108
|
-
const { subtle } = require('crypto').webcrypto;
|
|
109
|
-
(async () => {
|
|
110
|
-
const keyPair = await subtle.generateKey(
|
|
111
|
-
{ name: 'Ed25519', namedCurve: 'Ed25519' },
|
|
112
|
-
true,
|
|
113
|
-
['sign', 'verify']
|
|
114
|
-
);
|
|
115
|
-
const privateKey = await subtle.exportKey('pkcs8', keyPair.privateKey);
|
|
116
|
-
const privateKeyHex = Buffer.from(privateKey).toString('hex');
|
|
117
|
-
console.log(privateKeyHex);
|
|
118
|
-
})();
|
|
119
|
-
" | gcloud secrets create registry-private-key --data-file=-
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Step 3: Deploy Cloud Function
|
|
123
|
-
|
|
124
|
-
### 3.1 Create Function Directory
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
mkdir -p cloud-functions/publish-registry
|
|
128
|
-
cd cloud-functions/publish-registry
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### 3.2 Create package.json
|
|
132
|
-
|
|
133
|
-
```json
|
|
134
|
-
{
|
|
135
|
-
"name": "publish-registry",
|
|
136
|
-
"version": "1.0.0",
|
|
137
|
-
"main": "index.js",
|
|
138
|
-
"type": "module",
|
|
139
|
-
"dependencies": {
|
|
140
|
-
"@google-cloud/storage": "^7.0.0",
|
|
141
|
-
"@google-cloud/secret-manager": "^5.0.0",
|
|
142
|
-
"@noble/ed25519": "^2.0.0"
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### 3.3 Create index.js
|
|
148
|
-
|
|
149
|
-
```javascript
|
|
150
|
-
import { Storage } from '@google-cloud/storage';
|
|
151
|
-
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
|
|
152
|
-
import * as ed from '@noble/ed25519';
|
|
153
|
-
|
|
154
|
-
const storage = new Storage();
|
|
155
|
-
const secretManager = new SecretManagerServiceClient();
|
|
156
|
-
|
|
157
|
-
async function getSecret(name) {
|
|
158
|
-
const [version] = await secretManager.accessSecretVersion({
|
|
159
|
-
name: `projects/claude-flow-registry/secrets/${name}/versions/latest`,
|
|
160
|
-
});
|
|
161
|
-
return version.payload.data.toString();
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export async function publishRegistry(req, res) {
|
|
165
|
-
try {
|
|
166
|
-
// Get secrets
|
|
167
|
-
const pinataJwt = await getSecret('pinata-jwt');
|
|
168
|
-
const privateKey = await getSecret('registry-private-key');
|
|
169
|
-
|
|
170
|
-
// Fetch registry from GCS
|
|
171
|
-
const bucket = storage.bucket('claude-flow-plugin-registry');
|
|
172
|
-
const file = bucket.file('registry.json');
|
|
173
|
-
const [content] = await file.download();
|
|
174
|
-
const registry = JSON.parse(content.toString());
|
|
175
|
-
|
|
176
|
-
// Update timestamp
|
|
177
|
-
registry.updatedAt = new Date().toISOString();
|
|
178
|
-
|
|
179
|
-
// Sign registry
|
|
180
|
-
const registryToSign = { ...registry };
|
|
181
|
-
delete registryToSign.registrySignature;
|
|
182
|
-
delete registryToSign.registryPublicKey;
|
|
183
|
-
|
|
184
|
-
const message = JSON.stringify(registryToSign);
|
|
185
|
-
const signature = await ed.signAsync(
|
|
186
|
-
new TextEncoder().encode(message),
|
|
187
|
-
Buffer.from(privateKey, 'hex')
|
|
188
|
-
);
|
|
189
|
-
const publicKey = await ed.getPublicKeyAsync(Buffer.from(privateKey, 'hex'));
|
|
190
|
-
|
|
191
|
-
registry.registrySignature = Buffer.from(signature).toString('hex');
|
|
192
|
-
registry.registryPublicKey = `ed25519:${Buffer.from(publicKey).toString('hex')}`;
|
|
193
|
-
|
|
194
|
-
// Pin to IPFS
|
|
195
|
-
const pinResponse = await fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', {
|
|
196
|
-
method: 'POST',
|
|
197
|
-
headers: {
|
|
198
|
-
'Content-Type': 'application/json',
|
|
199
|
-
'Authorization': `Bearer ${pinataJwt}`,
|
|
200
|
-
},
|
|
201
|
-
body: JSON.stringify({
|
|
202
|
-
pinataContent: registry,
|
|
203
|
-
pinataMetadata: {
|
|
204
|
-
name: 'claude-flow-plugin-registry',
|
|
205
|
-
keyvalues: {
|
|
206
|
-
version: registry.version,
|
|
207
|
-
updatedAt: registry.updatedAt,
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
}),
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
if (!pinResponse.ok) {
|
|
214
|
-
throw new Error(`Pinata error: ${await pinResponse.text()}`);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const pinResult = await pinResponse.json();
|
|
218
|
-
|
|
219
|
-
res.json({
|
|
220
|
-
success: true,
|
|
221
|
-
cid: pinResult.IpfsHash,
|
|
222
|
-
updatedAt: registry.updatedAt,
|
|
223
|
-
pluginCount: registry.plugins.length,
|
|
224
|
-
gateways: [
|
|
225
|
-
`https://gateway.pinata.cloud/ipfs/${pinResult.IpfsHash}`,
|
|
226
|
-
`https://ipfs.io/ipfs/${pinResult.IpfsHash}`,
|
|
227
|
-
],
|
|
228
|
-
});
|
|
229
|
-
} catch (error) {
|
|
230
|
-
console.error('Publish failed:', error);
|
|
231
|
-
res.status(500).json({ error: error.message });
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### 3.4 Deploy Function
|
|
237
|
-
|
|
238
|
-
```bash
|
|
239
|
-
gcloud functions deploy publish-registry \
|
|
240
|
-
--gen2 \
|
|
241
|
-
--runtime=nodejs20 \
|
|
242
|
-
--region=us-central1 \
|
|
243
|
-
--source=. \
|
|
244
|
-
--entry-point=publishRegistry \
|
|
245
|
-
--trigger-http \
|
|
246
|
-
--allow-unauthenticated \
|
|
247
|
-
--service-account=plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com \
|
|
248
|
-
--set-env-vars=GCP_PROJECT=claude-flow-registry
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## Step 4: Create Initial Registry
|
|
252
|
-
|
|
253
|
-
### 4.1 Upload Registry to GCS
|
|
254
|
-
|
|
255
|
-
```bash
|
|
256
|
-
# Generate initial registry
|
|
257
|
-
npx tsx scripts/publish-registry.ts --dry-run > registry.json
|
|
258
|
-
|
|
259
|
-
# Upload to GCS
|
|
260
|
-
gsutil cp registry.json gs://claude-flow-plugin-registry/registry.json
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### 4.2 Trigger First Publish
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
# Get function URL
|
|
267
|
-
FUNCTION_URL=$(gcloud functions describe publish-registry \
|
|
268
|
-
--gen2 --region=us-central1 --format='value(serviceConfig.uri)')
|
|
269
|
-
|
|
270
|
-
# Trigger publish
|
|
271
|
-
curl -X POST "$FUNCTION_URL"
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
## Step 5: Automate with Cloud Build
|
|
275
|
-
|
|
276
|
-
### 5.1 Create cloudbuild.yaml
|
|
277
|
-
|
|
278
|
-
```yaml
|
|
279
|
-
steps:
|
|
280
|
-
# Update registry from npm stats
|
|
281
|
-
- name: 'node:20'
|
|
282
|
-
entrypoint: 'npx'
|
|
283
|
-
args: ['tsx', 'scripts/publish-registry.ts', '--dry-run']
|
|
284
|
-
dir: 'v3/@claude-flow/cli'
|
|
285
|
-
|
|
286
|
-
# Upload to GCS
|
|
287
|
-
- name: 'gcr.io/cloud-builders/gsutil'
|
|
288
|
-
args: ['cp', 'registry.json', 'gs://claude-flow-plugin-registry/registry.json']
|
|
289
|
-
|
|
290
|
-
# Trigger Cloud Function
|
|
291
|
-
- name: 'gcr.io/cloud-builders/curl'
|
|
292
|
-
args: ['-X', 'POST', '${_FUNCTION_URL}']
|
|
293
|
-
|
|
294
|
-
substitutions:
|
|
295
|
-
_FUNCTION_URL: 'https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry'
|
|
296
|
-
|
|
297
|
-
# Run daily at 2am UTC
|
|
298
|
-
options:
|
|
299
|
-
logging: CLOUD_LOGGING_ONLY
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### 5.2 Create Cloud Scheduler Trigger
|
|
303
|
-
|
|
304
|
-
```bash
|
|
305
|
-
gcloud scheduler jobs create http publish-registry-daily \
|
|
306
|
-
--location=us-central1 \
|
|
307
|
-
--schedule="0 2 * * *" \
|
|
308
|
-
--uri="https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry" \
|
|
309
|
-
--http-method=POST
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
## Step 6: Update Claude Flow CLI
|
|
313
|
-
|
|
314
|
-
Update `DEFAULT_PLUGIN_STORE_CONFIG` in `discovery.ts`:
|
|
315
|
-
|
|
316
|
-
```typescript
|
|
317
|
-
export const DEFAULT_PLUGIN_STORE_CONFIG: PluginStoreConfig = {
|
|
318
|
-
registries: [
|
|
319
|
-
{
|
|
320
|
-
name: 'claude-flow-official',
|
|
321
|
-
description: 'Official Claude Flow plugin registry',
|
|
322
|
-
// Use the CID from your first publish
|
|
323
|
-
ipnsName: 'YOUR_IPNS_KEY_OR_CID',
|
|
324
|
-
gateway: 'https://gateway.pinata.cloud',
|
|
325
|
-
// Use your public key from the signing step
|
|
326
|
-
publicKey: 'ed25519:YOUR_PUBLIC_KEY',
|
|
327
|
-
trusted: true,
|
|
328
|
-
official: true,
|
|
329
|
-
},
|
|
330
|
-
],
|
|
331
|
-
// ... rest of config
|
|
332
|
-
};
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
## Cost Estimate
|
|
336
|
-
|
|
337
|
-
| Service | Free Tier | Paid Tier |
|
|
338
|
-
|---------|-----------|-----------|
|
|
339
|
-
| Pinata | 1GB storage, 100 pins | $20/mo for 100GB |
|
|
340
|
-
| GCS | 5GB free | ~$0.02/GB/mo |
|
|
341
|
-
| Cloud Functions | 2M invocations free | ~$0.40/million |
|
|
342
|
-
| Cloud Scheduler | 3 jobs free | $0.10/job/mo |
|
|
343
|
-
| **Total** | **$0** | **~$20/mo** |
|
|
344
|
-
|
|
345
|
-
## Troubleshooting
|
|
346
|
-
|
|
347
|
-
### IPNS Resolution Fails
|
|
348
|
-
- Ensure the CID is pinned on Pinata
|
|
349
|
-
- Try different gateways (ipfs.io, cloudflare-ipfs.com)
|
|
350
|
-
- IPNS can take 5-10 minutes to propagate
|
|
351
|
-
|
|
352
|
-
### Signature Verification Fails
|
|
353
|
-
- Ensure the public key in config matches the signing key
|
|
354
|
-
- Check that the registry wasn't modified after signing
|
|
355
|
-
|
|
356
|
-
### Cloud Function Errors
|
|
357
|
-
- Check Cloud Logging for detailed errors
|
|
358
|
-
- Verify service account has correct permissions
|
|
359
|
-
- Test secrets access manually
|
|
360
|
-
|
|
361
|
-
## References
|
|
362
|
-
|
|
363
|
-
- [Pinata Docs](https://docs.pinata.cloud/)
|
|
364
|
-
- [Google Cloud Functions](https://cloud.google.com/functions/docs)
|
|
365
|
-
- [IPFS Gateway Spec](https://docs.ipfs.tech/concepts/ipfs-gateway/)
|
|
366
|
-
- [Ed25519 Signatures](https://ed25519.cr.yp.to/)
|
|
1
|
+
# IPFS Plugin Registry Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide walks through setting up a live IPFS plugin registry using Google Cloud and Pinata.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Google Cloud account with billing enabled
|
|
8
|
+
- Node.js 20+
|
|
9
|
+
- `gcloud` CLI installed
|
|
10
|
+
|
|
11
|
+
## Step 1: Pinata Setup (IPFS Pinning Service)
|
|
12
|
+
|
|
13
|
+
### 1.1 Create Pinata Account
|
|
14
|
+
|
|
15
|
+
1. Go to https://pinata.cloud and create an account
|
|
16
|
+
2. Navigate to API Keys section
|
|
17
|
+
3. Create a new API key with these permissions:
|
|
18
|
+
- `pinning/pinFileToIPFS`: true
|
|
19
|
+
- `pinning/pinJSONToIPFS`: true
|
|
20
|
+
- `pinning/unpin`: true
|
|
21
|
+
|
|
22
|
+
### 1.2 Save Your Credentials
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Add to your shell profile (~/.zshrc or ~/.bashrc)
|
|
26
|
+
export PINATA_JWT="your-jwt-token-here"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 1.3 Generate IPNS Key (Optional - for stable addressing)
|
|
30
|
+
|
|
31
|
+
If you have Pinata's paid plan with Dedicated Gateways:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Via Pinata dashboard or API
|
|
35
|
+
curl -X POST "https://api.pinata.cloud/v3/ipfs/keys" \
|
|
36
|
+
-H "Authorization: Bearer $PINATA_JWT" \
|
|
37
|
+
-H "Content-Type: application/json" \
|
|
38
|
+
-d '{"name": "claude-flow-registry"}'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Step 2: Google Cloud Setup
|
|
42
|
+
|
|
43
|
+
### 2.1 Create Project
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Create new project
|
|
47
|
+
gcloud projects create claude-flow-registry --name="Claude Flow Registry"
|
|
48
|
+
|
|
49
|
+
# Set as active project
|
|
50
|
+
gcloud config set project claude-flow-registry
|
|
51
|
+
|
|
52
|
+
# Enable billing (required for Cloud Functions)
|
|
53
|
+
gcloud beta billing projects link claude-flow-registry \
|
|
54
|
+
--billing-account=YOUR_BILLING_ACCOUNT_ID
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 2.2 Enable Required APIs
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
gcloud services enable \
|
|
61
|
+
cloudfunctions.googleapis.com \
|
|
62
|
+
cloudbuild.googleapis.com \
|
|
63
|
+
storage.googleapis.com \
|
|
64
|
+
secretmanager.googleapis.com
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 2.3 Create Storage Bucket
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Create bucket for registry source data
|
|
71
|
+
gcloud storage buckets create gs://claude-flow-plugin-registry \
|
|
72
|
+
--location=US \
|
|
73
|
+
--uniform-bucket-level-access
|
|
74
|
+
|
|
75
|
+
# Enable versioning for rollback
|
|
76
|
+
gsutil versioning set on gs://claude-flow-plugin-registry
|
|
77
|
+
|
|
78
|
+
# Make registry.json publicly readable (optional)
|
|
79
|
+
gsutil iam ch allUsers:objectViewer gs://claude-flow-plugin-registry
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2.4 Create Service Account
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Create service account
|
|
86
|
+
gcloud iam service-accounts create plugin-registry-publisher \
|
|
87
|
+
--display-name="Plugin Registry Publisher"
|
|
88
|
+
|
|
89
|
+
# Grant permissions
|
|
90
|
+
gcloud projects add-iam-policy-binding claude-flow-registry \
|
|
91
|
+
--member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
|
|
92
|
+
--role="roles/storage.objectAdmin"
|
|
93
|
+
|
|
94
|
+
gcloud projects add-iam-policy-binding claude-flow-registry \
|
|
95
|
+
--member="serviceAccount:plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com" \
|
|
96
|
+
--role="roles/secretmanager.secretAccessor"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 2.5 Store Secrets
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Store Pinata JWT
|
|
103
|
+
echo -n "$PINATA_JWT" | gcloud secrets create pinata-jwt --data-file=-
|
|
104
|
+
|
|
105
|
+
# Generate and store Ed25519 signing key
|
|
106
|
+
node -e "
|
|
107
|
+
const crypto = require('crypto');
|
|
108
|
+
const { subtle } = require('crypto').webcrypto;
|
|
109
|
+
(async () => {
|
|
110
|
+
const keyPair = await subtle.generateKey(
|
|
111
|
+
{ name: 'Ed25519', namedCurve: 'Ed25519' },
|
|
112
|
+
true,
|
|
113
|
+
['sign', 'verify']
|
|
114
|
+
);
|
|
115
|
+
const privateKey = await subtle.exportKey('pkcs8', keyPair.privateKey);
|
|
116
|
+
const privateKeyHex = Buffer.from(privateKey).toString('hex');
|
|
117
|
+
console.log(privateKeyHex);
|
|
118
|
+
})();
|
|
119
|
+
" | gcloud secrets create registry-private-key --data-file=-
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Step 3: Deploy Cloud Function
|
|
123
|
+
|
|
124
|
+
### 3.1 Create Function Directory
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
mkdir -p cloud-functions/publish-registry
|
|
128
|
+
cd cloud-functions/publish-registry
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 3.2 Create package.json
|
|
132
|
+
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"name": "publish-registry",
|
|
136
|
+
"version": "1.0.0",
|
|
137
|
+
"main": "index.js",
|
|
138
|
+
"type": "module",
|
|
139
|
+
"dependencies": {
|
|
140
|
+
"@google-cloud/storage": "^7.0.0",
|
|
141
|
+
"@google-cloud/secret-manager": "^5.0.0",
|
|
142
|
+
"@noble/ed25519": "^2.0.0"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3.3 Create index.js
|
|
148
|
+
|
|
149
|
+
```javascript
|
|
150
|
+
import { Storage } from '@google-cloud/storage';
|
|
151
|
+
import { SecretManagerServiceClient } from '@google-cloud/secret-manager';
|
|
152
|
+
import * as ed from '@noble/ed25519';
|
|
153
|
+
|
|
154
|
+
const storage = new Storage();
|
|
155
|
+
const secretManager = new SecretManagerServiceClient();
|
|
156
|
+
|
|
157
|
+
async function getSecret(name) {
|
|
158
|
+
const [version] = await secretManager.accessSecretVersion({
|
|
159
|
+
name: `projects/claude-flow-registry/secrets/${name}/versions/latest`,
|
|
160
|
+
});
|
|
161
|
+
return version.payload.data.toString();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export async function publishRegistry(req, res) {
|
|
165
|
+
try {
|
|
166
|
+
// Get secrets
|
|
167
|
+
const pinataJwt = await getSecret('pinata-jwt');
|
|
168
|
+
const privateKey = await getSecret('registry-private-key');
|
|
169
|
+
|
|
170
|
+
// Fetch registry from GCS
|
|
171
|
+
const bucket = storage.bucket('claude-flow-plugin-registry');
|
|
172
|
+
const file = bucket.file('registry.json');
|
|
173
|
+
const [content] = await file.download();
|
|
174
|
+
const registry = JSON.parse(content.toString());
|
|
175
|
+
|
|
176
|
+
// Update timestamp
|
|
177
|
+
registry.updatedAt = new Date().toISOString();
|
|
178
|
+
|
|
179
|
+
// Sign registry
|
|
180
|
+
const registryToSign = { ...registry };
|
|
181
|
+
delete registryToSign.registrySignature;
|
|
182
|
+
delete registryToSign.registryPublicKey;
|
|
183
|
+
|
|
184
|
+
const message = JSON.stringify(registryToSign);
|
|
185
|
+
const signature = await ed.signAsync(
|
|
186
|
+
new TextEncoder().encode(message),
|
|
187
|
+
Buffer.from(privateKey, 'hex')
|
|
188
|
+
);
|
|
189
|
+
const publicKey = await ed.getPublicKeyAsync(Buffer.from(privateKey, 'hex'));
|
|
190
|
+
|
|
191
|
+
registry.registrySignature = Buffer.from(signature).toString('hex');
|
|
192
|
+
registry.registryPublicKey = `ed25519:${Buffer.from(publicKey).toString('hex')}`;
|
|
193
|
+
|
|
194
|
+
// Pin to IPFS
|
|
195
|
+
const pinResponse = await fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', {
|
|
196
|
+
method: 'POST',
|
|
197
|
+
headers: {
|
|
198
|
+
'Content-Type': 'application/json',
|
|
199
|
+
'Authorization': `Bearer ${pinataJwt}`,
|
|
200
|
+
},
|
|
201
|
+
body: JSON.stringify({
|
|
202
|
+
pinataContent: registry,
|
|
203
|
+
pinataMetadata: {
|
|
204
|
+
name: 'claude-flow-plugin-registry',
|
|
205
|
+
keyvalues: {
|
|
206
|
+
version: registry.version,
|
|
207
|
+
updatedAt: registry.updatedAt,
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
}),
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
if (!pinResponse.ok) {
|
|
214
|
+
throw new Error(`Pinata error: ${await pinResponse.text()}`);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
const pinResult = await pinResponse.json();
|
|
218
|
+
|
|
219
|
+
res.json({
|
|
220
|
+
success: true,
|
|
221
|
+
cid: pinResult.IpfsHash,
|
|
222
|
+
updatedAt: registry.updatedAt,
|
|
223
|
+
pluginCount: registry.plugins.length,
|
|
224
|
+
gateways: [
|
|
225
|
+
`https://gateway.pinata.cloud/ipfs/${pinResult.IpfsHash}`,
|
|
226
|
+
`https://ipfs.io/ipfs/${pinResult.IpfsHash}`,
|
|
227
|
+
],
|
|
228
|
+
});
|
|
229
|
+
} catch (error) {
|
|
230
|
+
console.error('Publish failed:', error);
|
|
231
|
+
res.status(500).json({ error: error.message });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### 3.4 Deploy Function
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
gcloud functions deploy publish-registry \
|
|
240
|
+
--gen2 \
|
|
241
|
+
--runtime=nodejs20 \
|
|
242
|
+
--region=us-central1 \
|
|
243
|
+
--source=. \
|
|
244
|
+
--entry-point=publishRegistry \
|
|
245
|
+
--trigger-http \
|
|
246
|
+
--allow-unauthenticated \
|
|
247
|
+
--service-account=plugin-registry-publisher@claude-flow-registry.iam.gserviceaccount.com \
|
|
248
|
+
--set-env-vars=GCP_PROJECT=claude-flow-registry
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Step 4: Create Initial Registry
|
|
252
|
+
|
|
253
|
+
### 4.1 Upload Registry to GCS
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Generate initial registry
|
|
257
|
+
npx tsx scripts/publish-registry.ts --dry-run > registry.json
|
|
258
|
+
|
|
259
|
+
# Upload to GCS
|
|
260
|
+
gsutil cp registry.json gs://claude-flow-plugin-registry/registry.json
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
### 4.2 Trigger First Publish
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# Get function URL
|
|
267
|
+
FUNCTION_URL=$(gcloud functions describe publish-registry \
|
|
268
|
+
--gen2 --region=us-central1 --format='value(serviceConfig.uri)')
|
|
269
|
+
|
|
270
|
+
# Trigger publish
|
|
271
|
+
curl -X POST "$FUNCTION_URL"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
## Step 5: Automate with Cloud Build
|
|
275
|
+
|
|
276
|
+
### 5.1 Create cloudbuild.yaml
|
|
277
|
+
|
|
278
|
+
```yaml
|
|
279
|
+
steps:
|
|
280
|
+
# Update registry from npm stats
|
|
281
|
+
- name: 'node:20'
|
|
282
|
+
entrypoint: 'npx'
|
|
283
|
+
args: ['tsx', 'scripts/publish-registry.ts', '--dry-run']
|
|
284
|
+
dir: 'v3/@claude-flow/cli'
|
|
285
|
+
|
|
286
|
+
# Upload to GCS
|
|
287
|
+
- name: 'gcr.io/cloud-builders/gsutil'
|
|
288
|
+
args: ['cp', 'registry.json', 'gs://claude-flow-plugin-registry/registry.json']
|
|
289
|
+
|
|
290
|
+
# Trigger Cloud Function
|
|
291
|
+
- name: 'gcr.io/cloud-builders/curl'
|
|
292
|
+
args: ['-X', 'POST', '${_FUNCTION_URL}']
|
|
293
|
+
|
|
294
|
+
substitutions:
|
|
295
|
+
_FUNCTION_URL: 'https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry'
|
|
296
|
+
|
|
297
|
+
# Run daily at 2am UTC
|
|
298
|
+
options:
|
|
299
|
+
logging: CLOUD_LOGGING_ONLY
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 5.2 Create Cloud Scheduler Trigger
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
gcloud scheduler jobs create http publish-registry-daily \
|
|
306
|
+
--location=us-central1 \
|
|
307
|
+
--schedule="0 2 * * *" \
|
|
308
|
+
--uri="https://us-central1-claude-flow-registry.cloudfunctions.net/publish-registry" \
|
|
309
|
+
--http-method=POST
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## Step 6: Update Claude Flow CLI
|
|
313
|
+
|
|
314
|
+
Update `DEFAULT_PLUGIN_STORE_CONFIG` in `discovery.ts`:
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
export const DEFAULT_PLUGIN_STORE_CONFIG: PluginStoreConfig = {
|
|
318
|
+
registries: [
|
|
319
|
+
{
|
|
320
|
+
name: 'claude-flow-official',
|
|
321
|
+
description: 'Official Claude Flow plugin registry',
|
|
322
|
+
// Use the CID from your first publish
|
|
323
|
+
ipnsName: 'YOUR_IPNS_KEY_OR_CID',
|
|
324
|
+
gateway: 'https://gateway.pinata.cloud',
|
|
325
|
+
// Use your public key from the signing step
|
|
326
|
+
publicKey: 'ed25519:YOUR_PUBLIC_KEY',
|
|
327
|
+
trusted: true,
|
|
328
|
+
official: true,
|
|
329
|
+
},
|
|
330
|
+
],
|
|
331
|
+
// ... rest of config
|
|
332
|
+
};
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Cost Estimate
|
|
336
|
+
|
|
337
|
+
| Service | Free Tier | Paid Tier |
|
|
338
|
+
|---------|-----------|-----------|
|
|
339
|
+
| Pinata | 1GB storage, 100 pins | $20/mo for 100GB |
|
|
340
|
+
| GCS | 5GB free | ~$0.02/GB/mo |
|
|
341
|
+
| Cloud Functions | 2M invocations free | ~$0.40/million |
|
|
342
|
+
| Cloud Scheduler | 3 jobs free | $0.10/job/mo |
|
|
343
|
+
| **Total** | **$0** | **~$20/mo** |
|
|
344
|
+
|
|
345
|
+
## Troubleshooting
|
|
346
|
+
|
|
347
|
+
### IPNS Resolution Fails
|
|
348
|
+
- Ensure the CID is pinned on Pinata
|
|
349
|
+
- Try different gateways (ipfs.io, cloudflare-ipfs.com)
|
|
350
|
+
- IPNS can take 5-10 minutes to propagate
|
|
351
|
+
|
|
352
|
+
### Signature Verification Fails
|
|
353
|
+
- Ensure the public key in config matches the signing key
|
|
354
|
+
- Check that the registry wasn't modified after signing
|
|
355
|
+
|
|
356
|
+
### Cloud Function Errors
|
|
357
|
+
- Check Cloud Logging for detailed errors
|
|
358
|
+
- Verify service account has correct permissions
|
|
359
|
+
- Test secrets access manually
|
|
360
|
+
|
|
361
|
+
## References
|
|
362
|
+
|
|
363
|
+
- [Pinata Docs](https://docs.pinata.cloud/)
|
|
364
|
+
- [Google Cloud Functions](https://cloud.google.com/functions/docs)
|
|
365
|
+
- [IPFS Gateway Spec](https://docs.ipfs.tech/concepts/ipfs-gateway/)
|
|
366
|
+
- [Ed25519 Signatures](https://ed25519.cr.yp.to/)
|