@evalops/maestro 0.10.18 → 0.10.20
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/README.md +56 -1
- package/dist/agent/action-approval.d.ts +12 -2
- package/dist/agent/action-approval.d.ts.map +1 -1
- package/dist/agent/action-approval.js +19 -32
- package/dist/agent/action-approval.js.map +1 -1
- package/dist/agent/agent.d.ts +1 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +26 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/compaction.d.ts +2 -0
- package/dist/agent/compaction.d.ts.map +1 -1
- package/dist/agent/compaction.js +4 -2
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/modes.d.ts +56 -4
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +163 -2
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/prompt-recovery.d.ts.map +1 -1
- package/dist/agent/prompt-recovery.js +1 -3
- package/dist/agent/prompt-recovery.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +9 -1
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts +12 -0
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
- package/dist/agent/providers/codex-app-server.js +788 -0
- package/dist/agent/providers/codex-app-server.js.map +1 -0
- package/dist/agent/providers/google-gemini-cli.js +14 -3
- package/dist/agent/providers/google.js +22 -3
- package/dist/agent/providers/scripted.d.ts +11 -0
- package/dist/agent/providers/scripted.d.ts.map +1 -0
- package/dist/agent/providers/scripted.js +399 -0
- package/dist/agent/providers/scripted.js.map +1 -0
- package/dist/agent/providers/vertex.js +14 -3
- package/dist/agent/scenario-source.d.ts +19 -0
- package/dist/agent/scenario-source.d.ts.map +1 -0
- package/dist/agent/scenario-source.js +112 -0
- package/dist/agent/scenario-source.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +1 -1
- package/dist/agent/subagent-specs.js +1 -1
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/executor.d.ts +25 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +795 -20
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/runtime-events.d.ts +11 -0
- package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
- package/dist/agent/swarm/runtime-events.js +26 -0
- package/dist/agent/swarm/runtime-events.js.map +1 -0
- package/dist/agent/swarm/types.d.ts +78 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tracing.d.ts +1 -1
- package/dist/agent/tracing.d.ts.map +1 -1
- package/dist/agent/tracing.js +17 -9
- package/dist/agent/tracing.js.map +1 -1
- package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
- package/dist/agent/transport/create-provider-stream.js +14 -0
- package/dist/agent/transport/create-provider-stream.js.map +1 -1
- package/dist/agent/transport/stable-stringify.d.ts +2 -0
- package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
- package/dist/agent/transport/stable-stringify.js +14 -0
- package/dist/agent/transport/stable-stringify.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +2 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.js +184 -36
- package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
- package/dist/agent/transport.d.ts +8 -0
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +1613 -68
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/types.d.ts +170 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +34 -3
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +32 -0
- package/dist/app-server/in-process-client.d.ts.map +1 -0
- package/dist/app-server/in-process-client.js +73 -0
- package/dist/app-server/in-process-client.js.map +1 -0
- package/dist/app-server/session-api.d.ts +36 -0
- package/dist/app-server/session-api.d.ts.map +1 -0
- package/dist/app-server/session-api.js +713 -0
- package/dist/app-server/session-api.js.map +1 -0
- package/dist/approvals/platform-action-approval.d.ts +3 -1
- package/dist/approvals/platform-action-approval.d.ts.map +1 -1
- package/dist/approvals/platform-action-approval.js +16 -9
- package/dist/approvals/platform-action-approval.js.map +1 -1
- package/dist/approvals/service-client.d.ts.map +1 -1
- package/dist/approvals/service-client.js +7 -7
- package/dist/approvals/service-client.js.map +1 -1
- package/dist/audit/logger.d.ts +4 -4
- package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
- package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
- package/dist/bootstrap/agent-creation-setup.js +3 -1
- package/dist/bootstrap/agent-creation-setup.js.map +1 -1
- package/dist/bootstrap/auth-setup.js +1 -1
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
- package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.js +26 -2
- package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +4 -1
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/bootstrap/tools-setup.d.ts +2 -1
- package/dist/bootstrap/tools-setup.d.ts.map +1 -1
- package/dist/bootstrap/tools-setup.js +5 -1
- package/dist/bootstrap/tools-setup.js.map +1 -1
- package/dist/cli/args.d.ts +9 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +130 -5
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts +9 -0
- package/dist/cli/commands/a2a.d.ts.map +1 -0
- package/dist/cli/commands/a2a.js +1714 -0
- package/dist/cli/commands/a2a.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +16 -2
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +223 -35
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/codex.d.ts +1 -1
- package/dist/cli/commands/codex.d.ts.map +1 -1
- package/dist/cli/commands/codex.js +145 -39
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/context.d.ts +10 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +176 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/hosted-runner.d.ts +1 -0
- package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
- package/dist/cli/commands/hosted-runner.js +9 -1
- package/dist/cli/commands/hosted-runner.js.map +1 -1
- package/dist/cli/commands/modes.d.ts +8 -0
- package/dist/cli/commands/modes.d.ts.map +1 -0
- package/dist/cli/commands/modes.js +151 -0
- package/dist/cli/commands/modes.js.map +1 -0
- package/dist/cli/commands/operating-plane.d.ts +14 -0
- package/dist/cli/commands/operating-plane.d.ts.map +1 -0
- package/dist/cli/commands/operating-plane.js +160 -0
- package/dist/cli/commands/operating-plane.js.map +1 -0
- package/dist/cli/commands/run.d.ts +87 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +356 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/scenario.d.ts +7 -0
- package/dist/cli/commands/scenario.d.ts.map +1 -0
- package/dist/cli/commands/scenario.js +195 -0
- package/dist/cli/commands/scenario.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +7 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +286 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts +55 -1
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +446 -7
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/headless-runtime-selection.d.ts +38 -0
- package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
- package/dist/cli/headless-runtime-selection.js +48 -0
- package/dist/cli/headless-runtime-selection.js.map +1 -0
- package/dist/cli/headless.d.ts +5 -1
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +11 -1
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/help.d.ts +3 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +135 -30
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts +22 -4
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +224 -127
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
- package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
- package/dist/cli-tui/commands/a2a-handlers.js +160 -0
- package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +15 -0
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
- package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
- package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.js +6 -5
- package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
- package/dist/cli-tui/commands/types.d.ts +1 -0
- package/dist/cli-tui/commands/types.d.ts.map +1 -1
- package/dist/cli-tui/commands/types.js.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
- package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.js +45 -6
- package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
- package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/run-shell-command.js +14 -5
- package/dist/cli-tui/run/run-shell-command.js.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.js +14 -5
- package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +6 -2
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
- package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
- package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
- package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.js +7 -0
- package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
- package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
- package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
- package/dist/cli-tui/utils/text-formatting.js +5 -0
- package/dist/cli-tui/utils/text-formatting.js.map +1 -1
- package/dist/cli.js +49158 -26161
- package/dist/cli.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +139 -0
- package/dist/codex/app-server-client.d.ts.map +1 -0
- package/dist/codex/app-server-client.js +352 -0
- package/dist/codex/app-server-client.js.map +1 -0
- package/dist/codex/compatibility.d.ts +48 -0
- package/dist/codex/compatibility.d.ts.map +1 -0
- package/dist/codex/compatibility.js +344 -0
- package/dist/codex/compatibility.js.map +1 -0
- package/dist/codex/subagent-dispatch-table.d.ts +66 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
- package/dist/codex/subagent-dispatch-table.js +127 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -0
- package/dist/codex/subagent-workgraph.d.ts +56 -0
- package/dist/codex/subagent-workgraph.d.ts.map +1 -0
- package/dist/codex/subagent-workgraph.js +89 -0
- package/dist/codex/subagent-workgraph.js.map +1 -0
- package/dist/config/constants.d.ts +3 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +9 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/feature-flags.d.ts +10 -1
- package/dist/config/feature-flags.d.ts.map +1 -1
- package/dist/config/feature-flags.js +17 -6
- package/dist/config/feature-flags.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.d.ts +32 -0
- package/dist/config/toml-config.d.ts.map +1 -1
- package/dist/config/toml-config.js +152 -43
- package/dist/config/toml-config.js.map +1 -1
- package/dist/connectors/service-client.d.ts.map +1 -1
- package/dist/connectors/service-client.js +4 -7
- package/dist/connectors/service-client.js.map +1 -1
- package/dist/context/manifest-types.d.ts +59 -0
- package/dist/context/manifest-types.d.ts.map +1 -0
- package/dist/context/manifest-types.js +2 -0
- package/dist/context/manifest-types.js.map +1 -0
- package/dist/context/manifest.d.ts +16 -0
- package/dist/context/manifest.d.ts.map +1 -0
- package/dist/context/manifest.js +503 -0
- package/dist/context/manifest.js.map +1 -0
- package/dist/db/schema.d.ts +10 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/env-aliases.d.ts +13 -0
- package/dist/evalops/env-aliases.d.ts.map +1 -0
- package/dist/evalops/env-aliases.js +60 -0
- package/dist/evalops/env-aliases.js.map +1 -0
- package/dist/evalops/managed-context.d.ts.map +1 -1
- package/dist/evalops/managed-context.js +28 -62
- package/dist/evalops/managed-context.js.map +1 -1
- package/dist/guardian/config.d.ts.map +1 -1
- package/dist/guardian/config.js +1 -0
- package/dist/guardian/config.js.map +1 -1
- package/dist/guardian/runner.d.ts +2 -0
- package/dist/guardian/runner.d.ts.map +1 -1
- package/dist/guardian/runner.js +105 -2
- package/dist/guardian/runner.js.map +1 -1
- package/dist/guardian/types.d.ts +1 -0
- package/dist/guardian/types.d.ts.map +1 -1
- package/dist/guardian/types.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +267 -55
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +89 -7
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/manager.d.ts +5 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +159 -4
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/platform-plugin.d.ts.map +1 -1
- package/dist/mcp/platform-plugin.js +9 -26
- package/dist/mcp/platform-plugin.js.map +1 -1
- package/dist/mcp/schema.d.ts +15 -0
- package/dist/mcp/schema.d.ts.map +1 -1
- package/dist/mcp/schema.js +24 -0
- package/dist/mcp/schema.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts +39 -10
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +101 -24
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/types.d.ts +27 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts +10 -0
- package/dist/mcp/workspace-trust.d.ts.map +1 -0
- package/dist/mcp/workspace-trust.js +295 -0
- package/dist/mcp/workspace-trust.js.map +1 -0
- package/dist/memory/service-client.d.ts +1 -0
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +194 -9
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/builtin.d.ts.map +1 -1
- package/dist/models/builtin.js +66 -25
- package/dist/models/builtin.js.map +1 -1
- package/dist/models/config-loader.d.ts +10 -10
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +2 -0
- package/dist/models/config-loader.js.map +1 -1
- package/dist/models/registry.d.ts +1 -0
- package/dist/models/registry.d.ts.map +1 -1
- package/dist/models/registry.js +1 -0
- package/dist/models/registry.js.map +1 -1
- package/dist/oauth/device-identity.d.ts.map +1 -1
- package/dist/oauth/device-identity.js +1 -3
- package/dist/oauth/device-identity.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +2 -5
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/opentelemetry.d.ts.map +1 -1
- package/dist/opentelemetry.js +12 -12
- package/dist/opentelemetry.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +11 -0
- package/dist/package-version.js.map +1 -0
- package/dist/packages/constants.d.ts +3 -0
- package/dist/packages/constants.d.ts.map +1 -0
- package/dist/packages/constants.js +3 -0
- package/dist/packages/constants.js.map +1 -0
- package/dist/packages/inspection.d.ts.map +1 -1
- package/dist/packages/inspection.js +2 -1
- package/dist/packages/inspection.js.map +1 -1
- package/dist/packages/search.d.ts.map +1 -1
- package/dist/packages/search.js +1 -1
- package/dist/packages/search.js.map +1 -1
- package/dist/platform/a2a-capability-market.d.ts +21 -0
- package/dist/platform/a2a-capability-market.d.ts.map +1 -0
- package/dist/platform/a2a-capability-market.js +176 -0
- package/dist/platform/a2a-capability-market.js.map +1 -0
- package/dist/platform/a2a-client.d.ts +119 -0
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +413 -24
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-fleet.d.ts +41 -0
- package/dist/platform/a2a-fleet.d.ts.map +1 -0
- package/dist/platform/a2a-fleet.js +109 -0
- package/dist/platform/a2a-fleet.js.map +1 -0
- package/dist/platform/a2a-maestro-peer.d.ts +20 -0
- package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
- package/dist/platform/a2a-maestro-peer.js +176 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -0
- package/dist/platform/a2a-peer-pairing.d.ts +107 -0
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
- package/dist/platform/a2a-peer-pairing.js +489 -0
- package/dist/platform/a2a-peer-pairing.js.map +1 -0
- package/dist/platform/a2a-peer-registry.d.ts +68 -0
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
- package/dist/platform/a2a-peer-registry.js +320 -0
- package/dist/platform/a2a-peer-registry.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts +86 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
- package/dist/platform/a2a-task-ledger.js +546 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -0
- package/dist/platform/a2a-work-graph.d.ts +43 -0
- package/dist/platform/a2a-work-graph.d.ts.map +1 -0
- package/dist/platform/a2a-work-graph.js +267 -0
- package/dist/platform/a2a-work-graph.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +327 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -0
- package/dist/platform/agent-registry-client.js +803 -0
- package/dist/platform/agent-registry-client.js.map +1 -0
- package/dist/platform/agent-runtime-client.d.ts +135 -1
- package/dist/platform/agent-runtime-client.d.ts.map +1 -1
- package/dist/platform/agent-runtime-client.js +467 -10
- package/dist/platform/agent-runtime-client.js.map +1 -1
- package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
- package/dist/platform/cerebro-facts-client.js +4 -7
- package/dist/platform/cerebro-facts-client.js.map +1 -1
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +3 -12
- package/dist/platform/client.js.map +1 -1
- package/dist/platform/core-services.d.ts +68 -0
- package/dist/platform/core-services.d.ts.map +1 -1
- package/dist/platform/core-services.js +68 -0
- package/dist/platform/core-services.js.map +1 -1
- package/dist/platform/fermata-eval-client.d.ts +195 -0
- package/dist/platform/fermata-eval-client.d.ts.map +1 -0
- package/dist/platform/fermata-eval-client.js +146 -0
- package/dist/platform/fermata-eval-client.js.map +1 -0
- package/dist/platform/fermata-scenario-suite.d.ts +99 -0
- package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
- package/dist/platform/fermata-scenario-suite.js +459 -0
- package/dist/platform/fermata-scenario-suite.js.map +1 -0
- package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
- package/dist/platform/maestro-timeline-client.js +5 -11
- package/dist/platform/maestro-timeline-client.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +156 -0
- package/dist/platform/operating-plane-client.d.ts.map +1 -0
- package/dist/platform/operating-plane-client.js +131 -0
- package/dist/platform/operating-plane-client.js.map +1 -0
- package/dist/platform/operating-plane-summary.d.ts +47 -0
- package/dist/platform/operating-plane-summary.d.ts.map +1 -0
- package/dist/platform/operating-plane-summary.js +209 -0
- package/dist/platform/operating-plane-summary.js.map +1 -0
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +4 -11
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/prompts/service-client.d.ts.map +1 -1
- package/dist/prompts/service-client.js +3 -5
- package/dist/prompts/service-client.js.map +1 -1
- package/dist/prompts/system-prompt.d.ts +3 -0
- package/dist/prompts/system-prompt.d.ts.map +1 -1
- package/dist/prompts/system-prompt.js +13 -3
- package/dist/prompts/system-prompt.js.map +1 -1
- package/dist/prompts/types.d.ts +2 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/types.js.map +1 -1
- package/dist/providers/api-keys.d.ts +1 -1
- package/dist/providers/api-keys.d.ts.map +1 -1
- package/dist/providers/api-keys.js +2 -1
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +48 -25
- package/dist/providers/auth.js.map +1 -1
- package/dist/remote-runner/attach-client.d.ts.map +1 -1
- package/dist/remote-runner/attach-client.js +1 -0
- package/dist/remote-runner/attach-client.js.map +1 -1
- package/dist/remote-runner/client.d.ts.map +1 -1
- package/dist/remote-runner/client.js +4 -7
- package/dist/remote-runner/client.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts.map +1 -1
- package/dist/rpc/rpc-types.js +1 -0
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/action-firewall.d.ts.map +1 -1
- package/dist/safety/action-firewall.js +69 -6
- package/dist/safety/action-firewall.js.map +1 -1
- package/dist/safety/attack-patterns.d.ts.map +1 -1
- package/dist/safety/attack-patterns.js +31 -14
- package/dist/safety/attack-patterns.js.map +1 -1
- package/dist/safety/bash-parser.d.ts.map +1 -1
- package/dist/safety/bash-parser.js +4 -3
- package/dist/safety/bash-parser.js.map +1 -1
- package/dist/safety/execpolicy.d.ts +15 -3
- package/dist/safety/execpolicy.d.ts.map +1 -1
- package/dist/safety/execpolicy.js +248 -37
- package/dist/safety/execpolicy.js.map +1 -1
- package/dist/safety/governance-service-client.d.ts.map +1 -1
- package/dist/safety/governance-service-client.js +4 -7
- package/dist/safety/governance-service-client.js.map +1 -1
- package/dist/safety/guarded-files.d.ts +34 -0
- package/dist/safety/guarded-files.d.ts.map +1 -0
- package/dist/safety/guarded-files.js +372 -0
- package/dist/safety/guarded-files.js.map +1 -0
- package/dist/safety/loop-detector.d.ts.map +1 -1
- package/dist/safety/loop-detector.js +6 -1
- package/dist/safety/loop-detector.js.map +1 -1
- package/dist/safety/permission-profile.d.ts +47 -0
- package/dist/safety/permission-profile.d.ts.map +1 -0
- package/dist/safety/permission-profile.js +349 -0
- package/dist/safety/permission-profile.js.map +1 -0
- package/dist/safety/safety-middleware.d.ts +5 -1
- package/dist/safety/safety-middleware.d.ts.map +1 -1
- package/dist/safety/safety-middleware.js +3 -2
- package/dist/safety/safety-middleware.js.map +1 -1
- package/dist/safety/suspicious-patterns.d.ts.map +1 -1
- package/dist/safety/suspicious-patterns.js +12 -7
- package/dist/safety/suspicious-patterns.js.map +1 -1
- package/dist/safety/tool-categorization.js +1 -1
- package/dist/safety/tool-categorization.js.map +1 -1
- package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/path-policy-validator.js +7 -0
- package/dist/safety/validators/path-policy-validator.js.map +1 -1
- package/dist/sandbox/index.d.ts +6 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +30 -4
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/native-sandbox.d.ts +3 -0
- package/dist/sandbox/native-sandbox.d.ts.map +1 -1
- package/dist/sandbox/native-sandbox.js +139 -18
- package/dist/sandbox/native-sandbox.js.map +1 -1
- package/dist/sentry.d.ts +17 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +91 -0
- package/dist/sentry.js.map +1 -0
- package/dist/server/agent-runtime-ledger.d.ts +141 -0
- package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
- package/dist/server/agent-runtime-ledger.js +334 -0
- package/dist/server/agent-runtime-ledger.js.map +1 -0
- package/dist/server/agent-trajectory-inspection.d.ts +104 -0
- package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
- package/dist/server/agent-trajectory-inspection.js +168 -0
- package/dist/server/agent-trajectory-inspection.js.map +1 -0
- package/dist/server/agent-trajectory-replay.d.ts +56 -0
- package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
- package/dist/server/agent-trajectory-replay.js +214 -0
- package/dist/server/agent-trajectory-replay.js.map +1 -0
- package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
- package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scenarios.js +822 -0
- package/dist/server/agent-trajectory-scenarios.js.map +1 -0
- package/dist/server/agent-trajectory-scorers.d.ts +61 -0
- package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scorers.js +162 -0
- package/dist/server/agent-trajectory-scorers.js.map +1 -0
- package/dist/server/agent-trajectory-validation.d.ts +7 -0
- package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
- package/dist/server/agent-trajectory-validation.js +101 -0
- package/dist/server/agent-trajectory-validation.js.map +1 -0
- package/dist/server/agent-trajectory.d.ts +50 -0
- package/dist/server/agent-trajectory.d.ts.map +1 -0
- package/dist/server/agent-trajectory.js +159 -0
- package/dist/server/agent-trajectory.js.map +1 -0
- package/dist/server/app-context.d.ts +18 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +64 -27
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/health.d.ts +6 -0
- package/dist/server/handlers/health.d.ts.map +1 -1
- package/dist/server/handlers/health.js +6 -0
- package/dist/server/handlers/health.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +309 -18
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +43 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/mode.d.ts.map +1 -1
- package/dist/server/handlers/mode.js +3 -1
- package/dist/server/handlers/mode.js.map +1 -1
- package/dist/server/handlers/pending-requests.d.ts.map +1 -1
- package/dist/server/handlers/pending-requests.js +336 -51
- package/dist/server/handlers/pending-requests.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
- package/dist/server/handlers/platform-a2a-push.js +136 -0
- package/dist/server/handlers/platform-a2a-push.js.map +1 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +21 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +9 -2
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +39 -0
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
- package/dist/server/hosted-agent-runtime-progress.js +1650 -0
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
- package/dist/server/hosted-runner-lease.d.ts +41 -0
- package/dist/server/hosted-runner-lease.d.ts.map +1 -0
- package/dist/server/hosted-runner-lease.js +140 -0
- package/dist/server/hosted-runner-lease.js.map +1 -0
- package/dist/server/hosted-session-manager.d.ts +16 -8
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +98 -76
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/junit-xml.d.ts +2 -0
- package/dist/server/junit-xml.d.ts.map +1 -0
- package/dist/server/junit-xml.js +9 -0
- package/dist/server/junit-xml.js.map +1 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +6 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/server/scenario-recorder.d.ts +56 -0
- package/dist/server/scenario-recorder.d.ts.map +1 -0
- package/dist/server/scenario-recorder.js +109 -0
- package/dist/server/scenario-recorder.js.map +1 -0
- package/dist/server/scripted-scenario-runner.d.ts +46 -0
- package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
- package/dist/server/scripted-scenario-runner.js +190 -0
- package/dist/server/scripted-scenario-runner.js.map +1 -0
- package/dist/server/server-middlewares.d.ts +6 -2
- package/dist/server/server-middlewares.d.ts.map +1 -1
- package/dist/server/server-middlewares.js +8 -2
- package/dist/server/server-middlewares.js.map +1 -1
- package/dist/server/server-request-manager.d.ts +9 -1
- package/dist/server/server-request-manager.d.ts.map +1 -1
- package/dist/server/server-request-manager.js +49 -4
- package/dist/server/server-request-manager.js.map +1 -1
- package/dist/services/intelligent-router/service.d.ts +2 -0
- package/dist/services/intelligent-router/service.d.ts.map +1 -1
- package/dist/services/intelligent-router/service.js +4 -0
- package/dist/services/intelligent-router/service.js.map +1 -1
- package/dist/services/service-authority.d.ts +25 -0
- package/dist/services/service-authority.d.ts.map +1 -0
- package/dist/services/service-authority.js +143 -0
- package/dist/services/service-authority.js.map +1 -0
- package/dist/services/workspace-config/service.d.ts +2 -0
- package/dist/services/workspace-config/service.d.ts.map +1 -1
- package/dist/services/workspace-config/service.js +4 -0
- package/dist/services/workspace-config/service.js.map +1 -1
- package/dist/session/manager.d.ts +8 -2
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +19 -4
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-branch.d.ts.map +1 -1
- package/dist/session/session-branch.js +5 -1
- package/dist/session/session-branch.js.map +1 -1
- package/dist/session/session-catalog.d.ts +7 -2
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +13 -2
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +6 -2
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +44 -4
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/session-graph-projection.d.ts +32 -0
- package/dist/session/session-graph-projection.d.ts.map +1 -0
- package/dist/session/session-graph-projection.js +133 -0
- package/dist/session/session-graph-projection.js.map +1 -0
- package/dist/session/types.d.ts +18 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +8 -0
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +3 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +20 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/skills/eval-harness.d.ts +38 -0
- package/dist/skills/eval-harness.d.ts.map +1 -0
- package/dist/skills/eval-harness.js +112 -0
- package/dist/skills/eval-harness.js.map +1 -0
- package/dist/skills/index.d.ts +5 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +5 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/linter.d.ts +36 -0
- package/dist/skills/linter.d.ts.map +1 -0
- package/dist/skills/linter.js +398 -0
- package/dist/skills/linter.js.map +1 -0
- package/dist/skills/loader.d.ts +36 -6
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +169 -86
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/package-contract.d.ts +45 -0
- package/dist/skills/package-contract.d.ts.map +1 -0
- package/dist/skills/package-contract.js +153 -0
- package/dist/skills/package-contract.js.map +1 -0
- package/dist/skills/runtime-activation.d.ts +68 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -0
- package/dist/skills/runtime-activation.js +228 -0
- package/dist/skills/runtime-activation.js.map +1 -0
- package/dist/skills/service-client.d.ts.map +1 -1
- package/dist/skills/service-client.js +3 -4
- package/dist/skills/service-client.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +2 -0
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/types.d.ts +14 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js.map +1 -1
- package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
- package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
- package/dist/telemetry/agent-operating-plane-context.js +54 -0
- package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
- package/dist/telemetry/beacon.d.ts +24 -0
- package/dist/telemetry/beacon.d.ts.map +1 -0
- package/dist/telemetry/beacon.js +115 -0
- package/dist/telemetry/beacon.js.map +1 -0
- package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
- package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
- package/dist/telemetry/cli-command-aggregator.js +251 -0
- package/dist/telemetry/cli-command-aggregator.js.map +1 -0
- package/dist/telemetry/cli-startup.d.ts +21 -0
- package/dist/telemetry/cli-startup.d.ts.map +1 -0
- package/dist/telemetry/cli-startup.js +83 -0
- package/dist/telemetry/cli-startup.js.map +1 -0
- package/dist/telemetry/disablement.d.ts +13 -0
- package/dist/telemetry/disablement.d.ts.map +1 -0
- package/dist/telemetry/disablement.js +19 -0
- package/dist/telemetry/disablement.js.map +1 -0
- package/dist/telemetry/index.d.ts +6 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +6 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +52 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +179 -3
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +2 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
- package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +20 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
- package/dist/telemetry/mcp-beacon.js +54 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -0
- package/dist/telemetry/metadata-normalization.d.ts +7 -0
- package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
- package/dist/telemetry/metadata-normalization.js +189 -0
- package/dist/telemetry/metadata-normalization.js.map +1 -0
- package/dist/telemetry/meter-service-client.d.ts.map +1 -1
- package/dist/telemetry/meter-service-client.js +5 -10
- package/dist/telemetry/meter-service-client.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +123 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +184 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/turn-tracker.d.ts +1 -0
- package/dist/telemetry/turn-tracker.d.ts.map +1 -1
- package/dist/telemetry/turn-tracker.js +22 -1
- package/dist/telemetry/turn-tracker.js.map +1 -1
- package/dist/telemetry/wide-events.d.ts +31 -1
- package/dist/telemetry/wide-events.d.ts.map +1 -1
- package/dist/telemetry/wide-events.js +229 -1
- package/dist/telemetry/wide-events.js.map +1 -1
- package/dist/telemetry.d.ts +39 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +160 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/testing/test-verification-hook.d.ts.map +1 -1
- package/dist/testing/test-verification-hook.js +34 -21
- package/dist/testing/test-verification-hook.js.map +1 -1
- package/dist/tools/apply-patch-parser.d.ts +26 -0
- package/dist/tools/apply-patch-parser.d.ts.map +1 -0
- package/dist/tools/apply-patch-parser.js +146 -0
- package/dist/tools/apply-patch-parser.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +42 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +648 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/ask-user.d.ts +1 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/background/tool-handler.d.ts +1 -0
- package/dist/tools/background/tool-handler.d.ts.map +1 -1
- package/dist/tools/bash.d.ts +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/codesearch.d.ts +1 -0
- package/dist/tools/codesearch.d.ts.map +1 -1
- package/dist/tools/conductor-client.d.ts +1 -0
- package/dist/tools/conductor-client.d.ts.map +1 -1
- package/dist/tools/conductor-client.js +63 -0
- package/dist/tools/conductor-client.js.map +1 -1
- package/dist/tools/diff.d.ts +1 -0
- package/dist/tools/diff.d.ts.map +1 -1
- package/dist/tools/edit.d.ts +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/find.d.ts +10 -0
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +236 -27
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/gh.d.ts +3 -0
- package/dist/tools/gh.d.ts.map +1 -1
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list.d.ts +1 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/notebook.d.ts +1 -0
- package/dist/tools/notebook.d.ts.map +1 -1
- package/dist/tools/oracle.d.ts +1 -0
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +17 -32
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/parallel-execution.d.ts +13 -2
- package/dist/tools/parallel-execution.d.ts.map +1 -1
- package/dist/tools/parallel-execution.js +178 -7
- package/dist/tools/parallel-execution.js.map +1 -1
- package/dist/tools/parallel-ripgrep.d.ts +1 -0
- package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
- package/dist/tools/pipeline.d.ts +4 -0
- package/dist/tools/pipeline.d.ts.map +1 -1
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/status.d.ts +1 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/todo.d.ts +1 -0
- package/dist/tools/todo.d.ts.map +1 -1
- package/dist/tools/tool-dsl.d.ts +5 -1
- package/dist/tools/tool-dsl.d.ts.map +1 -1
- package/dist/tools/tool-dsl.js +1 -0
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/tools/tool-result-cache.d.ts.map +1 -1
- package/dist/tools/tool-result-cache.js +1 -0
- package/dist/tools/tool-result-cache.js.map +1 -1
- package/dist/tools/typebox-tool.d.ts.map +1 -1
- package/dist/tools/typebox-tool.js +3 -0
- package/dist/tools/typebox-tool.js.map +1 -1
- package/dist/tools/webfetch.d.ts +1 -0
- package/dist/tools/webfetch.d.ts.map +1 -1
- package/dist/tools/websearch.d.ts +1 -0
- package/dist/tools/websearch.d.ts.map +1 -1
- package/dist/tools/write.d.ts +1 -0
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/utils/abort-error.d.ts +2 -0
- package/dist/utils/abort-error.d.ts.map +1 -0
- package/dist/utils/abort-error.js +7 -0
- package/dist/utils/abort-error.js.map +1 -0
- package/dist/utils/downstream.d.ts.map +1 -1
- package/dist/utils/downstream.js +4 -0
- package/dist/utils/downstream.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +14 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/path-containment.d.ts +2 -0
- package/dist/utils/path-containment.d.ts.map +1 -0
- package/dist/utils/path-containment.js +14 -0
- package/dist/utils/path-containment.js.map +1 -0
- package/dist/utils/prompt-safe-text.d.ts +7 -0
- package/dist/utils/prompt-safe-text.d.ts.map +1 -0
- package/dist/utils/prompt-safe-text.js +44 -0
- package/dist/utils/prompt-safe-text.js.map +1 -0
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +32 -7
- package/dist/web-server.js.map +1 -1
- package/dist/workspace/root-resolver.d.ts +4 -1
- package/dist/workspace/root-resolver.d.ts.map +1 -1
- package/dist/workspace/root-resolver.js +16 -6
- package/dist/workspace/root-resolver.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.js +6 -0
- package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
- package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
- package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
- package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
- package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
- package/node_modules/@evalops/contracts/package.json +1 -1
- package/node_modules/@evalops/tui/package.json +1 -1
- package/package.json +41 -7
- package/skills/incident-triage/SKILL.md +40 -0
- package/skills/incident-triage/mcp.json +14 -0
- package/skills/incident-triage/reference/triage.md +20 -0
- package/skills/incident-triage/toolbox/incident-timeline +22 -0
- package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
- package/skills/pr-review/SKILL.md +40 -0
- package/skills/pr-review/mcp.json +14 -0
- package/skills/pr-review/reference/rubric.md +20 -0
- package/skills/pr-review/toolbox/review-summary +20 -0
- package/skills/pr-review/toolbox/review-summary.cmd +14 -0
- package/skills/release-verification/SKILL.md +40 -0
- package/skills/release-verification/mcp.json +15 -0
- package/skills/release-verification/reference/checklist.md +21 -0
- package/skills/release-verification/toolbox/release-readiness +18 -0
- package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
package/dist/mcp/manager.js
CHANGED
|
@@ -42,12 +42,15 @@ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
|
42
42
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
43
43
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
44
44
|
import { ElicitRequestSchema, LoggingMessageNotificationSchema, ProgressNotificationSchema, PromptListChangedNotificationSchema, ResourceListChangedNotificationSchema, ToolListChangedNotificationSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
45
|
+
import { getPackageVersion } from "../package-metadata.js";
|
|
46
|
+
import { emitMcpConnectionBeacon, emitMcpToolUsageBeacon, } from "../telemetry/mcp-beacon.js";
|
|
45
47
|
import { parseCommandArguments } from "../tools/shell-utils.js";
|
|
46
48
|
import { createLogger } from "../utils/logger.js";
|
|
47
49
|
import { getHomeDir } from "../utils/path-expansion.js";
|
|
48
50
|
import { buildMcpElicitationToolCallId, getCurrentMcpClientToolService, normalizeMcpElicitationArgs, parseMcpElicitationClientToolResult, } from "./elicitation.js";
|
|
49
51
|
import { getMcpRemoteHost, getOfficialMcpRegistryMatch, } from "./official-registry.js";
|
|
50
52
|
import { getProjectMcpServerApprovalStatus } from "./project-approvals.js";
|
|
53
|
+
import { ensureMcpWorkspaceTrusted } from "./workspace-trust.js";
|
|
51
54
|
const logger = createLogger("mcp:manager");
|
|
52
55
|
const execFileAsync = promisify(execFile);
|
|
53
56
|
// Connection timeout for initial server handshake
|
|
@@ -56,6 +59,102 @@ const DEFAULT_TIMEOUT_MS = 30000;
|
|
|
56
59
|
const DEFAULT_RECONNECT_DELAY_MS = 5000;
|
|
57
60
|
// Maximum number of automatic reconnection attempts
|
|
58
61
|
const MAX_RECONNECT_ATTEMPTS = 3;
|
|
62
|
+
const PARALLEL_SAFETY_EXPERIMENTAL_KEYS = [
|
|
63
|
+
"evalops.maestro.parallelSafety",
|
|
64
|
+
"evalops.maestro/parallelSafety",
|
|
65
|
+
"maestro.parallelSafety",
|
|
66
|
+
];
|
|
67
|
+
function asRecord(value) {
|
|
68
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
69
|
+
? value
|
|
70
|
+
: undefined;
|
|
71
|
+
}
|
|
72
|
+
function positiveInteger(value) {
|
|
73
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0
|
|
74
|
+
? Math.floor(value)
|
|
75
|
+
: undefined;
|
|
76
|
+
}
|
|
77
|
+
function serverParallelSafetyAdvertisement(capabilities) {
|
|
78
|
+
const experimental = asRecord(capabilities?.experimental);
|
|
79
|
+
if (!experimental) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
for (const key of PARALLEL_SAFETY_EXPERIMENTAL_KEYS) {
|
|
83
|
+
const advertisement = asRecord(experimental[key]);
|
|
84
|
+
if (advertisement) {
|
|
85
|
+
return advertisement;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
function resolveToolParallelSafety({ config, serverCapabilities, tool, }) {
|
|
91
|
+
const advertisement = serverParallelSafetyAdvertisement(serverCapabilities);
|
|
92
|
+
const advertisedTools = asRecord(advertisement?.tools);
|
|
93
|
+
const advertisedTool = asRecord(advertisedTools?.[tool.name]) ?? asRecord(advertisedTools?.["*"]);
|
|
94
|
+
const toolSupportsParallel = advertisedTool?.supportsParallelToolCalls;
|
|
95
|
+
const advertisedSupports = toolSupportsParallel === true ||
|
|
96
|
+
(toolSupportsParallel !== false &&
|
|
97
|
+
advertisement?.supportsParallelToolCalls === true);
|
|
98
|
+
const maxConcurrency = positiveInteger(advertisedTool?.maxConcurrency) ??
|
|
99
|
+
positiveInteger(advertisement?.maxConcurrency);
|
|
100
|
+
if (config.supportsParallelToolCalls === true) {
|
|
101
|
+
return {
|
|
102
|
+
supportsParallelToolCalls: true,
|
|
103
|
+
provenance: "static_config",
|
|
104
|
+
...(maxConcurrency ? { maxConcurrency } : {}),
|
|
105
|
+
...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
if (advertisedSupports) {
|
|
109
|
+
return {
|
|
110
|
+
supportsParallelToolCalls: true,
|
|
111
|
+
provenance: "server_capability",
|
|
112
|
+
...(maxConcurrency ? { maxConcurrency } : {}),
|
|
113
|
+
...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
supportsParallelToolCalls: false,
|
|
118
|
+
provenance: "none",
|
|
119
|
+
...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function resolveParallelSafetyByTool({ config, serverCapabilities, tools, }) {
|
|
123
|
+
return new Map(tools.map((tool) => [
|
|
124
|
+
tool.name,
|
|
125
|
+
resolveToolParallelSafety({
|
|
126
|
+
config,
|
|
127
|
+
serverCapabilities,
|
|
128
|
+
tool,
|
|
129
|
+
}),
|
|
130
|
+
]));
|
|
131
|
+
}
|
|
132
|
+
function summarizeServerParallelSafety(config, connected) {
|
|
133
|
+
if (!connected) {
|
|
134
|
+
return {
|
|
135
|
+
supportsParallelToolCalls: config.supportsParallelToolCalls === true,
|
|
136
|
+
provenance: config.supportsParallelToolCalls === true ? "static_config" : "none",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const values = [...connected.parallelSafetyByTool.values()];
|
|
140
|
+
const supportsParallelToolCalls = values.some((value) => value.supportsParallelToolCalls === true);
|
|
141
|
+
const staticConfig = values.some((value) => value.provenance === "static_config");
|
|
142
|
+
const serverCapability = values.some((value) => value.provenance === "server_capability");
|
|
143
|
+
const maxConcurrencyValues = values
|
|
144
|
+
.map((value) => value.maxConcurrency)
|
|
145
|
+
.filter((value) => typeof value === "number");
|
|
146
|
+
return {
|
|
147
|
+
supportsParallelToolCalls,
|
|
148
|
+
provenance: staticConfig
|
|
149
|
+
? "static_config"
|
|
150
|
+
: serverCapability
|
|
151
|
+
? "server_capability"
|
|
152
|
+
: "none",
|
|
153
|
+
...(maxConcurrencyValues.length > 0
|
|
154
|
+
? { maxConcurrency: Math.min(...maxConcurrencyValues) }
|
|
155
|
+
: {}),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
59
158
|
function arraysEqual(left, right) {
|
|
60
159
|
if (left === right) {
|
|
61
160
|
return true;
|
|
@@ -284,6 +383,8 @@ export class McpClientManager extends EventEmitter {
|
|
|
284
383
|
servers: config.servers ?? [],
|
|
285
384
|
authPresets: config.authPresets ?? [],
|
|
286
385
|
projectRoot: config.projectRoot,
|
|
386
|
+
trustedWorkspaces: config.trustedWorkspaces,
|
|
387
|
+
workspaceTrustDefault: config.workspaceTrustDefault,
|
|
287
388
|
envLimits: config.envLimits,
|
|
288
389
|
};
|
|
289
390
|
const previousAuthPresetMap = buildAuthPresetMap(this.config.authPresets);
|
|
@@ -306,6 +407,7 @@ export class McpClientManager extends EventEmitter {
|
|
|
306
407
|
const reconnectNames = new Set(toReconnect.map((server) => server.name));
|
|
307
408
|
// Find servers to add (in new but not in old)
|
|
308
409
|
const toAdd = nextConfig.servers.filter((server) => !oldServerNames.has(server.name));
|
|
410
|
+
const toAddNames = new Set(toAdd.map((server) => server.name));
|
|
309
411
|
this.config = nextConfig;
|
|
310
412
|
// Disconnect removed servers (don't wait for success)
|
|
311
413
|
await Promise.allSettled(toRemove.map((name) => this.disconnectServer(name)));
|
|
@@ -320,9 +422,12 @@ export class McpClientManager extends EventEmitter {
|
|
|
320
422
|
await this.connectServer(server);
|
|
321
423
|
}
|
|
322
424
|
}));
|
|
323
|
-
// Connect new servers
|
|
324
|
-
await Promise.allSettled(
|
|
325
|
-
.filter((server) =>
|
|
425
|
+
// Connect new servers and unchanged servers that were explicitly disconnected.
|
|
426
|
+
await Promise.allSettled(nextConfig.servers
|
|
427
|
+
.filter((server) => (toAddNames.has(server.name) ||
|
|
428
|
+
(oldServerNames.has(server.name) &&
|
|
429
|
+
!reconnectNames.has(server.name) &&
|
|
430
|
+
!this.servers.has(server.name))) &&
|
|
326
431
|
canConnectServer(server, nextApprovalMap))
|
|
327
432
|
.map((server) => this.connectServer(server)));
|
|
328
433
|
}
|
|
@@ -461,6 +566,12 @@ export class McpClientManager extends EventEmitter {
|
|
|
461
566
|
const resources = await this.fetchResources(client);
|
|
462
567
|
const promptDetails = await this.fetchPrompts(client);
|
|
463
568
|
const prompts = getPromptNames(promptDetails);
|
|
569
|
+
const serverCapabilities = client.getServerCapabilities();
|
|
570
|
+
const parallelSafetyByTool = resolveParallelSafetyByTool({
|
|
571
|
+
config,
|
|
572
|
+
serverCapabilities,
|
|
573
|
+
tools,
|
|
574
|
+
});
|
|
464
575
|
this.servers.set(name, {
|
|
465
576
|
config,
|
|
466
577
|
client,
|
|
@@ -469,6 +580,7 @@ export class McpClientManager extends EventEmitter {
|
|
|
469
580
|
resources,
|
|
470
581
|
prompts,
|
|
471
582
|
promptDetails,
|
|
583
|
+
parallelSafetyByTool,
|
|
472
584
|
reconnectAttempts: 0,
|
|
473
585
|
});
|
|
474
586
|
this.lastErrors.delete(name);
|
|
@@ -476,6 +588,16 @@ export class McpClientManager extends EventEmitter {
|
|
|
476
588
|
// to avoid race condition where notifications arrive before server is tracked
|
|
477
589
|
this.setupNotificationHandlers(client, name);
|
|
478
590
|
this.emit("connected", { name, tools: tools.length, isReconnect });
|
|
591
|
+
void emitMcpConnectionBeacon({
|
|
592
|
+
serverName: name,
|
|
593
|
+
transport: transportType,
|
|
594
|
+
remoteHost: config.url ? getMcpRemoteHost(config.url) : undefined,
|
|
595
|
+
toolCount: tools.length,
|
|
596
|
+
resourceCount: resources.length,
|
|
597
|
+
promptCount: prompts.length,
|
|
598
|
+
isReconnect,
|
|
599
|
+
clientVersion: getPackageVersion(),
|
|
600
|
+
}).catch(() => undefined);
|
|
479
601
|
}
|
|
480
602
|
catch (error) {
|
|
481
603
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -587,6 +709,11 @@ export class McpClientManager extends EventEmitter {
|
|
|
587
709
|
const server = this.servers.get(serverName);
|
|
588
710
|
if (server) {
|
|
589
711
|
server.tools = await this.fetchTools(client);
|
|
712
|
+
server.parallelSafetyByTool = resolveParallelSafetyByTool({
|
|
713
|
+
config: server.config,
|
|
714
|
+
serverCapabilities: client.getServerCapabilities(),
|
|
715
|
+
tools: server.tools,
|
|
716
|
+
});
|
|
590
717
|
this.emit("tools_changed", {
|
|
591
718
|
name: serverName,
|
|
592
719
|
tools: server.tools,
|
|
@@ -688,6 +815,21 @@ export class McpClientManager extends EventEmitter {
|
|
|
688
815
|
if (!server) {
|
|
689
816
|
throw new Error(`MCP server '${serverName}' not connected`);
|
|
690
817
|
}
|
|
818
|
+
await ensureMcpWorkspaceTrusted({
|
|
819
|
+
config: this.config,
|
|
820
|
+
server: buildComparableServerConfig(server.config, buildAuthPresetMap(this.config.authPresets)),
|
|
821
|
+
toolName,
|
|
822
|
+
clientToolService: getCurrentMcpClientToolService(),
|
|
823
|
+
});
|
|
824
|
+
void emitMcpToolUsageBeacon({
|
|
825
|
+
serverName,
|
|
826
|
+
transport: server.config.transport,
|
|
827
|
+
remoteHost: server.config.url
|
|
828
|
+
? getMcpRemoteHost(server.config.url)
|
|
829
|
+
: undefined,
|
|
830
|
+
toolName,
|
|
831
|
+
clientVersion: getPackageVersion(),
|
|
832
|
+
}).catch(() => undefined);
|
|
691
833
|
const result = await server.client.callTool({
|
|
692
834
|
name: toolName,
|
|
693
835
|
arguments: args,
|
|
@@ -711,7 +853,18 @@ export class McpClientManager extends EventEmitter {
|
|
|
711
853
|
const tools = [];
|
|
712
854
|
for (const [serverName, server] of this.servers) {
|
|
713
855
|
for (const tool of server.tools) {
|
|
714
|
-
|
|
856
|
+
const parallelSafety = server.parallelSafetyByTool.get(tool.name) ??
|
|
857
|
+
resolveToolParallelSafety({
|
|
858
|
+
config: server.config,
|
|
859
|
+
serverCapabilities: server.client.getServerCapabilities(),
|
|
860
|
+
tool,
|
|
861
|
+
});
|
|
862
|
+
tools.push({
|
|
863
|
+
server: serverName,
|
|
864
|
+
tool,
|
|
865
|
+
supportsParallelToolCalls: parallelSafety.supportsParallelToolCalls === true,
|
|
866
|
+
parallelSafety,
|
|
867
|
+
});
|
|
715
868
|
}
|
|
716
869
|
}
|
|
717
870
|
return tools;
|
|
@@ -766,6 +919,8 @@ export class McpClientManager extends EventEmitter {
|
|
|
766
919
|
headersHelper: resolvedAuth.headersHelper,
|
|
767
920
|
authPreset: config.authPreset,
|
|
768
921
|
timeout: config.timeout,
|
|
922
|
+
supportsParallelToolCalls: config.supportsParallelToolCalls === true,
|
|
923
|
+
parallelSafety: summarizeServerParallelSafety(config, connected),
|
|
769
924
|
remoteTrust: remoteRegistryMatch?.trust,
|
|
770
925
|
officialRegistry: remoteRegistryMatch?.info,
|
|
771
926
|
projectApproval,
|
package/dist/mcp/manager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Client Manager - Model Context Protocol integration.\n *\n * This module manages connections to MCP (Model Context Protocol) servers,\n * which provide extended capabilities to the agent through a standardized\n * interface. MCP servers can expose:\n *\n * - **Tools**: Functions the agent can call (e.g., database queries, APIs)\n * - **Resources**: Data the agent can read (e.g., files, configurations)\n * - **Prompts**: Pre-defined prompt templates\n *\n * ## Architecture\n *\n * The McpClientManager maintains connections to multiple MCP servers\n * simultaneously. Each server can use either:\n * - **Stdio transport**: Spawns a subprocess, communicates via stdin/stdout\n * - **SSE transport**: Connects to HTTP server using Server-Sent Events\n *\n * ## Security\n *\n * - Environment variables are NOT passed to MCP server subprocesses\n * - Only essential variables (PATH, HOME, USER, SHELL, TERM) are included\n * - Server-specific env vars must be explicitly configured\n *\n * ## Events\n *\n * The manager emits events for monitoring:\n * - `connected`: Server successfully connected\n * - `disconnected`: Server disconnected\n * - `error`: Connection or operation error\n * - `tools_changed`: Server's tool list updated\n * - `resources_changed`: Server's resource list updated\n * - `prompts_changed`: Server's prompt list updated\n * - `progress`: Progress update from long-running operations\n * - `log`: Log message from server\n */\n\nimport { execFile } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { promisify } from \"node:util\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport {\n\tElicitRequestSchema,\n\tLoggingMessageNotificationSchema,\n\ttype Prompt as McpPrompt,\n\ttype Tool as McpTool,\n\tProgressNotificationSchema,\n\tPromptListChangedNotificationSchema,\n\tResourceListChangedNotificationSchema,\n\tToolListChangedNotificationSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { parseCommandArguments } from \"../tools/shell-utils.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport {\n\tbuildMcpElicitationToolCallId,\n\tgetCurrentMcpClientToolService,\n\tnormalizeMcpElicitationArgs,\n\tparseMcpElicitationClientToolResult,\n} from \"./elicitation.js\";\nimport {\n\tgetMcpRemoteHost,\n\tgetOfficialMcpRegistryMatch,\n} from \"./official-registry.js\";\nimport { getProjectMcpServerApprovalStatus } from \"./project-approvals.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpAuthPresetStatus,\n\tMcpConfig,\n\tMcpManagerStatus,\n\tMcpProjectApprovalStatus,\n\tMcpPromptDefinition,\n\tMcpServerConfig,\n\tMcpServerStatus,\n} from \"./types.js\";\n\nconst logger = createLogger(\"mcp:manager\");\nconst execFileAsync = promisify(execFile);\n\n/**\n * Result from calling an MCP tool.\n * Content can be text, binary data, or other MIME types.\n */\nexport interface McpToolCallResult {\n\tcontent: Array<{\n\t\ttype: string;\n\t\ttext?: string;\n\t\tdata?: string;\n\t\tmimeType?: string;\n\t}>;\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n}\n\n// Connection timeout for initial server handshake\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n// Delay between reconnection attempts (doubles each retry)\nconst DEFAULT_RECONNECT_DELAY_MS = 5000;\n\n// Maximum number of automatic reconnection attempts\nconst MAX_RECONNECT_ATTEMPTS = 3;\n\nfunction arraysEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right || left.length !== right.length) {\n\t\treturn false;\n\t}\n\treturn left.every((value, index) => value === right[index]);\n}\n\nfunction recordsEqual(\n\tleft: Record<string, string> | undefined,\n\tright: Record<string, string> | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right) {\n\t\treturn false;\n\t}\n\tconst leftEntries = Object.entries(left).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tconst rightEntries = Object.entries(right).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tif (leftEntries.length !== rightEntries.length) {\n\t\treturn false;\n\t}\n\treturn leftEntries.every(\n\t\t([leftKey, leftValue], index) =>\n\t\t\tleftKey === rightEntries[index]?.[0] &&\n\t\t\tleftValue === rightEntries[index]?.[1],\n\t);\n}\n\ninterface ResolvedRemoteAuthConfig {\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tpreset?: McpAuthPresetConfig;\n}\n\nfunction buildAuthPresetMap(\n\tauthPresets: readonly McpAuthPresetConfig[],\n): Map<string, McpAuthPresetConfig> {\n\treturn new Map(\n\t\t(authPresets ?? []).map((authPreset) => [authPreset.name, authPreset]),\n\t);\n}\n\nfunction resolveRemoteAuthConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): ResolvedRemoteAuthConfig {\n\tif (config.transport !== \"http\" && config.transport !== \"sse\") {\n\t\treturn {\n\t\t\theaders: config.headers,\n\t\t\theadersHelper: config.headersHelper,\n\t\t};\n\t}\n\n\tconst preset = config.authPreset\n\t\t? authPresetMap.get(config.authPreset)\n\t\t: undefined;\n\tconst headers = {\n\t\t...(preset?.headers ?? {}),\n\t\t...(config.headers ?? {}),\n\t};\n\n\treturn {\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t\theadersHelper: config.headersHelper ?? preset?.headersHelper,\n\t\tpreset,\n\t};\n}\n\nfunction buildComparableServerConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): McpServerConfig {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\treturn {\n\t\t...config,\n\t\theaders: resolvedAuth.headers,\n\t\theadersHelper: resolvedAuth.headersHelper,\n\t};\n}\n\nfunction serverConfigsEqual(\n\tleft: McpServerConfig,\n\tright: McpServerConfig,\n): boolean {\n\treturn (\n\t\tleft.name === right.name &&\n\t\tleft.transport === right.transport &&\n\t\tleft.command === right.command &&\n\t\tarraysEqual(left.args, right.args) &&\n\t\trecordsEqual(left.env, right.env) &&\n\t\tleft.cwd === right.cwd &&\n\t\tleft.url === right.url &&\n\t\trecordsEqual(left.headers, right.headers) &&\n\t\tleft.headersHelper === right.headersHelper &&\n\t\tleft.enabled === right.enabled &&\n\t\tleft.disabled === right.disabled &&\n\t\tleft.timeout === right.timeout &&\n\t\tleft.scope === right.scope\n\t);\n}\n\nfunction buildProjectApprovalMap(\n\tconfig: McpConfig,\n): Map<string, McpProjectApprovalStatus> {\n\tconst approvals = new Map<string, McpProjectApprovalStatus>();\n\tif (!config.projectRoot) {\n\t\treturn approvals;\n\t}\n\tfor (const server of config.servers ?? []) {\n\t\tconst approval = getProjectMcpServerApprovalStatus({\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\tserver,\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t});\n\t\tif (approval) {\n\t\t\tapprovals.set(server.name, approval);\n\t\t}\n\t}\n\treturn approvals;\n}\n\nfunction canConnectServer(\n\tserver: McpServerConfig,\n\tapprovalMap: ReadonlyMap<string, McpProjectApprovalStatus>,\n): boolean {\n\tconst approval = approvalMap.get(server.name);\n\treturn approval !== \"pending\" && approval !== \"denied\";\n}\n\nfunction buildSafeEnv(\n\texplicitEnv?: Record<string, string>,\n\textraEnv?: Record<string, string>,\n): Record<string, string> {\n\tconst safeBaseEnv: Record<string, string> = {};\n\tif (process.env.PATH) safeBaseEnv.PATH = process.env.PATH;\n\tif (process.env.HOME) {\n\t\tsafeBaseEnv.HOME = process.env.HOME;\n\t} else {\n\t\tconst homeDir = getHomeDir();\n\t\tif (homeDir) safeBaseEnv.HOME = homeDir;\n\t}\n\tif (process.env.USER) {\n\t\tsafeBaseEnv.USER = process.env.USER;\n\t} else if (process.env.USERNAME) {\n\t\tsafeBaseEnv.USER = process.env.USERNAME;\n\t}\n\tif (process.env.SHELL) safeBaseEnv.SHELL = process.env.SHELL;\n\tif (process.env.TERM) safeBaseEnv.TERM = process.env.TERM;\n\n\treturn Object.fromEntries(\n\t\tObject.entries({ ...safeBaseEnv, ...explicitEnv, ...extraEnv }).filter(\n\t\t\t([, value]) => value !== undefined,\n\t\t),\n\t) as Record<string, string>;\n}\n\nasync function resolveHeadersHelper(\n\tconfig: McpServerConfig,\n\theadersHelper = config.headersHelper,\n): Promise<Record<string, string> | undefined> {\n\tif (!headersHelper) {\n\t\treturn undefined;\n\t}\n\n\tlet command: string[];\n\ttry {\n\t\tcommand = parseCommandArguments(headersHelper);\n\t} catch (error) {\n\t\tlogger.warn(\"Invalid MCP headers helper command\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (command.length === 0) {\n\t\tlogger.warn(\"Empty MCP headers helper command\", { name: config.name });\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst { stdout } = await execFileAsync(command[0]!, command.slice(1), {\n\t\t\tcwd: config.cwd,\n\t\t\tenv: buildSafeEnv(config.env, {\n\t\t\t\tMAESTRO_MCP_SERVER_NAME: config.name,\n\t\t\t\tMAESTRO_MCP_SERVER_URL: config.url ?? \"\",\n\t\t\t}),\n\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tconst trimmed = stdout.trim();\n\t\tif (!trimmed) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"headersHelper must return a JSON object\");\n\t\t}\n\n\t\tconst headers: Record<string, string> = {};\n\t\tfor (const [key, value] of Object.entries(parsed)) {\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`headersHelper must return string values for key \"${key}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\theaders[key] = value;\n\t\t}\n\n\t\treturn headers;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to resolve MCP headers helper\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n}\n\nasync function buildRemoteRequestInit(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): Promise<RequestInit | undefined> {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\tconst helperHeaders = await resolveHeadersHelper(\n\t\tconfig,\n\t\tresolvedAuth.headersHelper,\n\t);\n\tconst headers = {\n\t\t...(resolvedAuth.headers ?? {}),\n\t\t...(helperHeaders ?? {}),\n\t};\n\n\treturn Object.keys(headers).length > 0 ? { headers } : undefined;\n}\n\n/**\n * Internal state for a connected MCP server.\n * Tracks the client, transport, and cached capabilities.\n */\ninterface ConnectedServer {\n\t/** Original configuration */\n\tconfig: McpServerConfig;\n\t/** MCP client instance */\n\tclient: Client;\n\t/** Transport layer (stdio or SSE) */\n\ttransport: Transport;\n\t/** Cached list of available tools */\n\ttools: McpTool[];\n\t/** Cached list of resource URIs */\n\tresources: string[];\n\t/** Cached list of prompt names */\n\tprompts: string[];\n\t/** Cached prompt metadata for structured prompt UIs */\n\tpromptDetails: McpPromptDefinition[];\n\t/** Counter for reconnection attempts */\n\treconnectAttempts: number;\n}\n\nfunction normalizePromptDefinition(prompt: McpPrompt): McpPromptDefinition {\n\treturn {\n\t\tname: prompt.name,\n\t\ttitle: prompt.title,\n\t\tdescription: prompt.description,\n\t\targuments:\n\t\t\tprompt.arguments?.map((argument) => ({\n\t\t\t\tname: argument.name,\n\t\t\t\tdescription: argument.description,\n\t\t\t\trequired: argument.required,\n\t\t\t})) ?? [],\n\t};\n}\n\nfunction getPromptNames(\n\tpromptDetails: readonly McpPromptDefinition[],\n): string[] {\n\treturn promptDetails.map((prompt) => prompt.name);\n}\n\n/**\n * Manager for MCP (Model Context Protocol) server connections.\n *\n * Handles connection lifecycle, tool discovery, and message routing\n * for multiple MCP servers. Supports automatic reconnection on failure.\n */\nexport class McpClientManager extends EventEmitter {\n\t/** Map of server name to connected server state */\n\tprivate servers = new Map<string, ConnectedServer>();\n\n\t/** Map of server name to in-flight connection promise (prevents duplicates) */\n\tprivate connecting = new Map<string, Promise<void>>();\n\n\t/** Map of server name to pending reconnect timer */\n\tprivate reconnectTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n\t/** Last connection or runtime error reported for each configured server */\n\tprivate lastErrors = new Map<string, string>();\n\n\t/** Current configuration */\n\tprivate config: McpConfig = { servers: [], authPresets: [] };\n\n\t/**\n\t * Apply a new configuration, connecting/disconnecting servers as needed.\n\t *\n\t * Compares old and new configs to determine which servers to add or remove,\n\t * then performs the necessary connect/disconnect operations.\n\t *\n\t * @param config - New MCP configuration with server list\n\t */\n\tasync configure(config: McpConfig): Promise<void> {\n\t\tconst nextConfig: McpConfig = {\n\t\t\tservers: config.servers ?? [],\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\tenvLimits: config.envLimits,\n\t\t};\n\t\tconst previousAuthPresetMap = buildAuthPresetMap(this.config.authPresets);\n\t\tconst nextAuthPresetMap = buildAuthPresetMap(nextConfig.authPresets);\n\t\tconst previousApprovalMap = buildProjectApprovalMap(this.config);\n\t\tconst nextApprovalMap = buildProjectApprovalMap(nextConfig);\n\t\tconst previousServers = new Map(\n\t\t\tthis.config.servers.map((server) => [server.name, server]),\n\t\t);\n\t\tconst oldServerNames = new Set(previousServers.keys());\n\t\tconst newServerNames = new Set(nextConfig.servers.map((s) => s.name));\n\n\t\t// Find servers to remove (in old but not in new)\n\t\tconst toRemove = [...oldServerNames].filter((n) => !newServerNames.has(n));\n\n\t\t// Reconnect servers whose config changed in place.\n\t\tconst toReconnect = nextConfig.servers.filter((server) => {\n\t\t\tconst previous = previousServers.get(server.name);\n\t\t\treturn (\n\t\t\t\tprevious &&\n\t\t\t\t(!serverConfigsEqual(\n\t\t\t\t\tbuildComparableServerConfig(previous, previousAuthPresetMap),\n\t\t\t\t\tbuildComparableServerConfig(server, nextAuthPresetMap),\n\t\t\t\t) ||\n\t\t\t\t\tcanConnectServer(previous, previousApprovalMap) !==\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap))\n\t\t\t);\n\t\t});\n\t\tconst reconnectNames = new Set(toReconnect.map((server) => server.name));\n\n\t\t// Find servers to add (in new but not in old)\n\t\tconst toAdd = nextConfig.servers.filter(\n\t\t\t(server) => !oldServerNames.has(server.name),\n\t\t);\n\n\t\tthis.config = nextConfig;\n\n\t\t// Disconnect removed servers (don't wait for success)\n\t\tawait Promise.allSettled(\n\t\t\ttoRemove.map((name) => this.disconnectServer(name)),\n\t\t);\n\n\t\t// Disconnect and reconnect updated servers so in-place edits take effect.\n\t\tawait Promise.allSettled(\n\t\t\ttoReconnect.map(async (server) => {\n\t\t\t\tconst pendingConnection = this.connecting.get(server.name);\n\t\t\t\tif (pendingConnection) {\n\t\t\t\t\tawait Promise.allSettled([pendingConnection]);\n\t\t\t\t}\n\t\t\t\tawait this.disconnectServer(server.name);\n\t\t\t\tif (canConnectServer(server, nextApprovalMap)) {\n\t\t\t\t\tawait this.connectServer(server);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\t// Connect new servers (don't wait for success)\n\t\tawait Promise.allSettled(\n\t\t\ttoAdd\n\t\t\t\t.filter(\n\t\t\t\t\t(server) =>\n\t\t\t\t\t\t!reconnectNames.has(server.name) &&\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap),\n\t\t\t\t)\n\t\t\t\t.map((server) => this.connectServer(server)),\n\t\t);\n\t}\n\n\t/**\n\t * Connect to all configured servers.\n\t * Non-blocking - returns after connection attempts are started.\n\t */\n\tasync connectAll(): Promise<void> {\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\t\tconst promises = this.config.servers\n\t\t\t.filter((server) => canConnectServer(server, approvalMap))\n\t\t\t.map((server) => this.connectServer(server));\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Disconnect from all servers and cancel pending reconnects.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\t// Clear all pending reconnect timers first\n\t\tfor (const [name, timer] of this.reconnectTimers) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\tthis.reconnectTimers.clear();\n\n\t\t// Disconnect all servers\n\t\tconst promises = Array.from(this.servers.keys()).map((name) =>\n\t\t\tthis.disconnectServer(name),\n\t\t);\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Internal: Connect to a single server.\n\t * Handles deduplication of concurrent connection attempts.\n\t */\n\tprivate async connectServer(config: McpServerConfig): Promise<void> {\n\t\tconst { name } = config;\n\n\t\t// Avoid duplicate connections\n\t\tif (this.servers.has(name)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check for in-flight connection (prevent race conditions)\n\t\tconst existing = this.connecting.get(name);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\t// Track this connection attempt\n\t\tconst task = this.doConnect(config);\n\t\tthis.connecting.set(name, task);\n\n\t\ttry {\n\t\t\tawait task;\n\t\t} finally {\n\t\t\tthis.connecting.delete(name);\n\t\t}\n\t}\n\n\t/**\n\t * Internal: Perform the actual connection to an MCP server.\n\t *\n\t * Creates the appropriate transport (stdio or SSE), establishes connection,\n\t * fetches server capabilities (tools, resources, prompts), and sets up\n\t * notification handlers.\n\t *\n\t * @param config - Server configuration\n\t * @param isReconnect - Whether this is a reconnection attempt\n\t */\n\tprivate async doConnect(\n\t\tconfig: McpServerConfig,\n\t\tisReconnect = false,\n\t): Promise<void> {\n\t\tconst { name, transport: transportType } = config;\n\n\t\ttry {\n\t\t\tlet transport: Transport;\n\n\t\t\t// Create transport based on configuration\n\t\t\tif (transportType === \"http\" || transportType === \"sse\") {\n\t\t\t\t// HTTP/SSE transport - connect to remote server\n\t\t\t\tif (!config.url) {\n\t\t\t\t\tlogger.warn(\"No URL specified for HTTP server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst requestInit = await buildRemoteRequestInit(\n\t\t\t\t\tconfig,\n\t\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t\t);\n\t\t\t\tconst transportOptions = requestInit ? { requestInit } : undefined;\n\n\t\t\t\tif (transportType === \"http\") {\n\t\t\t\t\ttransport = new StreamableHTTPClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttransport = new SSEClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Stdio transport - spawn subprocess\n\t\t\t\tif (!config.command) {\n\t\t\t\t\tlogger.warn(\"No command specified for server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// SECURITY: Only pass essential env vars plus explicit config\n\t\t\t\t// Do NOT pass process.env - this would leak API keys and secrets\n\t\t\t\ttransport = new StdioClientTransport({\n\t\t\t\t\tcommand: config.command,\n\t\t\t\t\targs: config.args,\n\t\t\t\t\tenv: buildSafeEnv(config.env),\n\t\t\t\t\tcwd: config.cwd,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst client = new Client(\n\t\t\t\t{\n\t\t\t\t\tname: \"composer\",\n\t\t\t\t\tversion: \"1.0.0\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\telicitation: {\n\t\t\t\t\t\t\tform: { applyDefaults: true },\n\t\t\t\t\t\t\turl: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tclient.setRequestHandler(ElicitRequestSchema, async (request, extra) => {\n\t\t\t\tconst clientToolService = getCurrentMcpClientToolService();\n\t\t\t\tif (!clientToolService) {\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\n\t\t\t\tconst requestId =\n\t\t\t\t\textra.requestId ??\n\t\t\t\t\t(\"elicitationId\" in request.params\n\t\t\t\t\t\t? request.params.elicitationId\n\t\t\t\t\t\t: \"unknown\");\n\t\t\t\tconst toolCallId = buildMcpElicitationToolCallId(name, requestId);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await clientToolService.requestExecution(\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\"mcp_elicitation\",\n\t\t\t\t\t\tnormalizeMcpElicitationArgs(name, requestId, request.params),\n\t\t\t\t\t\textra.signal,\n\t\t\t\t\t);\n\t\t\t\t\treturn parseMcpElicitationClientToolResult(\n\t\t\t\t\t\tresult.content,\n\t\t\t\t\t\tresult.isError,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.warn(\"Failed to resolve MCP elicitation request\", {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tawait client.connect(transport, {\n\t\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\t});\n\n\t\t\t// Fetch capabilities\n\t\t\tconst tools = await this.fetchTools(client);\n\t\t\tconst resources = await this.fetchResources(client);\n\t\t\tconst promptDetails = await this.fetchPrompts(client);\n\t\t\tconst prompts = getPromptNames(promptDetails);\n\n\t\t\tthis.servers.set(name, {\n\t\t\t\tconfig,\n\t\t\t\tclient,\n\t\t\t\ttransport,\n\t\t\t\ttools,\n\t\t\t\tresources,\n\t\t\t\tprompts,\n\t\t\t\tpromptDetails,\n\t\t\t\treconnectAttempts: 0,\n\t\t\t});\n\t\t\tthis.lastErrors.delete(name);\n\n\t\t\t// Set up notification handlers after adding to servers map\n\t\t\t// to avoid race condition where notifications arrive before server is tracked\n\t\t\tthis.setupNotificationHandlers(client, name);\n\n\t\t\tthis.emit(\"connected\", { name, tools: tools.length, isReconnect });\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.lastErrors.set(name, message);\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to connect to server\",\n\t\t\t\terror instanceof Error ? error : new Error(message),\n\t\t\t\t{ name },\n\t\t\t);\n\t\t\tthis.emit(\"error\", { name, error: message });\n\n\t\t\t// Schedule reconnection for non-reconnect attempts\n\t\t\tif (!isReconnect) {\n\t\t\t\tthis.scheduleReconnect(config, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(config: McpServerConfig, attempt: number): void {\n\t\tif (attempt >= MAX_RECONNECT_ATTEMPTS) {\n\t\t\tlogger.warn(\"Max reconnection attempts reached\", { name: config.name });\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any existing timer for this server\n\t\tconst existingTimer = this.reconnectTimers.get(config.name);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t}\n\n\t\tconst delay = DEFAULT_RECONNECT_DELAY_MS * 2 ** attempt;\n\t\tlogger.info(\"Scheduling reconnect\", {\n\t\t\tserver: config.name,\n\t\t\tdelayMs: delay,\n\t\t\tattempt: attempt + 1,\n\t\t\tmaxAttempts: MAX_RECONNECT_ATTEMPTS,\n\t\t});\n\n\t\tconst timeoutId = setTimeout(async () => {\n\t\t\tthis.reconnectTimers.delete(config.name);\n\n\t\t\tif (this.servers.has(config.name)) {\n\t\t\t\treturn; // Already reconnected\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.doConnect(config, true);\n\t\t\t\t// If doConnect succeeded (server is now connected), we're done\n\t\t\t\tif (!this.servers.has(config.name)) {\n\t\t\t\t\t// Connection failed (doConnect caught the error), schedule retry\n\t\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Unexpected error, schedule retry\n\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t}\n\t\t}, delay);\n\n\t\tthis.reconnectTimers.set(config.name, timeoutId);\n\t}\n\n\t/**\n\t * Manually trigger reconnection for a server\n\t */\n\tasync reconnect(name: string): Promise<boolean> {\n\t\tconst config = this.config.servers.find((s) => s.name === name);\n\t\tif (!config) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!canConnectServer(config, buildProjectApprovalMap(this.config))) {\n\t\t\tawait this.disconnectServer(name);\n\t\t\treturn false;\n\t\t}\n\n\t\tawait this.disconnectServer(name);\n\t\tawait this.doConnect(config, true);\n\t\treturn this.servers.has(name);\n\t}\n\n\tprivate async fetchTools(client: Client): Promise<McpTool[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.tools) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listTools();\n\t\t\treturn result.tools;\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchResources(client: Client): Promise<string[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.resources) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listResources();\n\t\t\treturn result.resources.map((r) => r.uri);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchPrompts(client: Client): Promise<McpPromptDefinition[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.prompts) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listPrompts();\n\t\t\treturn result.prompts.map(normalizePromptDefinition);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate setupNotificationHandlers(client: Client, serverName: string): void {\n\t\t// Tool list changes - refresh tools when server notifies\n\t\tclient.setNotificationHandler(\n\t\t\tToolListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.tools = await this.fetchTools(client);\n\t\t\t\t\t\tthis.emit(\"tools_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh tools\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Resource list changes\n\t\tclient.setNotificationHandler(\n\t\t\tResourceListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.resources = await this.fetchResources(client);\n\t\t\t\t\t\tthis.emit(\"resources_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tresources: server.resources,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh resources\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Prompt list changes\n\t\tclient.setNotificationHandler(\n\t\t\tPromptListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.promptDetails = await this.fetchPrompts(client);\n\t\t\t\t\t\tserver.prompts = getPromptNames(server.promptDetails);\n\t\t\t\t\t\tthis.emit(\"prompts_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh prompts\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Progress notifications for long-running operations\n\t\tclient.setNotificationHandler(\n\t\t\tProgressNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"progress\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tprogressToken: notification.params.progressToken,\n\t\t\t\t\tprogress: notification.params.progress,\n\t\t\t\t\ttotal: notification.params.total,\n\t\t\t\t\tmessage: notification.params.message,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\t// Logging messages from MCP servers\n\t\tclient.setNotificationHandler(\n\t\t\tLoggingMessageNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"log\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tlevel: notification.params.level,\n\t\t\t\t\tlogger: notification.params.logger,\n\t\t\t\t\tdata: notification.params.data,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async disconnectServer(name: string): Promise<void> {\n\t\t// Clear any pending reconnect timer for this server\n\t\tconst timer = this.reconnectTimers.get(name);\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.reconnectTimers.delete(name);\n\t\t}\n\n\t\tconst server = this.servers.get(name);\n\t\tif (!server) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait server.client.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing client\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\t// Also close the transport to clean up underlying resources\n\t\ttry {\n\t\t\tawait server.transport.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing transport\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\tthis.servers.delete(name);\n\t\tthis.emit(\"disconnected\", { name });\n\t}\n\n\tasync callTool(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<McpToolCallResult> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.callTool({\n\t\t\tname: toolName,\n\t\t\targuments: args,\n\t\t});\n\n\t\t// Normalize the result to our interface\n\t\tconst content = Array.isArray(result.content)\n\t\t\t? result.content.map((c: Record<string, unknown>) => ({\n\t\t\t\t\ttype: String(c.type ?? \"unknown\"),\n\t\t\t\t\ttext: typeof c.text === \"string\" ? c.text : undefined,\n\t\t\t\t\tdata: typeof c.data === \"string\" ? c.data : undefined,\n\t\t\t\t\tmimeType: typeof c.mimeType === \"string\" ? c.mimeType : undefined,\n\t\t\t\t}))\n\t\t\t: [];\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tstructuredContent:\n\t\t\t\t\"structuredContent\" in result ? result.structuredContent : undefined,\n\t\t\tisError: typeof result.isError === \"boolean\" ? result.isError : undefined,\n\t\t};\n\t}\n\n\tgetAllTools(): Array<{ server: string; tool: McpTool }> {\n\t\tconst tools: Array<{ server: string; tool: McpTool }> = [];\n\t\tfor (const [serverName, server] of this.servers) {\n\t\t\tfor (const tool of server.tools) {\n\t\t\t\ttools.push({ server: serverName, tool });\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\tgetStatus(): McpManagerStatus {\n\t\tconst servers: McpServerStatus[] = [];\n\t\tconst authPresets: McpAuthPresetStatus[] = (\n\t\t\tthis.config.authPresets ?? []\n\t\t).map((authPreset) => ({\n\t\t\tname: authPreset.name,\n\t\t\tscope: authPreset.scope,\n\t\t\theaderKeys: authPreset.headers\n\t\t\t\t? Object.keys(authPreset.headers).sort()\n\t\t\t\t: [],\n\t\t\theadersHelper: authPreset.headersHelper,\n\t\t}));\n\t\tconst authPresetMap = buildAuthPresetMap(this.config.authPresets ?? []);\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\n\t\t// Include configured but not connected servers\n\t\tfor (const config of this.config.servers) {\n\t\t\tconst connected = this.servers.get(config.name);\n\t\t\tconst projectApproval = approvalMap.get(config.name);\n\t\t\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\t\t\tconst remoteUrl =\n\t\t\t\tconfig.transport === \"http\" || config.transport === \"sse\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: undefined;\n\t\t\tconst remoteHost = remoteUrl ? getMcpRemoteHost(remoteUrl) : undefined;\n\t\t\tconst remoteRegistryMatch = remoteUrl\n\t\t\t\t? getOfficialMcpRegistryMatch(remoteUrl)\n\t\t\t\t: undefined;\n\t\t\tservers.push({\n\t\t\t\tname: config.name,\n\t\t\t\tconnected: !!connected,\n\t\t\t\terror:\n\t\t\t\t\tprojectApproval === \"pending\" || projectApproval === \"denied\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: this.lastErrors.get(config.name),\n\t\t\t\tscope: config.scope,\n\t\t\t\ttransport: config.transport,\n\t\t\t\ttools: connected?.tools ?? [],\n\t\t\t\tresources: connected?.resources ?? [],\n\t\t\t\tprompts: connected?.prompts ?? [],\n\t\t\t\tpromptDetails:\n\t\t\t\t\tconnected && connected.promptDetails.length > 0\n\t\t\t\t\t\t? connected.promptDetails\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcommand: config.transport === \"stdio\" ? config.command : undefined,\n\t\t\t\targs: config.transport === \"stdio\" ? config.args : undefined,\n\t\t\t\tcwd: config.transport === \"stdio\" ? config.cwd : undefined,\n\t\t\t\tenvKeys: config.env ? Object.keys(config.env).sort() : [],\n\t\t\t\tremoteUrl,\n\t\t\t\tremoteHost,\n\t\t\t\theaderKeys: resolvedAuth.headers\n\t\t\t\t\t? Object.keys(resolvedAuth.headers).sort()\n\t\t\t\t\t: [],\n\t\t\t\theadersHelper: resolvedAuth.headersHelper,\n\t\t\t\tauthPreset: config.authPreset,\n\t\t\t\ttimeout: config.timeout,\n\t\t\t\tremoteTrust: remoteRegistryMatch?.trust,\n\t\t\t\tofficialRegistry: remoteRegistryMatch?.info,\n\t\t\t\tprojectApproval,\n\t\t\t});\n\t\t}\n\n\t\treturn { servers, authPresets };\n\t}\n\n\tgetServer(name: string): ConnectedServer | undefined {\n\t\treturn this.servers.get(name);\n\t}\n\n\tisConnected(name: string): boolean {\n\t\treturn this.servers.has(name);\n\t}\n\n\t/**\n\t * Read a resource from an MCP server\n\t */\n\tasync readResource(\n\t\tserverName: string,\n\t\turi: string,\n\t): Promise<{\n\t\tcontents: Array<{\n\t\t\turi: string;\n\t\t\ttext?: string;\n\t\t\tblob?: string;\n\t\t\tmimeType?: string;\n\t\t}>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.readResource({ uri });\n\t\treturn {\n\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\turi: c.uri,\n\t\t\t\ttext: \"text\" in c ? c.text : undefined,\n\t\t\t\tblob: \"blob\" in c ? c.blob : undefined,\n\t\t\t\tmimeType: c.mimeType,\n\t\t\t})),\n\t\t};\n\t}\n\n\t/**\n\t * Get a prompt from an MCP server\n\t */\n\tasync getPrompt(\n\t\tserverName: string,\n\t\tpromptName: string,\n\t\targs?: Record<string, string>,\n\t): Promise<{\n\t\tdescription?: string;\n\t\tmessages: Array<{ role: string; content: string }>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.getPrompt({\n\t\t\tname: promptName,\n\t\t\targuments: args,\n\t\t});\n\t\treturn {\n\t\t\tdescription: result.description,\n\t\t\tmessages: result.messages.map((m) => ({\n\t\t\t\trole: m.role,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof m.content === \"string\"\n\t\t\t\t\t\t? m.content\n\t\t\t\t\t\t: m.content.type === \"text\"\n\t\t\t\t\t\t\t? m.content.text\n\t\t\t\t\t\t\t: \"[non-text content]\",\n\t\t\t})),\n\t\t};\n\t}\n}\n\n/**\n * Singleton MCP client manager instance.\n *\n * Use this for all MCP operations in the application.\n * Configure with `mcpManager.configure(config)` at startup.\n */\nexport const mcpManager = new McpClientManager();\n"]}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Client Manager - Model Context Protocol integration.\n *\n * This module manages connections to MCP (Model Context Protocol) servers,\n * which provide extended capabilities to the agent through a standardized\n * interface. MCP servers can expose:\n *\n * - **Tools**: Functions the agent can call (e.g., database queries, APIs)\n * - **Resources**: Data the agent can read (e.g., files, configurations)\n * - **Prompts**: Pre-defined prompt templates\n *\n * ## Architecture\n *\n * The McpClientManager maintains connections to multiple MCP servers\n * simultaneously. Each server can use either:\n * - **Stdio transport**: Spawns a subprocess, communicates via stdin/stdout\n * - **SSE transport**: Connects to HTTP server using Server-Sent Events\n *\n * ## Security\n *\n * - Environment variables are NOT passed to MCP server subprocesses\n * - Only essential variables (PATH, HOME, USER, SHELL, TERM) are included\n * - Server-specific env vars must be explicitly configured\n *\n * ## Events\n *\n * The manager emits events for monitoring:\n * - `connected`: Server successfully connected\n * - `disconnected`: Server disconnected\n * - `error`: Connection or operation error\n * - `tools_changed`: Server's tool list updated\n * - `resources_changed`: Server's resource list updated\n * - `prompts_changed`: Server's prompt list updated\n * - `progress`: Progress update from long-running operations\n * - `log`: Log message from server\n */\n\nimport { execFile } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport { promisify } from \"node:util\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport {\n\tElicitRequestSchema,\n\tLoggingMessageNotificationSchema,\n\ttype Prompt as McpPrompt,\n\ttype Tool as McpTool,\n\tProgressNotificationSchema,\n\tPromptListChangedNotificationSchema,\n\tResourceListChangedNotificationSchema,\n\ttype ServerCapabilities,\n\tToolListChangedNotificationSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { getPackageVersion } from \"../package-metadata.js\";\nimport {\n\temitMcpConnectionBeacon,\n\temitMcpToolUsageBeacon,\n} from \"../telemetry/mcp-beacon.js\";\nimport { parseCommandArguments } from \"../tools/shell-utils.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir } from \"../utils/path-expansion.js\";\nimport {\n\tbuildMcpElicitationToolCallId,\n\tgetCurrentMcpClientToolService,\n\tnormalizeMcpElicitationArgs,\n\tparseMcpElicitationClientToolResult,\n} from \"./elicitation.js\";\nimport {\n\tgetMcpRemoteHost,\n\tgetOfficialMcpRegistryMatch,\n} from \"./official-registry.js\";\nimport { getProjectMcpServerApprovalStatus } from \"./project-approvals.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpAuthPresetStatus,\n\tMcpConfig,\n\tMcpManagerStatus,\n\tMcpProjectApprovalStatus,\n\tMcpPromptDefinition,\n\tMcpServerConfig,\n\tMcpServerStatus,\n\tMcpToolParallelSafety,\n} from \"./types.js\";\nimport { ensureMcpWorkspaceTrusted } from \"./workspace-trust.js\";\n\nconst logger = createLogger(\"mcp:manager\");\nconst execFileAsync = promisify(execFile);\n\n/**\n * Result from calling an MCP tool.\n * Content can be text, binary data, or other MIME types.\n */\nexport interface McpToolCallResult {\n\tcontent: Array<{\n\t\ttype: string;\n\t\ttext?: string;\n\t\tdata?: string;\n\t\tmimeType?: string;\n\t}>;\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n}\n\n// Connection timeout for initial server handshake\nconst DEFAULT_TIMEOUT_MS = 30000;\n\n// Delay between reconnection attempts (doubles each retry)\nconst DEFAULT_RECONNECT_DELAY_MS = 5000;\n\n// Maximum number of automatic reconnection attempts\nconst MAX_RECONNECT_ATTEMPTS = 3;\nconst PARALLEL_SAFETY_EXPERIMENTAL_KEYS = [\n\t\"evalops.maestro.parallelSafety\",\n\t\"evalops.maestro/parallelSafety\",\n\t\"maestro.parallelSafety\",\n];\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction positiveInteger(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value > 0\n\t\t? Math.floor(value)\n\t\t: undefined;\n}\n\nfunction serverParallelSafetyAdvertisement(\n\tcapabilities: ServerCapabilities | undefined,\n): Record<string, unknown> | undefined {\n\tconst experimental = asRecord(capabilities?.experimental);\n\tif (!experimental) {\n\t\treturn undefined;\n\t}\n\tfor (const key of PARALLEL_SAFETY_EXPERIMENTAL_KEYS) {\n\t\tconst advertisement = asRecord(experimental[key]);\n\t\tif (advertisement) {\n\t\t\treturn advertisement;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveToolParallelSafety({\n\tconfig,\n\tserverCapabilities,\n\ttool,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttool: McpTool;\n}): McpToolParallelSafety {\n\tconst advertisement = serverParallelSafetyAdvertisement(serverCapabilities);\n\tconst advertisedTools = asRecord(advertisement?.tools);\n\tconst advertisedTool =\n\t\tasRecord(advertisedTools?.[tool.name]) ?? asRecord(advertisedTools?.[\"*\"]);\n\tconst toolSupportsParallel = advertisedTool?.supportsParallelToolCalls;\n\tconst advertisedSupports =\n\t\ttoolSupportsParallel === true ||\n\t\t(toolSupportsParallel !== false &&\n\t\t\tadvertisement?.supportsParallelToolCalls === true);\n\tconst maxConcurrency =\n\t\tpositiveInteger(advertisedTool?.maxConcurrency) ??\n\t\tpositiveInteger(advertisement?.maxConcurrency);\n\n\tif (config.supportsParallelToolCalls === true) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"static_config\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\tif (advertisedSupports) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: true,\n\t\t\tprovenance: \"server_capability\",\n\t\t\t...(maxConcurrency ? { maxConcurrency } : {}),\n\t\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t\t};\n\t}\n\treturn {\n\t\tsupportsParallelToolCalls: false,\n\t\tprovenance: \"none\",\n\t\t...(advertisedTool?.readOnlyHint === true ? { readOnlyHint: true } : {}),\n\t};\n}\n\nfunction resolveParallelSafetyByTool({\n\tconfig,\n\tserverCapabilities,\n\ttools,\n}: {\n\tconfig: McpServerConfig;\n\tserverCapabilities?: ServerCapabilities;\n\ttools: McpTool[];\n}): Map<string, McpToolParallelSafety> {\n\treturn new Map(\n\t\ttools.map((tool) => [\n\t\t\ttool.name,\n\t\t\tresolveToolParallelSafety({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttool,\n\t\t\t}),\n\t\t]),\n\t);\n}\n\nfunction summarizeServerParallelSafety(\n\tconfig: McpServerConfig,\n\tconnected: ConnectedServer | undefined,\n): McpServerStatus[\"parallelSafety\"] {\n\tif (!connected) {\n\t\treturn {\n\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\tprovenance:\n\t\t\t\tconfig.supportsParallelToolCalls === true ? \"static_config\" : \"none\",\n\t\t};\n\t}\n\tconst values = [...connected.parallelSafetyByTool.values()];\n\tconst supportsParallelToolCalls = values.some(\n\t\t(value) => value.supportsParallelToolCalls === true,\n\t);\n\tconst staticConfig = values.some(\n\t\t(value) => value.provenance === \"static_config\",\n\t);\n\tconst serverCapability = values.some(\n\t\t(value) => value.provenance === \"server_capability\",\n\t);\n\tconst maxConcurrencyValues = values\n\t\t.map((value) => value.maxConcurrency)\n\t\t.filter((value): value is number => typeof value === \"number\");\n\treturn {\n\t\tsupportsParallelToolCalls,\n\t\tprovenance: staticConfig\n\t\t\t? \"static_config\"\n\t\t\t: serverCapability\n\t\t\t\t? \"server_capability\"\n\t\t\t\t: \"none\",\n\t\t...(maxConcurrencyValues.length > 0\n\t\t\t? { maxConcurrency: Math.min(...maxConcurrencyValues) }\n\t\t\t: {}),\n\t};\n}\n\nfunction arraysEqual(\n\tleft: readonly string[] | undefined,\n\tright: readonly string[] | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right || left.length !== right.length) {\n\t\treturn false;\n\t}\n\treturn left.every((value, index) => value === right[index]);\n}\n\nfunction recordsEqual(\n\tleft: Record<string, string> | undefined,\n\tright: Record<string, string> | undefined,\n): boolean {\n\tif (left === right) {\n\t\treturn true;\n\t}\n\tif (!left || !right) {\n\t\treturn false;\n\t}\n\tconst leftEntries = Object.entries(left).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tconst rightEntries = Object.entries(right).sort(([leftKey], [rightKey]) =>\n\t\tleftKey.localeCompare(rightKey),\n\t);\n\tif (leftEntries.length !== rightEntries.length) {\n\t\treturn false;\n\t}\n\treturn leftEntries.every(\n\t\t([leftKey, leftValue], index) =>\n\t\t\tleftKey === rightEntries[index]?.[0] &&\n\t\t\tleftValue === rightEntries[index]?.[1],\n\t);\n}\n\ninterface ResolvedRemoteAuthConfig {\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tpreset?: McpAuthPresetConfig;\n}\n\nfunction buildAuthPresetMap(\n\tauthPresets: readonly McpAuthPresetConfig[],\n): Map<string, McpAuthPresetConfig> {\n\treturn new Map(\n\t\t(authPresets ?? []).map((authPreset) => [authPreset.name, authPreset]),\n\t);\n}\n\nfunction resolveRemoteAuthConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): ResolvedRemoteAuthConfig {\n\tif (config.transport !== \"http\" && config.transport !== \"sse\") {\n\t\treturn {\n\t\t\theaders: config.headers,\n\t\t\theadersHelper: config.headersHelper,\n\t\t};\n\t}\n\n\tconst preset = config.authPreset\n\t\t? authPresetMap.get(config.authPreset)\n\t\t: undefined;\n\tconst headers = {\n\t\t...(preset?.headers ?? {}),\n\t\t...(config.headers ?? {}),\n\t};\n\n\treturn {\n\t\theaders: Object.keys(headers).length > 0 ? headers : undefined,\n\t\theadersHelper: config.headersHelper ?? preset?.headersHelper,\n\t\tpreset,\n\t};\n}\n\nfunction buildComparableServerConfig(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): McpServerConfig {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\treturn {\n\t\t...config,\n\t\theaders: resolvedAuth.headers,\n\t\theadersHelper: resolvedAuth.headersHelper,\n\t};\n}\n\nfunction serverConfigsEqual(\n\tleft: McpServerConfig,\n\tright: McpServerConfig,\n): boolean {\n\treturn (\n\t\tleft.name === right.name &&\n\t\tleft.transport === right.transport &&\n\t\tleft.command === right.command &&\n\t\tarraysEqual(left.args, right.args) &&\n\t\trecordsEqual(left.env, right.env) &&\n\t\tleft.cwd === right.cwd &&\n\t\tleft.url === right.url &&\n\t\trecordsEqual(left.headers, right.headers) &&\n\t\tleft.headersHelper === right.headersHelper &&\n\t\tleft.enabled === right.enabled &&\n\t\tleft.disabled === right.disabled &&\n\t\tleft.timeout === right.timeout &&\n\t\tleft.scope === right.scope\n\t);\n}\n\nfunction buildProjectApprovalMap(\n\tconfig: McpConfig,\n): Map<string, McpProjectApprovalStatus> {\n\tconst approvals = new Map<string, McpProjectApprovalStatus>();\n\tif (!config.projectRoot) {\n\t\treturn approvals;\n\t}\n\tfor (const server of config.servers ?? []) {\n\t\tconst approval = getProjectMcpServerApprovalStatus({\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\tserver,\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t});\n\t\tif (approval) {\n\t\t\tapprovals.set(server.name, approval);\n\t\t}\n\t}\n\treturn approvals;\n}\n\nfunction canConnectServer(\n\tserver: McpServerConfig,\n\tapprovalMap: ReadonlyMap<string, McpProjectApprovalStatus>,\n): boolean {\n\tconst approval = approvalMap.get(server.name);\n\treturn approval !== \"pending\" && approval !== \"denied\";\n}\n\nfunction buildSafeEnv(\n\texplicitEnv?: Record<string, string>,\n\textraEnv?: Record<string, string>,\n): Record<string, string> {\n\tconst safeBaseEnv: Record<string, string> = {};\n\tif (process.env.PATH) safeBaseEnv.PATH = process.env.PATH;\n\tif (process.env.HOME) {\n\t\tsafeBaseEnv.HOME = process.env.HOME;\n\t} else {\n\t\tconst homeDir = getHomeDir();\n\t\tif (homeDir) safeBaseEnv.HOME = homeDir;\n\t}\n\tif (process.env.USER) {\n\t\tsafeBaseEnv.USER = process.env.USER;\n\t} else if (process.env.USERNAME) {\n\t\tsafeBaseEnv.USER = process.env.USERNAME;\n\t}\n\tif (process.env.SHELL) safeBaseEnv.SHELL = process.env.SHELL;\n\tif (process.env.TERM) safeBaseEnv.TERM = process.env.TERM;\n\n\treturn Object.fromEntries(\n\t\tObject.entries({ ...safeBaseEnv, ...explicitEnv, ...extraEnv }).filter(\n\t\t\t([, value]) => value !== undefined,\n\t\t),\n\t) as Record<string, string>;\n}\n\nasync function resolveHeadersHelper(\n\tconfig: McpServerConfig,\n\theadersHelper = config.headersHelper,\n): Promise<Record<string, string> | undefined> {\n\tif (!headersHelper) {\n\t\treturn undefined;\n\t}\n\n\tlet command: string[];\n\ttry {\n\t\tcommand = parseCommandArguments(headersHelper);\n\t} catch (error) {\n\t\tlogger.warn(\"Invalid MCP headers helper command\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n\n\tif (command.length === 0) {\n\t\tlogger.warn(\"Empty MCP headers helper command\", { name: config.name });\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst { stdout } = await execFileAsync(command[0]!, command.slice(1), {\n\t\t\tcwd: config.cwd,\n\t\t\tenv: buildSafeEnv(config.env, {\n\t\t\t\tMAESTRO_MCP_SERVER_NAME: config.name,\n\t\t\t\tMAESTRO_MCP_SERVER_URL: config.url ?? \"\",\n\t\t\t}),\n\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\tmaxBuffer: 1024 * 1024,\n\t\t\tencoding: \"utf8\",\n\t\t\twindowsHide: true,\n\t\t});\n\n\t\tconst trimmed = stdout.trim();\n\t\tif (!trimmed) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst parsed = JSON.parse(trimmed) as unknown;\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"headersHelper must return a JSON object\");\n\t\t}\n\n\t\tconst headers: Record<string, string> = {};\n\t\tfor (const [key, value] of Object.entries(parsed)) {\n\t\t\tif (typeof value !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`headersHelper must return string values for key \"${key}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\theaders[key] = value;\n\t\t}\n\n\t\treturn headers;\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to resolve MCP headers helper\", {\n\t\t\tname: config.name,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t});\n\t\treturn undefined;\n\t}\n}\n\nasync function buildRemoteRequestInit(\n\tconfig: McpServerConfig,\n\tauthPresetMap: ReadonlyMap<string, McpAuthPresetConfig>,\n): Promise<RequestInit | undefined> {\n\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\tconst helperHeaders = await resolveHeadersHelper(\n\t\tconfig,\n\t\tresolvedAuth.headersHelper,\n\t);\n\tconst headers = {\n\t\t...(resolvedAuth.headers ?? {}),\n\t\t...(helperHeaders ?? {}),\n\t};\n\n\treturn Object.keys(headers).length > 0 ? { headers } : undefined;\n}\n\n/**\n * Internal state for a connected MCP server.\n * Tracks the client, transport, and cached capabilities.\n */\ninterface ConnectedServer {\n\t/** Original configuration */\n\tconfig: McpServerConfig;\n\t/** MCP client instance */\n\tclient: Client;\n\t/** Transport layer (stdio or SSE) */\n\ttransport: Transport;\n\t/** Cached list of available tools */\n\ttools: McpTool[];\n\t/** Cached list of resource URIs */\n\tresources: string[];\n\t/** Cached list of prompt names */\n\tprompts: string[];\n\t/** Cached prompt metadata for structured prompt UIs */\n\tpromptDetails: McpPromptDefinition[];\n\t/** Per-tool parallel safety resolved from static config or server handshake. */\n\tparallelSafetyByTool: ReadonlyMap<string, McpToolParallelSafety>;\n\t/** Counter for reconnection attempts */\n\treconnectAttempts: number;\n}\n\nfunction normalizePromptDefinition(prompt: McpPrompt): McpPromptDefinition {\n\treturn {\n\t\tname: prompt.name,\n\t\ttitle: prompt.title,\n\t\tdescription: prompt.description,\n\t\targuments:\n\t\t\tprompt.arguments?.map((argument) => ({\n\t\t\t\tname: argument.name,\n\t\t\t\tdescription: argument.description,\n\t\t\t\trequired: argument.required,\n\t\t\t})) ?? [],\n\t};\n}\n\nfunction getPromptNames(\n\tpromptDetails: readonly McpPromptDefinition[],\n): string[] {\n\treturn promptDetails.map((prompt) => prompt.name);\n}\n\n/**\n * Manager for MCP (Model Context Protocol) server connections.\n *\n * Handles connection lifecycle, tool discovery, and message routing\n * for multiple MCP servers. Supports automatic reconnection on failure.\n */\nexport class McpClientManager extends EventEmitter {\n\t/** Map of server name to connected server state */\n\tprivate servers = new Map<string, ConnectedServer>();\n\n\t/** Map of server name to in-flight connection promise (prevents duplicates) */\n\tprivate connecting = new Map<string, Promise<void>>();\n\n\t/** Map of server name to pending reconnect timer */\n\tprivate reconnectTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n\t/** Last connection or runtime error reported for each configured server */\n\tprivate lastErrors = new Map<string, string>();\n\n\t/** Current configuration */\n\tprivate config: McpConfig = { servers: [], authPresets: [] };\n\n\t/**\n\t * Apply a new configuration, connecting/disconnecting servers as needed.\n\t *\n\t * Compares old and new configs to determine which servers to add or remove,\n\t * then performs the necessary connect/disconnect operations.\n\t *\n\t * @param config - New MCP configuration with server list\n\t */\n\tasync configure(config: McpConfig): Promise<void> {\n\t\tconst nextConfig: McpConfig = {\n\t\t\tservers: config.servers ?? [],\n\t\t\tauthPresets: config.authPresets ?? [],\n\t\t\tprojectRoot: config.projectRoot,\n\t\t\ttrustedWorkspaces: config.trustedWorkspaces,\n\t\t\tworkspaceTrustDefault: config.workspaceTrustDefault,\n\t\t\tenvLimits: config.envLimits,\n\t\t};\n\t\tconst previousAuthPresetMap = buildAuthPresetMap(this.config.authPresets);\n\t\tconst nextAuthPresetMap = buildAuthPresetMap(nextConfig.authPresets);\n\t\tconst previousApprovalMap = buildProjectApprovalMap(this.config);\n\t\tconst nextApprovalMap = buildProjectApprovalMap(nextConfig);\n\t\tconst previousServers = new Map(\n\t\t\tthis.config.servers.map((server) => [server.name, server]),\n\t\t);\n\t\tconst oldServerNames = new Set(previousServers.keys());\n\t\tconst newServerNames = new Set(nextConfig.servers.map((s) => s.name));\n\n\t\t// Find servers to remove (in old but not in new)\n\t\tconst toRemove = [...oldServerNames].filter((n) => !newServerNames.has(n));\n\n\t\t// Reconnect servers whose config changed in place.\n\t\tconst toReconnect = nextConfig.servers.filter((server) => {\n\t\t\tconst previous = previousServers.get(server.name);\n\t\t\treturn (\n\t\t\t\tprevious &&\n\t\t\t\t(!serverConfigsEqual(\n\t\t\t\t\tbuildComparableServerConfig(previous, previousAuthPresetMap),\n\t\t\t\t\tbuildComparableServerConfig(server, nextAuthPresetMap),\n\t\t\t\t) ||\n\t\t\t\t\tcanConnectServer(previous, previousApprovalMap) !==\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap))\n\t\t\t);\n\t\t});\n\t\tconst reconnectNames = new Set(toReconnect.map((server) => server.name));\n\n\t\t// Find servers to add (in new but not in old)\n\t\tconst toAdd = nextConfig.servers.filter(\n\t\t\t(server) => !oldServerNames.has(server.name),\n\t\t);\n\t\tconst toAddNames = new Set(toAdd.map((server) => server.name));\n\n\t\tthis.config = nextConfig;\n\n\t\t// Disconnect removed servers (don't wait for success)\n\t\tawait Promise.allSettled(\n\t\t\ttoRemove.map((name) => this.disconnectServer(name)),\n\t\t);\n\n\t\t// Disconnect and reconnect updated servers so in-place edits take effect.\n\t\tawait Promise.allSettled(\n\t\t\ttoReconnect.map(async (server) => {\n\t\t\t\tconst pendingConnection = this.connecting.get(server.name);\n\t\t\t\tif (pendingConnection) {\n\t\t\t\t\tawait Promise.allSettled([pendingConnection]);\n\t\t\t\t}\n\t\t\t\tawait this.disconnectServer(server.name);\n\t\t\t\tif (canConnectServer(server, nextApprovalMap)) {\n\t\t\t\t\tawait this.connectServer(server);\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\t// Connect new servers and unchanged servers that were explicitly disconnected.\n\t\tawait Promise.allSettled(\n\t\t\tnextConfig.servers\n\t\t\t\t.filter(\n\t\t\t\t\t(server) =>\n\t\t\t\t\t\t(toAddNames.has(server.name) ||\n\t\t\t\t\t\t\t(oldServerNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!reconnectNames.has(server.name) &&\n\t\t\t\t\t\t\t\t!this.servers.has(server.name))) &&\n\t\t\t\t\t\tcanConnectServer(server, nextApprovalMap),\n\t\t\t\t)\n\t\t\t\t.map((server) => this.connectServer(server)),\n\t\t);\n\t}\n\n\t/**\n\t * Connect to all configured servers.\n\t * Non-blocking - returns after connection attempts are started.\n\t */\n\tasync connectAll(): Promise<void> {\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\t\tconst promises = this.config.servers\n\t\t\t.filter((server) => canConnectServer(server, approvalMap))\n\t\t\t.map((server) => this.connectServer(server));\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Disconnect from all servers and cancel pending reconnects.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\t// Clear all pending reconnect timers first\n\t\tfor (const [name, timer] of this.reconnectTimers) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t\tthis.reconnectTimers.clear();\n\n\t\t// Disconnect all servers\n\t\tconst promises = Array.from(this.servers.keys()).map((name) =>\n\t\t\tthis.disconnectServer(name),\n\t\t);\n\t\tawait Promise.allSettled(promises);\n\t}\n\n\t/**\n\t * Internal: Connect to a single server.\n\t * Handles deduplication of concurrent connection attempts.\n\t */\n\tprivate async connectServer(config: McpServerConfig): Promise<void> {\n\t\tconst { name } = config;\n\n\t\t// Avoid duplicate connections\n\t\tif (this.servers.has(name)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Check for in-flight connection (prevent race conditions)\n\t\tconst existing = this.connecting.get(name);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\n\t\t// Track this connection attempt\n\t\tconst task = this.doConnect(config);\n\t\tthis.connecting.set(name, task);\n\n\t\ttry {\n\t\t\tawait task;\n\t\t} finally {\n\t\t\tthis.connecting.delete(name);\n\t\t}\n\t}\n\n\t/**\n\t * Internal: Perform the actual connection to an MCP server.\n\t *\n\t * Creates the appropriate transport (stdio or SSE), establishes connection,\n\t * fetches server capabilities (tools, resources, prompts), and sets up\n\t * notification handlers.\n\t *\n\t * @param config - Server configuration\n\t * @param isReconnect - Whether this is a reconnection attempt\n\t */\n\tprivate async doConnect(\n\t\tconfig: McpServerConfig,\n\t\tisReconnect = false,\n\t): Promise<void> {\n\t\tconst { name, transport: transportType } = config;\n\n\t\ttry {\n\t\t\tlet transport: Transport;\n\n\t\t\t// Create transport based on configuration\n\t\t\tif (transportType === \"http\" || transportType === \"sse\") {\n\t\t\t\t// HTTP/SSE transport - connect to remote server\n\t\t\t\tif (!config.url) {\n\t\t\t\t\tlogger.warn(\"No URL specified for HTTP server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst requestInit = await buildRemoteRequestInit(\n\t\t\t\t\tconfig,\n\t\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t\t);\n\t\t\t\tconst transportOptions = requestInit ? { requestInit } : undefined;\n\n\t\t\t\tif (transportType === \"http\") {\n\t\t\t\t\ttransport = new StreamableHTTPClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\ttransport = new SSEClientTransport(\n\t\t\t\t\t\tnew URL(config.url),\n\t\t\t\t\t\ttransportOptions,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Stdio transport - spawn subprocess\n\t\t\t\tif (!config.command) {\n\t\t\t\t\tlogger.warn(\"No command specified for server\", { name });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// SECURITY: Only pass essential env vars plus explicit config\n\t\t\t\t// Do NOT pass process.env - this would leak API keys and secrets\n\t\t\t\ttransport = new StdioClientTransport({\n\t\t\t\t\tcommand: config.command,\n\t\t\t\t\targs: config.args,\n\t\t\t\t\tenv: buildSafeEnv(config.env),\n\t\t\t\t\tcwd: config.cwd,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst client = new Client(\n\t\t\t\t{\n\t\t\t\t\tname: \"composer\",\n\t\t\t\t\tversion: \"1.0.0\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\telicitation: {\n\t\t\t\t\t\t\tform: { applyDefaults: true },\n\t\t\t\t\t\t\turl: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tclient.setRequestHandler(ElicitRequestSchema, async (request, extra) => {\n\t\t\t\tconst clientToolService = getCurrentMcpClientToolService();\n\t\t\t\tif (!clientToolService) {\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\n\t\t\t\tconst requestId =\n\t\t\t\t\textra.requestId ??\n\t\t\t\t\t(\"elicitationId\" in request.params\n\t\t\t\t\t\t? request.params.elicitationId\n\t\t\t\t\t\t: \"unknown\");\n\t\t\t\tconst toolCallId = buildMcpElicitationToolCallId(name, requestId);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await clientToolService.requestExecution(\n\t\t\t\t\t\ttoolCallId,\n\t\t\t\t\t\t\"mcp_elicitation\",\n\t\t\t\t\t\tnormalizeMcpElicitationArgs(name, requestId, request.params),\n\t\t\t\t\t\textra.signal,\n\t\t\t\t\t);\n\t\t\t\t\treturn parseMcpElicitationClientToolResult(\n\t\t\t\t\t\tresult.content,\n\t\t\t\t\t\tresult.isError,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.warn(\"Failed to resolve MCP elicitation request\", {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t\treturn { action: \"cancel\" };\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tawait client.connect(transport, {\n\t\t\t\ttimeout: config.timeout ?? DEFAULT_TIMEOUT_MS,\n\t\t\t});\n\n\t\t\t// Fetch capabilities\n\t\t\tconst tools = await this.fetchTools(client);\n\t\t\tconst resources = await this.fetchResources(client);\n\t\t\tconst promptDetails = await this.fetchPrompts(client);\n\t\t\tconst prompts = getPromptNames(promptDetails);\n\t\t\tconst serverCapabilities = client.getServerCapabilities();\n\t\t\tconst parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\tconfig,\n\t\t\t\tserverCapabilities,\n\t\t\t\ttools,\n\t\t\t});\n\n\t\t\tthis.servers.set(name, {\n\t\t\t\tconfig,\n\t\t\t\tclient,\n\t\t\t\ttransport,\n\t\t\t\ttools,\n\t\t\t\tresources,\n\t\t\t\tprompts,\n\t\t\t\tpromptDetails,\n\t\t\t\tparallelSafetyByTool,\n\t\t\t\treconnectAttempts: 0,\n\t\t\t});\n\t\t\tthis.lastErrors.delete(name);\n\n\t\t\t// Set up notification handlers after adding to servers map\n\t\t\t// to avoid race condition where notifications arrive before server is tracked\n\t\t\tthis.setupNotificationHandlers(client, name);\n\n\t\t\tthis.emit(\"connected\", { name, tools: tools.length, isReconnect });\n\t\t\tvoid emitMcpConnectionBeacon({\n\t\t\t\tserverName: name,\n\t\t\t\ttransport: transportType,\n\t\t\t\tremoteHost: config.url ? getMcpRemoteHost(config.url) : undefined,\n\t\t\t\ttoolCount: tools.length,\n\t\t\t\tresourceCount: resources.length,\n\t\t\t\tpromptCount: prompts.length,\n\t\t\t\tisReconnect,\n\t\t\t\tclientVersion: getPackageVersion(),\n\t\t\t}).catch(() => undefined);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.lastErrors.set(name, message);\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to connect to server\",\n\t\t\t\terror instanceof Error ? error : new Error(message),\n\t\t\t\t{ name },\n\t\t\t);\n\t\t\tthis.emit(\"error\", { name, error: message });\n\n\t\t\t// Schedule reconnection for non-reconnect attempts\n\t\t\tif (!isReconnect) {\n\t\t\t\tthis.scheduleReconnect(config, 0);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(config: McpServerConfig, attempt: number): void {\n\t\tif (attempt >= MAX_RECONNECT_ATTEMPTS) {\n\t\t\tlogger.warn(\"Max reconnection attempts reached\", { name: config.name });\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear any existing timer for this server\n\t\tconst existingTimer = this.reconnectTimers.get(config.name);\n\t\tif (existingTimer) {\n\t\t\tclearTimeout(existingTimer);\n\t\t}\n\n\t\tconst delay = DEFAULT_RECONNECT_DELAY_MS * 2 ** attempt;\n\t\tlogger.info(\"Scheduling reconnect\", {\n\t\t\tserver: config.name,\n\t\t\tdelayMs: delay,\n\t\t\tattempt: attempt + 1,\n\t\t\tmaxAttempts: MAX_RECONNECT_ATTEMPTS,\n\t\t});\n\n\t\tconst timeoutId = setTimeout(async () => {\n\t\t\tthis.reconnectTimers.delete(config.name);\n\n\t\t\tif (this.servers.has(config.name)) {\n\t\t\t\treturn; // Already reconnected\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.doConnect(config, true);\n\t\t\t\t// If doConnect succeeded (server is now connected), we're done\n\t\t\t\tif (!this.servers.has(config.name)) {\n\t\t\t\t\t// Connection failed (doConnect caught the error), schedule retry\n\t\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Unexpected error, schedule retry\n\t\t\t\tthis.scheduleReconnect(config, attempt + 1);\n\t\t\t}\n\t\t}, delay);\n\n\t\tthis.reconnectTimers.set(config.name, timeoutId);\n\t}\n\n\t/**\n\t * Manually trigger reconnection for a server\n\t */\n\tasync reconnect(name: string): Promise<boolean> {\n\t\tconst config = this.config.servers.find((s) => s.name === name);\n\t\tif (!config) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!canConnectServer(config, buildProjectApprovalMap(this.config))) {\n\t\t\tawait this.disconnectServer(name);\n\t\t\treturn false;\n\t\t}\n\n\t\tawait this.disconnectServer(name);\n\t\tawait this.doConnect(config, true);\n\t\treturn this.servers.has(name);\n\t}\n\n\tprivate async fetchTools(client: Client): Promise<McpTool[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.tools) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listTools();\n\t\t\treturn result.tools;\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchResources(client: Client): Promise<string[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.resources) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listResources();\n\t\t\treturn result.resources.map((r) => r.uri);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate async fetchPrompts(client: Client): Promise<McpPromptDefinition[]> {\n\t\ttry {\n\t\t\tconst caps = client.getServerCapabilities();\n\t\t\tif (!caps?.prompts) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst result = await client.listPrompts();\n\t\t\treturn result.prompts.map(normalizePromptDefinition);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tprivate setupNotificationHandlers(client: Client, serverName: string): void {\n\t\t// Tool list changes - refresh tools when server notifies\n\t\tclient.setNotificationHandler(\n\t\t\tToolListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.tools = await this.fetchTools(client);\n\t\t\t\t\t\tserver.parallelSafetyByTool = resolveParallelSafetyByTool({\n\t\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\t\tserverCapabilities: client.getServerCapabilities(),\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.emit(\"tools_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\ttools: server.tools,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh tools\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Resource list changes\n\t\tclient.setNotificationHandler(\n\t\t\tResourceListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.resources = await this.fetchResources(client);\n\t\t\t\t\t\tthis.emit(\"resources_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tresources: server.resources,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh resources\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Prompt list changes\n\t\tclient.setNotificationHandler(\n\t\t\tPromptListChangedNotificationSchema,\n\t\t\tasync () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst server = this.servers.get(serverName);\n\t\t\t\t\tif (server) {\n\t\t\t\t\t\tserver.promptDetails = await this.fetchPrompts(client);\n\t\t\t\t\t\tserver.prompts = getPromptNames(server.promptDetails);\n\t\t\t\t\t\tthis.emit(\"prompts_changed\", {\n\t\t\t\t\t\t\tname: serverName,\n\t\t\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Failed to refresh prompts\",\n\t\t\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t\t\t\t{ serverName },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Progress notifications for long-running operations\n\t\tclient.setNotificationHandler(\n\t\t\tProgressNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"progress\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tprogressToken: notification.params.progressToken,\n\t\t\t\t\tprogress: notification.params.progress,\n\t\t\t\t\ttotal: notification.params.total,\n\t\t\t\t\tmessage: notification.params.message,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\n\t\t// Logging messages from MCP servers\n\t\tclient.setNotificationHandler(\n\t\t\tLoggingMessageNotificationSchema,\n\t\t\t(notification) => {\n\t\t\t\tthis.emit(\"log\", {\n\t\t\t\t\tname: serverName,\n\t\t\t\t\tlevel: notification.params.level,\n\t\t\t\t\tlogger: notification.params.logger,\n\t\t\t\t\tdata: notification.params.data,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async disconnectServer(name: string): Promise<void> {\n\t\t// Clear any pending reconnect timer for this server\n\t\tconst timer = this.reconnectTimers.get(name);\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\tthis.reconnectTimers.delete(name);\n\t\t}\n\n\t\tconst server = this.servers.get(name);\n\t\tif (!server) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait server.client.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing client\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\t// Also close the transport to clean up underlying resources\n\t\ttry {\n\t\t\tawait server.transport.close();\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Error closing transport\", {\n\t\t\t\tname,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\n\t\tthis.servers.delete(name);\n\t\tthis.emit(\"disconnected\", { name });\n\t}\n\n\tasync callTool(\n\t\tserverName: string,\n\t\ttoolName: string,\n\t\targs: Record<string, unknown>,\n\t): Promise<McpToolCallResult> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\t\tawait ensureMcpWorkspaceTrusted({\n\t\t\tconfig: this.config,\n\t\t\tserver: buildComparableServerConfig(\n\t\t\t\tserver.config,\n\t\t\t\tbuildAuthPresetMap(this.config.authPresets),\n\t\t\t),\n\t\t\ttoolName,\n\t\t\tclientToolService: getCurrentMcpClientToolService(),\n\t\t});\n\n\t\tvoid emitMcpToolUsageBeacon({\n\t\t\tserverName,\n\t\t\ttransport: server.config.transport,\n\t\t\tremoteHost: server.config.url\n\t\t\t\t? getMcpRemoteHost(server.config.url)\n\t\t\t\t: undefined,\n\t\t\ttoolName,\n\t\t\tclientVersion: getPackageVersion(),\n\t\t}).catch(() => undefined);\n\n\t\tconst result = await server.client.callTool({\n\t\t\tname: toolName,\n\t\t\targuments: args,\n\t\t});\n\n\t\t// Normalize the result to our interface\n\t\tconst content = Array.isArray(result.content)\n\t\t\t? result.content.map((c: Record<string, unknown>) => ({\n\t\t\t\t\ttype: String(c.type ?? \"unknown\"),\n\t\t\t\t\ttext: typeof c.text === \"string\" ? c.text : undefined,\n\t\t\t\t\tdata: typeof c.data === \"string\" ? c.data : undefined,\n\t\t\t\t\tmimeType: typeof c.mimeType === \"string\" ? c.mimeType : undefined,\n\t\t\t\t}))\n\t\t\t: [];\n\n\t\treturn {\n\t\t\tcontent,\n\t\t\tstructuredContent:\n\t\t\t\t\"structuredContent\" in result ? result.structuredContent : undefined,\n\t\t\tisError: typeof result.isError === \"boolean\" ? result.isError : undefined,\n\t\t};\n\t}\n\n\tgetAllTools(): Array<{\n\t\tserver: string;\n\t\ttool: McpTool;\n\t\tsupportsParallelToolCalls: boolean;\n\t\tparallelSafety: McpToolParallelSafety;\n\t}> {\n\t\tconst tools: Array<{\n\t\t\tserver: string;\n\t\t\ttool: McpTool;\n\t\t\tsupportsParallelToolCalls: boolean;\n\t\t\tparallelSafety: McpToolParallelSafety;\n\t\t}> = [];\n\t\tfor (const [serverName, server] of this.servers) {\n\t\t\tfor (const tool of server.tools) {\n\t\t\t\tconst parallelSafety =\n\t\t\t\t\tserver.parallelSafetyByTool.get(tool.name) ??\n\t\t\t\t\tresolveToolParallelSafety({\n\t\t\t\t\t\tconfig: server.config,\n\t\t\t\t\t\tserverCapabilities: server.client.getServerCapabilities(),\n\t\t\t\t\t\ttool,\n\t\t\t\t\t});\n\t\t\t\ttools.push({\n\t\t\t\t\tserver: serverName,\n\t\t\t\t\ttool,\n\t\t\t\t\tsupportsParallelToolCalls:\n\t\t\t\t\t\tparallelSafety.supportsParallelToolCalls === true,\n\t\t\t\t\tparallelSafety,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn tools;\n\t}\n\n\tgetStatus(): McpManagerStatus {\n\t\tconst servers: McpServerStatus[] = [];\n\t\tconst authPresets: McpAuthPresetStatus[] = (\n\t\t\tthis.config.authPresets ?? []\n\t\t).map((authPreset) => ({\n\t\t\tname: authPreset.name,\n\t\t\tscope: authPreset.scope,\n\t\t\theaderKeys: authPreset.headers\n\t\t\t\t? Object.keys(authPreset.headers).sort()\n\t\t\t\t: [],\n\t\t\theadersHelper: authPreset.headersHelper,\n\t\t}));\n\t\tconst authPresetMap = buildAuthPresetMap(this.config.authPresets ?? []);\n\t\tconst approvalMap = buildProjectApprovalMap(this.config);\n\n\t\t// Include configured but not connected servers\n\t\tfor (const config of this.config.servers) {\n\t\t\tconst connected = this.servers.get(config.name);\n\t\t\tconst projectApproval = approvalMap.get(config.name);\n\t\t\tconst resolvedAuth = resolveRemoteAuthConfig(config, authPresetMap);\n\t\t\tconst remoteUrl =\n\t\t\t\tconfig.transport === \"http\" || config.transport === \"sse\"\n\t\t\t\t\t? config.url\n\t\t\t\t\t: undefined;\n\t\t\tconst remoteHost = remoteUrl ? getMcpRemoteHost(remoteUrl) : undefined;\n\t\t\tconst remoteRegistryMatch = remoteUrl\n\t\t\t\t? getOfficialMcpRegistryMatch(remoteUrl)\n\t\t\t\t: undefined;\n\t\t\tservers.push({\n\t\t\t\tname: config.name,\n\t\t\t\tconnected: !!connected,\n\t\t\t\terror:\n\t\t\t\t\tprojectApproval === \"pending\" || projectApproval === \"denied\"\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: this.lastErrors.get(config.name),\n\t\t\t\tscope: config.scope,\n\t\t\t\ttransport: config.transport,\n\t\t\t\ttools: connected?.tools ?? [],\n\t\t\t\tresources: connected?.resources ?? [],\n\t\t\t\tprompts: connected?.prompts ?? [],\n\t\t\t\tpromptDetails:\n\t\t\t\t\tconnected && connected.promptDetails.length > 0\n\t\t\t\t\t\t? connected.promptDetails\n\t\t\t\t\t\t: undefined,\n\t\t\t\tcommand: config.transport === \"stdio\" ? config.command : undefined,\n\t\t\t\targs: config.transport === \"stdio\" ? config.args : undefined,\n\t\t\t\tcwd: config.transport === \"stdio\" ? config.cwd : undefined,\n\t\t\t\tenvKeys: config.env ? Object.keys(config.env).sort() : [],\n\t\t\t\tremoteUrl,\n\t\t\t\tremoteHost,\n\t\t\t\theaderKeys: resolvedAuth.headers\n\t\t\t\t\t? Object.keys(resolvedAuth.headers).sort()\n\t\t\t\t\t: [],\n\t\t\t\theadersHelper: resolvedAuth.headersHelper,\n\t\t\t\tauthPreset: config.authPreset,\n\t\t\t\ttimeout: config.timeout,\n\t\t\t\tsupportsParallelToolCalls: config.supportsParallelToolCalls === true,\n\t\t\t\tparallelSafety: summarizeServerParallelSafety(config, connected),\n\t\t\t\tremoteTrust: remoteRegistryMatch?.trust,\n\t\t\t\tofficialRegistry: remoteRegistryMatch?.info,\n\t\t\t\tprojectApproval,\n\t\t\t});\n\t\t}\n\n\t\treturn { servers, authPresets };\n\t}\n\n\tgetServer(name: string): ConnectedServer | undefined {\n\t\treturn this.servers.get(name);\n\t}\n\n\tisConnected(name: string): boolean {\n\t\treturn this.servers.has(name);\n\t}\n\n\t/**\n\t * Read a resource from an MCP server\n\t */\n\tasync readResource(\n\t\tserverName: string,\n\t\turi: string,\n\t): Promise<{\n\t\tcontents: Array<{\n\t\t\turi: string;\n\t\t\ttext?: string;\n\t\t\tblob?: string;\n\t\t\tmimeType?: string;\n\t\t}>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.readResource({ uri });\n\t\treturn {\n\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\turi: c.uri,\n\t\t\t\ttext: \"text\" in c ? c.text : undefined,\n\t\t\t\tblob: \"blob\" in c ? c.blob : undefined,\n\t\t\t\tmimeType: c.mimeType,\n\t\t\t})),\n\t\t};\n\t}\n\n\t/**\n\t * Get a prompt from an MCP server\n\t */\n\tasync getPrompt(\n\t\tserverName: string,\n\t\tpromptName: string,\n\t\targs?: Record<string, string>,\n\t): Promise<{\n\t\tdescription?: string;\n\t\tmessages: Array<{ role: string; content: string }>;\n\t}> {\n\t\tconst server = this.servers.get(serverName);\n\t\tif (!server) {\n\t\t\tthrow new Error(`MCP server '${serverName}' not connected`);\n\t\t}\n\n\t\tconst result = await server.client.getPrompt({\n\t\t\tname: promptName,\n\t\t\targuments: args,\n\t\t});\n\t\treturn {\n\t\t\tdescription: result.description,\n\t\t\tmessages: result.messages.map((m) => ({\n\t\t\t\trole: m.role,\n\t\t\t\tcontent:\n\t\t\t\t\ttypeof m.content === \"string\"\n\t\t\t\t\t\t? m.content\n\t\t\t\t\t\t: m.content.type === \"text\"\n\t\t\t\t\t\t\t? m.content.text\n\t\t\t\t\t\t\t: \"[non-text content]\",\n\t\t\t})),\n\t\t};\n\t}\n}\n\n/**\n * Singleton MCP client manager instance.\n *\n * Use this for all MCP operations in the application.\n * Configure with `mcpManager.configure(config)` at startup.\n */\nexport const mcpManager = new McpClientManager();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-plugin.d.ts","sourceRoot":"","sources":["../../src/mcp/platform-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform-plugin.d.ts","sourceRoot":"","sources":["../../src/mcp/platform-plugin.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoIlD,wBAAgB,2BAA2B,IAAI,eAAe,EAAE,CAqB/D"}
|