@claude-flow/cli 3.32.2 → 3.32.3
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/helpers/helpers.manifest.json +3 -3
- package/.claude/helpers/statusline.cjs +38 -38
- package/catalog-manifest.json +2 -2
- package/package.json +2 -2
- package/plugins/ruflo-metaharness/scripts/smoke.sh +11 -11
- package/dist/src/agenticow/speculative-exploration.d.ts +0 -148
- package/dist/src/agenticow/speculative-exploration.js +0 -218
- package/dist/src/appliance/gguf-engine.d.ts +0 -91
- package/dist/src/appliance/gguf-engine.js +0 -425
- package/dist/src/appliance/ruvllm-bridge.d.ts +0 -102
- package/dist/src/appliance/ruvllm-bridge.js +0 -292
- package/dist/src/appliance/rvfa-builder.d.ts +0 -44
- package/dist/src/appliance/rvfa-builder.js +0 -329
- package/dist/src/appliance/rvfa-distribution.d.ts +0 -97
- package/dist/src/appliance/rvfa-distribution.js +0 -370
- package/dist/src/appliance/rvfa-format.d.ts +0 -111
- package/dist/src/appliance/rvfa-format.js +0 -393
- package/dist/src/appliance/rvfa-runner.d.ts +0 -69
- package/dist/src/appliance/rvfa-runner.js +0 -237
- package/dist/src/appliance/rvfa-signing.d.ts +0 -123
- package/dist/src/appliance/rvfa-signing.js +0 -347
- package/dist/src/autopilot-state.d.ts +0 -77
- package/dist/src/autopilot-state.js +0 -271
- package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +0 -18
- package/dist/src/benchmarks/gaia-agent-planning.smoke.js +0 -253
- package/dist/src/benchmarks/gaia-agent.d.ts +0 -198
- package/dist/src/benchmarks/gaia-agent.js +0 -651
- package/dist/src/benchmarks/gaia-causal-memory.d.ts +0 -133
- package/dist/src/benchmarks/gaia-causal-memory.js +0 -281
- package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +0 -22
- package/dist/src/benchmarks/gaia-causal-memory.smoke.js +0 -300
- package/dist/src/benchmarks/gaia-convergence.d.ts +0 -138
- package/dist/src/benchmarks/gaia-convergence.js +0 -260
- package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +0 -19
- package/dist/src/benchmarks/gaia-convergence.smoke.js +0 -246
- package/dist/src/benchmarks/gaia-critic.d.ts +0 -123
- package/dist/src/benchmarks/gaia-critic.js +0 -312
- package/dist/src/benchmarks/gaia-critic.smoke.d.ts +0 -21
- package/dist/src/benchmarks/gaia-critic.smoke.js +0 -327
- package/dist/src/benchmarks/gaia-decomposer.d.ts +0 -125
- package/dist/src/benchmarks/gaia-decomposer.js +0 -350
- package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +0 -21
- package/dist/src/benchmarks/gaia-decomposer.smoke.js +0 -228
- package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +0 -27
- package/dist/src/benchmarks/gaia-e2e-smoke.js +0 -136
- package/dist/src/benchmarks/gaia-extract.smoke.d.ts +0 -45
- package/dist/src/benchmarks/gaia-extract.smoke.js +0 -242
- package/dist/src/benchmarks/gaia-hardness/features.d.ts +0 -46
- package/dist/src/benchmarks/gaia-hardness/features.js +0 -170
- package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +0 -105
- package/dist/src/benchmarks/gaia-hardness/predictor.js +0 -260
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +0 -20
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +0 -235
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +0 -51
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +0 -179
- package/dist/src/benchmarks/gaia-judge.d.ts +0 -88
- package/dist/src/benchmarks/gaia-judge.js +0 -437
- package/dist/src/benchmarks/gaia-loader.d.ts +0 -87
- package/dist/src/benchmarks/gaia-loader.js +0 -326
- package/dist/src/benchmarks/gaia-tools/file_read.d.ts +0 -35
- package/dist/src/benchmarks/gaia-tools/file_read.js +0 -403
- package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +0 -126
- package/dist/src/benchmarks/gaia-tools/grounded_query.js +0 -225
- package/dist/src/benchmarks/gaia-tools/index.d.ts +0 -32
- package/dist/src/benchmarks/gaia-tools/index.js +0 -36
- package/dist/src/benchmarks/gaia-tools/types.d.ts +0 -62
- package/dist/src/benchmarks/gaia-tools/types.js +0 -12
- package/dist/src/benchmarks/gaia-tools/web_search.d.ts +0 -30
- package/dist/src/benchmarks/gaia-tools/web_search.js +0 -210
- package/dist/src/benchmarks/gaia-voting.d.ts +0 -88
- package/dist/src/benchmarks/gaia-voting.js +0 -297
- package/dist/src/benchmarks/gaia-voting.smoke.d.ts +0 -20
- package/dist/src/benchmarks/gaia-voting.smoke.js +0 -332
- package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
- package/dist/src/benchmarks/pretrain/index.js +0 -404
- package/dist/src/business-pods/bbs-budget-tracker.d.ts +0 -139
- package/dist/src/business-pods/bbs-budget-tracker.js +0 -358
- package/dist/src/business-pods/domain-affinity-policy.d.ts +0 -47
- package/dist/src/business-pods/domain-affinity-policy.js +0 -65
- package/dist/src/business-pods/pod-schema.d.ts +0 -96
- package/dist/src/business-pods/pod-schema.js +0 -225
- package/dist/src/commands/advisor.d.ts +0 -15
- package/dist/src/commands/advisor.js +0 -94
- package/dist/src/commands/agent-wasm.d.ts +0 -14
- package/dist/src/commands/agent-wasm.js +0 -333
- package/dist/src/commands/agent.d.ts +0 -8
- package/dist/src/commands/agent.js +0 -927
- package/dist/src/commands/analyze.d.ts +0 -19
- package/dist/src/commands/analyze.js +0 -2047
- package/dist/src/commands/announcements.d.ts +0 -17
- package/dist/src/commands/announcements.js +0 -0
- package/dist/src/commands/appliance-advanced.d.ts +0 -9
- package/dist/src/commands/appliance-advanced.js +0 -215
- package/dist/src/commands/appliance.d.ts +0 -8
- package/dist/src/commands/appliance.js +0 -404
- package/dist/src/commands/autopilot.d.ts +0 -15
- package/dist/src/commands/autopilot.js +0 -407
- package/dist/src/commands/benchmark.d.ts +0 -10
- package/dist/src/commands/benchmark.js +0 -460
- package/dist/src/commands/claims.d.ts +0 -10
- package/dist/src/commands/claims.js +0 -620
- package/dist/src/commands/cleanup.d.ts +0 -13
- package/dist/src/commands/cleanup.js +0 -250
- package/dist/src/commands/completions.d.ts +0 -10
- package/dist/src/commands/completions.js +0 -539
- package/dist/src/commands/config.d.ts +0 -8
- package/dist/src/commands/config.js +0 -428
- package/dist/src/commands/daemon.d.ts +0 -59
- package/dist/src/commands/daemon.js +0 -1733
- package/dist/src/commands/deployment.d.ts +0 -10
- package/dist/src/commands/deployment.js +0 -672
- package/dist/src/commands/doctor.d.ts +0 -10
- package/dist/src/commands/doctor.js +0 -1695
- package/dist/src/commands/eject.d.ts +0 -33
- package/dist/src/commands/eject.js +0 -195
- package/dist/src/commands/embeddings.d.ts +0 -18
- package/dist/src/commands/embeddings.js +0 -1623
- package/dist/src/commands/funnel.d.ts +0 -18
- package/dist/src/commands/funnel.js +0 -302
- package/dist/src/commands/gaia-bench.d.ts +0 -40
- package/dist/src/commands/gaia-bench.js +0 -597
- package/dist/src/commands/guidance.d.ts +0 -8
- package/dist/src/commands/guidance.js +0 -556
- package/dist/src/commands/hive-mind.d.ts +0 -11
- package/dist/src/commands/hive-mind.js +0 -1319
- package/dist/src/commands/hooks.d.ts +0 -8
- package/dist/src/commands/hooks.js +0 -4606
- package/dist/src/commands/index.d.ts +0 -118
- package/dist/src/commands/index.js +0 -364
- package/dist/src/commands/init.d.ts +0 -13
- package/dist/src/commands/init.js +0 -1297
- package/dist/src/commands/issues.d.ts +0 -21
- package/dist/src/commands/issues.js +0 -567
- package/dist/src/commands/mcp.d.ts +0 -11
- package/dist/src/commands/mcp.js +0 -732
- package/dist/src/commands/memory-backup.d.ts +0 -11
- package/dist/src/commands/memory-backup.js +0 -46
- package/dist/src/commands/memory-distill.d.ts +0 -27
- package/dist/src/commands/memory-distill.js +0 -374
- package/dist/src/commands/memory.d.ts +0 -8
- package/dist/src/commands/memory.js +0 -1596
- package/dist/src/commands/metaharness.d.ts +0 -39
- package/dist/src/commands/metaharness.js +0 -215
- package/dist/src/commands/migrate.d.ts +0 -8
- package/dist/src/commands/migrate.js +0 -742
- package/dist/src/commands/neural.d.ts +0 -10
- package/dist/src/commands/neural.js +0 -4331
- package/dist/src/commands/performance.d.ts +0 -10
- package/dist/src/commands/performance.js +0 -583
- package/dist/src/commands/plugins.d.ts +0 -11
- package/dist/src/commands/plugins.js +0 -826
- package/dist/src/commands/process.d.ts +0 -10
- package/dist/src/commands/process.js +0 -694
- package/dist/src/commands/progress.d.ts +0 -11
- package/dist/src/commands/progress.js +0 -259
- package/dist/src/commands/providers.d.ts +0 -10
- package/dist/src/commands/providers.js +0 -502
- package/dist/src/commands/proxy.d.ts +0 -21
- package/dist/src/commands/proxy.js +0 -310
- package/dist/src/commands/route.d.ts +0 -16
- package/dist/src/commands/route.js +0 -822
- package/dist/src/commands/ruvector/backup.d.ts +0 -11
- package/dist/src/commands/ruvector/backup.js +0 -747
- package/dist/src/commands/ruvector/benchmark.d.ts +0 -11
- package/dist/src/commands/ruvector/benchmark.js +0 -490
- package/dist/src/commands/ruvector/import.d.ts +0 -18
- package/dist/src/commands/ruvector/import.js +0 -373
- package/dist/src/commands/ruvector/index.d.ts +0 -29
- package/dist/src/commands/ruvector/index.js +0 -129
- package/dist/src/commands/ruvector/init.d.ts +0 -11
- package/dist/src/commands/ruvector/init.js +0 -467
- package/dist/src/commands/ruvector/migrate.d.ts +0 -11
- package/dist/src/commands/ruvector/migrate.js +0 -498
- package/dist/src/commands/ruvector/optimize.d.ts +0 -11
- package/dist/src/commands/ruvector/optimize.js +0 -505
- package/dist/src/commands/ruvector/pg-utils.d.ts +0 -14
- package/dist/src/commands/ruvector/pg-utils.js +0 -41
- package/dist/src/commands/ruvector/setup.d.ts +0 -18
- package/dist/src/commands/ruvector/setup.js +0 -765
- package/dist/src/commands/ruvector/status.d.ts +0 -11
- package/dist/src/commands/ruvector/status.js +0 -479
- package/dist/src/commands/security.d.ts +0 -10
- package/dist/src/commands/security.js +0 -1012
- package/dist/src/commands/session.d.ts +0 -8
- package/dist/src/commands/session.js +0 -757
- package/dist/src/commands/settings.d.ts +0 -19
- package/dist/src/commands/settings.js +0 -180
- package/dist/src/commands/spinner.d.ts +0 -16
- package/dist/src/commands/spinner.js +0 -329
- package/dist/src/commands/start.d.ts +0 -8
- package/dist/src/commands/start.js +0 -418
- package/dist/src/commands/status.d.ts +0 -8
- package/dist/src/commands/status.js +0 -608
- package/dist/src/commands/swarm.d.ts +0 -8
- package/dist/src/commands/swarm.js +0 -891
- package/dist/src/commands/task.d.ts +0 -8
- package/dist/src/commands/task.js +0 -675
- package/dist/src/commands/transfer-store.d.ts +0 -13
- package/dist/src/commands/transfer-store.js +0 -428
- package/dist/src/commands/update.d.ts +0 -8
- package/dist/src/commands/update.js +0 -276
- package/dist/src/commands/verify.d.ts +0 -19
- package/dist/src/commands/verify.js +0 -261
- package/dist/src/commands/version.d.ts +0 -42
- package/dist/src/commands/version.js +0 -106
- package/dist/src/commands/workflow.d.ts +0 -8
- package/dist/src/commands/workflow.js +0 -617
- package/dist/src/config/harness-feedback-applier.d.ts +0 -50
- package/dist/src/config/harness-feedback-applier.js +0 -122
- package/dist/src/config/proven-config-refresh.d.ts +0 -39
- package/dist/src/config/proven-config-refresh.js +0 -154
- package/dist/src/config/proven-config-rvfa.d.ts +0 -23
- package/dist/src/config/proven-config-rvfa.js +0 -73
- package/dist/src/config/proven-config.d.ts +0 -86
- package/dist/src/config/proven-config.js +0 -176
- package/dist/src/config-adapter.d.ts +0 -15
- package/dist/src/config-adapter.js +0 -186
- package/dist/src/encryption/vault.d.ts +0 -94
- package/dist/src/encryption/vault.js +0 -172
- package/dist/src/fs-secure.d.ts +0 -86
- package/dist/src/fs-secure.js +0 -133
- package/dist/src/funnel/advisor-tip.d.ts +0 -58
- package/dist/src/funnel/advisor-tip.js +0 -92
- package/dist/src/funnel/attribution.d.ts +0 -37
- package/dist/src/funnel/attribution.js +0 -101
- package/dist/src/funnel/consent.d.ts +0 -22
- package/dist/src/funnel/consent.js +0 -58
- package/dist/src/funnel/credit-errors.d.ts +0 -31
- package/dist/src/funnel/credit-errors.js +0 -88
- package/dist/src/funnel/credit-notifier.d.ts +0 -44
- package/dist/src/funnel/credit-notifier.js +0 -74
- package/dist/src/funnel/disclosure.d.ts +0 -47
- package/dist/src/funnel/disclosure.js +0 -109
- package/dist/src/funnel/enrollment.d.ts +0 -36
- package/dist/src/funnel/enrollment.js +0 -64
- package/dist/src/funnel/environment.d.ts +0 -17
- package/dist/src/funnel/environment.js +0 -39
- package/dist/src/funnel/event-transport.d.ts +0 -51
- package/dist/src/funnel/event-transport.js +0 -199
- package/dist/src/funnel/events.d.ts +0 -42
- package/dist/src/funnel/events.js +0 -150
- package/dist/src/funnel/index.d.ts +0 -21
- package/dist/src/funnel/index.js +0 -21
- package/dist/src/funnel/insights.d.ts +0 -50
- package/dist/src/funnel/insights.js +0 -120
- package/dist/src/funnel/local-signals.d.ts +0 -20
- package/dist/src/funnel/local-signals.js +0 -77
- package/dist/src/funnel/message-transport.d.ts +0 -51
- package/dist/src/funnel/message-transport.js +0 -149
- package/dist/src/funnel/messages.d.ts +0 -55
- package/dist/src/funnel/messages.js +0 -160
- package/dist/src/funnel/payout.d.ts +0 -40
- package/dist/src/funnel/payout.js +0 -60
- package/dist/src/funnel/power-saver-notifier.d.ts +0 -44
- package/dist/src/funnel/power-saver-notifier.js +0 -92
- package/dist/src/funnel/precedence.d.ts +0 -16
- package/dist/src/funnel/precedence.js +0 -85
- package/dist/src/funnel/promo.d.ts +0 -41
- package/dist/src/funnel/promo.js +0 -144
- package/dist/src/funnel/rate-limit-notifier.d.ts +0 -55
- package/dist/src/funnel/rate-limit-notifier.js +0 -102
- package/dist/src/funnel/rotation.d.ts +0 -19
- package/dist/src/funnel/rotation.js +0 -70
- package/dist/src/funnel/state.d.ts +0 -13
- package/dist/src/funnel/state.js +0 -52
- package/dist/src/funnel/toggle-cooldown.d.ts +0 -17
- package/dist/src/funnel/toggle-cooldown.js +0 -32
- package/dist/src/funnel/types.d.ts +0 -98
- package/dist/src/funnel/types.js +0 -26
- package/dist/src/index.d.ts +0 -81
- package/dist/src/index.js +0 -609
- package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
- package/dist/src/infrastructure/in-memory-repositories.js +0 -264
- package/dist/src/init/claudemd-generator.d.ts +0 -16
- package/dist/src/init/claudemd-generator.js +0 -368
- package/dist/src/init/executor.d.ts +0 -41
- package/dist/src/init/executor.js +0 -2142
- package/dist/src/init/helper-refresh.d.ts +0 -79
- package/dist/src/init/helper-refresh.js +0 -347
- package/dist/src/init/helper-signing.d.ts +0 -37
- package/dist/src/init/helper-signing.js +0 -67
- package/dist/src/init/helpers-generator.d.ts +0 -87
- package/dist/src/init/helpers-generator.js +0 -1456
- package/dist/src/init/index.d.ts +0 -13
- package/dist/src/init/index.js +0 -15
- package/dist/src/init/mcp-generator.d.ts +0 -26
- package/dist/src/init/mcp-generator.js +0 -126
- package/dist/src/init/memory-package-resolver.d.ts +0 -53
- package/dist/src/init/memory-package-resolver.js +0 -118
- package/dist/src/init/settings-generator.d.ts +0 -14
- package/dist/src/init/settings-generator.js +0 -462
- package/dist/src/init/statusline-generator.d.ts +0 -28
- package/dist/src/init/statusline-generator.js +0 -177
- package/dist/src/init/types.d.ts +0 -331
- package/dist/src/init/types.js +0 -276
- package/dist/src/log-filters.d.ts +0 -46
- package/dist/src/log-filters.js +0 -107
- package/dist/src/mcp-client.d.ts +0 -92
- package/dist/src/mcp-client.js +0 -397
- package/dist/src/mcp-server.d.ts +0 -163
- package/dist/src/mcp-server.js +0 -751
- package/dist/src/mcp-tools/agent-execute-core.d.ts +0 -115
- package/dist/src/mcp-tools/agent-execute-core.js +0 -587
- package/dist/src/mcp-tools/agent-tools.d.ts +0 -9
- package/dist/src/mcp-tools/agent-tools.js +0 -837
- package/dist/src/mcp-tools/agentbbs-tools.d.ts +0 -28
- package/dist/src/mcp-tools/agentbbs-tools.js +0 -394
- package/dist/src/mcp-tools/agentdb-tools.d.ts +0 -35
- package/dist/src/mcp-tools/agentdb-tools.js +0 -1473
- package/dist/src/mcp-tools/agenticow-loader.d.ts +0 -59
- package/dist/src/mcp-tools/agenticow-loader.js +0 -105
- package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts +0 -24
- package/dist/src/mcp-tools/agenticow-speculate-tools.js +0 -209
- package/dist/src/mcp-tools/agenticow-tools.d.ts +0 -36
- package/dist/src/mcp-tools/agenticow-tools.js +0 -360
- package/dist/src/mcp-tools/analyze-tools.d.ts +0 -38
- package/dist/src/mcp-tools/analyze-tools.js +0 -346
- package/dist/src/mcp-tools/auto-install.d.ts +0 -83
- package/dist/src/mcp-tools/auto-install.js +0 -131
- package/dist/src/mcp-tools/autopilot-tools.d.ts +0 -12
- package/dist/src/mcp-tools/autopilot-tools.js +0 -231
- package/dist/src/mcp-tools/browser-intent-tools.d.ts +0 -162
- package/dist/src/mcp-tools/browser-intent-tools.js +0 -548
- package/dist/src/mcp-tools/browser-session-tools.d.ts +0 -27
- package/dist/src/mcp-tools/browser-session-tools.js +0 -398
- package/dist/src/mcp-tools/browser-tools.d.ts +0 -21
- package/dist/src/mcp-tools/browser-tools.js +0 -760
- package/dist/src/mcp-tools/business-pod-tools.d.ts +0 -20
- package/dist/src/mcp-tools/business-pod-tools.js +0 -169
- package/dist/src/mcp-tools/claims-tools.d.ts +0 -12
- package/dist/src/mcp-tools/claims-tools.js +0 -863
- package/dist/src/mcp-tools/config-tools.d.ts +0 -8
- package/dist/src/mcp-tools/config-tools.js +0 -411
- package/dist/src/mcp-tools/coordination-tools.d.ts +0 -13
- package/dist/src/mcp-tools/coordination-tools.js +0 -729
- package/dist/src/mcp-tools/daa-tools.d.ts +0 -13
- package/dist/src/mcp-tools/daa-tools.js +0 -534
- package/dist/src/mcp-tools/embeddings-tools.d.ts +0 -9
- package/dist/src/mcp-tools/embeddings-tools.js +0 -904
- package/dist/src/mcp-tools/github-tools.d.ts +0 -9
- package/dist/src/mcp-tools/github-tools.js +0 -659
- package/dist/src/mcp-tools/guidance-tools.d.ts +0 -15
- package/dist/src/mcp-tools/guidance-tools.js +0 -639
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -8
- package/dist/src/mcp-tools/hive-mind-tools.js +0 -953
- package/dist/src/mcp-tools/hooks-tools.d.ts +0 -65
- package/dist/src/mcp-tools/hooks-tools.js +0 -4836
- package/dist/src/mcp-tools/http-fetch-tools.d.ts +0 -55
- package/dist/src/mcp-tools/http-fetch-tools.js +0 -329
- package/dist/src/mcp-tools/index.d.ts +0 -34
- package/dist/src/mcp-tools/index.js +0 -40
- package/dist/src/mcp-tools/managed-agent-tools.d.ts +0 -22
- package/dist/src/mcp-tools/managed-agent-tools.js +0 -357
- package/dist/src/mcp-tools/memory-tools.d.ts +0 -14
- package/dist/src/mcp-tools/memory-tools.js +0 -1330
- package/dist/src/mcp-tools/metaharness-tools.d.ts +0 -51
- package/dist/src/mcp-tools/metaharness-tools.js +0 -684
- package/dist/src/mcp-tools/neural-tools.d.ts +0 -54
- package/dist/src/mcp-tools/neural-tools.js +0 -1168
- package/dist/src/mcp-tools/performance-tools.d.ts +0 -16
- package/dist/src/mcp-tools/performance-tools.js +0 -675
- package/dist/src/mcp-tools/progress-tools.d.ts +0 -14
- package/dist/src/mcp-tools/progress-tools.js +0 -348
- package/dist/src/mcp-tools/request-tracker.d.ts +0 -17
- package/dist/src/mcp-tools/request-tracker.js +0 -27
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +0 -9
- package/dist/src/mcp-tools/ruvllm-tools.js +0 -355
- package/dist/src/mcp-tools/security-tools.d.ts +0 -18
- package/dist/src/mcp-tools/security-tools.js +0 -556
- package/dist/src/mcp-tools/session-tools.d.ts +0 -8
- package/dist/src/mcp-tools/session-tools.js +0 -517
- package/dist/src/mcp-tools/swarm-tools.d.ts +0 -37
- package/dist/src/mcp-tools/swarm-tools.js +0 -390
- package/dist/src/mcp-tools/system-tools.d.ts +0 -13
- package/dist/src/mcp-tools/system-tools.js +0 -688
- package/dist/src/mcp-tools/task-tools.d.ts +0 -8
- package/dist/src/mcp-tools/task-tools.js +0 -487
- package/dist/src/mcp-tools/terminal-tools.d.ts +0 -8
- package/dist/src/mcp-tools/terminal-tools.js +0 -306
- package/dist/src/mcp-tools/testgen-tools.d.ts +0 -26
- package/dist/src/mcp-tools/testgen-tools.js +0 -168
- package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +0 -31
- package/dist/src/mcp-tools/tool-loop-guardrail.js +0 -71
- package/dist/src/mcp-tools/transfer-tools.d.ts +0 -14
- package/dist/src/mcp-tools/transfer-tools.js +0 -447
- package/dist/src/mcp-tools/types.d.ts +0 -8
- package/dist/src/mcp-tools/types.js +0 -8
- package/dist/src/mcp-tools/validate-input.d.ts +0 -9
- package/dist/src/mcp-tools/validate-input.js +0 -9
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +0 -13
- package/dist/src/mcp-tools/wasm-agent-tools.js +0 -840
- package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
- package/dist/src/mcp-tools/workflow-tools.js +0 -884
- package/dist/src/memory/bge-embedder.d.ts +0 -25
- package/dist/src/memory/bge-embedder.js +0 -121
- package/dist/src/memory/cross-encoder-rerank.d.ts +0 -33
- package/dist/src/memory/cross-encoder-rerank.js +0 -123
- package/dist/src/memory/embedding-policy.d.ts +0 -21
- package/dist/src/memory/embedding-policy.js +0 -30
- package/dist/src/memory/embedding-quantization.d.ts +0 -62
- package/dist/src/memory/embedding-quantization.js +0 -156
- package/dist/src/memory/ewc-consolidation.d.ts +0 -305
- package/dist/src/memory/ewc-consolidation.js +0 -611
- package/dist/src/memory/graph-edge-writer.d.ts +0 -95
- package/dist/src/memory/graph-edge-writer.js +0 -217
- package/dist/src/memory/hybrid-retrieval.d.ts +0 -77
- package/dist/src/memory/hybrid-retrieval.js +0 -192
- package/dist/src/memory/intelligence.d.ts +0 -405
- package/dist/src/memory/intelligence.js +0 -1316
- package/dist/src/memory/lucene-bm25.d.ts +0 -19
- package/dist/src/memory/lucene-bm25.js +0 -308
- package/dist/src/memory/memory-bridge.d.ts +0 -537
- package/dist/src/memory/memory-bridge.js +0 -2460
- package/dist/src/memory/memory-initializer.d.ts +0 -556
- package/dist/src/memory/memory-initializer.js +0 -3021
- package/dist/src/memory/neural-package-bridge.d.ts +0 -48
- package/dist/src/memory/neural-package-bridge.js +0 -87
- package/dist/src/memory/rabitq-index.d.ts +0 -60
- package/dist/src/memory/rabitq-index.js +0 -242
- package/dist/src/memory/sona-optimizer.d.ts +0 -267
- package/dist/src/memory/sona-optimizer.js +0 -779
- package/dist/src/memory/structured-distill.d.ts +0 -48
- package/dist/src/memory/structured-distill.js +0 -125
- package/dist/src/output.d.ts +0 -9
- package/dist/src/output.js +0 -9
- package/dist/src/parser.d.ts +0 -89
- package/dist/src/parser.js +0 -516
- package/dist/src/plugins/manager.d.ts +0 -133
- package/dist/src/plugins/manager.js +0 -415
- package/dist/src/plugins/store/discovery.d.ts +0 -99
- package/dist/src/plugins/store/discovery.js +0 -1224
- package/dist/src/plugins/store/index.d.ts +0 -76
- package/dist/src/plugins/store/index.js +0 -141
- package/dist/src/plugins/store/search.d.ts +0 -46
- package/dist/src/plugins/store/search.js +0 -230
- package/dist/src/plugins/store/types.d.ts +0 -279
- package/dist/src/plugins/store/types.js +0 -7
- package/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
- package/dist/src/plugins/tests/demo-plugin-store.js +0 -126
- package/dist/src/plugins/tests/standalone-test.d.ts +0 -12
- package/dist/src/plugins/tests/standalone-test.js +0 -188
- package/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
- package/dist/src/plugins/tests/test-plugin-store.js +0 -206
- package/dist/src/production/circuit-breaker.d.ts +0 -101
- package/dist/src/production/circuit-breaker.js +0 -241
- package/dist/src/production/error-handler.d.ts +0 -92
- package/dist/src/production/error-handler.js +0 -299
- package/dist/src/production/index.d.ts +0 -23
- package/dist/src/production/index.js +0 -18
- package/dist/src/production/monitoring.d.ts +0 -161
- package/dist/src/production/monitoring.js +0 -356
- package/dist/src/production/rate-limiter.d.ts +0 -80
- package/dist/src/production/rate-limiter.js +0 -201
- package/dist/src/production/retry.d.ts +0 -48
- package/dist/src/production/retry.js +0 -179
- package/dist/src/prompt.d.ts +0 -44
- package/dist/src/prompt.js +0 -501
- package/dist/src/runtime/headless.d.ts +0 -60
- package/dist/src/runtime/headless.js +0 -284
- package/dist/src/runtime/parent-death-watchdog.d.ts +0 -42
- package/dist/src/runtime/parent-death-watchdog.js +0 -70
- package/dist/src/ruvector/agent-wasm.d.ts +0 -228
- package/dist/src/ruvector/agent-wasm.js +0 -463
- package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
- package/dist/src/ruvector/ast-analyzer.js +0 -277
- package/dist/src/ruvector/codemods/engine.d.ts +0 -45
- package/dist/src/ruvector/codemods/engine.js +0 -291
- package/dist/src/ruvector/codemods/scope-analysis.d.ts +0 -29
- package/dist/src/ruvector/codemods/scope-analysis.js +0 -162
- package/dist/src/ruvector/coverage-router.d.ts +0 -160
- package/dist/src/ruvector/coverage-router.js +0 -531
- package/dist/src/ruvector/coverage-tools.d.ts +0 -33
- package/dist/src/ruvector/coverage-tools.js +0 -157
- package/dist/src/ruvector/diff-classifier.d.ts +0 -175
- package/dist/src/ruvector/diff-classifier.js +0 -699
- package/dist/src/ruvector/diskann-backend.d.ts +0 -78
- package/dist/src/ruvector/diskann-backend.js +0 -310
- package/dist/src/ruvector/enhanced-model-router.d.ts +0 -172
- package/dist/src/ruvector/enhanced-model-router.js +0 -577
- package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
- package/dist/src/ruvector/graph-analyzer.js +0 -929
- package/dist/src/ruvector/graph-backend.d.ts +0 -79
- package/dist/src/ruvector/graph-backend.js +0 -220
- package/dist/src/ruvector/index.d.ts +0 -38
- package/dist/src/ruvector/index.js +0 -86
- package/dist/src/ruvector/lora-adapter.d.ts +0 -292
- package/dist/src/ruvector/lora-adapter.js +0 -710
- package/dist/src/ruvector/model-prices.d.ts +0 -50
- package/dist/src/ruvector/model-prices.js +0 -72
- package/dist/src/ruvector/model-router.d.ts +0 -408
- package/dist/src/ruvector/model-router.js +0 -1162
- package/dist/src/ruvector/neural-router.d.ts +0 -182
- package/dist/src/ruvector/neural-router.js +0 -825
- package/dist/src/ruvector/output-verifier.d.ts +0 -83
- package/dist/src/ruvector/output-verifier.js +0 -277
- package/dist/src/ruvector/q-learning-router.d.ts +0 -227
- package/dist/src/ruvector/q-learning-router.js +0 -721
- package/dist/src/ruvector/router-calibrator.d.ts +0 -65
- package/dist/src/ruvector/router-calibrator.js +0 -120
- package/dist/src/ruvector/router-parallel-recorder.d.ts +0 -127
- package/dist/src/ruvector/router-parallel-recorder.js +0 -183
- package/dist/src/ruvector/router-trajectory.d.ts +0 -194
- package/dist/src/ruvector/router-trajectory.js +0 -281
- package/dist/src/ruvector/run-transcript-recorder.d.ts +0 -154
- package/dist/src/ruvector/run-transcript-recorder.js +0 -209
- package/dist/src/ruvector/ruvllm-wasm.d.ts +0 -179
- package/dist/src/ruvector/ruvllm-wasm.js +0 -379
- package/dist/src/ruvector/semantic-router.d.ts +0 -77
- package/dist/src/ruvector/semantic-router.js +0 -178
- package/dist/src/ruvector/task-embedder.d.ts +0 -56
- package/dist/src/ruvector/task-embedder.js +0 -237
- package/dist/src/ruvector/trajectory-tree.d.ts +0 -113
- package/dist/src/ruvector/trajectory-tree.js +0 -237
- package/dist/src/ruvector/vector-db.d.ts +0 -73
- package/dist/src/ruvector/vector-db.js +0 -301
- package/dist/src/ruvector/wasm-embedder.d.ts +0 -13
- package/dist/src/ruvector/wasm-embedder.js +0 -143
- package/dist/src/security/builtin-aidefence.d.ts +0 -34
- package/dist/src/security/builtin-aidefence.js +0 -86
- package/dist/src/services/agentic-flow-bridge.d.ts +0 -50
- package/dist/src/services/agentic-flow-bridge.js +0 -95
- package/dist/src/services/ai-job-dedup.d.ts +0 -61
- package/dist/src/services/ai-job-dedup.js +0 -136
- package/dist/src/services/checkpoint-gate.d.ts +0 -140
- package/dist/src/services/checkpoint-gate.js +0 -223
- package/dist/src/services/claim-service.d.ts +0 -204
- package/dist/src/services/claim-service.js +0 -818
- package/dist/src/services/config-file-manager.d.ts +0 -37
- package/dist/src/services/config-file-manager.js +0 -224
- package/dist/src/services/container-worker-pool.d.ts +0 -204
- package/dist/src/services/container-worker-pool.js +0 -589
- package/dist/src/services/daemon-autostart.d.ts +0 -17
- package/dist/src/services/daemon-autostart.js +0 -102
- package/dist/src/services/distill-oracle.d.ts +0 -190
- package/dist/src/services/distill-oracle.js +0 -349
- package/dist/src/services/distill-tuning.d.ts +0 -111
- package/dist/src/services/distill-tuning.js +0 -510
- package/dist/src/services/evolve-proof.d.ts +0 -253
- package/dist/src/services/evolve-proof.js +0 -343
- package/dist/src/services/fable-harness.d.ts +0 -208
- package/dist/src/services/fable-harness.js +0 -388
- package/dist/src/services/git-workspace-identity.d.ts +0 -42
- package/dist/src/services/git-workspace-identity.js +0 -99
- package/dist/src/services/global-ai-budget.d.ts +0 -135
- package/dist/src/services/global-ai-budget.js +0 -415
- package/dist/src/services/harness-benchmark.d.ts +0 -68
- package/dist/src/services/harness-benchmark.js +0 -94
- package/dist/src/services/harness-canary.d.ts +0 -60
- package/dist/src/services/harness-canary.js +0 -69
- package/dist/src/services/harness-corpus-harvester.d.ts +0 -51
- package/dist/src/services/harness-corpus-harvester.js +0 -74
- package/dist/src/services/harness-flywheel-generations.d.ts +0 -115
- package/dist/src/services/harness-flywheel-generations.js +0 -360
- package/dist/src/services/harness-flywheel-runtime.d.ts +0 -25
- package/dist/src/services/harness-flywheel-runtime.js +0 -92
- package/dist/src/services/harness-flywheel.d.ts +0 -48
- package/dist/src/services/harness-flywheel.js +0 -207
- package/dist/src/services/harness-frozen-eval.d.ts +0 -22
- package/dist/src/services/harness-frozen-eval.js +0 -66
- package/dist/src/services/harness-hosts.d.ts +0 -40
- package/dist/src/services/harness-hosts.js +0 -88
- package/dist/src/services/harness-improvement-ledger.d.ts +0 -63
- package/dist/src/services/harness-improvement-ledger.js +0 -101
- package/dist/src/services/harness-loop.d.ts +0 -53
- package/dist/src/services/harness-loop.js +0 -85
- package/dist/src/services/harness-qualification.d.ts +0 -66
- package/dist/src/services/harness-qualification.js +0 -143
- package/dist/src/services/harness-replay.d.ts +0 -37
- package/dist/src/services/harness-replay.js +0 -92
- package/dist/src/services/harness-verify.d.ts +0 -33
- package/dist/src/services/harness-verify.js +0 -26
- package/dist/src/services/harness-worker.d.ts +0 -23
- package/dist/src/services/harness-worker.js +0 -66
- package/dist/src/services/headless-worker-executor.d.ts +0 -358
- package/dist/src/services/headless-worker-executor.js +0 -1269
- package/dist/src/services/index.d.ts +0 -13
- package/dist/src/services/index.js +0 -11
- package/dist/src/services/memory-backup.d.ts +0 -53
- package/dist/src/services/memory-backup.js +0 -198
- package/dist/src/services/memory-distillation.d.ts +0 -41
- package/dist/src/services/memory-distillation.js +0 -277
- package/dist/src/services/native-training.d.ts +0 -68
- package/dist/src/services/native-training.js +0 -141
- package/dist/src/services/registry-api.d.ts +0 -58
- package/dist/src/services/registry-api.js +0 -146
- package/dist/src/services/repo-supervisor.d.ts +0 -70
- package/dist/src/services/repo-supervisor.js +0 -228
- package/dist/src/services/ruvector-training.d.ts +0 -222
- package/dist/src/services/ruvector-training.js +0 -693
- package/dist/src/services/swarm-memory-branches.d.ts +0 -135
- package/dist/src/services/swarm-memory-branches.js +0 -213
- package/dist/src/services/weight-eft.d.ts +0 -305
- package/dist/src/services/weight-eft.js +0 -296
- package/dist/src/services/worker-daemon.d.ts +0 -439
- package/dist/src/services/worker-daemon.js +0 -1865
- package/dist/src/services/worker-queue.d.ts +0 -194
- package/dist/src/services/worker-queue.js +0 -513
- package/dist/src/services/workspace-lease.d.ts +0 -55
- package/dist/src/services/workspace-lease.js +0 -191
- package/dist/src/suggest.d.ts +0 -53
- package/dist/src/suggest.js +0 -200
- package/dist/src/transfer/anonymization/index.d.ts +0 -25
- package/dist/src/transfer/anonymization/index.js +0 -175
- package/dist/src/transfer/deploy-seraphine.d.ts +0 -13
- package/dist/src/transfer/deploy-seraphine.js +0 -205
- package/dist/src/transfer/export.d.ts +0 -25
- package/dist/src/transfer/export.js +0 -113
- package/dist/src/transfer/index.d.ts +0 -12
- package/dist/src/transfer/index.js +0 -31
- package/dist/src/transfer/ipfs/client.d.ts +0 -109
- package/dist/src/transfer/ipfs/client.js +0 -307
- package/dist/src/transfer/ipfs/upload.d.ts +0 -95
- package/dist/src/transfer/ipfs/upload.js +0 -413
- package/dist/src/transfer/models/seraphine.d.ts +0 -72
- package/dist/src/transfer/models/seraphine.js +0 -373
- package/dist/src/transfer/serialization/cfp.d.ts +0 -49
- package/dist/src/transfer/serialization/cfp.js +0 -183
- package/dist/src/transfer/storage/gcs.d.ts +0 -82
- package/dist/src/transfer/storage/gcs.js +0 -272
- package/dist/src/transfer/storage/index.d.ts +0 -6
- package/dist/src/transfer/storage/index.js +0 -6
- package/dist/src/transfer/store/discovery.d.ts +0 -84
- package/dist/src/transfer/store/discovery.js +0 -382
- package/dist/src/transfer/store/download.d.ts +0 -70
- package/dist/src/transfer/store/download.js +0 -334
- package/dist/src/transfer/store/index.d.ts +0 -84
- package/dist/src/transfer/store/index.js +0 -153
- package/dist/src/transfer/store/publish.d.ts +0 -76
- package/dist/src/transfer/store/publish.js +0 -294
- package/dist/src/transfer/store/registry.d.ts +0 -58
- package/dist/src/transfer/store/registry.js +0 -285
- package/dist/src/transfer/store/search.d.ts +0 -54
- package/dist/src/transfer/store/search.js +0 -232
- package/dist/src/transfer/store/tests/standalone-test.d.ts +0 -12
- package/dist/src/transfer/store/tests/standalone-test.js +0 -190
- package/dist/src/transfer/store/types.d.ts +0 -193
- package/dist/src/transfer/store/types.js +0 -6
- package/dist/src/transfer/test-seraphine.d.ts +0 -6
- package/dist/src/transfer/test-seraphine.js +0 -105
- package/dist/src/transfer/tests/test-store.d.ts +0 -7
- package/dist/src/transfer/tests/test-store.js +0 -214
- package/dist/src/transfer/types.d.ts +0 -245
- package/dist/src/transfer/types.js +0 -6
- package/dist/src/types.d.ts +0 -13
- package/dist/src/types.js +0 -13
- package/dist/src/update/checker.d.ts +0 -34
- package/dist/src/update/checker.js +0 -191
- package/dist/src/update/executor.d.ts +0 -33
- package/dist/src/update/executor.js +0 -217
- package/dist/src/update/index.d.ts +0 -33
- package/dist/src/update/index.js +0 -64
- package/dist/src/update/rate-limiter.d.ts +0 -20
- package/dist/src/update/rate-limiter.js +0 -96
- package/dist/src/update/validator.d.ts +0 -17
- package/dist/src/update/validator.js +0 -123
|
@@ -1,1297 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* V3 CLI Init Command
|
|
3
|
-
* Comprehensive initialization for Claude Flow with Claude Code integration
|
|
4
|
-
*/
|
|
5
|
-
import { output } from '../output.js';
|
|
6
|
-
import { confirm, select, multiSelect, input } from '../prompt.js';
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import { spawnSync } from 'node:child_process';
|
|
10
|
-
import { executeInit, executeUpgrade, executeUpgradeWithMissing, DEFAULT_INIT_OPTIONS, MINIMAL_INIT_OPTIONS, FULL_INIT_OPTIONS, } from '../init/index.js';
|
|
11
|
-
import { ENROLLMENT_SCREEN, recordEnrollmentOutcome, shouldOfferEnrollment, } from '../funnel/enrollment.js';
|
|
12
|
-
import { commandExists } from '../services/harness-hosts.js';
|
|
13
|
-
/**
|
|
14
|
-
* ADR-302 post-init capability enrollment. One-time, interactive-TTY-only,
|
|
15
|
-
* skippable with --no-signup, auto-skipped in CI/automation. Never throws
|
|
16
|
-
* and never affects init's exit code. Accepting records the `account`
|
|
17
|
-
* consent receipt only — no other capability is enabled by this prompt.
|
|
18
|
-
*/
|
|
19
|
-
async function offerCapabilityEnrollment(ctx) {
|
|
20
|
-
try {
|
|
21
|
-
const noSignup = Boolean(ctx.flags['no-signup'] || ctx.flags.noSignup);
|
|
22
|
-
if (ctx.flags.format === 'json')
|
|
23
|
-
return; // scripted output stays pure
|
|
24
|
-
if (!shouldOfferEnrollment({ noSignup, cwd: ctx.cwd }))
|
|
25
|
-
return;
|
|
26
|
-
output.writeln();
|
|
27
|
-
output.writeln(ENROLLMENT_SCREEN);
|
|
28
|
-
output.writeln();
|
|
29
|
-
const accepted = await confirm({
|
|
30
|
-
message: 'Create a free Cognitum account now?',
|
|
31
|
-
default: false,
|
|
32
|
-
});
|
|
33
|
-
recordEnrollmentOutcome(Boolean(accepted));
|
|
34
|
-
output.writeln();
|
|
35
|
-
if (accepted) {
|
|
36
|
-
output.printInfo('Create your free account at https://cognitum.one');
|
|
37
|
-
output.writeln(output.dim(' CLI sign-in (`ruflo auth login`) ships with the ADR-306 auth release.'));
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
output.writeln(output.dim('You can enable later at https://cognitum.one — this prompt will not repeat.'));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// Enrollment is optional; init success is never affected.
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async function resolveCodexInitializer(cwd) {
|
|
48
|
-
// Use a variable to prevent TypeScript from statically resolving the optional module
|
|
49
|
-
const codexModuleId = '@claude-flow/codex';
|
|
50
|
-
const resolutionStrategies = [
|
|
51
|
-
// Strategy 1: Direct import (works if installed as CLI dependency)
|
|
52
|
-
async () => (await import(codexModuleId)).CodexInitializer,
|
|
53
|
-
// Strategy 2: Project node_modules (works if installed in user's project)
|
|
54
|
-
async () => {
|
|
55
|
-
const projectPath = path.join(cwd, 'node_modules', '@claude-flow', 'codex', 'dist', 'index.js');
|
|
56
|
-
if (fs.existsSync(projectPath)) {
|
|
57
|
-
const mod = await import(`file://${projectPath}`);
|
|
58
|
-
return mod.CodexInitializer;
|
|
59
|
-
}
|
|
60
|
-
throw new Error('Not found in project');
|
|
61
|
-
},
|
|
62
|
-
// Strategy 3: Global node_modules
|
|
63
|
-
async () => {
|
|
64
|
-
const { execSync } = await import('child_process');
|
|
65
|
-
const globalPath = execSync('npm root -g', { encoding: 'utf-8' }).trim();
|
|
66
|
-
const codexPath = path.join(globalPath, '@claude-flow', 'codex', 'dist', 'index.js');
|
|
67
|
-
if (fs.existsSync(codexPath)) {
|
|
68
|
-
const mod = await import(`file://${codexPath}`);
|
|
69
|
-
return mod.CodexInitializer;
|
|
70
|
-
}
|
|
71
|
-
throw new Error('Not found globally');
|
|
72
|
-
},
|
|
73
|
-
];
|
|
74
|
-
for (const strategy of resolutionStrategies) {
|
|
75
|
-
try {
|
|
76
|
-
const ctor = await strategy();
|
|
77
|
-
if (ctor)
|
|
78
|
-
return ctor;
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// Try next strategy
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
// Keep Codex out of the CLI dependency graph so cold `npx ruflo --version`
|
|
87
|
-
// remains fast (#2561). An explicit `init --codex` may fetch the small,
|
|
88
|
-
// stable adapter on demand when it is not already installed by an umbrella
|
|
89
|
-
// package, the current project, or the global npm prefix.
|
|
90
|
-
export function runCodexInitializerCli(cwd, options) {
|
|
91
|
-
const npxArgs = [
|
|
92
|
-
'-y',
|
|
93
|
-
'@claude-flow/codex@latest',
|
|
94
|
-
'init',
|
|
95
|
-
'--template',
|
|
96
|
-
options.template,
|
|
97
|
-
...(options.force ? ['--force'] : []),
|
|
98
|
-
...(options.dual ? ['--dual'] : []),
|
|
99
|
-
];
|
|
100
|
-
const result = process.platform === 'win32'
|
|
101
|
-
? spawnSync(process.env.ComSpec || 'cmd.exe', ['/d', '/s', '/c', ['npx', ...npxArgs].join(' ')], { cwd, stdio: 'inherit', windowsHide: true })
|
|
102
|
-
: spawnSync('npx', npxArgs, { cwd, stdio: 'inherit' });
|
|
103
|
-
if (result.error)
|
|
104
|
-
throw result.error;
|
|
105
|
-
return result.status === 0;
|
|
106
|
-
}
|
|
107
|
-
// #2666-adjacent — quietly wire up Codex too when a plain `ruflo init` (no
|
|
108
|
-
// --codex/--dual) runs on a machine that also has the OpenAI Codex CLI on
|
|
109
|
-
// PATH: registers its MCP server and installs skills alongside the Claude
|
|
110
|
-
// Code setup that just happened. Best-effort and silent-by-default — must
|
|
111
|
-
// never fail or noisily interrupt a normal init. Opt out with
|
|
112
|
-
// --no-codex-detect. Skipped entirely under --skip-claude (runtime-only
|
|
113
|
-
// init) and scripted `--format json` output.
|
|
114
|
-
async function maybeAutoDetectCodex(ctx, options) {
|
|
115
|
-
try {
|
|
116
|
-
if (ctx.flags['no-codex-detect'] === true)
|
|
117
|
-
return;
|
|
118
|
-
if (ctx.flags.format === 'json')
|
|
119
|
-
return; // scripted output stays pure
|
|
120
|
-
if (!commandExists('codex'))
|
|
121
|
-
return;
|
|
122
|
-
const CodexInitializer = await resolveCodexInitializer(ctx.cwd);
|
|
123
|
-
if (!CodexInitializer) {
|
|
124
|
-
output.writeln();
|
|
125
|
-
output.printInfo('Detected the OpenAI Codex CLI — install @claude-flow/codex to auto-configure its MCP server and skills:');
|
|
126
|
-
output.writeln(output.dim(' npm install @claude-flow/codex && ruflo init --codex'));
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
const initializer = new CodexInitializer();
|
|
130
|
-
const result = await initializer.initialize({
|
|
131
|
-
projectPath: ctx.cwd,
|
|
132
|
-
template: (options.minimal ? 'minimal' : options.full ? 'full' : 'default'),
|
|
133
|
-
force: options.force,
|
|
134
|
-
dual: false, // Claude Code files were already written by the main init flow above
|
|
135
|
-
});
|
|
136
|
-
if (!result.success)
|
|
137
|
-
return; // best-effort — never fail the primary init over this
|
|
138
|
-
output.writeln();
|
|
139
|
-
output.printBox([
|
|
140
|
-
`AGENTS.md: Codex project instructions`,
|
|
141
|
-
`.agents/config.toml: MCP server + skills config`,
|
|
142
|
-
`.agents/skills/: ${result.skillsGenerated.length} skills`,
|
|
143
|
-
].join('\n'), 'OpenAI Codex detected — configured');
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
// Codex auto-detect is a bonus, never a requirement — swallow everything.
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// Cross-agent skill registration via skills.sh. Runs `npx --yes skills add
|
|
150
|
-
// ruvnet/ruflo --skill ruflo --yes` so the *single* canonical ruflo skill
|
|
151
|
-
// (SKILL.md at the ruvnet/ruflo repo root — describes the platform + entry
|
|
152
|
-
// points) reaches whatever agent the project uses (Claude Code, Cursor,
|
|
153
|
-
// Copilot, Gemini, Cline, …). Users who want ALL 267 plugin-specific skills
|
|
154
|
-
// can run `npx skills add ruvnet/ruflo --all` themselves. Best-effort — never
|
|
155
|
-
// fails init. Opt-out: --no-skills-sh flag OR RUFLO_NO_SKILLS_SH=1. Skipped
|
|
156
|
-
// under --skip-claude and scripted `--format json` output.
|
|
157
|
-
//
|
|
158
|
-
// windowsHide silences the console flash the npx child would otherwise produce
|
|
159
|
-
// (anthropics/claude-code#14828 spawn hazard applies to hook-fired spawns,
|
|
160
|
-
// but our own subprocess spawns should always set this).
|
|
161
|
-
async function maybeInstallSkillsSh(ctx) {
|
|
162
|
-
try {
|
|
163
|
-
if (ctx.flags['no-skills-sh'] === true)
|
|
164
|
-
return;
|
|
165
|
-
if (ctx.flags.format === 'json')
|
|
166
|
-
return;
|
|
167
|
-
if (/^(1|true|on|yes)$/i.test(String(process.env.RUFLO_NO_SKILLS_SH || '')))
|
|
168
|
-
return;
|
|
169
|
-
// Idempotency gate: if this project has already registered ruflo with
|
|
170
|
-
// skills.sh, don't re-clone the repo + re-fire a fresh install telemetry
|
|
171
|
-
// event on every `ruflo init --force` / `init upgrade` / etc. Each install
|
|
172
|
-
// pings skills.sh's leaderboard AND clones the whole ruvnet/ruflo repo
|
|
173
|
-
// (~50MB) — re-running per-init would silently inflate our own metrics
|
|
174
|
-
// (GitHub unique-cloners, skills.sh rank) and waste user bandwidth. This
|
|
175
|
-
// check makes the registration once-per-project, matching the intent.
|
|
176
|
-
const nodePath = await import('path');
|
|
177
|
-
const nodeFs = await import('fs');
|
|
178
|
-
const marker = nodePath.join(ctx.cwd, '.agents', 'skills', 'ruflo');
|
|
179
|
-
if (nodeFs.existsSync(marker)) {
|
|
180
|
-
output.writeln();
|
|
181
|
-
output.writeln(output.dim(' skills.sh registration already present at .agents/skills/ruflo — skipping'));
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
const npxCmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
185
|
-
if (!commandExists('npx'))
|
|
186
|
-
return;
|
|
187
|
-
output.writeln();
|
|
188
|
-
output.printInfo('Registering the core `ruflo` skill with skills.sh (cross-agent catalog)…');
|
|
189
|
-
const { spawnSync } = await import('child_process');
|
|
190
|
-
const result = spawnSync(npxCmd, ['--yes', 'skills', 'add', 'ruvnet/ruflo', '--skill', 'ruflo', '--yes'], { cwd: ctx.cwd, stdio: 'pipe', timeout: 60_000, windowsHide: true, encoding: 'utf-8' });
|
|
191
|
-
if (result.status === 0) {
|
|
192
|
-
output.writeln(output.success(' ✓ ruflo registered via skills.sh — the platform skill is available to any agent in this project'));
|
|
193
|
-
output.writeln(output.dim(' Want all 267 plugin skills? npx skills add ruvnet/ruflo --all'));
|
|
194
|
-
output.writeln(output.dim(' Opt out next time: --no-skills-sh or RUFLO_NO_SKILLS_SH=1'));
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
// Common non-fatal reasons: offline, npx cache miss, skills CLI version
|
|
198
|
-
// mismatch, unknown package. Log a soft note; users can retry manually.
|
|
199
|
-
output.writeln(output.dim(' skills.sh registration skipped (network or npx cache) — retry with: npx skills add ruvnet/ruflo --skill ruflo --yes'));
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
// Skills.sh registration is a bonus, never a requirement — swallow everything.
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
// Codex initialization action
|
|
207
|
-
async function initCodexAction(ctx, options) {
|
|
208
|
-
const { force, minimal, full, dualMode } = options;
|
|
209
|
-
output.writeln();
|
|
210
|
-
output.writeln(output.bold('Initializing RuFlo V3 for OpenAI Codex'));
|
|
211
|
-
output.writeln();
|
|
212
|
-
// Determine template
|
|
213
|
-
const template = minimal ? 'minimal' : full ? 'full' : 'default';
|
|
214
|
-
const spinner = output.createSpinner({ text: 'Initializing Codex project...' });
|
|
215
|
-
spinner.start();
|
|
216
|
-
try {
|
|
217
|
-
const CodexInitializer = await resolveCodexInitializer(ctx.cwd);
|
|
218
|
-
if (!CodexInitializer) {
|
|
219
|
-
spinner.stop();
|
|
220
|
-
output.printInfo('Fetching the stable Codex adapter for this initialization...');
|
|
221
|
-
const success = runCodexInitializerCli(ctx.cwd, { template, force, dual: dualMode });
|
|
222
|
-
if (!success) {
|
|
223
|
-
output.printError('Codex initialization failed while running @claude-flow/codex@latest.');
|
|
224
|
-
return { success: false, exitCode: 1 };
|
|
225
|
-
}
|
|
226
|
-
return { success: true, data: { adapter: '@claude-flow/codex@latest' } };
|
|
227
|
-
}
|
|
228
|
-
const initializer = new CodexInitializer();
|
|
229
|
-
const result = await initializer.initialize({
|
|
230
|
-
projectPath: ctx.cwd,
|
|
231
|
-
template: template,
|
|
232
|
-
force,
|
|
233
|
-
dual: dualMode,
|
|
234
|
-
});
|
|
235
|
-
if (!result.success) {
|
|
236
|
-
spinner.fail('Codex initialization failed');
|
|
237
|
-
if (result.errors) {
|
|
238
|
-
for (const error of result.errors) {
|
|
239
|
-
output.printError(error);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return { success: false, exitCode: 1 };
|
|
243
|
-
}
|
|
244
|
-
spinner.succeed('Codex project initialized successfully!');
|
|
245
|
-
output.writeln();
|
|
246
|
-
// Display summary
|
|
247
|
-
const summary = [];
|
|
248
|
-
summary.push(`Files: ${result.filesCreated.length} created`);
|
|
249
|
-
summary.push(`Skills: ${result.skillsGenerated.length} installed`);
|
|
250
|
-
output.printBox(summary.join('\n'), 'Summary');
|
|
251
|
-
output.writeln();
|
|
252
|
-
// Show what was created
|
|
253
|
-
output.printBox([
|
|
254
|
-
`AGENTS.md: Main project instructions`,
|
|
255
|
-
`.agents/config.toml: Project configuration`,
|
|
256
|
-
`.agents/skills/: ${result.skillsGenerated.length} skills`,
|
|
257
|
-
`.codex/: Local overrides (gitignored)`,
|
|
258
|
-
dualMode ? `CLAUDE.md: Claude Code compatibility` : '',
|
|
259
|
-
].filter(Boolean).join('\n'), 'OpenAI Codex Integration');
|
|
260
|
-
output.writeln();
|
|
261
|
-
// Warnings
|
|
262
|
-
if (result.warnings && result.warnings.length > 0) {
|
|
263
|
-
output.printWarning('Warnings:');
|
|
264
|
-
for (const warning of result.warnings.slice(0, 5)) {
|
|
265
|
-
output.printInfo(` • ${warning}`);
|
|
266
|
-
}
|
|
267
|
-
if (result.warnings.length > 5) {
|
|
268
|
-
output.printInfo(` ... and ${result.warnings.length - 5} more`);
|
|
269
|
-
}
|
|
270
|
-
output.writeln();
|
|
271
|
-
}
|
|
272
|
-
// Next steps
|
|
273
|
-
output.writeln(output.bold('Next steps:'));
|
|
274
|
-
output.printList([
|
|
275
|
-
`Review ${output.highlight('AGENTS.md')} for project instructions`,
|
|
276
|
-
`Add skills with ${output.highlight('$skill-name')} syntax`,
|
|
277
|
-
`Configure ${output.highlight('.agents/config.toml')} for your project`,
|
|
278
|
-
dualMode ? `Claude Code users can use ${output.highlight('CLAUDE.md')}` : '',
|
|
279
|
-
].filter(Boolean));
|
|
280
|
-
return { success: true, data: result };
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
spinner.fail('Codex initialization failed');
|
|
284
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
285
|
-
// Handle module not found error gracefully
|
|
286
|
-
if (errorMessage.includes('Cannot find module') || errorMessage.includes('@claude-flow/codex')) {
|
|
287
|
-
output.printError('The @claude-flow/codex package is not installed.');
|
|
288
|
-
output.printInfo('Install it with: npm install @claude-flow/codex');
|
|
289
|
-
output.writeln();
|
|
290
|
-
output.printInfo('Alternatively, copy skills manually from .claude/skills/ to .agents/skills/');
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
output.printError(`Failed to initialize: ${errorMessage}`);
|
|
294
|
-
}
|
|
295
|
-
return { success: false, exitCode: 1 };
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Check if project is already initialized with ruflo.
|
|
299
|
-
// #2207: .claude/settings.json alone is NOT a ruflo marker — it's created by
|
|
300
|
-
// Claude Code itself and exists in every Claude Code project. We require a
|
|
301
|
-
// ruflo-specific signal: either a claudeFlow section in settings.json, OR a
|
|
302
|
-
// .mcp.json with a 'claude-flow' or 'ruflo' server key, OR the ruflo-only
|
|
303
|
-
// .claude-flow/config.yaml. Using the bare file-existence check was causing
|
|
304
|
-
// false-positives for new users whose only existing file was Claude Code's own
|
|
305
|
-
// settings.json.
|
|
306
|
-
function isInitialized(cwd) {
|
|
307
|
-
const claudeFlowPath = path.join(cwd, '.claude-flow', 'config.yaml');
|
|
308
|
-
const mcpJsonPath = path.join(cwd, '.mcp.json');
|
|
309
|
-
const settingsPath = path.join(cwd, '.claude', 'settings.json');
|
|
310
|
-
// Check .claude-flow/config.yaml — ruflo-specific, always reliable
|
|
311
|
-
const hasClaudeFlow = fs.existsSync(claudeFlowPath);
|
|
312
|
-
// Check .claude/settings.json for ruflo-specific content (claudeFlow section)
|
|
313
|
-
let hasRufloSettings = false;
|
|
314
|
-
if (fs.existsSync(settingsPath)) {
|
|
315
|
-
try {
|
|
316
|
-
const parsed = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
317
|
-
hasRufloSettings =
|
|
318
|
-
parsed != null &&
|
|
319
|
-
typeof parsed === 'object' &&
|
|
320
|
-
'claudeFlow' in parsed;
|
|
321
|
-
}
|
|
322
|
-
catch { /* malformed — ignore */ }
|
|
323
|
-
}
|
|
324
|
-
// Check .mcp.json for ruflo/claude-flow server key
|
|
325
|
-
let hasRufloMcp = false;
|
|
326
|
-
if (fs.existsSync(mcpJsonPath)) {
|
|
327
|
-
try {
|
|
328
|
-
const parsed = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));
|
|
329
|
-
hasRufloMcp =
|
|
330
|
-
parsed != null &&
|
|
331
|
-
typeof parsed === 'object' &&
|
|
332
|
-
parsed.mcpServers != null &&
|
|
333
|
-
typeof parsed.mcpServers === 'object' &&
|
|
334
|
-
('claude-flow' in parsed.mcpServers ||
|
|
335
|
-
'ruflo' in parsed.mcpServers);
|
|
336
|
-
}
|
|
337
|
-
catch { /* malformed — ignore */ }
|
|
338
|
-
}
|
|
339
|
-
return {
|
|
340
|
-
claude: hasRufloSettings || hasRufloMcp,
|
|
341
|
-
claudeFlow: hasClaudeFlow,
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
// Init subcommand (default)
|
|
345
|
-
const initAction = async (ctx) => {
|
|
346
|
-
const force = ctx.flags.force;
|
|
347
|
-
const minimal = ctx.flags.minimal;
|
|
348
|
-
const full = ctx.flags.full;
|
|
349
|
-
const skipClaude = ctx.flags['skip-claude'];
|
|
350
|
-
const onlyClaude = ctx.flags['only-claude'];
|
|
351
|
-
// #2098A — the parser handles `--no-foo` by stripping the prefix and
|
|
352
|
-
// storing `flags.foo = false` (parser.ts:291-294), not by storing
|
|
353
|
-
// `flags['no-foo'] = true`. So `--no-global` lands as
|
|
354
|
-
// `ctx.flags.global === false`. The old read of `flags['no-global']`
|
|
355
|
-
// was always undefined and silently no-op'd — every user with the flag
|
|
356
|
-
// set still got `~/.claude/CLAUDE.md` modified. Read the real key.
|
|
357
|
-
const noGlobal = ctx.flags['no-global'] === true || ctx.flags['global'] === false;
|
|
358
|
-
const allAgents = ctx.flags['all-agents'];
|
|
359
|
-
const cloudMcp = ctx.flags['cloud-mcp'];
|
|
360
|
-
const codexMode = ctx.flags.codex;
|
|
361
|
-
const dualMode = ctx.flags.dual;
|
|
362
|
-
const cwd = ctx.cwd;
|
|
363
|
-
// If codex mode, use the Codex initializer
|
|
364
|
-
if (codexMode || dualMode) {
|
|
365
|
-
return initCodexAction(ctx, { codexMode, dualMode, force, minimal, full });
|
|
366
|
-
}
|
|
367
|
-
// Check if already initialized
|
|
368
|
-
const initialized = isInitialized(cwd);
|
|
369
|
-
const hasExisting = initialized.claude || initialized.claudeFlow;
|
|
370
|
-
if (hasExisting && !force) {
|
|
371
|
-
output.printWarning('RuFlo appears to be already initialized');
|
|
372
|
-
if (initialized.claude)
|
|
373
|
-
output.printInfo(' Found: .claude/settings.json');
|
|
374
|
-
if (initialized.claudeFlow)
|
|
375
|
-
output.printInfo(' Found: .claude-flow/config.yaml');
|
|
376
|
-
output.printInfo('Use --force to reinitialize');
|
|
377
|
-
if (ctx.interactive) {
|
|
378
|
-
const proceed = await confirm({
|
|
379
|
-
message: 'Do you want to reinitialize? This will overwrite existing configuration.',
|
|
380
|
-
default: false,
|
|
381
|
-
});
|
|
382
|
-
if (!proceed) {
|
|
383
|
-
return { success: true, message: 'Initialization cancelled' };
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
else {
|
|
387
|
-
return { success: false, exitCode: 1, message: 'Already initialized' };
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
output.writeln();
|
|
391
|
-
output.writeln(output.bold('Initializing RuFlo V3'));
|
|
392
|
-
output.writeln();
|
|
393
|
-
// Build init options based on flags
|
|
394
|
-
let options;
|
|
395
|
-
if (minimal) {
|
|
396
|
-
options = { ...MINIMAL_INIT_OPTIONS, targetDir: cwd, force };
|
|
397
|
-
}
|
|
398
|
-
else if (full) {
|
|
399
|
-
options = { ...FULL_INIT_OPTIONS, targetDir: cwd, force };
|
|
400
|
-
// #2356: keep auth-gated cloud MCP servers opt-in even under --full. They
|
|
401
|
-
// require a login, get committed into .mcp.json, and add per-session MCP
|
|
402
|
-
// tool-definition token cost. --cloud-mcp restores the all-three behavior.
|
|
403
|
-
if (!cloudMcp) {
|
|
404
|
-
options.mcp = { ...options.mcp, ruvSwarm: false, flowNexus: false };
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
else {
|
|
408
|
-
options = { ...DEFAULT_INIT_OPTIONS, targetDir: cwd, force };
|
|
409
|
-
}
|
|
410
|
-
// Handle --skip-claude and --only-claude flags
|
|
411
|
-
if (skipClaude) {
|
|
412
|
-
options.components.settings = false;
|
|
413
|
-
options.components.skills = false;
|
|
414
|
-
options.components.commands = false;
|
|
415
|
-
options.components.agents = false;
|
|
416
|
-
options.components.helpers = false;
|
|
417
|
-
options.components.statusline = false;
|
|
418
|
-
options.components.mcp = false;
|
|
419
|
-
options.components.claudeMd = false;
|
|
420
|
-
}
|
|
421
|
-
if (onlyClaude) {
|
|
422
|
-
options.components.runtime = false;
|
|
423
|
-
}
|
|
424
|
-
// ADR-128 Phase 3 — restore full agent set (98 agents) when user explicitly
|
|
425
|
-
// requests it. Default is the ~24-agent substrate (core, consensus, swarm,
|
|
426
|
-
// sparc, testing). Pass --all-agents to get the old behavior.
|
|
427
|
-
if (allAgents) {
|
|
428
|
-
options.agents.all = true;
|
|
429
|
-
}
|
|
430
|
-
// #1744 — opt-out of the user-global ~/.claude/CLAUDE.md "Ruflo Integration"
|
|
431
|
-
// pointer block. Default behavior (off) preserves current install for users
|
|
432
|
-
// who rely on it; opting in via --no-global keeps the global file pristine.
|
|
433
|
-
if (noGlobal) {
|
|
434
|
-
options.skipGlobalClaudeMd = true;
|
|
435
|
-
}
|
|
436
|
-
// Create spinner
|
|
437
|
-
const spinner = output.createSpinner({ text: 'Initializing...' });
|
|
438
|
-
spinner.start();
|
|
439
|
-
try {
|
|
440
|
-
// Execute initialization
|
|
441
|
-
const result = await executeInit(options);
|
|
442
|
-
if (!result.success) {
|
|
443
|
-
spinner.fail('Initialization failed');
|
|
444
|
-
for (const error of result.errors) {
|
|
445
|
-
output.printError(error);
|
|
446
|
-
}
|
|
447
|
-
return { success: false, exitCode: 1 };
|
|
448
|
-
}
|
|
449
|
-
spinner.succeed('RuFlo V3 initialized successfully!');
|
|
450
|
-
output.writeln();
|
|
451
|
-
// Display summary
|
|
452
|
-
const summary = [];
|
|
453
|
-
if (result.created.directories.length > 0) {
|
|
454
|
-
summary.push(`Directories: ${result.created.directories.length} created`);
|
|
455
|
-
}
|
|
456
|
-
if (result.created.files.length > 0) {
|
|
457
|
-
summary.push(`Files: ${result.created.files.length} created`);
|
|
458
|
-
}
|
|
459
|
-
if (result.skipped.length > 0) {
|
|
460
|
-
summary.push(`Skipped: ${result.skipped.length} (already exist)`);
|
|
461
|
-
}
|
|
462
|
-
output.printBox(summary.join('\n'), 'Summary');
|
|
463
|
-
output.writeln();
|
|
464
|
-
// Show what was created
|
|
465
|
-
if (options.components.claudeMd || options.components.settings || options.components.skills || options.components.commands || options.components.agents) {
|
|
466
|
-
output.printBox([
|
|
467
|
-
options.components.claudeMd ? `CLAUDE.md: Swarm guidance & configuration` : '',
|
|
468
|
-
options.components.settings ? `Settings: .claude/settings.json` : '',
|
|
469
|
-
options.components.skills ? `Skills: .claude/skills/ (${result.summary.skillsCount} skills)` : '',
|
|
470
|
-
options.components.commands ? `Commands: .claude/commands/ (${result.summary.commandsCount} commands)` : '',
|
|
471
|
-
options.components.agents ? `Agents: .claude/agents/ (${result.summary.agentsCount} agents)` : '',
|
|
472
|
-
options.components.helpers ? `Helpers: .claude/helpers/` : '',
|
|
473
|
-
options.components.mcp ? `MCP: .mcp.json` : '',
|
|
474
|
-
].filter(Boolean).join('\n'), 'Claude Code Integration');
|
|
475
|
-
output.writeln();
|
|
476
|
-
}
|
|
477
|
-
if (options.components.runtime) {
|
|
478
|
-
output.printBox([
|
|
479
|
-
`Config: .claude-flow/config.yaml`,
|
|
480
|
-
`Data: .claude-flow/data/`,
|
|
481
|
-
`Logs: .claude-flow/logs/`,
|
|
482
|
-
`Sessions: .claude-flow/sessions/`,
|
|
483
|
-
].join('\n'), 'V3 Runtime');
|
|
484
|
-
output.writeln();
|
|
485
|
-
}
|
|
486
|
-
// Hooks summary
|
|
487
|
-
if (result.summary.hooksEnabled > 0) {
|
|
488
|
-
output.printInfo(`Hooks: ${result.summary.hooksEnabled} hook types enabled in settings.json`);
|
|
489
|
-
output.writeln();
|
|
490
|
-
}
|
|
491
|
-
// #2666-adjacent — auto-detect + configure OpenAI Codex CLI if present
|
|
492
|
-
if (!skipClaude) {
|
|
493
|
-
await maybeAutoDetectCodex(ctx, { force, minimal, full });
|
|
494
|
-
await maybeInstallSkillsSh(ctx);
|
|
495
|
-
}
|
|
496
|
-
// Handle --start-all or --start-daemon
|
|
497
|
-
const startAll = ctx.flags['start-all'] || ctx.flags.startAll;
|
|
498
|
-
const startDaemon = ctx.flags['start-daemon'] || ctx.flags.startDaemon || startAll;
|
|
499
|
-
if (startDaemon || startAll) {
|
|
500
|
-
output.writeln();
|
|
501
|
-
output.printInfo('Starting services...');
|
|
502
|
-
const { execSync } = await import('child_process');
|
|
503
|
-
// Initialize memory database
|
|
504
|
-
if (startAll) {
|
|
505
|
-
try {
|
|
506
|
-
output.writeln(output.dim(' Initializing memory database...'));
|
|
507
|
-
execSync('npx @claude-flow/cli@latest memory init 2>/dev/null', {
|
|
508
|
-
stdio: 'pipe',
|
|
509
|
-
cwd: ctx.cwd,
|
|
510
|
-
timeout: 30000
|
|
511
|
-
});
|
|
512
|
-
output.writeln(output.success(' ✓ Memory initialized'));
|
|
513
|
-
}
|
|
514
|
-
catch {
|
|
515
|
-
output.writeln(output.dim(' Memory database already exists'));
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
// Start daemon — #2407 fix
|
|
519
|
-
//
|
|
520
|
-
// The previous version used `daemon start ... &` (shell background)
|
|
521
|
-
// which made execSync return as soon as the shell forked, BEFORE the
|
|
522
|
-
// daemon process wrote its PID file. Concurrent init runs
|
|
523
|
-
// (devcontainer setup + VS Code task + MCP hook firing within ~500 ms)
|
|
524
|
-
// all saw an empty PID file via getBackgroundDaemonPid(), so
|
|
525
|
-
// daemon.ts:99-103's dedup short-circuit didn't fire — every caller
|
|
526
|
-
// spawned its own daemon. One incident accumulated 39 zombie daemons
|
|
527
|
-
// holding ~8.5 GiB resident, which together with macOS compressor
|
|
528
|
-
// pressure (27 GiB compressed) caused the configd watchdog timeout
|
|
529
|
-
// and the 2026-06-15 21:06 kernel panic.
|
|
530
|
-
//
|
|
531
|
-
// Fix: drop the shell `&`. `daemon start` (default non-foreground
|
|
532
|
-
// mode) already forks its own detached background process via
|
|
533
|
-
// startBackgroundDaemon() AND writes the PID file BEFORE returning,
|
|
534
|
-
// so execSync without `&` waits for the dedup-relevant PID-file
|
|
535
|
-
// write but does NOT wait for the daemon itself to exit. Timeout
|
|
536
|
-
// bumped to 30s for npx cold-cache scenarios.
|
|
537
|
-
if (startDaemon) {
|
|
538
|
-
try {
|
|
539
|
-
output.writeln(output.dim(' Starting daemon...'));
|
|
540
|
-
execSync('npx @claude-flow/cli@latest daemon start 2>/dev/null', {
|
|
541
|
-
stdio: 'pipe',
|
|
542
|
-
cwd: ctx.cwd,
|
|
543
|
-
timeout: 30000
|
|
544
|
-
});
|
|
545
|
-
output.writeln(output.success(' ✓ Daemon started'));
|
|
546
|
-
}
|
|
547
|
-
catch {
|
|
548
|
-
// Daemon dedup hit (already running) OR spawn timed out.
|
|
549
|
-
// Either way the worst case is a single retry on next init,
|
|
550
|
-
// not a forked race producing N zombies.
|
|
551
|
-
output.writeln(output.warning(' Daemon may already be running'));
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
// Initialize swarm
|
|
555
|
-
if (startAll) {
|
|
556
|
-
try {
|
|
557
|
-
output.writeln(output.dim(' Initializing swarm...'));
|
|
558
|
-
execSync('npx @claude-flow/cli@latest swarm init --topology hierarchical 2>/dev/null', {
|
|
559
|
-
stdio: 'pipe',
|
|
560
|
-
cwd: ctx.cwd,
|
|
561
|
-
timeout: 30000
|
|
562
|
-
});
|
|
563
|
-
output.writeln(output.success(' ✓ Swarm initialized'));
|
|
564
|
-
}
|
|
565
|
-
catch {
|
|
566
|
-
output.writeln(output.dim(' Swarm initialization skipped'));
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
output.writeln();
|
|
570
|
-
output.printSuccess('All services started');
|
|
571
|
-
}
|
|
572
|
-
// Handle --with-embeddings
|
|
573
|
-
const withEmbeddings = ctx.flags['with-embeddings'] || ctx.flags.withEmbeddings;
|
|
574
|
-
const embeddingModel = (ctx.flags['embedding-model'] || ctx.flags.embeddingModel || 'Xenova/all-MiniLM-L6-v2');
|
|
575
|
-
if (withEmbeddings) {
|
|
576
|
-
output.writeln();
|
|
577
|
-
output.printInfo('Initializing ONNX embedding subsystem...');
|
|
578
|
-
const { execFileSync: execFileInit } = await import('child_process');
|
|
579
|
-
// Validate embeddingModel: must match pattern org/model-name (CRIT-02)
|
|
580
|
-
if (!/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/.test(embeddingModel)) {
|
|
581
|
-
throw new Error(`Invalid embedding model name: ${embeddingModel}`);
|
|
582
|
-
}
|
|
583
|
-
try {
|
|
584
|
-
output.writeln(output.dim(` Model: ${embeddingModel}`));
|
|
585
|
-
output.writeln(output.dim(' Hyperbolic: Enabled (Poincaré ball)'));
|
|
586
|
-
execFileInit('npx', [
|
|
587
|
-
'@claude-flow/cli@latest', 'embeddings', 'init',
|
|
588
|
-
'--model', embeddingModel,
|
|
589
|
-
'--no-download', '--force',
|
|
590
|
-
], {
|
|
591
|
-
stdio: 'pipe',
|
|
592
|
-
cwd: ctx.cwd,
|
|
593
|
-
timeout: 30000,
|
|
594
|
-
});
|
|
595
|
-
output.writeln(output.success(' ✓ Embeddings initialized'));
|
|
596
|
-
output.writeln(output.dim(' Run "embeddings init --download" to download model'));
|
|
597
|
-
}
|
|
598
|
-
catch (err) {
|
|
599
|
-
output.writeln(output.warning(' Embedding initialization skipped (run manually)'));
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
if (!startDaemon && !startAll) {
|
|
603
|
-
const bin = (process.argv[1] || '').includes('ruflo') ? 'ruflo' : 'claude-flow';
|
|
604
|
-
output.writeln(output.bold('Next steps:'));
|
|
605
|
-
output.printList([
|
|
606
|
-
`Run ${output.highlight(`${bin} daemon start`)} to start background workers`,
|
|
607
|
-
// Memory is initialized automatically during init (persistent by
|
|
608
|
-
// default — see executor.ts) — no separate `memory init` step needed
|
|
609
|
-
// unless the DB was skipped (MINIMAL_INIT_OPTIONS) or needs --force.
|
|
610
|
-
`Run ${output.highlight(`${bin} swarm init`)} to initialize a swarm`,
|
|
611
|
-
`Or use ${output.highlight(`${bin} init --start-all`)} to do all of the above`,
|
|
612
|
-
options.components.settings ? `Review ${output.highlight('.claude/settings.json')} for hook configurations` : '',
|
|
613
|
-
// ADR-150 — surface the new metaharness scorecard to every new user.
|
|
614
|
-
// Optional dep; the command degrades gracefully when not installed.
|
|
615
|
-
`Run ${output.highlight(`${bin} metaharness score`)} for a 5-dim harness readiness scorecard (ADR-150)`,
|
|
616
|
-
].filter(Boolean));
|
|
617
|
-
}
|
|
618
|
-
if (ctx.flags.format === 'json') {
|
|
619
|
-
output.printJson(result);
|
|
620
|
-
}
|
|
621
|
-
await offerCapabilityEnrollment(ctx);
|
|
622
|
-
return { success: true, data: result };
|
|
623
|
-
}
|
|
624
|
-
catch (error) {
|
|
625
|
-
spinner.fail('Initialization failed');
|
|
626
|
-
output.printError(`Failed to initialize: ${error instanceof Error ? error.message : String(error)}`);
|
|
627
|
-
return { success: false, exitCode: 1 };
|
|
628
|
-
}
|
|
629
|
-
};
|
|
630
|
-
// Wizard subcommand for interactive setup
|
|
631
|
-
const wizardCommand = {
|
|
632
|
-
name: 'wizard',
|
|
633
|
-
description: 'Interactive setup wizard for comprehensive configuration',
|
|
634
|
-
action: async (ctx) => {
|
|
635
|
-
output.writeln();
|
|
636
|
-
output.writeln(output.bold('RuFlo V3 Setup Wizard'));
|
|
637
|
-
output.writeln(output.dim('Answer questions to configure your project'));
|
|
638
|
-
output.writeln();
|
|
639
|
-
try {
|
|
640
|
-
// Start with base options
|
|
641
|
-
const options = { ...DEFAULT_INIT_OPTIONS, targetDir: ctx.cwd };
|
|
642
|
-
// Configuration preset
|
|
643
|
-
const preset = await select({
|
|
644
|
-
message: 'Select configuration preset:',
|
|
645
|
-
options: [
|
|
646
|
-
{ value: 'default', label: 'Default', hint: 'Recommended settings for most projects' },
|
|
647
|
-
{ value: 'minimal', label: 'Minimal', hint: 'Core features only' },
|
|
648
|
-
{ value: 'full', label: 'Full', hint: 'All features enabled' },
|
|
649
|
-
{ value: 'custom', label: 'Custom', hint: 'Choose each component' },
|
|
650
|
-
],
|
|
651
|
-
});
|
|
652
|
-
if (preset === 'minimal') {
|
|
653
|
-
Object.assign(options, MINIMAL_INIT_OPTIONS);
|
|
654
|
-
options.targetDir = ctx.cwd;
|
|
655
|
-
}
|
|
656
|
-
else if (preset === 'full') {
|
|
657
|
-
Object.assign(options, FULL_INIT_OPTIONS);
|
|
658
|
-
options.targetDir = ctx.cwd;
|
|
659
|
-
}
|
|
660
|
-
else if (preset === 'custom') {
|
|
661
|
-
// Component selection
|
|
662
|
-
const components = await multiSelect({
|
|
663
|
-
message: 'Select components to initialize:',
|
|
664
|
-
options: [
|
|
665
|
-
{ value: 'claudeMd', label: 'CLAUDE.md', hint: 'Swarm guidance and project configuration', selected: true },
|
|
666
|
-
{ value: 'settings', label: 'settings.json', hint: 'Claude Code hooks configuration', selected: true },
|
|
667
|
-
{ value: 'skills', label: 'Skills', hint: 'Claude Code skills in .claude/skills/', selected: true },
|
|
668
|
-
{ value: 'commands', label: 'Commands', hint: 'Claude Code commands in .claude/commands/', selected: true },
|
|
669
|
-
{ value: 'agents', label: 'Agents', hint: 'Agent definitions in .claude/agents/', selected: true },
|
|
670
|
-
{ value: 'helpers', label: 'Helpers', hint: 'Utility scripts in .claude/helpers/', selected: true },
|
|
671
|
-
{ value: 'statusline', label: 'Statusline', hint: 'Shell statusline integration', selected: false },
|
|
672
|
-
{ value: 'mcp', label: 'MCP', hint: '.mcp.json for MCP server configuration', selected: true },
|
|
673
|
-
{ value: 'runtime', label: 'Runtime', hint: '.claude-flow/ directory for V3 runtime', selected: true },
|
|
674
|
-
],
|
|
675
|
-
});
|
|
676
|
-
options.components.claudeMd = components.includes('claudeMd');
|
|
677
|
-
options.components.settings = components.includes('settings');
|
|
678
|
-
options.components.skills = components.includes('skills');
|
|
679
|
-
options.components.commands = components.includes('commands');
|
|
680
|
-
options.components.agents = components.includes('agents');
|
|
681
|
-
options.components.helpers = components.includes('helpers');
|
|
682
|
-
options.components.statusline = components.includes('statusline');
|
|
683
|
-
options.components.mcp = components.includes('mcp');
|
|
684
|
-
options.components.runtime = components.includes('runtime');
|
|
685
|
-
// Skills selection
|
|
686
|
-
if (options.components.skills) {
|
|
687
|
-
const skillSets = await multiSelect({
|
|
688
|
-
message: 'Select skill sets:',
|
|
689
|
-
options: [
|
|
690
|
-
{ value: 'core', label: 'Core', hint: 'Swarm, memory, SPARC skills', selected: true },
|
|
691
|
-
{ value: 'agentdb', label: 'AgentDB', hint: 'Vector database skills', selected: true },
|
|
692
|
-
{ value: 'github', label: 'GitHub', hint: 'GitHub integration skills', selected: true },
|
|
693
|
-
{ value: 'flowNexus', label: 'Flow Nexus', hint: 'Cloud platform skills', selected: false },
|
|
694
|
-
{ value: 'v3', label: 'V3', hint: 'V3 implementation skills', selected: true },
|
|
695
|
-
],
|
|
696
|
-
});
|
|
697
|
-
options.skills.core = skillSets.includes('core');
|
|
698
|
-
options.skills.agentdb = skillSets.includes('agentdb');
|
|
699
|
-
options.skills.github = skillSets.includes('github');
|
|
700
|
-
options.skills.flowNexus = skillSets.includes('flowNexus');
|
|
701
|
-
options.skills.v3 = skillSets.includes('v3');
|
|
702
|
-
}
|
|
703
|
-
// Hooks selection
|
|
704
|
-
if (options.components.settings) {
|
|
705
|
-
const hooks = await multiSelect({
|
|
706
|
-
message: 'Select hooks to enable:',
|
|
707
|
-
options: [
|
|
708
|
-
{ value: 'preToolUse', label: 'PreToolUse', hint: 'Before tool execution', selected: true },
|
|
709
|
-
{ value: 'postToolUse', label: 'PostToolUse', hint: 'After tool execution', selected: true },
|
|
710
|
-
{ value: 'userPromptSubmit', label: 'UserPromptSubmit', hint: 'Task routing', selected: true },
|
|
711
|
-
{ value: 'sessionStart', label: 'SessionStart', hint: 'Session initialization', selected: true },
|
|
712
|
-
{ value: 'stop', label: 'Stop', hint: 'Task completion evaluation', selected: true },
|
|
713
|
-
{ value: 'notification', label: 'Notification', hint: 'Swarm notifications', selected: true },
|
|
714
|
-
{ value: 'permissionRequest', label: 'PermissionRequest', hint: 'Auto-allow claude-flow tools', selected: true },
|
|
715
|
-
],
|
|
716
|
-
});
|
|
717
|
-
options.hooks.preToolUse = hooks.includes('preToolUse');
|
|
718
|
-
options.hooks.postToolUse = hooks.includes('postToolUse');
|
|
719
|
-
options.hooks.userPromptSubmit = hooks.includes('userPromptSubmit');
|
|
720
|
-
options.hooks.sessionStart = hooks.includes('sessionStart');
|
|
721
|
-
options.hooks.stop = hooks.includes('stop');
|
|
722
|
-
options.hooks.notification = hooks.includes('notification');
|
|
723
|
-
}
|
|
724
|
-
}
|
|
725
|
-
// Swarm topology (for all presets)
|
|
726
|
-
const topology = await select({
|
|
727
|
-
message: 'Select swarm topology:',
|
|
728
|
-
options: [
|
|
729
|
-
{ value: 'hierarchical-mesh', label: 'Hierarchical Mesh', hint: 'Best for complex projects (recommended)' },
|
|
730
|
-
{ value: 'mesh', label: 'Mesh', hint: 'Peer-to-peer coordination' },
|
|
731
|
-
{ value: 'hierarchical', label: 'Hierarchical', hint: 'Tree-based coordination' },
|
|
732
|
-
{ value: 'adaptive', label: 'Adaptive', hint: 'Dynamic topology switching' },
|
|
733
|
-
],
|
|
734
|
-
});
|
|
735
|
-
options.runtime.topology = topology;
|
|
736
|
-
// Max agents
|
|
737
|
-
const maxAgents = await input({
|
|
738
|
-
message: 'Maximum concurrent agents:',
|
|
739
|
-
default: String(options.runtime.maxAgents),
|
|
740
|
-
validate: (v) => {
|
|
741
|
-
const n = parseInt(v);
|
|
742
|
-
return (!isNaN(n) && n > 0 && n <= 50) || 'Enter a number between 1 and 50';
|
|
743
|
-
},
|
|
744
|
-
});
|
|
745
|
-
options.runtime.maxAgents = parseInt(maxAgents);
|
|
746
|
-
// Memory backend
|
|
747
|
-
const memoryBackend = await select({
|
|
748
|
-
message: 'Select memory backend:',
|
|
749
|
-
options: [
|
|
750
|
-
{ value: 'hybrid', label: 'Hybrid', hint: 'SQLite + AgentDB (recommended)' },
|
|
751
|
-
{ value: 'agentdb', label: 'AgentDB', hint: '150x faster vector search' },
|
|
752
|
-
{ value: 'sqlite', label: 'SQLite', hint: 'Standard SQL storage' },
|
|
753
|
-
{ value: 'memory', label: 'In-Memory', hint: 'Fast but non-persistent' },
|
|
754
|
-
],
|
|
755
|
-
});
|
|
756
|
-
options.runtime.memoryBackend = memoryBackend;
|
|
757
|
-
// HNSW indexing
|
|
758
|
-
if (memoryBackend === 'agentdb' || memoryBackend === 'hybrid') {
|
|
759
|
-
const enableHNSW = await confirm({
|
|
760
|
-
message: 'Enable HNSW indexing for faster vector search?',
|
|
761
|
-
default: true,
|
|
762
|
-
});
|
|
763
|
-
options.runtime.enableHNSW = enableHNSW;
|
|
764
|
-
}
|
|
765
|
-
// Neural learning
|
|
766
|
-
const enableNeural = await confirm({
|
|
767
|
-
message: 'Enable neural pattern learning?',
|
|
768
|
-
default: options.runtime.enableNeural,
|
|
769
|
-
});
|
|
770
|
-
options.runtime.enableNeural = enableNeural;
|
|
771
|
-
// ADR-049: Self-Learning Memory capabilities
|
|
772
|
-
if (memoryBackend === 'agentdb' || memoryBackend === 'hybrid') {
|
|
773
|
-
const enableSelfLearning = await confirm({
|
|
774
|
-
message: 'Enable self-learning memory? (LearningBridge + Knowledge Graph + Agent Scopes)',
|
|
775
|
-
default: true,
|
|
776
|
-
});
|
|
777
|
-
options.runtime.enableLearningBridge = enableSelfLearning && enableNeural;
|
|
778
|
-
options.runtime.enableMemoryGraph = enableSelfLearning;
|
|
779
|
-
options.runtime.enableAgentScopes = enableSelfLearning;
|
|
780
|
-
}
|
|
781
|
-
else {
|
|
782
|
-
options.runtime.enableLearningBridge = false;
|
|
783
|
-
options.runtime.enableMemoryGraph = false;
|
|
784
|
-
options.runtime.enableAgentScopes = false;
|
|
785
|
-
}
|
|
786
|
-
// Embeddings configuration
|
|
787
|
-
const enableEmbeddings = await confirm({
|
|
788
|
-
message: 'Enable ONNX embedding system with hyperbolic support?',
|
|
789
|
-
default: true,
|
|
790
|
-
});
|
|
791
|
-
let embeddingModel = 'Xenova/all-MiniLM-L6-v2';
|
|
792
|
-
if (enableEmbeddings) {
|
|
793
|
-
embeddingModel = await select({
|
|
794
|
-
message: 'Select embedding model:',
|
|
795
|
-
options: [
|
|
796
|
-
{ value: 'Xenova/all-MiniLM-L6-v2', label: 'MiniLM L6 (384d)', hint: 'Fast, good quality (recommended)' },
|
|
797
|
-
{ value: 'Xenova/all-mpnet-base-v2', label: 'MPNet Base (768d)', hint: 'Higher quality, more memory' },
|
|
798
|
-
],
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
// Execute initialization
|
|
802
|
-
output.writeln();
|
|
803
|
-
const spinner = output.createSpinner({ text: 'Initializing...' });
|
|
804
|
-
spinner.start();
|
|
805
|
-
const result = await executeInit(options);
|
|
806
|
-
if (!result.success) {
|
|
807
|
-
spinner.fail('Initialization failed');
|
|
808
|
-
for (const error of result.errors) {
|
|
809
|
-
output.printError(error);
|
|
810
|
-
}
|
|
811
|
-
return { success: false, exitCode: 1 };
|
|
812
|
-
}
|
|
813
|
-
spinner.succeed('Setup complete!');
|
|
814
|
-
// Initialize embeddings if enabled
|
|
815
|
-
let embeddingsInitialized = false;
|
|
816
|
-
if (enableEmbeddings) {
|
|
817
|
-
output.writeln();
|
|
818
|
-
output.printInfo('Initializing ONNX embedding subsystem...');
|
|
819
|
-
const { execFileSync } = await import('child_process');
|
|
820
|
-
// Validate embeddingModel: must match pattern org/model-name (CRIT-02)
|
|
821
|
-
if (!/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/.test(embeddingModel)) {
|
|
822
|
-
throw new Error(`Invalid embedding model name: ${embeddingModel}`);
|
|
823
|
-
}
|
|
824
|
-
try {
|
|
825
|
-
execFileSync('npx', [
|
|
826
|
-
'@claude-flow/cli@latest', 'embeddings', 'init',
|
|
827
|
-
'--model', embeddingModel,
|
|
828
|
-
'--no-download', '--force',
|
|
829
|
-
], {
|
|
830
|
-
stdio: 'pipe',
|
|
831
|
-
cwd: ctx.cwd,
|
|
832
|
-
timeout: 30000,
|
|
833
|
-
});
|
|
834
|
-
output.writeln(output.success(' ✓ Embeddings configured'));
|
|
835
|
-
embeddingsInitialized = true;
|
|
836
|
-
}
|
|
837
|
-
catch {
|
|
838
|
-
output.writeln(output.dim(' Embeddings will be configured on first use'));
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
output.writeln();
|
|
842
|
-
// Summary table
|
|
843
|
-
output.printTable({
|
|
844
|
-
columns: [
|
|
845
|
-
{ key: 'setting', header: 'Setting', width: 20 },
|
|
846
|
-
{ key: 'value', header: 'Value', width: 40 },
|
|
847
|
-
],
|
|
848
|
-
data: [
|
|
849
|
-
{ setting: 'Preset', value: preset },
|
|
850
|
-
{ setting: 'Topology', value: options.runtime.topology },
|
|
851
|
-
{ setting: 'Max Agents', value: String(options.runtime.maxAgents) },
|
|
852
|
-
{ setting: 'Memory Backend', value: options.runtime.memoryBackend },
|
|
853
|
-
{ setting: 'HNSW Indexing', value: options.runtime.enableHNSW ? 'Enabled' : 'Disabled' },
|
|
854
|
-
{ setting: 'Neural Learning', value: options.runtime.enableNeural ? 'Enabled' : 'Disabled' },
|
|
855
|
-
{ setting: 'Self-Learning', value: options.runtime.enableLearningBridge ? 'LearningBridge + Graph + Scopes' : 'Disabled' },
|
|
856
|
-
{ setting: 'Embeddings', value: enableEmbeddings ? `${embeddingModel} (hyperbolic)` : 'Disabled' },
|
|
857
|
-
{ setting: 'Skills', value: `${result.summary.skillsCount} installed` },
|
|
858
|
-
{ setting: 'Commands', value: `${result.summary.commandsCount} installed` },
|
|
859
|
-
{ setting: 'Agents', value: `${result.summary.agentsCount} installed` },
|
|
860
|
-
{ setting: 'Hooks', value: `${result.summary.hooksEnabled} enabled` },
|
|
861
|
-
],
|
|
862
|
-
});
|
|
863
|
-
await offerCapabilityEnrollment(ctx);
|
|
864
|
-
return { success: true, data: result };
|
|
865
|
-
}
|
|
866
|
-
catch (error) {
|
|
867
|
-
if (error instanceof Error && error.message === 'User cancelled') {
|
|
868
|
-
output.printInfo('Setup cancelled');
|
|
869
|
-
return { success: true };
|
|
870
|
-
}
|
|
871
|
-
throw error;
|
|
872
|
-
}
|
|
873
|
-
},
|
|
874
|
-
};
|
|
875
|
-
// Check subcommand
|
|
876
|
-
const checkCommand = {
|
|
877
|
-
name: 'check',
|
|
878
|
-
description: 'Check if RuFlo is initialized',
|
|
879
|
-
action: async (ctx) => {
|
|
880
|
-
const initialized = isInitialized(ctx.cwd);
|
|
881
|
-
const result = {
|
|
882
|
-
initialized: initialized.claude || initialized.claudeFlow,
|
|
883
|
-
claude: initialized.claude,
|
|
884
|
-
claudeFlow: initialized.claudeFlow,
|
|
885
|
-
paths: {
|
|
886
|
-
claudeSettings: initialized.claude ? path.join(ctx.cwd, '.claude', 'settings.json') : null,
|
|
887
|
-
claudeFlowConfig: initialized.claudeFlow ? path.join(ctx.cwd, '.claude-flow', 'config.yaml') : null,
|
|
888
|
-
},
|
|
889
|
-
};
|
|
890
|
-
if (ctx.flags.format === 'json') {
|
|
891
|
-
output.printJson(result);
|
|
892
|
-
return { success: true, data: result };
|
|
893
|
-
}
|
|
894
|
-
if (result.initialized) {
|
|
895
|
-
output.printSuccess('RuFlo is initialized');
|
|
896
|
-
if (initialized.claude) {
|
|
897
|
-
output.printInfo(` Claude Code: .claude/settings.json`);
|
|
898
|
-
}
|
|
899
|
-
if (initialized.claudeFlow) {
|
|
900
|
-
output.printInfo(` V3 Runtime: .claude-flow/config.yaml`);
|
|
901
|
-
}
|
|
902
|
-
}
|
|
903
|
-
else {
|
|
904
|
-
output.printWarning('RuFlo is not initialized in this directory');
|
|
905
|
-
output.printInfo('Run "ruflo init" to initialize');
|
|
906
|
-
}
|
|
907
|
-
return { success: true, data: result };
|
|
908
|
-
},
|
|
909
|
-
};
|
|
910
|
-
// Skills subcommand
|
|
911
|
-
const skillsCommand = {
|
|
912
|
-
name: 'skills',
|
|
913
|
-
description: 'Initialize only skills',
|
|
914
|
-
options: [
|
|
915
|
-
{ name: 'all', description: 'Install all skills', type: 'boolean', default: false },
|
|
916
|
-
{ name: 'core', description: 'Install core skills', type: 'boolean', default: true },
|
|
917
|
-
{ name: 'agentdb', description: 'Install AgentDB skills', type: 'boolean', default: false },
|
|
918
|
-
{ name: 'github', description: 'Install GitHub skills', type: 'boolean', default: false },
|
|
919
|
-
{ name: 'v3', description: 'Install V3 skills', type: 'boolean', default: false },
|
|
920
|
-
],
|
|
921
|
-
action: async (ctx) => {
|
|
922
|
-
const options = {
|
|
923
|
-
...MINIMAL_INIT_OPTIONS,
|
|
924
|
-
targetDir: ctx.cwd,
|
|
925
|
-
force: ctx.flags.force,
|
|
926
|
-
components: {
|
|
927
|
-
settings: false,
|
|
928
|
-
skills: true,
|
|
929
|
-
commands: false,
|
|
930
|
-
agents: false,
|
|
931
|
-
helpers: false,
|
|
932
|
-
statusline: false,
|
|
933
|
-
mcp: false,
|
|
934
|
-
runtime: false,
|
|
935
|
-
claudeMd: false,
|
|
936
|
-
},
|
|
937
|
-
skills: {
|
|
938
|
-
all: ctx.flags.all,
|
|
939
|
-
core: ctx.flags.core,
|
|
940
|
-
agentdb: ctx.flags.agentdb,
|
|
941
|
-
github: ctx.flags.github,
|
|
942
|
-
flowNexus: false,
|
|
943
|
-
browser: false,
|
|
944
|
-
v3: ctx.flags.v3,
|
|
945
|
-
dualMode: false,
|
|
946
|
-
},
|
|
947
|
-
};
|
|
948
|
-
const spinner = output.createSpinner({ text: 'Installing skills...' });
|
|
949
|
-
spinner.start();
|
|
950
|
-
const result = await executeInit(options);
|
|
951
|
-
if (result.success) {
|
|
952
|
-
spinner.succeed(`Installed ${result.summary.skillsCount} skills`);
|
|
953
|
-
}
|
|
954
|
-
else {
|
|
955
|
-
spinner.fail('Failed to install skills');
|
|
956
|
-
for (const error of result.errors) {
|
|
957
|
-
output.printError(error);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
return { success: result.success, data: result };
|
|
961
|
-
},
|
|
962
|
-
};
|
|
963
|
-
// Hooks subcommand
|
|
964
|
-
const hooksCommand = {
|
|
965
|
-
name: 'hooks',
|
|
966
|
-
description: 'Initialize only hooks configuration',
|
|
967
|
-
options: [
|
|
968
|
-
{ name: 'all', description: 'Enable all hooks', type: 'boolean', default: true },
|
|
969
|
-
{ name: 'minimal', description: 'Enable only essential hooks', type: 'boolean', default: false },
|
|
970
|
-
],
|
|
971
|
-
action: async (ctx) => {
|
|
972
|
-
const minimal = ctx.flags.minimal;
|
|
973
|
-
const options = {
|
|
974
|
-
...DEFAULT_INIT_OPTIONS,
|
|
975
|
-
targetDir: ctx.cwd,
|
|
976
|
-
force: ctx.flags.force,
|
|
977
|
-
components: {
|
|
978
|
-
settings: true,
|
|
979
|
-
skills: false,
|
|
980
|
-
commands: false,
|
|
981
|
-
agents: false,
|
|
982
|
-
// #2350: helpers MUST ship with the hooks subcommand. The hook entries
|
|
983
|
-
// in settings.json point at `.claude/helpers/hook-handler.cjs`; if
|
|
984
|
-
// that file doesn't exist, settings-generator (#1744 fix) drops the
|
|
985
|
-
// hooks block entirely — so the one subcommand whose stated purpose
|
|
986
|
-
// is "Initialize only hooks configuration" produced settings.json
|
|
987
|
-
// with no `hooks` key while reporting "N hooks enabled".
|
|
988
|
-
helpers: true,
|
|
989
|
-
statusline: false,
|
|
990
|
-
mcp: false,
|
|
991
|
-
runtime: false,
|
|
992
|
-
claudeMd: false,
|
|
993
|
-
},
|
|
994
|
-
hooks: minimal
|
|
995
|
-
? {
|
|
996
|
-
preToolUse: true,
|
|
997
|
-
postToolUse: true,
|
|
998
|
-
userPromptSubmit: false,
|
|
999
|
-
sessionStart: false,
|
|
1000
|
-
stop: false,
|
|
1001
|
-
preCompact: false,
|
|
1002
|
-
notification: false,
|
|
1003
|
-
teammateIdle: false,
|
|
1004
|
-
taskCompleted: false,
|
|
1005
|
-
timeout: 5000,
|
|
1006
|
-
continueOnError: true,
|
|
1007
|
-
}
|
|
1008
|
-
: DEFAULT_INIT_OPTIONS.hooks,
|
|
1009
|
-
};
|
|
1010
|
-
const spinner = output.createSpinner({ text: 'Creating hooks configuration...' });
|
|
1011
|
-
spinner.start();
|
|
1012
|
-
const result = await executeInit(options);
|
|
1013
|
-
if (result.success) {
|
|
1014
|
-
spinner.succeed(`Created settings.json with ${result.summary.hooksEnabled} hooks enabled`);
|
|
1015
|
-
}
|
|
1016
|
-
else {
|
|
1017
|
-
spinner.fail('Failed to create hooks configuration');
|
|
1018
|
-
for (const error of result.errors) {
|
|
1019
|
-
output.printError(error);
|
|
1020
|
-
}
|
|
1021
|
-
}
|
|
1022
|
-
return { success: result.success, data: result };
|
|
1023
|
-
},
|
|
1024
|
-
};
|
|
1025
|
-
// Upgrade subcommand - updates helpers without losing user data
|
|
1026
|
-
const upgradeCommand = {
|
|
1027
|
-
name: 'upgrade',
|
|
1028
|
-
description: 'Update statusline and helpers while preserving existing data',
|
|
1029
|
-
options: [
|
|
1030
|
-
{
|
|
1031
|
-
name: 'verbose',
|
|
1032
|
-
short: 'v',
|
|
1033
|
-
description: 'Show detailed output',
|
|
1034
|
-
type: 'boolean',
|
|
1035
|
-
default: false,
|
|
1036
|
-
},
|
|
1037
|
-
{
|
|
1038
|
-
name: 'add-missing',
|
|
1039
|
-
short: 'a',
|
|
1040
|
-
description: 'Add any new skills, agents, and commands that are missing',
|
|
1041
|
-
type: 'boolean',
|
|
1042
|
-
default: false,
|
|
1043
|
-
},
|
|
1044
|
-
{
|
|
1045
|
-
name: 'settings',
|
|
1046
|
-
short: 's',
|
|
1047
|
-
description: 'Merge new settings (Agent Teams, hooks) into existing settings.json',
|
|
1048
|
-
type: 'boolean',
|
|
1049
|
-
default: false,
|
|
1050
|
-
},
|
|
1051
|
-
],
|
|
1052
|
-
action: async (ctx) => {
|
|
1053
|
-
const addMissing = (ctx.flags['add-missing'] || ctx.flags.addMissing);
|
|
1054
|
-
const upgradeSettings = (ctx.flags.settings);
|
|
1055
|
-
output.writeln();
|
|
1056
|
-
output.writeln(output.bold('Upgrading RuFlo'));
|
|
1057
|
-
if (addMissing && upgradeSettings) {
|
|
1058
|
-
output.writeln(output.dim('Updates helpers, settings, and adds any missing skills/agents/commands'));
|
|
1059
|
-
}
|
|
1060
|
-
else if (addMissing) {
|
|
1061
|
-
output.writeln(output.dim('Updates helpers and adds any missing skills/agents/commands'));
|
|
1062
|
-
}
|
|
1063
|
-
else if (upgradeSettings) {
|
|
1064
|
-
output.writeln(output.dim('Updates helpers and merges new settings (Agent Teams, hooks)'));
|
|
1065
|
-
}
|
|
1066
|
-
else {
|
|
1067
|
-
output.writeln(output.dim('Updates helpers while preserving your existing data'));
|
|
1068
|
-
}
|
|
1069
|
-
output.writeln();
|
|
1070
|
-
const spinnerText = upgradeSettings
|
|
1071
|
-
? 'Upgrading helpers and settings...'
|
|
1072
|
-
: (addMissing ? 'Upgrading and adding missing assets...' : 'Upgrading...');
|
|
1073
|
-
const spinner = output.createSpinner({ text: spinnerText });
|
|
1074
|
-
spinner.start();
|
|
1075
|
-
try {
|
|
1076
|
-
const result = addMissing
|
|
1077
|
-
? await executeUpgradeWithMissing(ctx.cwd, upgradeSettings)
|
|
1078
|
-
: await executeUpgrade(ctx.cwd, upgradeSettings);
|
|
1079
|
-
if (!result.success) {
|
|
1080
|
-
spinner.fail('Upgrade failed');
|
|
1081
|
-
for (const error of result.errors) {
|
|
1082
|
-
output.printError(error);
|
|
1083
|
-
}
|
|
1084
|
-
return { success: false, exitCode: 1 };
|
|
1085
|
-
}
|
|
1086
|
-
spinner.succeed('Upgrade complete!');
|
|
1087
|
-
output.writeln();
|
|
1088
|
-
// Show what was updated
|
|
1089
|
-
if (result.updated.length > 0) {
|
|
1090
|
-
output.printBox(result.updated.map(f => `✓ ${f}`).join('\n'), 'Updated (latest version)');
|
|
1091
|
-
output.writeln();
|
|
1092
|
-
}
|
|
1093
|
-
// Show what was created
|
|
1094
|
-
if (result.created.length > 0) {
|
|
1095
|
-
output.printBox(result.created.map(f => `+ ${f}`).join('\n'), 'Created (new files)');
|
|
1096
|
-
output.writeln();
|
|
1097
|
-
}
|
|
1098
|
-
// Show what was preserved
|
|
1099
|
-
if (result.preserved.length > 0 && ctx.flags.verbose) {
|
|
1100
|
-
output.printBox(result.preserved.map(f => `• ${f}`).join('\n'), 'Preserved (existing data kept)');
|
|
1101
|
-
output.writeln();
|
|
1102
|
-
}
|
|
1103
|
-
else if (result.preserved.length > 0) {
|
|
1104
|
-
output.printInfo(`Preserved ${result.preserved.length} existing data files`);
|
|
1105
|
-
output.writeln();
|
|
1106
|
-
}
|
|
1107
|
-
// Show added assets (when --add-missing flag is used)
|
|
1108
|
-
if (result.addedSkills && result.addedSkills.length > 0) {
|
|
1109
|
-
output.printBox(result.addedSkills.map(s => `+ ${s}`).join('\n'), `Added Skills (${result.addedSkills.length} new)`);
|
|
1110
|
-
output.writeln();
|
|
1111
|
-
}
|
|
1112
|
-
if (result.addedAgents && result.addedAgents.length > 0) {
|
|
1113
|
-
output.printBox(result.addedAgents.map(a => `+ ${a}`).join('\n'), `Added Agents (${result.addedAgents.length} new)`);
|
|
1114
|
-
output.writeln();
|
|
1115
|
-
}
|
|
1116
|
-
if (result.addedCommands && result.addedCommands.length > 0) {
|
|
1117
|
-
output.printBox(result.addedCommands.map(c => `+ ${c}`).join('\n'), `Added Commands (${result.addedCommands.length} new)`);
|
|
1118
|
-
output.writeln();
|
|
1119
|
-
}
|
|
1120
|
-
// Show settings updates
|
|
1121
|
-
if (result.settingsUpdated && result.settingsUpdated.length > 0) {
|
|
1122
|
-
output.printBox(result.settingsUpdated.map(s => `+ ${s}`).join('\n'), 'Settings Updated');
|
|
1123
|
-
output.writeln();
|
|
1124
|
-
}
|
|
1125
|
-
output.printSuccess('Your statusline helper has been updated to the latest version');
|
|
1126
|
-
output.printInfo('Existing metrics and learning data were preserved');
|
|
1127
|
-
// Show settings summary
|
|
1128
|
-
if (upgradeSettings && result.settingsUpdated && result.settingsUpdated.length > 0) {
|
|
1129
|
-
output.printSuccess('Settings.json updated with new Agent Teams configuration');
|
|
1130
|
-
}
|
|
1131
|
-
// Show summary for --add-missing
|
|
1132
|
-
if (addMissing) {
|
|
1133
|
-
const totalAdded = (result.addedSkills?.length || 0) + (result.addedAgents?.length || 0) + (result.addedCommands?.length || 0);
|
|
1134
|
-
if (totalAdded > 0) {
|
|
1135
|
-
output.printSuccess(`Added ${totalAdded} missing assets to your project`);
|
|
1136
|
-
}
|
|
1137
|
-
else {
|
|
1138
|
-
output.printInfo('All skills, agents, and commands are already up to date');
|
|
1139
|
-
}
|
|
1140
|
-
}
|
|
1141
|
-
if (ctx.flags.format === 'json') {
|
|
1142
|
-
output.printJson(result);
|
|
1143
|
-
}
|
|
1144
|
-
return { success: true, data: result };
|
|
1145
|
-
}
|
|
1146
|
-
catch (error) {
|
|
1147
|
-
spinner.fail('Upgrade failed');
|
|
1148
|
-
output.printError(`Failed to upgrade: ${error instanceof Error ? error.message : String(error)}`);
|
|
1149
|
-
return { success: false, exitCode: 1 };
|
|
1150
|
-
}
|
|
1151
|
-
},
|
|
1152
|
-
};
|
|
1153
|
-
// Main init command
|
|
1154
|
-
export const initCommand = {
|
|
1155
|
-
name: 'init',
|
|
1156
|
-
description: 'Initialize RuFlo in the current directory',
|
|
1157
|
-
subcommands: [wizardCommand, checkCommand, skillsCommand, hooksCommand, upgradeCommand],
|
|
1158
|
-
options: [
|
|
1159
|
-
{
|
|
1160
|
-
name: 'force',
|
|
1161
|
-
short: 'f',
|
|
1162
|
-
description: 'Overwrite existing configuration',
|
|
1163
|
-
type: 'boolean',
|
|
1164
|
-
default: false,
|
|
1165
|
-
},
|
|
1166
|
-
{
|
|
1167
|
-
name: 'minimal',
|
|
1168
|
-
short: 'm',
|
|
1169
|
-
description: 'Create minimal configuration',
|
|
1170
|
-
type: 'boolean',
|
|
1171
|
-
default: false,
|
|
1172
|
-
},
|
|
1173
|
-
{
|
|
1174
|
-
name: 'full',
|
|
1175
|
-
description: 'Create full configuration with all components',
|
|
1176
|
-
type: 'boolean',
|
|
1177
|
-
default: false,
|
|
1178
|
-
},
|
|
1179
|
-
{
|
|
1180
|
-
// #2356: under --full, the auth-gated cloud MCP servers (ruv-swarm,
|
|
1181
|
-
// flow-nexus) get written into a committed .mcp.json and add MCP
|
|
1182
|
-
// tool-definition token cost every session. Keep them opt-in even with
|
|
1183
|
-
// --full; pass --cloud-mcp to register them.
|
|
1184
|
-
name: 'cloud-mcp',
|
|
1185
|
-
description: 'Register auth-gated cloud MCP servers (ruv-swarm, flow-nexus) in .mcp.json (only relevant with --full)',
|
|
1186
|
-
type: 'boolean',
|
|
1187
|
-
default: false,
|
|
1188
|
-
},
|
|
1189
|
-
{
|
|
1190
|
-
name: 'skip-claude',
|
|
1191
|
-
description: 'Skip .claude/ directory creation (runtime only)',
|
|
1192
|
-
type: 'boolean',
|
|
1193
|
-
default: false,
|
|
1194
|
-
},
|
|
1195
|
-
{
|
|
1196
|
-
// ADR-302 — skip the one-time post-init capability enrollment prompt.
|
|
1197
|
-
name: 'no-signup',
|
|
1198
|
-
description: 'Skip the post-init Cognitum capability enrollment prompt',
|
|
1199
|
-
type: 'boolean',
|
|
1200
|
-
default: false,
|
|
1201
|
-
},
|
|
1202
|
-
{
|
|
1203
|
-
name: 'only-claude',
|
|
1204
|
-
description: 'Only create .claude/ directory (skip runtime)',
|
|
1205
|
-
type: 'boolean',
|
|
1206
|
-
default: false,
|
|
1207
|
-
},
|
|
1208
|
-
{
|
|
1209
|
-
name: 'no-global',
|
|
1210
|
-
description: 'Skip the ~/.claude/CLAUDE.md "Ruflo Integration" pointer block (#1744)',
|
|
1211
|
-
type: 'boolean',
|
|
1212
|
-
default: false,
|
|
1213
|
-
},
|
|
1214
|
-
{
|
|
1215
|
-
name: 'start-all',
|
|
1216
|
-
description: 'Auto-start daemon, memory, and swarm after init',
|
|
1217
|
-
type: 'boolean',
|
|
1218
|
-
default: false,
|
|
1219
|
-
},
|
|
1220
|
-
{
|
|
1221
|
-
name: 'start-daemon',
|
|
1222
|
-
description: 'Auto-start daemon after init',
|
|
1223
|
-
type: 'boolean',
|
|
1224
|
-
default: false,
|
|
1225
|
-
},
|
|
1226
|
-
{
|
|
1227
|
-
name: 'with-embeddings',
|
|
1228
|
-
description: 'Initialize ONNX embedding subsystem with hyperbolic support',
|
|
1229
|
-
type: 'boolean',
|
|
1230
|
-
default: false,
|
|
1231
|
-
},
|
|
1232
|
-
{
|
|
1233
|
-
name: 'embedding-model',
|
|
1234
|
-
description: 'ONNX embedding model to use',
|
|
1235
|
-
type: 'string',
|
|
1236
|
-
default: 'Xenova/all-MiniLM-L6-v2',
|
|
1237
|
-
choices: ['Xenova/all-MiniLM-L6-v2', 'Xenova/all-mpnet-base-v2'],
|
|
1238
|
-
},
|
|
1239
|
-
{
|
|
1240
|
-
name: 'codex',
|
|
1241
|
-
description: 'Initialize for OpenAI Codex CLI (creates AGENTS.md, .agents/)',
|
|
1242
|
-
type: 'boolean',
|
|
1243
|
-
default: false,
|
|
1244
|
-
},
|
|
1245
|
-
{
|
|
1246
|
-
name: 'dual',
|
|
1247
|
-
description: 'Initialize for both Claude Code and OpenAI Codex',
|
|
1248
|
-
type: 'boolean',
|
|
1249
|
-
default: false,
|
|
1250
|
-
},
|
|
1251
|
-
{
|
|
1252
|
-
name: 'no-codex-detect',
|
|
1253
|
-
description: 'Skip auto-detecting the OpenAI Codex CLI and configuring its MCP server + skills',
|
|
1254
|
-
type: 'boolean',
|
|
1255
|
-
default: false,
|
|
1256
|
-
},
|
|
1257
|
-
{
|
|
1258
|
-
name: 'no-skills-sh',
|
|
1259
|
-
description: 'Skip the post-init `npx skills add ruvnet/ruflo` registration (also honored via RUFLO_NO_SKILLS_SH=1)',
|
|
1260
|
-
type: 'boolean',
|
|
1261
|
-
default: false,
|
|
1262
|
-
},
|
|
1263
|
-
{
|
|
1264
|
-
name: 'all-agents',
|
|
1265
|
-
description: 'Install all agent categories (ADR-128: default is ~24 substrate agents; this restores the full set of ~89)',
|
|
1266
|
-
type: 'boolean',
|
|
1267
|
-
default: false,
|
|
1268
|
-
},
|
|
1269
|
-
],
|
|
1270
|
-
examples: [
|
|
1271
|
-
{ command: 'claude-flow init', description: 'Initialize with default configuration' },
|
|
1272
|
-
{ command: 'claude-flow init --start-all', description: 'Initialize and start daemon, memory, swarm' },
|
|
1273
|
-
{ command: 'claude-flow init --start-daemon', description: 'Initialize and start daemon only' },
|
|
1274
|
-
{ command: 'claude-flow init --minimal', description: 'Initialize with minimal configuration' },
|
|
1275
|
-
{ command: 'claude-flow init --full', description: 'Initialize with all components' },
|
|
1276
|
-
{ command: 'claude-flow init --force', description: 'Reinitialize and overwrite existing config' },
|
|
1277
|
-
{ command: 'claude-flow init --only-claude', description: 'Only create Claude Code integration' },
|
|
1278
|
-
{ command: 'claude-flow init --skip-claude', description: 'Only create V3 runtime' },
|
|
1279
|
-
{ command: 'claude-flow init wizard', description: 'Interactive setup wizard' },
|
|
1280
|
-
{ command: 'claude-flow init --with-embeddings', description: 'Initialize with ONNX embeddings' },
|
|
1281
|
-
{ command: 'claude-flow init --with-embeddings --embedding-model Xenova/all-mpnet-base-v2', description: 'Use larger embedding model' },
|
|
1282
|
-
{ command: 'claude-flow init skills --all', description: 'Install all available skills' },
|
|
1283
|
-
{ command: 'claude-flow init hooks --minimal', description: 'Create minimal hooks configuration' },
|
|
1284
|
-
{ command: 'claude-flow init upgrade', description: 'Update helpers while preserving data' },
|
|
1285
|
-
{ command: 'claude-flow init upgrade --settings', description: 'Update helpers and merge new settings (Agent Teams)' },
|
|
1286
|
-
{ command: 'claude-flow init upgrade --verbose', description: 'Show detailed upgrade info' },
|
|
1287
|
-
{ command: 'claude-flow init --codex', description: 'Initialize for OpenAI Codex (AGENTS.md)' },
|
|
1288
|
-
{ command: 'claude-flow init --codex --full', description: 'Codex init with all 137+ skills' },
|
|
1289
|
-
{ command: 'claude-flow init --dual', description: 'Initialize for both Claude Code and Codex' },
|
|
1290
|
-
{ command: 'claude-flow init --no-codex-detect', description: 'Skip auto-configuring OpenAI Codex even if it is installed' },
|
|
1291
|
-
{ command: 'claude-flow init --no-skills-sh', description: 'Skip the post-init skills.sh registration' },
|
|
1292
|
-
{ command: 'claude-flow init --all-agents', description: 'Install all agent categories (~89 agents; ADR-128 opt-in)' },
|
|
1293
|
-
],
|
|
1294
|
-
action: initAction,
|
|
1295
|
-
};
|
|
1296
|
-
export default initCommand;
|
|
1297
|
-
//# sourceMappingURL=init.js.map
|