moflo 4.0.4 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
- 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/system-design/arch-system-design.md +154 -154
- package/.claude/agents/base-template-generator.md +42 -42
- 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 +265 -265
- package/.claude/agents/core/planner.md +167 -167
- package/.claude/agents/core/researcher.md +189 -189
- package/.claude/agents/core/reviewer.md +325 -325
- package/.claude/agents/core/tester.md +318 -318
- package/.claude/agents/custom/test-long-runner.md +44 -44
- 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/documentation/api-docs/docs-api-openapi.md +173 -173
- package/.claude/agents/dual-mode/codex-coordinator.md +224 -224
- package/.claude/agents/dual-mode/codex-worker.md +211 -211
- package/.claude/agents/dual-mode/dual-orchestrator.md +291 -291
- 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 +537 -537
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +318 -318
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +190 -190
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +366 -366
- 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 +634 -634
- package/.claude/agents/goal/agent.md +815 -815
- package/.claude/agents/goal/code-goal-planner.md +445 -445
- package/.claude/agents/goal/goal-planner.md +167 -167
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +129 -129
- package/.claude/agents/hive-mind/queen-coordinator.md +202 -202
- package/.claude/agents/hive-mind/scout-explorer.md +241 -241
- package/.claude/agents/hive-mind/swarm-memory-manager.md +192 -192
- package/.claude/agents/hive-mind/worker-specialist.md +216 -216
- package/.claude/agents/neural/safla-neural.md +73 -73
- 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/reasoning/agent.md +815 -815
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
- package/.claude/agents/sparc/architecture.md +471 -471
- package/.claude/agents/sparc/pseudocode.md +317 -317
- package/.claude/agents/sparc/refinement.md +524 -524
- package/.claude/agents/sparc/specification.md +275 -275
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
- 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 +395 -395
- package/.claude/agents/swarm/hierarchical-coordinator.md +326 -326
- package/.claude/agents/swarm/mesh-coordinator.md +391 -391
- package/.claude/agents/templates/automation-smart-agent.md +204 -204
- package/.claude/agents/templates/coordinator-swarm-init.md +104 -104
- 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/migration-plan.md +745 -745
- 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 +182 -182
- package/.claude/agents/testing/production-validator.md +394 -394
- package/.claude/agents/testing/tdd-london-swarm.md +243 -243
- package/.claude/agents/testing/unit/tdd-london-swarm.md +243 -243
- package/.claude/agents/testing/validation/production-validator.md +394 -394
- package/.claude/agents/v3/v3-integration-architect.md +345 -345
- package/.claude/agents/v3/v3-memory-specialist.md +317 -317
- package/.claude/agents/v3/v3-performance-engineer.md +396 -396
- package/.claude/agents/v3/v3-queen-coordinator.md +97 -97
- package/.claude/agents/v3/v3-security-architect.md +173 -173
- 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/README.md +96 -96
- package/.claude/helpers/aggressive-microcompact.mjs +36 -36
- package/.claude/helpers/auto-memory-hook.mjs +363 -363
- package/.claude/helpers/context-persistence-hook.mjs +1979 -1979
- package/.claude/helpers/github-safe.js +106 -106
- package/.claude/helpers/learning-service.mjs +1144 -1144
- package/.claude/helpers/metrics-db.mjs +488 -488
- package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
- package/.claude/mcp.json +12 -12
- package/.claude/settings.json +2 -2
- 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/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 +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 +1 -1
- package/.claude/skills/github-multi-repo/SKILL.md +2 -2
- package/.claude/skills/github-project-management/SKILL.md +1 -1
- package/.claude/skills/github-release-management/SKILL.md +2 -2
- package/.claude/skills/github-workflow-automation/SKILL.md +1 -1
- package/.claude/skills/hive-mind-advanced/SKILL.md +4 -4
- 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/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +2 -2
- package/.claude/skills/stream-chain/SKILL.md +563 -563
- package/.claude/skills/swarm-advanced/SKILL.md +4 -4
- 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/.claude/statusline.mjs +109 -109
- package/.claude-plugin/README.md +6 -6
- package/.claude-plugin/docs/INSTALLATION.md +4 -4
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +5 -5
- package/.claude-plugin/docs/QUICKSTART.md +1 -1
- package/.claude-plugin/docs/STRUCTURE.md +128 -128
- package/.claude-plugin/hooks/hooks.json +74 -74
- package/.claude-plugin/marketplace.json +5 -5
- package/.claude-plugin/plugin.json +4 -4
- package/README.md +148 -148
- package/bin/cli.js +12 -12
- package/bin/npx-repair.js +7 -7
- package/bin/npx-safe-launch.js +9 -9
- package/package.json +115 -114
- package/v3/@claude-flow/cli/README.md +5 -5
- package/v3/@claude-flow/cli/bin/cli.js +156 -156
- package/v3/@claude-flow/cli/bin/mcp-server.js +189 -189
- package/v3/@claude-flow/cli/dist/src/commands/analyze.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/analyze.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/claims.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/claims.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/completions.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/completions.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/config.js +36 -2
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +54 -7
- package/v3/@claude-flow/cli/dist/src/commands/deployment.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/deployment.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/doctor.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/doctor.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +90 -90
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +30 -112
- package/v3/@claude-flow/cli/dist/src/commands/init.js +6 -1
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +30 -30
- package/v3/@claude-flow/cli/dist/src/commands/neural.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/neural.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/orc.js +1 -0
- package/v3/@claude-flow/cli/dist/src/commands/performance.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/performance.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/plugins.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/plugins.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/providers.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/providers.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/route.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/route.js +1 -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 +29 -29
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/index.js +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +113 -113
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +97 -97
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +2 -2
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +36 -36
- package/v3/@claude-flow/cli/dist/src/commands/security.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/commands/security.js +2 -2
- package/v3/@claude-flow/cli/dist/src/config/moflo-config.d.ts +13 -1
- package/v3/@claude-flow/cli/dist/src/config/moflo-config.js +93 -41
- package/v3/@claude-flow/cli/dist/src/index.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/index.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/executor.js +3 -3
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +640 -640
- package/v3/@claude-flow/cli/dist/src/init/moflo-init.d.ts +10 -0
- package/v3/@claude-flow/cli/dist/src/init/moflo-init.js +101 -20
- package/v3/@claude-flow/cli/dist/src/init/settings-generator.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +783 -783
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +30 -13
- package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/mcp-tools/security-tools.js +1 -1
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +61 -61
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +2212 -2263
- package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.js +1 -1
- package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/ruvector/vector-db.js +1 -1
- package/v3/@claude-flow/cli/dist/src/services/agent-router.d.ts +14 -0
- package/v3/@claude-flow/cli/dist/src/services/agent-router.js +86 -7
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/v3/@claude-flow/cli/dist/src/services/index.d.ts +1 -3
- package/v3/@claude-flow/cli/dist/src/services/index.js +1 -2
- package/v3/@claude-flow/cli/dist/src/services/learning-service.js +54 -54
- package/v3/@claude-flow/cli/dist/src/services/ruvector-training.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/services/ruvector-training.js +1 -1
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +24 -3
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +123 -12
- package/v3/@claude-flow/cli/dist/src/services/workflow-gate.d.ts +1 -0
- package/v3/@claude-flow/cli/dist/src/services/workflow-gate.js +20 -5
- package/v3/@claude-flow/cli/dist/src/suggest.d.ts +1 -1
- package/v3/@claude-flow/cli/dist/src/suggest.js +1 -1
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
- package/v3/@claude-flow/cli/package.json +6 -6
- package/v3/@claude-flow/guidance/README.md +6 -6
- package/v3/@claude-flow/guidance/package.json +1 -1
- package/v3/@claude-flow/memory/README.md +1 -1
- package/v3/@claude-flow/shared/README.md +1 -1
- package/v3/@claude-flow/shared/package.json +42 -42
- package/v3/README.md +3 -3
|
@@ -1,189 +1,189 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* @claude-flow/cli - MCP Server Entry Point
|
|
4
|
-
*
|
|
5
|
-
* Direct stdio MCP server for Claude Code integration.
|
|
6
|
-
* This entry point handles stdin/stdout directly for MCP protocol
|
|
7
|
-
* without any CLI formatting output that would corrupt the protocol.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { randomUUID } from 'crypto';
|
|
11
|
-
import { listMCPTools, callMCPTool, hasTool } from '../dist/src/mcp-client.js';
|
|
12
|
-
|
|
13
|
-
const VERSION = '3.0.0';
|
|
14
|
-
const sessionId = `mcp-${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
15
|
-
|
|
16
|
-
// Log to stderr (doesn't corrupt stdout for MCP protocol)
|
|
17
|
-
console.error(
|
|
18
|
-
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Starting in stdio mode`
|
|
19
|
-
);
|
|
20
|
-
console.error(JSON.stringify({
|
|
21
|
-
arch: process.arch,
|
|
22
|
-
mode: 'mcp-stdio',
|
|
23
|
-
nodeVersion: process.version,
|
|
24
|
-
pid: process.pid,
|
|
25
|
-
platform: process.platform,
|
|
26
|
-
protocol: 'stdio',
|
|
27
|
-
sessionId,
|
|
28
|
-
version: VERSION,
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
// Handle stdin messages
|
|
32
|
-
let buffer = '';
|
|
33
|
-
|
|
34
|
-
process.stdin.setEncoding('utf8');
|
|
35
|
-
process.stdin.on('data', async (chunk) => {
|
|
36
|
-
buffer += chunk;
|
|
37
|
-
|
|
38
|
-
// Process complete JSON messages (newline-delimited)
|
|
39
|
-
let lines = buffer.split('\n');
|
|
40
|
-
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
41
|
-
|
|
42
|
-
for (const line of lines) {
|
|
43
|
-
if (line.trim()) {
|
|
44
|
-
try {
|
|
45
|
-
const message = JSON.parse(line);
|
|
46
|
-
const response = await handleMessage(message);
|
|
47
|
-
if (response) {
|
|
48
|
-
console.log(JSON.stringify(response));
|
|
49
|
-
}
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.error(
|
|
52
|
-
`[${new Date().toISOString()}] ERROR [claude-flow-mcp] Failed to parse:`,
|
|
53
|
-
error instanceof Error ? error.message : String(error)
|
|
54
|
-
);
|
|
55
|
-
// Send parse error response
|
|
56
|
-
console.log(JSON.stringify({
|
|
57
|
-
jsonrpc: '2.0',
|
|
58
|
-
id: null,
|
|
59
|
-
error: { code: -32700, message: 'Parse error' },
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
process.stdin.on('end', () => {
|
|
67
|
-
console.error(
|
|
68
|
-
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) stdin closed, shutting down...`
|
|
69
|
-
);
|
|
70
|
-
process.exit(0);
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// Handle process termination
|
|
74
|
-
process.on('SIGINT', () => {
|
|
75
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Received SIGINT`);
|
|
76
|
-
process.exit(0);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
process.on('SIGTERM', () => {
|
|
80
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Received SIGTERM`);
|
|
81
|
-
process.exit(0);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Handle MCP message
|
|
86
|
-
*/
|
|
87
|
-
async function handleMessage(message) {
|
|
88
|
-
if (!message.method) {
|
|
89
|
-
return {
|
|
90
|
-
jsonrpc: '2.0',
|
|
91
|
-
id: message.id,
|
|
92
|
-
error: { code: -32600, message: 'Invalid Request: missing method' },
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const params = message.params || {};
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
switch (message.method) {
|
|
100
|
-
case 'initialize':
|
|
101
|
-
return {
|
|
102
|
-
jsonrpc: '2.0',
|
|
103
|
-
id: message.id,
|
|
104
|
-
result: {
|
|
105
|
-
protocolVersion: '2024-11-05',
|
|
106
|
-
serverInfo: { name: 'claude-flow', version: VERSION },
|
|
107
|
-
capabilities: {
|
|
108
|
-
tools: { listChanged: true },
|
|
109
|
-
resources: { subscribe: true, listChanged: true },
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
case 'tools/list': {
|
|
115
|
-
const tools = listMCPTools();
|
|
116
|
-
return {
|
|
117
|
-
jsonrpc: '2.0',
|
|
118
|
-
id: message.id,
|
|
119
|
-
result: {
|
|
120
|
-
tools: tools.map(tool => ({
|
|
121
|
-
name: tool.name,
|
|
122
|
-
description: tool.description,
|
|
123
|
-
inputSchema: tool.inputSchema,
|
|
124
|
-
})),
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
case 'tools/call': {
|
|
130
|
-
const toolName = params.name;
|
|
131
|
-
const toolParams = params.arguments || {};
|
|
132
|
-
|
|
133
|
-
if (!hasTool(toolName)) {
|
|
134
|
-
return {
|
|
135
|
-
jsonrpc: '2.0',
|
|
136
|
-
id: message.id,
|
|
137
|
-
error: { code: -32601, message: `Tool not found: ${toolName}` },
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
try {
|
|
142
|
-
const result = await callMCPTool(toolName, toolParams, { sessionId });
|
|
143
|
-
return {
|
|
144
|
-
jsonrpc: '2.0',
|
|
145
|
-
id: message.id,
|
|
146
|
-
result: { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] },
|
|
147
|
-
};
|
|
148
|
-
} catch (error) {
|
|
149
|
-
return {
|
|
150
|
-
jsonrpc: '2.0',
|
|
151
|
-
id: message.id,
|
|
152
|
-
error: {
|
|
153
|
-
code: -32603,
|
|
154
|
-
message: error instanceof Error ? error.message : 'Tool execution failed',
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
case 'notifications/initialized':
|
|
161
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Client initialized`);
|
|
162
|
-
return null; // No response for notifications
|
|
163
|
-
|
|
164
|
-
case 'ping':
|
|
165
|
-
return {
|
|
166
|
-
jsonrpc: '2.0',
|
|
167
|
-
id: message.id,
|
|
168
|
-
result: {},
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
default:
|
|
172
|
-
return {
|
|
173
|
-
jsonrpc: '2.0',
|
|
174
|
-
id: message.id,
|
|
175
|
-
error: { code: -32601, message: `Method not found: ${message.method}` },
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
} catch (error) {
|
|
179
|
-
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-mcp] ${message.method}:`, error);
|
|
180
|
-
return {
|
|
181
|
-
jsonrpc: '2.0',
|
|
182
|
-
id: message.id,
|
|
183
|
-
error: {
|
|
184
|
-
code: -32603,
|
|
185
|
-
message: error instanceof Error ? error.message : 'Internal error',
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @claude-flow/cli - MCP Server Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Direct stdio MCP server for Claude Code integration.
|
|
6
|
+
* This entry point handles stdin/stdout directly for MCP protocol
|
|
7
|
+
* without any CLI formatting output that would corrupt the protocol.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { randomUUID } from 'crypto';
|
|
11
|
+
import { listMCPTools, callMCPTool, hasTool } from '../dist/src/mcp-client.js';
|
|
12
|
+
|
|
13
|
+
const VERSION = '3.0.0';
|
|
14
|
+
const sessionId = `mcp-${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
15
|
+
|
|
16
|
+
// Log to stderr (doesn't corrupt stdout for MCP protocol)
|
|
17
|
+
console.error(
|
|
18
|
+
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Starting in stdio mode`
|
|
19
|
+
);
|
|
20
|
+
console.error(JSON.stringify({
|
|
21
|
+
arch: process.arch,
|
|
22
|
+
mode: 'mcp-stdio',
|
|
23
|
+
nodeVersion: process.version,
|
|
24
|
+
pid: process.pid,
|
|
25
|
+
platform: process.platform,
|
|
26
|
+
protocol: 'stdio',
|
|
27
|
+
sessionId,
|
|
28
|
+
version: VERSION,
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
// Handle stdin messages
|
|
32
|
+
let buffer = '';
|
|
33
|
+
|
|
34
|
+
process.stdin.setEncoding('utf8');
|
|
35
|
+
process.stdin.on('data', async (chunk) => {
|
|
36
|
+
buffer += chunk;
|
|
37
|
+
|
|
38
|
+
// Process complete JSON messages (newline-delimited)
|
|
39
|
+
let lines = buffer.split('\n');
|
|
40
|
+
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
41
|
+
|
|
42
|
+
for (const line of lines) {
|
|
43
|
+
if (line.trim()) {
|
|
44
|
+
try {
|
|
45
|
+
const message = JSON.parse(line);
|
|
46
|
+
const response = await handleMessage(message);
|
|
47
|
+
if (response) {
|
|
48
|
+
console.log(JSON.stringify(response));
|
|
49
|
+
}
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error(
|
|
52
|
+
`[${new Date().toISOString()}] ERROR [claude-flow-mcp] Failed to parse:`,
|
|
53
|
+
error instanceof Error ? error.message : String(error)
|
|
54
|
+
);
|
|
55
|
+
// Send parse error response
|
|
56
|
+
console.log(JSON.stringify({
|
|
57
|
+
jsonrpc: '2.0',
|
|
58
|
+
id: null,
|
|
59
|
+
error: { code: -32700, message: 'Parse error' },
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
process.stdin.on('end', () => {
|
|
67
|
+
console.error(
|
|
68
|
+
`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) stdin closed, shutting down...`
|
|
69
|
+
);
|
|
70
|
+
process.exit(0);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Handle process termination
|
|
74
|
+
process.on('SIGINT', () => {
|
|
75
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Received SIGINT`);
|
|
76
|
+
process.exit(0);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
process.on('SIGTERM', () => {
|
|
80
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Received SIGTERM`);
|
|
81
|
+
process.exit(0);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Handle MCP message
|
|
86
|
+
*/
|
|
87
|
+
async function handleMessage(message) {
|
|
88
|
+
if (!message.method) {
|
|
89
|
+
return {
|
|
90
|
+
jsonrpc: '2.0',
|
|
91
|
+
id: message.id,
|
|
92
|
+
error: { code: -32600, message: 'Invalid Request: missing method' },
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const params = message.params || {};
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
switch (message.method) {
|
|
100
|
+
case 'initialize':
|
|
101
|
+
return {
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
id: message.id,
|
|
104
|
+
result: {
|
|
105
|
+
protocolVersion: '2024-11-05',
|
|
106
|
+
serverInfo: { name: 'claude-flow', version: VERSION },
|
|
107
|
+
capabilities: {
|
|
108
|
+
tools: { listChanged: true },
|
|
109
|
+
resources: { subscribe: true, listChanged: true },
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
case 'tools/list': {
|
|
115
|
+
const tools = listMCPTools();
|
|
116
|
+
return {
|
|
117
|
+
jsonrpc: '2.0',
|
|
118
|
+
id: message.id,
|
|
119
|
+
result: {
|
|
120
|
+
tools: tools.map(tool => ({
|
|
121
|
+
name: tool.name,
|
|
122
|
+
description: tool.description,
|
|
123
|
+
inputSchema: tool.inputSchema,
|
|
124
|
+
})),
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
case 'tools/call': {
|
|
130
|
+
const toolName = params.name;
|
|
131
|
+
const toolParams = params.arguments || {};
|
|
132
|
+
|
|
133
|
+
if (!hasTool(toolName)) {
|
|
134
|
+
return {
|
|
135
|
+
jsonrpc: '2.0',
|
|
136
|
+
id: message.id,
|
|
137
|
+
error: { code: -32601, message: `Tool not found: ${toolName}` },
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
const result = await callMCPTool(toolName, toolParams, { sessionId });
|
|
143
|
+
return {
|
|
144
|
+
jsonrpc: '2.0',
|
|
145
|
+
id: message.id,
|
|
146
|
+
result: { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] },
|
|
147
|
+
};
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return {
|
|
150
|
+
jsonrpc: '2.0',
|
|
151
|
+
id: message.id,
|
|
152
|
+
error: {
|
|
153
|
+
code: -32603,
|
|
154
|
+
message: error instanceof Error ? error.message : 'Tool execution failed',
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
case 'notifications/initialized':
|
|
161
|
+
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] Client initialized`);
|
|
162
|
+
return null; // No response for notifications
|
|
163
|
+
|
|
164
|
+
case 'ping':
|
|
165
|
+
return {
|
|
166
|
+
jsonrpc: '2.0',
|
|
167
|
+
id: message.id,
|
|
168
|
+
result: {},
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
default:
|
|
172
|
+
return {
|
|
173
|
+
jsonrpc: '2.0',
|
|
174
|
+
id: message.id,
|
|
175
|
+
error: { code: -32601, message: `Method not found: ${message.method}` },
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-mcp] ${message.method}:`, error);
|
|
180
|
+
return {
|
|
181
|
+
jsonrpc: '2.0',
|
|
182
|
+
id: message.id,
|
|
183
|
+
error: {
|
|
184
|
+
code: -32603,
|
|
185
|
+
message: error instanceof Error ? error.message : 'Internal error',
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Module communities using Louvain algorithm
|
|
12
12
|
* - Circular dependency detection
|
|
13
13
|
*
|
|
14
|
-
* Created with
|
|
14
|
+
* Created with motailz.com
|
|
15
15
|
*/
|
|
16
16
|
import { output } from '../output.js';
|
|
17
17
|
import { callMCPTool, MCPClientError } from '../mcp-client.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* V3 CLI Claims Command
|
|
3
3
|
* Claims-based authorization, permissions, and access control
|
|
4
4
|
*
|
|
5
|
-
* Created with ❤️ by
|
|
5
|
+
* Created with ❤️ by motailz.com
|
|
6
6
|
*/
|
|
7
7
|
import { output } from '../output.js';
|
|
8
8
|
// List subcommand
|
|
@@ -365,7 +365,7 @@ export const claimsCommand = {
|
|
|
365
365
|
'admin:* - Administrative operations',
|
|
366
366
|
]);
|
|
367
367
|
output.writeln();
|
|
368
|
-
output.writeln(output.dim('Created with ❤️ by
|
|
368
|
+
output.writeln(output.dim('Created with ❤️ by motailz.com'));
|
|
369
369
|
return { success: true };
|
|
370
370
|
},
|
|
371
371
|
};
|
|
@@ -372,11 +372,43 @@ const importCommand = {
|
|
|
372
372
|
return { success: true, data: { file, merge, imported: true } };
|
|
373
373
|
}
|
|
374
374
|
};
|
|
375
|
+
// Show moflo project config (merged with defaults)
|
|
376
|
+
const showCommand = {
|
|
377
|
+
name: 'show',
|
|
378
|
+
description: 'Show current moflo project configuration',
|
|
379
|
+
options: [
|
|
380
|
+
{ name: 'format', short: 'f', description: 'Output format (json or yaml)', type: 'string', default: 'json' },
|
|
381
|
+
],
|
|
382
|
+
examples: [
|
|
383
|
+
{ command: 'moflo config show', description: 'Show merged config as JSON' },
|
|
384
|
+
],
|
|
385
|
+
action: async (ctx) => {
|
|
386
|
+
const { loadMofloConfig } = await import('../config/moflo-config.js');
|
|
387
|
+
const config = loadMofloConfig();
|
|
388
|
+
output.writeln(JSON.stringify(config, null, 2));
|
|
389
|
+
return { success: true, data: config };
|
|
390
|
+
},
|
|
391
|
+
};
|
|
392
|
+
// Generate moflo.yaml in project root
|
|
393
|
+
const generateCommand = {
|
|
394
|
+
name: 'generate',
|
|
395
|
+
description: 'Generate moflo.yaml config file',
|
|
396
|
+
options: [],
|
|
397
|
+
examples: [
|
|
398
|
+
{ command: 'moflo config generate', description: 'Auto-detect and write moflo.yaml' },
|
|
399
|
+
],
|
|
400
|
+
action: async (_ctx) => {
|
|
401
|
+
const { writeMofloConfig } = await import('../config/moflo-config.js');
|
|
402
|
+
const configPath = writeMofloConfig();
|
|
403
|
+
output.printSuccess(`Config written to: ${configPath}`);
|
|
404
|
+
return { success: true };
|
|
405
|
+
},
|
|
406
|
+
};
|
|
375
407
|
// Main config command
|
|
376
408
|
export const configCommand = {
|
|
377
409
|
name: 'config',
|
|
378
410
|
description: 'Configuration management',
|
|
379
|
-
subcommands: [initCommand, getCommand, setCommand, providersCommand, resetCommand, exportCommand, importCommand],
|
|
411
|
+
subcommands: [initCommand, getCommand, setCommand, providersCommand, resetCommand, exportCommand, importCommand, showCommand, generateCommand],
|
|
380
412
|
options: [],
|
|
381
413
|
examples: [
|
|
382
414
|
{ command: 'claude-flow config init --v3', description: 'Initialize V3 config' },
|
|
@@ -397,7 +429,9 @@ export const configCommand = {
|
|
|
397
429
|
`${output.highlight('providers')} - Manage AI providers`,
|
|
398
430
|
`${output.highlight('reset')} - Reset to defaults`,
|
|
399
431
|
`${output.highlight('export')} - Export configuration`,
|
|
400
|
-
`${output.highlight('import')} - Import configuration
|
|
432
|
+
`${output.highlight('import')} - Import configuration`,
|
|
433
|
+
`${output.highlight('show')} - Show moflo project config (merged with defaults)`,
|
|
434
|
+
`${output.highlight('generate')} - Generate moflo.yaml for current project`
|
|
401
435
|
]);
|
|
402
436
|
return { success: true };
|
|
403
437
|
}
|
|
@@ -19,6 +19,8 @@ const startCommand = {
|
|
|
19
19
|
{ name: 'foreground', short: 'f', type: 'boolean', description: 'Run daemon in foreground (blocks terminal)' },
|
|
20
20
|
{ name: 'headless', type: 'boolean', description: 'Enable headless worker execution (E2B sandbox)' },
|
|
21
21
|
{ name: 'sandbox', type: 'string', description: 'Default sandbox mode for headless workers', choices: ['strict', 'permissive', 'disabled'] },
|
|
22
|
+
{ name: 'max-cpu-load', type: 'string', description: 'Override maxCpuLoad resource threshold (e.g. 4.0)' },
|
|
23
|
+
{ name: 'min-free-memory', type: 'string', description: 'Override minFreeMemoryPercent resource threshold (e.g. 15)' },
|
|
22
24
|
],
|
|
23
25
|
examples: [
|
|
24
26
|
{ command: 'claude-flow daemon start', description: 'Start daemon in background (default)' },
|
|
@@ -31,6 +33,37 @@ const startCommand = {
|
|
|
31
33
|
const foreground = ctx.flags.foreground;
|
|
32
34
|
const projectRoot = process.cwd();
|
|
33
35
|
const isDaemonProcess = process.env.CLAUDE_FLOW_DAEMON === '1';
|
|
36
|
+
// Parse resource threshold overrides from CLI flags
|
|
37
|
+
const config = {};
|
|
38
|
+
const rawMaxCpu = ctx.flags['max-cpu-load'];
|
|
39
|
+
const rawMinMem = ctx.flags['min-free-memory'];
|
|
40
|
+
// Strict numeric pattern to prevent command injection when forwarding to subprocess (S1)
|
|
41
|
+
const NUMERIC_RE = /^\d+(\.\d+)?$/;
|
|
42
|
+
const sanitize = (s) => s.replace(/[\x00-\x1f\x7f-\x9f]/g, '');
|
|
43
|
+
if (rawMaxCpu || rawMinMem) {
|
|
44
|
+
const thresholds = {};
|
|
45
|
+
if (rawMaxCpu) {
|
|
46
|
+
const val = parseFloat(rawMaxCpu);
|
|
47
|
+
if (NUMERIC_RE.test(rawMaxCpu) && isFinite(val) && val > 0 && val <= 1000) {
|
|
48
|
+
thresholds.maxCpuLoad = val;
|
|
49
|
+
}
|
|
50
|
+
else if (!quiet) {
|
|
51
|
+
output.printWarning(`Ignoring invalid --max-cpu-load value: ${sanitize(rawMaxCpu)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (rawMinMem) {
|
|
55
|
+
const val = parseFloat(rawMinMem);
|
|
56
|
+
if (NUMERIC_RE.test(rawMinMem) && isFinite(val) && val >= 0 && val <= 100) {
|
|
57
|
+
thresholds.minFreeMemoryPercent = val;
|
|
58
|
+
}
|
|
59
|
+
else if (!quiet) {
|
|
60
|
+
output.printWarning(`Ignoring invalid --min-free-memory value: ${sanitize(rawMinMem)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (thresholds.maxCpuLoad !== undefined || thresholds.minFreeMemoryPercent !== undefined) {
|
|
64
|
+
config.resourceThresholds = thresholds;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
34
67
|
// Check if background daemon already running (skip if we ARE the daemon process)
|
|
35
68
|
if (!isDaemonProcess) {
|
|
36
69
|
const bgPid = getBackgroundDaemonPid(projectRoot);
|
|
@@ -43,7 +76,7 @@ const startCommand = {
|
|
|
43
76
|
}
|
|
44
77
|
// Background mode (default): fork a detached process
|
|
45
78
|
if (!foreground) {
|
|
46
|
-
return startBackgroundDaemon(projectRoot, quiet);
|
|
79
|
+
return startBackgroundDaemon(projectRoot, quiet, rawMaxCpu, rawMinMem);
|
|
47
80
|
}
|
|
48
81
|
// Foreground mode: run in current process (blocks terminal)
|
|
49
82
|
try {
|
|
@@ -74,7 +107,7 @@ const startCommand = {
|
|
|
74
107
|
if (!quiet) {
|
|
75
108
|
const spinner = output.createSpinner({ text: 'Starting worker daemon...', spinner: 'dots' });
|
|
76
109
|
spinner.start();
|
|
77
|
-
const daemon = await startDaemon(projectRoot);
|
|
110
|
+
const daemon = await startDaemon(projectRoot, config);
|
|
78
111
|
const status = daemon.getStatus();
|
|
79
112
|
spinner.succeed('Worker daemon started (foreground mode)');
|
|
80
113
|
output.writeln();
|
|
@@ -83,6 +116,8 @@ const startCommand = {
|
|
|
83
116
|
`Started: ${status.startedAt?.toISOString()}`,
|
|
84
117
|
`Workers: ${status.config.workers.filter(w => w.enabled).length} enabled`,
|
|
85
118
|
`Max Concurrent: ${status.config.maxConcurrent}`,
|
|
119
|
+
`Max CPU Load: ${status.config.resourceThresholds.maxCpuLoad}`,
|
|
120
|
+
`Min Free Memory: ${status.config.resourceThresholds.minFreeMemoryPercent}%`,
|
|
86
121
|
].join('\n'), 'Daemon Status');
|
|
87
122
|
output.writeln();
|
|
88
123
|
output.writeln(output.bold('Scheduled Workers'));
|
|
@@ -120,7 +155,7 @@ const startCommand = {
|
|
|
120
155
|
await new Promise(() => { }); // Never resolves - daemon runs until killed
|
|
121
156
|
}
|
|
122
157
|
else {
|
|
123
|
-
await startDaemon(projectRoot);
|
|
158
|
+
await startDaemon(projectRoot, config);
|
|
124
159
|
await new Promise(() => { }); // Keep alive
|
|
125
160
|
}
|
|
126
161
|
return { success: true };
|
|
@@ -157,7 +192,7 @@ function validatePath(path, label) {
|
|
|
157
192
|
/**
|
|
158
193
|
* Start daemon as a detached background process
|
|
159
194
|
*/
|
|
160
|
-
async function startBackgroundDaemon(projectRoot, quiet) {
|
|
195
|
+
async function startBackgroundDaemon(projectRoot, quiet, maxCpuLoad, minFreeMemory) {
|
|
161
196
|
// Validate and resolve project root
|
|
162
197
|
const resolvedRoot = resolve(projectRoot);
|
|
163
198
|
validatePath(resolvedRoot, 'Project root');
|
|
@@ -199,10 +234,20 @@ async function startBackgroundDaemon(projectRoot, quiet) {
|
|
|
199
234
|
};
|
|
200
235
|
// Use spawn with explicit arguments instead of shell string interpolation
|
|
201
236
|
// This prevents command injection via paths
|
|
202
|
-
const
|
|
237
|
+
const spawnArgs = [
|
|
203
238
|
cliPath,
|
|
204
|
-
'daemon', 'start', '--foreground', '--quiet'
|
|
205
|
-
]
|
|
239
|
+
'daemon', 'start', '--foreground', '--quiet',
|
|
240
|
+
];
|
|
241
|
+
// Forward resource threshold flags to the foreground child process
|
|
242
|
+
// Validate with strict numeric pattern to prevent shell injection on Windows (S1)
|
|
243
|
+
const SPAWN_NUMERIC_RE = /^\d+(\.\d+)?$/;
|
|
244
|
+
if (maxCpuLoad && SPAWN_NUMERIC_RE.test(maxCpuLoad)) {
|
|
245
|
+
spawnArgs.push('--max-cpu-load', maxCpuLoad);
|
|
246
|
+
}
|
|
247
|
+
if (minFreeMemory && SPAWN_NUMERIC_RE.test(minFreeMemory)) {
|
|
248
|
+
spawnArgs.push('--min-free-memory', minFreeMemory);
|
|
249
|
+
}
|
|
250
|
+
const child = spawn(process.execPath, spawnArgs, spawnOpts);
|
|
206
251
|
// Get PID from spawned process directly (no shell echo needed)
|
|
207
252
|
const pid = child.pid;
|
|
208
253
|
if (!pid || pid <= 0) {
|
|
@@ -371,6 +416,8 @@ const statusCommand = {
|
|
|
371
416
|
status.startedAt ? `Started: ${status.startedAt.toISOString()}` : '',
|
|
372
417
|
`Workers Enabled: ${status.config.workers.filter(w => w.enabled).length}`,
|
|
373
418
|
`Max Concurrent: ${status.config.maxConcurrent}`,
|
|
419
|
+
`Max CPU Load: ${status.config.resourceThresholds.maxCpuLoad}`,
|
|
420
|
+
`Min Free Memory: ${status.config.resourceThresholds.minFreeMemoryPercent}%`,
|
|
374
421
|
].filter(Boolean).join('\n'), 'RuFlo Daemon');
|
|
375
422
|
output.writeln();
|
|
376
423
|
output.writeln(output.bold('Worker Status'));
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* V3 CLI Deployment Command
|
|
3
3
|
* Deployment management, environments, rollbacks
|
|
4
4
|
*
|
|
5
|
-
* Created with ❤️ by
|
|
5
|
+
* Created with ❤️ by motailz.com
|
|
6
6
|
*/
|
|
7
7
|
import { output } from '../output.js';
|
|
8
8
|
// Deploy subcommand
|
|
@@ -281,7 +281,7 @@ export const deploymentCommand = {
|
|
|
281
281
|
'Deployment previews for PRs',
|
|
282
282
|
]);
|
|
283
283
|
output.writeln();
|
|
284
|
-
output.writeln(output.dim('Created with ❤️ by
|
|
284
|
+
output.writeln(output.dim('Created with ❤️ by motailz.com'));
|
|
285
285
|
return { success: true };
|
|
286
286
|
},
|
|
287
287
|
};
|