@claude-flow/cli 3.32.1 → 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-version +1 -1
- package/.claude/helpers/helpers.manifest.json +3 -3
- package/.claude/helpers/statusline.cjs +24 -17
- package/.claude/helpers/statusline.js +19 -31
- package/catalog-manifest.json +2 -2
- package/package.json +1 -1
- package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +1 -1
- package/plugins/ruflo-metaharness/scripts/smoke.sh +8 -5
- package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +1 -1
- 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 -4595
- 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 -1007
- 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 -49
- package/dist/src/funnel/insights.js +0 -120
- package/dist/src/funnel/local-signals.d.ts +0 -15
- package/dist/src/funnel/local-signals.js +0 -68
- 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 -4824
- 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/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 -207
- 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
package/dist/src/mcp-server.js
DELETED
|
@@ -1,751 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* V3 CLI MCP Server Management
|
|
3
|
-
*
|
|
4
|
-
* Provides server lifecycle management for MCP integration:
|
|
5
|
-
* - Start/stop/status methods with process management
|
|
6
|
-
* - Health check endpoint integration
|
|
7
|
-
* - Graceful shutdown handling
|
|
8
|
-
* - PID file management for daemon detection
|
|
9
|
-
* - Event-based status monitoring
|
|
10
|
-
*
|
|
11
|
-
* Performance Targets:
|
|
12
|
-
* - Server startup: <400ms
|
|
13
|
-
* - Health check: <10ms
|
|
14
|
-
* - Graceful shutdown: <5s
|
|
15
|
-
*
|
|
16
|
-
* @module @claude-flow/cli/mcp-server
|
|
17
|
-
* @version 3.0.0
|
|
18
|
-
*/
|
|
19
|
-
import { EventEmitter } from 'events';
|
|
20
|
-
import { execFileSync } from 'child_process';
|
|
21
|
-
import { request as httpRequestFn } from 'http';
|
|
22
|
-
import { randomUUID } from 'crypto';
|
|
23
|
-
import * as path from 'path';
|
|
24
|
-
import * as fs from 'fs';
|
|
25
|
-
import * as os from 'os';
|
|
26
|
-
import { fileURLToPath } from 'url';
|
|
27
|
-
import { dirname } from 'path';
|
|
28
|
-
import { trackRequest } from './mcp-tools/request-tracker.js';
|
|
29
|
-
// ESM-compatible __dirname
|
|
30
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
31
|
-
const __dirname = dirname(__filename);
|
|
32
|
-
/**
|
|
33
|
-
* Default configuration
|
|
34
|
-
*/
|
|
35
|
-
const DEFAULT_OPTIONS = {
|
|
36
|
-
transport: 'stdio',
|
|
37
|
-
host: 'localhost',
|
|
38
|
-
port: 3000,
|
|
39
|
-
pidFile: path.join(os.tmpdir(), 'claude-flow-mcp.pid'),
|
|
40
|
-
logFile: path.join(os.tmpdir(), 'claude-flow-mcp.log'),
|
|
41
|
-
tools: 'all',
|
|
42
|
-
daemonize: false,
|
|
43
|
-
timeout: 30000,
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* MCP Server Manager
|
|
47
|
-
*
|
|
48
|
-
* Manages the lifecycle of the MCP server process
|
|
49
|
-
*/
|
|
50
|
-
export class MCPServerManager extends EventEmitter {
|
|
51
|
-
options;
|
|
52
|
-
process;
|
|
53
|
-
server;
|
|
54
|
-
startTime;
|
|
55
|
-
healthCheckInterval;
|
|
56
|
-
constructor(options = {}) {
|
|
57
|
-
super();
|
|
58
|
-
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Start the MCP server
|
|
62
|
-
*/
|
|
63
|
-
async start() {
|
|
64
|
-
// Check if already running (skip if status reports our own PID —
|
|
65
|
-
// getStatus() returns running=true for the current process in stdio mode
|
|
66
|
-
// even before the server is actually started)
|
|
67
|
-
const status = await this.getStatus();
|
|
68
|
-
if (status.running && status.pid !== process.pid) {
|
|
69
|
-
throw new Error(`MCP Server already running (PID: ${status.pid})`);
|
|
70
|
-
}
|
|
71
|
-
const startTime = performance.now();
|
|
72
|
-
this.startTime = new Date();
|
|
73
|
-
this.emit('starting', { options: this.options });
|
|
74
|
-
try {
|
|
75
|
-
if (this.options.transport === 'stdio') {
|
|
76
|
-
// For stdio transport, spawn the server process
|
|
77
|
-
await this.startStdioServer();
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// For HTTP/WebSocket, start in-process server
|
|
81
|
-
await this.startHttpServer();
|
|
82
|
-
}
|
|
83
|
-
const duration = performance.now() - startTime;
|
|
84
|
-
// Write PID file
|
|
85
|
-
await this.writePidFile();
|
|
86
|
-
// Start health check monitoring
|
|
87
|
-
this.startHealthMonitoring();
|
|
88
|
-
const finalStatus = await this.getStatus();
|
|
89
|
-
this.emit('started', {
|
|
90
|
-
...finalStatus,
|
|
91
|
-
startupTime: duration,
|
|
92
|
-
});
|
|
93
|
-
return finalStatus;
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
this.emit('error', error);
|
|
97
|
-
throw error;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Stop the MCP server
|
|
102
|
-
*/
|
|
103
|
-
async stop(force = false) {
|
|
104
|
-
const status = await this.getStatus();
|
|
105
|
-
if (!status.running) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
this.emit('stopping', { force });
|
|
109
|
-
try {
|
|
110
|
-
// Stop health monitoring
|
|
111
|
-
if (this.healthCheckInterval) {
|
|
112
|
-
clearInterval(this.healthCheckInterval);
|
|
113
|
-
this.healthCheckInterval = undefined;
|
|
114
|
-
}
|
|
115
|
-
if (this.process) {
|
|
116
|
-
// Graceful shutdown
|
|
117
|
-
if (!force) {
|
|
118
|
-
this.process.kill('SIGTERM');
|
|
119
|
-
await this.waitForExit(5000);
|
|
120
|
-
}
|
|
121
|
-
// Force kill if still running
|
|
122
|
-
if (this.process && !this.process.killed) {
|
|
123
|
-
this.process.kill('SIGKILL');
|
|
124
|
-
}
|
|
125
|
-
this.process = undefined;
|
|
126
|
-
}
|
|
127
|
-
if (this.server) {
|
|
128
|
-
await new Promise((resolve) => {
|
|
129
|
-
this.server.close(() => resolve());
|
|
130
|
-
});
|
|
131
|
-
this.server = undefined;
|
|
132
|
-
}
|
|
133
|
-
// Remove PID file
|
|
134
|
-
await this.removePidFile();
|
|
135
|
-
this.startTime = undefined;
|
|
136
|
-
this.emit('stopped');
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
this.emit('error', error);
|
|
140
|
-
throw error;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Get server status
|
|
145
|
-
*/
|
|
146
|
-
async getStatus() {
|
|
147
|
-
// Check PID file
|
|
148
|
-
const pid = await this.readPidFile();
|
|
149
|
-
if (!pid) {
|
|
150
|
-
// No PID file found. Detect if we are running in stdio mode
|
|
151
|
-
// (e.g., launched by Claude Code via `claude mcp add`).
|
|
152
|
-
const isStdio = !process.stdin.isTTY;
|
|
153
|
-
const envTransport = process.env.CLAUDE_FLOW_MCP_TRANSPORT;
|
|
154
|
-
if (isStdio || envTransport === 'stdio' || this.options.transport === 'stdio') {
|
|
155
|
-
return {
|
|
156
|
-
running: true,
|
|
157
|
-
pid: process.pid,
|
|
158
|
-
transport: 'stdio',
|
|
159
|
-
startedAt: this.startTime?.toISOString(),
|
|
160
|
-
uptime: this.startTime
|
|
161
|
-
? Math.floor((Date.now() - this.startTime.getTime()) / 1000)
|
|
162
|
-
: undefined,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
return { running: false };
|
|
166
|
-
}
|
|
167
|
-
// Check if process is running
|
|
168
|
-
const isRunning = this.isProcessRunning(pid);
|
|
169
|
-
if (!isRunning) {
|
|
170
|
-
// Clean up stale PID file
|
|
171
|
-
await this.removePidFile();
|
|
172
|
-
return { running: false };
|
|
173
|
-
}
|
|
174
|
-
// Build status
|
|
175
|
-
const status = {
|
|
176
|
-
running: true,
|
|
177
|
-
pid,
|
|
178
|
-
transport: this.options.transport,
|
|
179
|
-
host: this.options.host,
|
|
180
|
-
port: this.options.port,
|
|
181
|
-
startedAt: this.startTime?.toISOString(),
|
|
182
|
-
uptime: this.startTime
|
|
183
|
-
? Math.floor((Date.now() - this.startTime.getTime()) / 1000)
|
|
184
|
-
: undefined,
|
|
185
|
-
};
|
|
186
|
-
// Get health status for HTTP transport
|
|
187
|
-
if (this.options.transport !== 'stdio') {
|
|
188
|
-
status.health = await this.checkHealth();
|
|
189
|
-
}
|
|
190
|
-
return status;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Check server health
|
|
194
|
-
*/
|
|
195
|
-
async checkHealth() {
|
|
196
|
-
if (this.options.transport === 'stdio') {
|
|
197
|
-
// For stdio, check if process is running
|
|
198
|
-
const pid = await this.readPidFile();
|
|
199
|
-
if (pid === null) {
|
|
200
|
-
return { healthy: false, error: 'No PID file found' };
|
|
201
|
-
}
|
|
202
|
-
if (!this.isProcessRunning(pid)) {
|
|
203
|
-
// Clean up stale PID file
|
|
204
|
-
await this.removePidFile();
|
|
205
|
-
return { healthy: false, error: 'Process not running (cleaned up stale PID)' };
|
|
206
|
-
}
|
|
207
|
-
return { healthy: true };
|
|
208
|
-
}
|
|
209
|
-
// For HTTP/WebSocket, make health check request
|
|
210
|
-
try {
|
|
211
|
-
const response = await this.httpRequest(`http://${this.options.host}:${this.options.port}/health`, 'GET', this.options.timeout);
|
|
212
|
-
return {
|
|
213
|
-
healthy: response.status === 'ok',
|
|
214
|
-
metrics: {
|
|
215
|
-
connections: response.connections || 0,
|
|
216
|
-
},
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
catch (error) {
|
|
220
|
-
return {
|
|
221
|
-
healthy: false,
|
|
222
|
-
error: error instanceof Error ? error.message : 'Unknown error',
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Restart the server
|
|
228
|
-
*/
|
|
229
|
-
async restart() {
|
|
230
|
-
await this.stop();
|
|
231
|
-
return await this.start();
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Start stdio server in-process
|
|
235
|
-
* Handles stdin/stdout directly like V2 implementation
|
|
236
|
-
*/
|
|
237
|
-
async startStdioServer() {
|
|
238
|
-
// ruflo#1910 — protect the JSON-RPC stdout from any stray
|
|
239
|
-
// console.log/info/debug emitted by lazily-loaded modules
|
|
240
|
-
// (@ruvector/router, @claude-flow/neural, transformers.js, ONNX,
|
|
241
|
-
// semantic-router init, etc.). Codex closes the MCP transport
|
|
242
|
-
// the moment it sees a non-JSON line on stdout, and one such
|
|
243
|
-
// line during a tool batch bricked the whole session.
|
|
244
|
-
//
|
|
245
|
-
// Strategy: replace console.log/info/debug with stderr writers
|
|
246
|
-
// for the rest of the process. JSON-RPC frames go out via the
|
|
247
|
-
// dedicated `writeFrame()` helper below (process.stdout.write
|
|
248
|
-
// with the original native binding, NOT console.log), so the
|
|
249
|
-
// hijack can't accidentally redirect protocol frames too.
|
|
250
|
-
process.env.MCP_STDIO_MODE = '1';
|
|
251
|
-
const originalLog = console.log; // eslint-disable-line no-console
|
|
252
|
-
console.log = (...args) => process.stderr.write('[stdout→stderr] ' + args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ') + '\n');
|
|
253
|
-
console.info = (...args) => process.stderr.write('[stdout→stderr] ' + args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ') + '\n');
|
|
254
|
-
console.debug = (...args) => process.stderr.write('[stdout→stderr] ' + args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' ') + '\n');
|
|
255
|
-
// #2426 — Force blocking writes on stdout so JSON-RPC frames larger than
|
|
256
|
-
// the OS pipe buffer (64KB on macOS) are delivered atomically. Without
|
|
257
|
-
// this, `process.stdout.write()` returns after a partial write when the
|
|
258
|
-
// pipe buffer is full; the truncated frame is unparseable JSON and the
|
|
259
|
-
// MCP client (Claude Code) silently drops all 314 tools. The MCP SDK's
|
|
260
|
-
// StdioServerTransport does the same thing for this reason. `setBlocking`
|
|
261
|
-
// is an internal Node API but stable since v10 and used in many MCP
|
|
262
|
-
// implementations; we feature-gate it so we degrade gracefully on
|
|
263
|
-
// exotic stdout handles (e.g., when not bound to a pipe in tests).
|
|
264
|
-
const stdoutHandle = process.stdout._handle;
|
|
265
|
-
if (stdoutHandle && typeof stdoutHandle.setBlocking === 'function') {
|
|
266
|
-
stdoutHandle.setBlocking(true);
|
|
267
|
-
}
|
|
268
|
-
// Same for stderr — long structured error messages can also exceed the
|
|
269
|
-
// pipe buffer and tearing those mid-message corrupts the client's log view.
|
|
270
|
-
const stderrHandle = process.stderr._handle;
|
|
271
|
-
if (stderrHandle && typeof stderrHandle.setBlocking === 'function') {
|
|
272
|
-
stderrHandle.setBlocking(true);
|
|
273
|
-
}
|
|
274
|
-
/** Send a single JSON-RPC frame to the real stdout. Use this instead
|
|
275
|
-
* of `console.log` so the hijack above can't redirect protocol frames. */
|
|
276
|
-
const writeFrame = (msg) => {
|
|
277
|
-
process.stdout.write(JSON.stringify(msg) + '\n');
|
|
278
|
-
};
|
|
279
|
-
// Reference originalLog to keep the eslint-disable meaningful — also
|
|
280
|
-
// gives us an escape hatch if a test wants to verify it was replaced.
|
|
281
|
-
void originalLog;
|
|
282
|
-
// Catch fatal errors that would otherwise close the transport
|
|
283
|
-
// mid-batch with no JSON-RPC error returned to the client.
|
|
284
|
-
process.on('uncaughtException', (err) => {
|
|
285
|
-
process.stderr.write(`[mcp-stdio] uncaughtException: ${err.stack || err.message}\n`);
|
|
286
|
-
});
|
|
287
|
-
process.on('unhandledRejection', (reason) => {
|
|
288
|
-
process.stderr.write(`[mcp-stdio] unhandledRejection: ${reason instanceof Error ? reason.stack || reason.message : String(reason)}\n`);
|
|
289
|
-
});
|
|
290
|
-
// Import the tool registry
|
|
291
|
-
const { listMCPTools, callMCPTool, hasTool } = await import('./mcp-client.js');
|
|
292
|
-
const VERSION = '3.0.0';
|
|
293
|
-
const sessionId = `mcp-${Date.now()}-${randomUUID().slice(0, 8)}`;
|
|
294
|
-
// Log to stderr to not corrupt stdout
|
|
295
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Starting in stdio mode`);
|
|
296
|
-
// Auto-initialize memory database before tools are registered (#1524)
|
|
297
|
-
// This ensures memory_store and other memory tools work immediately
|
|
298
|
-
// without waiting for the first tool call to trigger lazy init.
|
|
299
|
-
try {
|
|
300
|
-
const { initializeMemoryDatabase, checkMemoryInitialization } = await import('./memory/memory-initializer.js');
|
|
301
|
-
const status = await checkMemoryInitialization();
|
|
302
|
-
if (!status.initialized) {
|
|
303
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Auto-initializing memory database...`);
|
|
304
|
-
const result = await initializeMemoryDatabase({ force: false, verbose: false });
|
|
305
|
-
if (result.success) {
|
|
306
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Memory database initialized at ${result.dbPath}`);
|
|
307
|
-
}
|
|
308
|
-
else if (result.error && !result.error.includes('already exists')) {
|
|
309
|
-
console.error(`[${new Date().toISOString()}] WARN [claude-flow-mcp] (${sessionId}) Memory database init returned: ${result.error}`);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Memory database already initialized (v${status.version || 'unknown'})`);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
catch (memInitError) {
|
|
317
|
-
// Graceful degradation: server continues even if memory init fails.
|
|
318
|
-
// Memory tools will attempt lazy init on first call via ensureInitialized().
|
|
319
|
-
console.error(`[${new Date().toISOString()}] WARN [claude-flow-mcp] (${sessionId}) Memory auto-init failed (tools will retry on first call): ${memInitError instanceof Error ? memInitError.message : String(memInitError)}`);
|
|
320
|
-
}
|
|
321
|
-
console.error(JSON.stringify({
|
|
322
|
-
arch: process.arch,
|
|
323
|
-
mode: 'mcp-stdio',
|
|
324
|
-
nodeVersion: process.version,
|
|
325
|
-
pid: process.pid,
|
|
326
|
-
platform: process.platform,
|
|
327
|
-
protocol: 'stdio',
|
|
328
|
-
sessionId,
|
|
329
|
-
version: VERSION,
|
|
330
|
-
}));
|
|
331
|
-
// Send server initialization notification
|
|
332
|
-
writeFrame({
|
|
333
|
-
jsonrpc: '2.0',
|
|
334
|
-
method: 'server.initialized',
|
|
335
|
-
params: {
|
|
336
|
-
serverInfo: {
|
|
337
|
-
name: 'ruflo',
|
|
338
|
-
version: VERSION,
|
|
339
|
-
capabilities: {
|
|
340
|
-
tools: { listChanged: true },
|
|
341
|
-
resources: { subscribe: true, listChanged: true },
|
|
342
|
-
},
|
|
343
|
-
},
|
|
344
|
-
},
|
|
345
|
-
});
|
|
346
|
-
// Handle stdin messages (S-5: bounded buffer to prevent OOM)
|
|
347
|
-
const MAX_BUFFER_SIZE = 10 * 1024 * 1024; // 10MB
|
|
348
|
-
let buffer = '';
|
|
349
|
-
process.stdin.on('data', async (chunk) => {
|
|
350
|
-
buffer += chunk.toString();
|
|
351
|
-
if (buffer.length > MAX_BUFFER_SIZE) {
|
|
352
|
-
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-mcp] Buffer exceeded ${MAX_BUFFER_SIZE} bytes, rejecting`);
|
|
353
|
-
buffer = '';
|
|
354
|
-
writeFrame({
|
|
355
|
-
jsonrpc: '2.0',
|
|
356
|
-
error: { code: -32600, message: 'Request too large' },
|
|
357
|
-
});
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
// Process complete JSON messages
|
|
361
|
-
let lines = buffer.split('\n');
|
|
362
|
-
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
363
|
-
for (const line of lines) {
|
|
364
|
-
if (line.trim()) {
|
|
365
|
-
try {
|
|
366
|
-
const message = JSON.parse(line);
|
|
367
|
-
const response = await this.handleMCPMessage(message, sessionId);
|
|
368
|
-
if (response) {
|
|
369
|
-
writeFrame(response);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
catch (error) {
|
|
373
|
-
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-mcp] Failed to parse message:`, error instanceof Error ? error.message : String(error));
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
process.stdin.on('end', () => {
|
|
379
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) stdin closed, shutting down...`);
|
|
380
|
-
process.exit(0);
|
|
381
|
-
});
|
|
382
|
-
// Handle process termination
|
|
383
|
-
process.on('SIGINT', () => {
|
|
384
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Received SIGINT, shutting down...`);
|
|
385
|
-
process.exit(0);
|
|
386
|
-
});
|
|
387
|
-
process.on('SIGTERM', () => {
|
|
388
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Received SIGTERM, shutting down...`);
|
|
389
|
-
process.exit(0);
|
|
390
|
-
});
|
|
391
|
-
// Mark as ready immediately for stdio
|
|
392
|
-
this.emit('ready');
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Handle incoming MCP message
|
|
396
|
-
*/
|
|
397
|
-
async handleMCPMessage(message, sessionId) {
|
|
398
|
-
const { listMCPTools, callMCPTool, hasTool } = await import('./mcp-client.js');
|
|
399
|
-
if (!message.method) {
|
|
400
|
-
return {
|
|
401
|
-
jsonrpc: '2.0',
|
|
402
|
-
id: message.id,
|
|
403
|
-
error: { code: -32600, message: 'Invalid Request: missing method' },
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
const params = (message.params || {});
|
|
407
|
-
try {
|
|
408
|
-
switch (message.method) {
|
|
409
|
-
case 'initialize':
|
|
410
|
-
return {
|
|
411
|
-
jsonrpc: '2.0',
|
|
412
|
-
id: message.id,
|
|
413
|
-
result: {
|
|
414
|
-
protocolVersion: '2024-11-05',
|
|
415
|
-
serverInfo: { name: 'ruflo', version: '3.0.0' },
|
|
416
|
-
capabilities: {
|
|
417
|
-
tools: { listChanged: true },
|
|
418
|
-
resources: { subscribe: true, listChanged: true },
|
|
419
|
-
},
|
|
420
|
-
},
|
|
421
|
-
};
|
|
422
|
-
case 'tools/list':
|
|
423
|
-
const tools = listMCPTools();
|
|
424
|
-
return {
|
|
425
|
-
jsonrpc: '2.0',
|
|
426
|
-
id: message.id,
|
|
427
|
-
result: {
|
|
428
|
-
tools: tools.map(tool => ({
|
|
429
|
-
name: tool.name,
|
|
430
|
-
description: tool.description,
|
|
431
|
-
inputSchema: tool.inputSchema,
|
|
432
|
-
})),
|
|
433
|
-
},
|
|
434
|
-
};
|
|
435
|
-
case 'tools/call':
|
|
436
|
-
const toolName = params.name;
|
|
437
|
-
const toolParams = (params.arguments || {});
|
|
438
|
-
if (!hasTool(toolName)) {
|
|
439
|
-
return {
|
|
440
|
-
jsonrpc: '2.0',
|
|
441
|
-
id: message.id,
|
|
442
|
-
error: { code: -32601, message: `Tool not found: ${toolName}` },
|
|
443
|
-
};
|
|
444
|
-
}
|
|
445
|
-
try {
|
|
446
|
-
const result = await callMCPTool(toolName, toolParams, { sessionId });
|
|
447
|
-
trackRequest(toolName, true);
|
|
448
|
-
return {
|
|
449
|
-
jsonrpc: '2.0',
|
|
450
|
-
id: message.id,
|
|
451
|
-
result: { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] },
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
catch (error) {
|
|
455
|
-
trackRequest(toolName, false);
|
|
456
|
-
return {
|
|
457
|
-
jsonrpc: '2.0',
|
|
458
|
-
id: message.id,
|
|
459
|
-
error: {
|
|
460
|
-
code: -32603,
|
|
461
|
-
message: error instanceof Error ? error.message : 'Tool execution failed',
|
|
462
|
-
},
|
|
463
|
-
};
|
|
464
|
-
}
|
|
465
|
-
case 'notifications/initialized':
|
|
466
|
-
// Client notification - no response needed
|
|
467
|
-
console.error(`[${new Date().toISOString()}] INFO [claude-flow-mcp] (${sessionId}) Client initialized`);
|
|
468
|
-
return null;
|
|
469
|
-
case 'ping':
|
|
470
|
-
return {
|
|
471
|
-
jsonrpc: '2.0',
|
|
472
|
-
id: message.id,
|
|
473
|
-
result: {},
|
|
474
|
-
};
|
|
475
|
-
default:
|
|
476
|
-
return {
|
|
477
|
-
jsonrpc: '2.0',
|
|
478
|
-
id: message.id,
|
|
479
|
-
error: { code: -32601, message: `Method not found: ${message.method}` },
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
catch (error) {
|
|
484
|
-
console.error(`[${new Date().toISOString()}] ERROR [claude-flow-mcp] Error handling ${message.method}:`, error);
|
|
485
|
-
return {
|
|
486
|
-
jsonrpc: '2.0',
|
|
487
|
-
id: message.id,
|
|
488
|
-
error: {
|
|
489
|
-
code: -32603,
|
|
490
|
-
message: error instanceof Error ? error.message : 'Internal error',
|
|
491
|
-
},
|
|
492
|
-
};
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
/**
|
|
496
|
-
* Start HTTP server in-process
|
|
497
|
-
*/
|
|
498
|
-
async startHttpServer() {
|
|
499
|
-
// Dynamically import the MCP server package
|
|
500
|
-
// FIX for issue #942: Use proper package import instead of broken relative path
|
|
501
|
-
const { createMCPServer } = await import('@claude-flow/mcp');
|
|
502
|
-
const logger = {
|
|
503
|
-
debug: (msg, data) => this.emit('log', { level: 'debug', msg, data }),
|
|
504
|
-
info: (msg, data) => this.emit('log', { level: 'info', msg, data }),
|
|
505
|
-
warn: (msg, data) => this.emit('log', { level: 'warn', msg, data }),
|
|
506
|
-
error: (msg, data) => this.emit('log', { level: 'error', msg, data }),
|
|
507
|
-
};
|
|
508
|
-
const mcpServer = createMCPServer({
|
|
509
|
-
name: 'Claude-Flow MCP Server V3',
|
|
510
|
-
version: '3.0.0',
|
|
511
|
-
transport: this.options.transport,
|
|
512
|
-
host: this.options.host,
|
|
513
|
-
port: this.options.port,
|
|
514
|
-
enableMetrics: true,
|
|
515
|
-
enableCaching: true,
|
|
516
|
-
}, logger);
|
|
517
|
-
await mcpServer.start();
|
|
518
|
-
// Store reference for stopping
|
|
519
|
-
this._mcpServer = mcpServer;
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Wait for server to be ready
|
|
523
|
-
*/
|
|
524
|
-
async waitForReady(timeout = 10000) {
|
|
525
|
-
// For stdio transport, we're ready immediately (in-process)
|
|
526
|
-
if (this.options.transport === 'stdio') {
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
529
|
-
const startTime = Date.now();
|
|
530
|
-
while (Date.now() - startTime < timeout) {
|
|
531
|
-
const health = await this.checkHealth();
|
|
532
|
-
if (health.healthy) {
|
|
533
|
-
return;
|
|
534
|
-
}
|
|
535
|
-
await this.sleep(100);
|
|
536
|
-
}
|
|
537
|
-
throw new Error('Server failed to start within timeout');
|
|
538
|
-
}
|
|
539
|
-
/**
|
|
540
|
-
* Wait for process to exit
|
|
541
|
-
*/
|
|
542
|
-
async waitForExit(timeout) {
|
|
543
|
-
if (!this.process)
|
|
544
|
-
return;
|
|
545
|
-
return new Promise((resolve) => {
|
|
546
|
-
const timer = setTimeout(() => {
|
|
547
|
-
resolve();
|
|
548
|
-
}, timeout);
|
|
549
|
-
this.process.once('exit', () => {
|
|
550
|
-
clearTimeout(timer);
|
|
551
|
-
resolve();
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Start health monitoring
|
|
557
|
-
*/
|
|
558
|
-
startHealthMonitoring() {
|
|
559
|
-
this.healthCheckInterval = setInterval(async () => {
|
|
560
|
-
try {
|
|
561
|
-
const health = await this.checkHealth();
|
|
562
|
-
this.emit('health', health);
|
|
563
|
-
if (!health.healthy) {
|
|
564
|
-
this.emit('unhealthy', health);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
catch (error) {
|
|
568
|
-
this.emit('health-error', error);
|
|
569
|
-
}
|
|
570
|
-
}, 30000);
|
|
571
|
-
this.healthCheckInterval.unref();
|
|
572
|
-
}
|
|
573
|
-
/**
|
|
574
|
-
* Write PID file
|
|
575
|
-
*/
|
|
576
|
-
async writePidFile() {
|
|
577
|
-
const pid = this.process?.pid || process.pid;
|
|
578
|
-
await fs.promises.writeFile(this.options.pidFile, String(pid), 'utf8');
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Read PID file
|
|
582
|
-
*/
|
|
583
|
-
async readPidFile() {
|
|
584
|
-
try {
|
|
585
|
-
const content = await fs.promises.readFile(this.options.pidFile, 'utf8');
|
|
586
|
-
const pid = parseInt(content.trim(), 10);
|
|
587
|
-
return isNaN(pid) ? null : pid;
|
|
588
|
-
}
|
|
589
|
-
catch {
|
|
590
|
-
return null;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
/**
|
|
594
|
-
* Remove PID file
|
|
595
|
-
*/
|
|
596
|
-
async removePidFile() {
|
|
597
|
-
try {
|
|
598
|
-
await fs.promises.unlink(this.options.pidFile);
|
|
599
|
-
}
|
|
600
|
-
catch {
|
|
601
|
-
// Ignore errors
|
|
602
|
-
}
|
|
603
|
-
// Also clean up legacy PID file location from older versions
|
|
604
|
-
try {
|
|
605
|
-
const legacyPath = path.join(process.env.CLAUDE_FLOW_CWD || process.cwd(), '.claude-flow', 'mcp-server.pid');
|
|
606
|
-
if (legacyPath !== this.options.pidFile) {
|
|
607
|
-
await fs.promises.unlink(legacyPath);
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
catch {
|
|
611
|
-
// Ignore — file may not exist
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
/**
|
|
615
|
-
* Check if process is running AND is a node/claude-flow process.
|
|
616
|
-
* Plain `kill -0` returns true for any process with the same owner,
|
|
617
|
-
* which causes false positives when the OS recycles the PID.
|
|
618
|
-
*/
|
|
619
|
-
isProcessRunning(pid) {
|
|
620
|
-
try {
|
|
621
|
-
process.kill(pid, 0);
|
|
622
|
-
}
|
|
623
|
-
catch {
|
|
624
|
-
return false;
|
|
625
|
-
}
|
|
626
|
-
// Verify it's actually a node process (guards against PID reuse)
|
|
627
|
-
// DA-CRIT-3: Use execFileSync to prevent command injection via PID values
|
|
628
|
-
try {
|
|
629
|
-
const safePid = String(Math.floor(Math.abs(pid)));
|
|
630
|
-
let cmdline = '';
|
|
631
|
-
try {
|
|
632
|
-
// Try /proc on Linux
|
|
633
|
-
cmdline = fs.readFileSync(`/proc/${safePid}/cmdline`, 'utf8');
|
|
634
|
-
}
|
|
635
|
-
catch {
|
|
636
|
-
// Fall back to ps on macOS/other
|
|
637
|
-
try {
|
|
638
|
-
cmdline = execFileSync('ps', ['-p', safePid, '-o', 'comm='], {
|
|
639
|
-
encoding: 'utf8',
|
|
640
|
-
timeout: 1000,
|
|
641
|
-
}).trim();
|
|
642
|
-
}
|
|
643
|
-
catch {
|
|
644
|
-
// ps failed — fall through
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
if (!cmdline)
|
|
648
|
-
return true; // Can't inspect, fall back to kill check
|
|
649
|
-
// Must be a node process to be our MCP server
|
|
650
|
-
return cmdline.includes('node') || cmdline.includes('claude-flow') || cmdline.includes('npx');
|
|
651
|
-
}
|
|
652
|
-
catch {
|
|
653
|
-
// If we can't inspect the process (macOS, Windows, permissions), fall back to kill check
|
|
654
|
-
return true;
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
/**
|
|
658
|
-
* Make HTTP request
|
|
659
|
-
*/
|
|
660
|
-
async httpRequest(url, method, timeout) {
|
|
661
|
-
return new Promise((resolve, reject) => {
|
|
662
|
-
const urlObj = new URL(url);
|
|
663
|
-
const req = httpRequestFn({
|
|
664
|
-
hostname: urlObj.hostname,
|
|
665
|
-
port: urlObj.port,
|
|
666
|
-
path: urlObj.pathname,
|
|
667
|
-
method,
|
|
668
|
-
timeout,
|
|
669
|
-
}, (res) => {
|
|
670
|
-
let data = '';
|
|
671
|
-
res.on('data', (chunk) => {
|
|
672
|
-
data += chunk;
|
|
673
|
-
});
|
|
674
|
-
res.on('end', () => {
|
|
675
|
-
try {
|
|
676
|
-
resolve(JSON.parse(data));
|
|
677
|
-
}
|
|
678
|
-
catch {
|
|
679
|
-
resolve({ status: res.statusCode === 200 ? 'ok' : 'error' });
|
|
680
|
-
}
|
|
681
|
-
});
|
|
682
|
-
});
|
|
683
|
-
req.on('error', reject);
|
|
684
|
-
req.on('timeout', () => {
|
|
685
|
-
req.destroy();
|
|
686
|
-
reject(new Error('Request timeout'));
|
|
687
|
-
});
|
|
688
|
-
req.end();
|
|
689
|
-
});
|
|
690
|
-
}
|
|
691
|
-
/**
|
|
692
|
-
* Sleep utility
|
|
693
|
-
*/
|
|
694
|
-
sleep(ms) {
|
|
695
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
696
|
-
}
|
|
697
|
-
}
|
|
698
|
-
/**
|
|
699
|
-
* Create MCP server manager
|
|
700
|
-
*/
|
|
701
|
-
export function createMCPServerManager(options) {
|
|
702
|
-
return new MCPServerManager(options);
|
|
703
|
-
}
|
|
704
|
-
/**
|
|
705
|
-
* Singleton server manager instance
|
|
706
|
-
*/
|
|
707
|
-
let serverManager = null;
|
|
708
|
-
let currentTransport = undefined;
|
|
709
|
-
/**
|
|
710
|
-
* Get or create server manager singleton
|
|
711
|
-
*
|
|
712
|
-
* FIX for issue #942: Recreate singleton if transport type changes
|
|
713
|
-
* Previously, once created with stdio (default), HTTP options were ignored
|
|
714
|
-
*/
|
|
715
|
-
export function getServerManager(options) {
|
|
716
|
-
const requestedTransport = options?.transport;
|
|
717
|
-
// Recreate if transport type changes (fixes HTTP transport not working)
|
|
718
|
-
if (serverManager && requestedTransport && requestedTransport !== currentTransport) {
|
|
719
|
-
serverManager = new MCPServerManager(options);
|
|
720
|
-
currentTransport = requestedTransport;
|
|
721
|
-
}
|
|
722
|
-
if (!serverManager) {
|
|
723
|
-
serverManager = new MCPServerManager(options);
|
|
724
|
-
currentTransport = options?.transport;
|
|
725
|
-
}
|
|
726
|
-
return serverManager;
|
|
727
|
-
}
|
|
728
|
-
/**
|
|
729
|
-
* Quick start MCP server
|
|
730
|
-
*/
|
|
731
|
-
export async function startMCPServer(options) {
|
|
732
|
-
const manager = getServerManager(options);
|
|
733
|
-
return await manager.start();
|
|
734
|
-
}
|
|
735
|
-
/**
|
|
736
|
-
* Quick stop MCP server
|
|
737
|
-
*/
|
|
738
|
-
export async function stopMCPServer(force = false) {
|
|
739
|
-
if (serverManager) {
|
|
740
|
-
await serverManager.stop(force);
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
/**
|
|
744
|
-
* Get MCP server status
|
|
745
|
-
*/
|
|
746
|
-
export async function getMCPServerStatus() {
|
|
747
|
-
const manager = getServerManager();
|
|
748
|
-
return await manager.getStatus();
|
|
749
|
-
}
|
|
750
|
-
export default MCPServerManager;
|
|
751
|
-
//# sourceMappingURL=mcp-server.js.map
|