@evalops/maestro 0.10.23 → 0.10.25
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 +4 -4
- package/dist/agent/agent.d.ts +2 -2
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +1 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/keys.d.ts +2 -5
- package/dist/agent/keys.d.ts.map +1 -1
- package/dist/agent/keys.js +4 -5
- package/dist/agent/keys.js.map +1 -1
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +6 -7
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +4 -4
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/google.js +1 -1
- package/dist/agent/swarm/executor.d.ts +2 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +208 -35
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +2 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tool-capability-types.d.ts +36 -0
- package/dist/agent/tool-capability-types.d.ts.map +1 -0
- package/dist/agent/tool-capability-types.js +2 -0
- package/dist/agent/tool-capability-types.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts +13 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +28 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/transport-utils.d.ts.map +1 -1
- package/dist/agent/transport/transport-utils.js +2 -3
- package/dist/agent/transport/transport-utils.js.map +1 -1
- package/dist/agent/transport.js +1 -1
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/type-guards.d.ts +1 -1
- package/dist/agent/type-guards.js +1 -1
- package/dist/agent/type-guards.js.map +1 -1
- package/dist/agent/types.d.ts +5 -3
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +2 -2
- package/dist/agent/types.js.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.d.ts +31 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.js +259 -0
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -0
- package/dist/app-server/external-agent-import-api.d.ts +30 -0
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -0
- package/dist/app-server/external-agent-import-api.js +553 -0
- package/dist/app-server/external-agent-import-api.js.map +1 -0
- package/dist/app-server/host-control-api.d.ts +30 -0
- package/dist/app-server/host-control-api.d.ts.map +1 -0
- package/dist/app-server/host-control-api.js +343 -0
- package/dist/app-server/host-control-api.js.map +1 -0
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.d.ts.map +1 -1
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts +26 -0
- package/dist/app-server/network-governance-api.d.ts.map +1 -0
- package/dist/app-server/network-governance-api.js +476 -0
- package/dist/app-server/network-governance-api.js.map +1 -0
- package/dist/app-server/plugin-bundle-api.d.ts +17 -0
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -0
- package/dist/app-server/plugin-bundle-api.js +219 -0
- package/dist/app-server/plugin-bundle-api.js.map +1 -0
- package/dist/app-server/policy-control-api.d.ts +14 -0
- package/dist/app-server/policy-control-api.d.ts.map +1 -0
- package/dist/app-server/policy-control-api.js +200 -0
- package/dist/app-server/policy-control-api.js.map +1 -0
- package/dist/app-server/protocol-modes-api.d.ts +22 -0
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -0
- package/dist/app-server/protocol-modes-api.js +124 -0
- package/dist/app-server/protocol-modes-api.js.map +1 -0
- package/dist/app-server/sandbox-proof-api.d.ts +21 -0
- package/dist/app-server/sandbox-proof-api.d.ts.map +1 -0
- package/dist/app-server/sandbox-proof-api.js +127 -0
- package/dist/app-server/sandbox-proof-api.js.map +1 -0
- package/dist/app-server/session-api.d.ts +93 -3
- package/dist/app-server/session-api.d.ts.map +1 -1
- package/dist/app-server/session-api.js +706 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/bootstrap/auth-setup.d.ts.map +1 -1
- package/dist/bootstrap/auth-setup.js +17 -2
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +19 -4
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/cli/args.d.ts +2 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +2 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +226 -14
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/anthropic.d.ts +1 -1
- package/dist/cli/commands/anthropic.d.ts.map +1 -1
- package/dist/cli/commands/anthropic.js +3 -68
- package/dist/cli/commands/anthropic.js.map +1 -1
- package/dist/cli/commands/modes.js +1 -1
- package/dist/cli/commands/modes.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/rpc-mode.d.ts +1 -1
- package/dist/cli/rpc-mode.js +1 -1
- package/dist/cli/rpc-mode.js.map +1 -1
- package/dist/cli/session.js +1 -1
- package/dist/cli/session.js.map +1 -1
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +7 -12
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +4 -12
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/custom-editor.d.ts +1 -1
- package/dist/cli-tui/custom-editor.js +2 -2
- package/dist/cli-tui/custom-editor.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +19 -23
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +0 -1
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -2
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +3 -4
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js +1 -1
- package/dist/cli-tui/tui-renderer/mcp-events-setup.js.map +1 -1
- package/dist/cli-tui/tui-renderer.js +2 -2
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
- package/dist/cli-tui/utils/footer-utils.js +1 -1
- package/dist/cli-tui/utils/footer-utils.js.map +1 -1
- package/dist/cli.js +15156 -14232
- package/dist/commands/prompts.d.ts +1 -1
- package/dist/commands/prompts.js +1 -1
- package/dist/commands/prompts.js.map +1 -1
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +2 -2
- package/dist/config/constants.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.js +3 -3
- package/dist/config/toml-config.js.map +1 -1
- package/dist/db/client.d.ts +2 -2
- package/dist/db/client.js +2 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +1 -1
- package/dist/db/migrate.js +1 -1
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/schema.d.ts +2 -2
- package/dist/db/schema.js +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.js +2 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/main.d.ts +4 -5
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +17 -14
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts +15 -2
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +50 -26
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/fathom-cua.d.ts.map +1 -1
- package/dist/mcp/fathom-cua.js +10 -0
- package/dist/mcp/fathom-cua.js.map +1 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +32 -1
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +12 -3
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/tool-capabilities.d.ts +5 -0
- package/dist/mcp/tool-capabilities.d.ts.map +1 -0
- package/dist/mcp/tool-capabilities.js +271 -0
- package/dist/mcp/tool-capabilities.js.map +1 -0
- package/dist/mcp/types.d.ts +6 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/models/config-loader.d.ts +1 -1
- package/dist/models/factory-integration.d.ts +1 -1
- package/dist/models/factory-integration.js +1 -1
- package/dist/models/factory-integration.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +3 -3
- package/dist/node_modules/@evalops/contracts/dist/index.js +2 -2
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +1182 -14
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +450 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts +2 -2
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +3 -5
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/github-copilot.d.ts +1 -1
- package/dist/oauth/github-copilot.js +1 -1
- package/dist/oauth/github-copilot.js.map +1 -1
- package/dist/oauth/index.d.ts +10 -8
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +54 -31
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/openai.d.ts +1 -1
- package/dist/oauth/openai.js +2 -2
- package/dist/oauth/openai.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +41 -0
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -0
- package/dist/platform/a2a-completion-audit.js +177 -0
- package/dist/platform/a2a-completion-audit.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +17 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-telemetry-inspect.d.ts +58 -0
- package/dist/platform/a2a-telemetry-inspect.d.ts.map +1 -0
- package/dist/platform/a2a-telemetry-inspect.js +224 -0
- package/dist/platform/a2a-telemetry-inspect.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +8 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -1
- package/dist/platform/agent-registry-client.js +9 -1
- package/dist/platform/agent-registry-client.js.map +1 -1
- package/dist/providers/api-keys.d.ts +2 -2
- package/dist/providers/api-keys.js +2 -2
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts +3 -6
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -40
- package/dist/providers/auth.js.map +1 -1
- package/dist/rpc/index.d.ts +2 -2
- package/dist/rpc/index.js +2 -2
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts +1 -1
- package/dist/rpc/rpc-types.js +1 -1
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/nested-agent-guard.js +1 -1
- package/dist/safety/nested-agent-guard.js.map +1 -1
- package/dist/safety/policy.d.ts +2 -2
- package/dist/safety/policy.js +2 -2
- package/dist/safety/policy.js.map +1 -1
- package/dist/safety/validators/network-policy-validator.d.ts +8 -0
- package/dist/safety/validators/network-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/network-policy-validator.js +29 -4
- package/dist/safety/validators/network-policy-validator.js.map +1 -1
- package/dist/sandbox/local-sandbox.d.ts +1 -1
- package/dist/sandbox/local-sandbox.js +1 -1
- package/dist/sandbox/local-sandbox.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/attachments.d.ts.map +1 -1
- package/dist/server/handlers/attachments.js +1 -0
- package/dist/server/handlers/attachments.js.map +1 -1
- package/dist/server/handlers/models.d.ts.map +1 -1
- package/dist/server/handlers/models.js +3 -1
- package/dist/server/handlers/models.js.map +1 -1
- package/dist/server/handlers/session-attachments.d.ts.map +1 -1
- package/dist/server/handlers/session-attachments.js +2 -0
- package/dist/server/handlers/session-attachments.js.map +1 -1
- package/dist/server/handlers/sessions.js +1 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/handlers/status.d.ts +2 -0
- package/dist/server/handlers/status.d.ts.map +1 -1
- package/dist/server/handlers/status.js +3 -2
- package/dist/server/handlers/status.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +32 -3
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-session-manager.d.ts +2 -0
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +9 -0
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/model-selection.d.ts.map +1 -1
- package/dist/server/model-selection.js +9 -1
- package/dist/server/model-selection.js.map +1 -1
- package/dist/server/rate-limiter.d.ts +1 -1
- package/dist/server/rate-limiter.js +1 -1
- package/dist/server/rate-limiter.js.map +1 -1
- package/dist/server/router.d.ts +2 -2
- package/dist/server/router.js.map +1 -1
- package/dist/server/session-serialization.d.ts +9 -9
- package/dist/server/session-serialization.js +15 -15
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/session/manager.d.ts +5 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +56 -8
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-catalog.d.ts +2 -0
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +6 -0
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +2 -0
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +15 -0
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/types.d.ts +7 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +1 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +1 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/shared-memory/contract.d.ts +4 -4
- package/dist/shared-memory/contract.js +2 -2
- package/dist/shared-memory/contract.js.map +1 -1
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +57 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +59 -1
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +17 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +24 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +2 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -1
- package/dist/telemetry/mcp-beacon.js +15 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +62 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +84 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry.d.ts +44 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +84 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.js +2 -2
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/theme/theme-schema.json +2 -2
- package/dist/theme/theme.d.ts +1 -1
- package/dist/theme/theme.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/extract-document.js +2 -1
- package/dist/tools/extract-document.js.map +1 -1
- package/dist/tools/index.d.ts +55 -55
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/tool-dsl.d.ts +1 -1
- package/dist/tools/tool-dsl.js +1 -1
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/utils/document-extractor.d.ts +1 -0
- package/dist/utils/document-extractor.d.ts.map +1 -1
- package/dist/utils/document-extractor.js +320 -40
- package/dist/utils/document-extractor.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts +1 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +12 -8
- package/dist/web-server.js.map +1 -1
- package/package.json +4 -2
- package/dist/oauth/anthropic.d.ts +0 -17
- package/dist/oauth/anthropic.d.ts.map +0 -1
- package/dist/oauth/anthropic.js +0 -81
- package/dist/oauth/anthropic.js.map +0 -1
- package/dist/providers/anthropic-auth.d.ts +0 -75
- package/dist/providers/anthropic-auth.d.ts.map +0 -1
- package/dist/providers/anthropic-auth.js +0 -221
- package/dist/providers/anthropic-auth.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-bridge.js","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Tool as McpTool } from \"@modelcontextprotocol/sdk/types.js\";\nimport { type TSchema, Type } from \"@sinclair/typebox\";\nimport type {\n\tAgentTool,\n\tToolAnnotations,\n\tToolSourceMetadata,\n} from \"../agent/types.js\";\nimport {\n\ttrackToolApprovalRequired,\n\ttrackToolBlocked,\n} from \"../telemetry/security-events.js\";\nimport { createTool } from \"../tools/tool-dsl.js\";\nimport { promptSafeText } from \"../utils/prompt-safe-text.js\";\nimport { mcpManager } from \"./manager.js\";\nimport type { McpToolCallResult } from \"./manager.js\";\nimport { buildMcpToolName } from \"./names.js\";\nimport type { McpToolParallelSafety } from \"./types.js\";\n\ninterface McpToolDetails {\n\tserver: string;\n\ttool: string;\n\tcontent: unknown[];\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n\tgovernedOutcome?: McpGovernedOutcome;\n\ttoolExecutionState?: McpGovernedToolExecutionState;\n}\n\nexport const MCP_GOVERNED_TOOL_EXECUTION_SCHEMA =\n\t\"evalops.maestro.mcp-governed-tool-execution.v1\";\n\nexport type McpGovernedClassification =\n\t| \"approval_required\"\n\t| \"approval_pending\"\n\t| \"authentication_required\"\n\t| \"denied\"\n\t| \"rate_limited\";\n\nexport type McpGovernedToolExecutionStateKind =\n\t| \"waiting_approval\"\n\t| \"blocked_authentication\"\n\t| \"blocked_retry_later\"\n\t| \"denied\";\n\nexport interface McpGovernedToolExecutionState {\n\tschemaVersion: typeof MCP_GOVERNED_TOOL_EXECUTION_SCHEMA;\n\tauthority: \"mcp_result_adapter\";\n\tstate: McpGovernedToolExecutionStateKind;\n\tterminal: boolean;\n\tclassification: McpGovernedClassification;\n\tapprovalRequestId?: string;\n\tretryAfterMs?: number;\n\tmessage?: string;\n\treasons?: string[];\n\tcode?: string;\n\triskLevel?: string;\n}\n\nexport interface McpGovernedOutcome {\n\tclassification:\n\t\t| \"approval_required\"\n\t\t| \"approval_pending\"\n\t\t| \"authentication_required\"\n\t\t| \"denied\"\n\t\t| \"rate_limited\";\n\tdecision?: string;\n\triskLevel?: string;\n\treasons?: string[];\n\tapprovalRequestId?: string;\n\tmatchedRules?: string[];\n\tmessage?: string;\n\tcode?: string;\n\tstate?: string;\n\tretryAfterMs?: number;\n\tretryAfterSeconds?: number;\n}\n\nexport function normalizeMcpGovernedToolExecution(\n\toutcome: McpGovernedOutcome | undefined,\n): McpGovernedToolExecutionState | undefined {\n\tif (!outcome) {\n\t\treturn undefined;\n\t}\n\tlet state: McpGovernedToolExecutionStateKind;\n\tlet terminal = true;\n\tswitch (outcome.classification) {\n\t\tcase \"approval_required\":\n\t\tcase \"approval_pending\":\n\t\t\tstate = \"waiting_approval\";\n\t\t\tterminal = false;\n\t\t\tbreak;\n\t\tcase \"authentication_required\":\n\t\t\tstate = \"blocked_authentication\";\n\t\t\tbreak;\n\t\tcase \"rate_limited\":\n\t\t\tstate = \"blocked_retry_later\";\n\t\t\tbreak;\n\t\tcase \"denied\":\n\t\t\tstate = \"denied\";\n\t\t\tbreak;\n\t}\n\tconst retryAfterMs =\n\t\toutcome.retryAfterMs ??\n\t\t(outcome.retryAfterSeconds !== undefined\n\t\t\t? outcome.retryAfterSeconds * 1000\n\t\t\t: undefined);\n\treturn {\n\t\tschemaVersion: MCP_GOVERNED_TOOL_EXECUTION_SCHEMA,\n\t\tauthority: \"mcp_result_adapter\",\n\t\tstate,\n\t\tterminal,\n\t\tclassification: outcome.classification,\n\t\t...(outcome.approvalRequestId\n\t\t\t? { approvalRequestId: outcome.approvalRequestId }\n\t\t\t: {}),\n\t\t...(retryAfterMs !== undefined ? { retryAfterMs } : {}),\n\t\t...(outcome.message ? { message: outcome.message } : {}),\n\t\t...(outcome.reasons ? { reasons: outcome.reasons } : {}),\n\t\t...(outcome.code ? { code: outcome.code } : {}),\n\t\t...(outcome.riskLevel ? { riskLevel: outcome.riskLevel } : {}),\n\t};\n}\n\nfunction normalizeObject(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: null;\n}\n\nfunction firstString(\n\tvalue: Record<string, unknown>,\n\t...keys: string[]\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst candidate = value[key];\n\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\treturn candidate.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\t...keys: string[]\n): number | undefined {\n\tfor (const key of keys) {\n\t\tconst candidate = value[key];\n\t\tif (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\tconst parsed = Number(candidate);\n\t\t\tif (Number.isFinite(parsed)) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction toStringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst entries = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean);\n\treturn entries.length > 0 ? entries : undefined;\n}\n\nfunction extractMcpTextContent(\n\tcontent: McpToolCallResult[\"content\"],\n): string | undefined {\n\tconst text = content\n\t\t.filter((item) => item.type === \"text\" && typeof item.text === \"string\")\n\t\t.map((item) => item.text as string)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\treturn text.length > 0 ? text : undefined;\n}\n\nfunction parseJsonObjectFromText(\n\ttext: string | undefined,\n): Record<string, unknown> | null {\n\tif (!text) {\n\t\treturn null;\n\t}\n\tconst trimmed = text.trim();\n\tif (!(trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\"))) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn normalizeObject(JSON.parse(trimmed));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction resolveGovernedPayload(\n\tresult: McpToolCallResult,\n): Record<string, unknown> | null {\n\treturn (\n\t\tnormalizeObject(result.structuredContent) ??\n\t\tparseJsonObjectFromText(extractMcpTextContent(result.content))\n\t);\n}\n\nfunction classifyGovernedOutcome(\n\tpayload: Record<string, unknown> | null,\n): McpGovernedOutcome | undefined {\n\tif (!payload) {\n\t\treturn undefined;\n\t}\n\n\tconst decision = firstString(payload, \"decision\")?.toLowerCase();\n\tconst code = firstString(payload, \"code\", \"error_code\")?.toLowerCase();\n\tconst state = firstString(payload, \"state\")?.toLowerCase();\n\tconst status = firstNumber(payload, \"status\", \"status_code\");\n\tconst approvalRequestId = firstString(\n\t\tpayload,\n\t\t\"approval_id\",\n\t\t\"approvalId\",\n\t\t\"approval_request_id\",\n\t\t\"approvalRequestId\",\n\t);\n\tconst reasons = toStringArray(payload.reasons);\n\tconst matchedRules = toStringArray(\n\t\tpayload.matched_rules ?? payload.matchedRules,\n\t);\n\tconst outcome: Omit<McpGovernedOutcome, \"classification\"> = {\n\t\tdecision,\n\t\triskLevel: firstString(payload, \"risk_level\", \"riskLevel\"),\n\t\treasons,\n\t\tapprovalRequestId,\n\t\tmatchedRules,\n\t\tmessage: firstString(payload, \"message\", \"detail\", \"error\"),\n\t\tcode,\n\t\tstate,\n\t\tretryAfterMs: firstNumber(payload, \"retry_after_ms\", \"retryAfterMs\"),\n\t\tretryAfterSeconds: firstNumber(\n\t\t\tpayload,\n\t\t\t\"retry_after_seconds\",\n\t\t\t\"retryAfterSeconds\",\n\t\t),\n\t};\n\n\tif (decision === \"require_approval\" || code?.includes(\"approval_required\")) {\n\t\treturn { classification: \"approval_required\", ...outcome };\n\t}\n\tif (state === \"pending\" && approvalRequestId) {\n\t\treturn { classification: \"approval_pending\", ...outcome };\n\t}\n\tif (\n\t\tcode?.includes(\"rate_limit\") ||\n\t\tcode?.includes(\"too_many_requests\") ||\n\t\tstatus === 429\n\t) {\n\t\treturn { classification: \"rate_limited\", ...outcome };\n\t}\n\tif (\n\t\tcode?.includes(\"authentication_required\") ||\n\t\tcode?.includes(\"unauthorized\") ||\n\t\tstatus === 401\n\t) {\n\t\treturn { classification: \"authentication_required\", ...outcome };\n\t}\n\tif (\n\t\tdecision === \"deny\" ||\n\t\tcode?.includes(\"denied\") ||\n\t\tcode?.includes(\"forbidden\") ||\n\t\tstatus === 403\n\t) {\n\t\treturn { classification: \"denied\", ...outcome };\n\t}\n\treturn undefined;\n}\n\nfunction formatGovernedOutcomeSummary(\n\toutcome: McpGovernedOutcome | undefined,\n\ttoolExecutionState: McpGovernedToolExecutionState | undefined,\n): string | undefined {\n\tif (!outcome) {\n\t\treturn undefined;\n\t}\n\n\tconst lines: string[] = [];\n\tswitch (outcome.classification) {\n\t\tcase \"approval_required\":\n\t\t\tlines.push(\"Approval required.\");\n\t\t\tbreak;\n\t\tcase \"approval_pending\":\n\t\t\tlines.push(\"Approval pending.\");\n\t\t\tbreak;\n\t\tcase \"authentication_required\":\n\t\t\tlines.push(\"Authentication required.\");\n\t\t\tbreak;\n\t\tcase \"rate_limited\":\n\t\t\tlines.push(\"Rate limit reached.\");\n\t\t\tbreak;\n\t\tcase \"denied\":\n\t\t\tlines.push(\"Action denied.\");\n\t\t\tbreak;\n\t}\n\n\tif (outcome.message) {\n\t\tlines.push(outcome.message);\n\t}\n\tif (outcome.reasons?.length) {\n\t\tlines.push(`Reasons: ${outcome.reasons.join(\"; \")}`);\n\t}\n\tif (outcome.approvalRequestId) {\n\t\tlines.push(`Approval request: ${outcome.approvalRequestId}`);\n\t}\n\tif (toolExecutionState) {\n\t\tlines.push(\n\t\t\t`ToolExecution state: ${toolExecutionState.state} (${toolExecutionState.authority}).`,\n\t\t);\n\t}\n\tif (outcome.state && outcome.classification !== \"approval_pending\") {\n\t\tlines.push(`State: ${outcome.state}`);\n\t}\n\tif (outcome.riskLevel) {\n\t\tlines.push(`Risk level: ${outcome.riskLevel}`);\n\t}\n\tif (typeof outcome.retryAfterSeconds === \"number\") {\n\t\tlines.push(`Retry after: ${outcome.retryAfterSeconds} seconds`);\n\t} else if (typeof outcome.retryAfterMs === \"number\") {\n\t\tlines.push(`Retry after: ${outcome.retryAfterMs} ms`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction emitGovernedOutcomeTelemetry(\n\ttoolName: string,\n\toutcome: McpGovernedOutcome | undefined,\n): void {\n\tif (!outcome) {\n\t\treturn;\n\t}\n\n\tconst reason =\n\t\toutcome.message ??\n\t\toutcome.reasons?.join(\"; \") ??\n\t\toutcome.code ??\n\t\t\"policy event\";\n\n\tif (\n\t\toutcome.classification === \"approval_required\" ||\n\t\toutcome.classification === \"approval_pending\"\n\t) {\n\t\ttrackToolApprovalRequired({\n\t\t\ttoolName,\n\t\t\treason,\n\t\t\tsource: \"policy\",\n\t\t});\n\t\treturn;\n\t}\n\n\ttrackToolBlocked({\n\t\ttoolName,\n\t\treason,\n\t\tsource: \"policy\",\n\t\tseverity:\n\t\t\toutcome.classification === \"authentication_required\" ? \"medium\" : \"high\",\n\t});\n}\n\nfunction convertJsonSchemaToTypebox(schema: unknown): TSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn Type.Unknown();\n\t}\n\n\tconst s = schema as Record<string, unknown>;\n\tconst type = s.type as string | undefined;\n\tconst description =\n\t\ttypeof s.description === \"string\"\n\t\t\t? (promptSafeText(s.description) ?? undefined)\n\t\t\t: undefined;\n\n\tswitch (type) {\n\t\tcase \"string\":\n\t\t\treturn Type.String({ description });\n\t\tcase \"number\":\n\t\tcase \"integer\":\n\t\t\treturn Type.Number({ description });\n\t\tcase \"boolean\":\n\t\t\treturn Type.Boolean({ description });\n\t\tcase \"array\":\n\t\t\treturn Type.Array(convertJsonSchemaToTypebox(s.items), {\n\t\t\t\tdescription,\n\t\t\t});\n\t\tcase \"object\": {\n\t\t\tconst properties = s.properties as Record<string, unknown> | undefined;\n\t\t\tif (!properties) {\n\t\t\t\treturn Type.Record(Type.String(), Type.Unknown());\n\t\t\t}\n\t\t\tconst required = (s.required as string[]) ?? [];\n\t\t\tconst props: Record<string, TSchema> = {};\n\t\t\tfor (const [key, value] of Object.entries(properties)) {\n\t\t\t\tconst converted = convertJsonSchemaToTypebox(value);\n\t\t\t\tprops[key] = required.includes(key)\n\t\t\t\t\t? converted\n\t\t\t\t\t: Type.Optional(converted);\n\t\t\t}\n\t\t\treturn Type.Object(props, {\n\t\t\t\tdescription,\n\t\t\t});\n\t\t}\n\t\tdefault:\n\t\t\treturn Type.Unknown({ description });\n\t}\n}\n\nexport function createMcpToolWrapper(\n\tserverName: string,\n\tmcpTool: McpTool,\n\toptions?: {\n\t\tsupportsParallelToolCalls?: boolean;\n\t\tparallelSafety?: McpToolParallelSafety;\n\t},\n) {\n\tconst toolName = buildMcpToolName(serverName, mcpTool.name);\n\tconst schema = mcpTool.inputSchema\n\t\t? convertJsonSchemaToTypebox(mcpTool.inputSchema)\n\t\t: Type.Object({});\n\n\t// Extract MCP tool annotations for approval decisions\n\tconst mcpAnnotations = mcpTool.annotations as\n\t\t| {\n\t\t\t\treadOnlyHint?: boolean;\n\t\t\t\tdestructiveHint?: boolean;\n\t\t\t\tidempotentHint?: boolean;\n\t\t\t\topenWorldHint?: boolean;\n\t\t }\n\t\t| undefined;\n\tconst supportsParallelToolCalls =\n\t\toptions?.parallelSafety?.supportsParallelToolCalls === true ||\n\t\toptions?.supportsParallelToolCalls === true;\n\tconst parallelSafetyProvenance =\n\t\toptions?.parallelSafety?.provenance ??\n\t\t(options?.supportsParallelToolCalls === true ? \"static_config\" : \"none\");\n\tconst parallelMaxConcurrency = options?.parallelSafety?.maxConcurrency;\n\tconst advertisedParallelReadOnly =\n\t\tsupportsParallelToolCalls && options?.parallelSafety?.readOnlyHint === true;\n\tconst annotations: ToolAnnotations | undefined =\n\t\tmcpAnnotations || advertisedParallelReadOnly\n\t\t\t? {\n\t\t\t\t\treadOnlyHint:\n\t\t\t\t\t\tmcpAnnotations?.readOnlyHint ??\n\t\t\t\t\t\t(advertisedParallelReadOnly ? true : undefined),\n\t\t\t\t\tdestructiveHint: mcpAnnotations?.destructiveHint,\n\t\t\t\t\tidempotentHint: mcpAnnotations?.idempotentHint,\n\t\t\t\t\topenWorldHint: mcpAnnotations?.openWorldHint,\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst source: ToolSourceMetadata = {\n\t\ttype: \"mcp\",\n\t\tserver: serverName,\n\t\ttool: mcpTool.name,\n\t\tsupportsParallelToolCalls,\n\t\tparallelSafetyProvenance,\n\t\t...(parallelMaxConcurrency ? { parallelMaxConcurrency } : {}),\n\t};\n\n\treturn createTool<typeof schema, McpToolDetails>({\n\t\tname: toolName,\n\t\tlabel: `${serverName}/${mcpTool.name}`,\n\t\tdescription:\n\t\t\tpromptSafeText(mcpTool.description) ??\n\t\t\t`MCP tool from ${serverName}: ${mcpTool.name}`,\n\t\tschema,\n\t\tannotations,\n\t\tsource,\n\t\tasync run(params, { respond }) {\n\t\t\tconst result = await mcpManager.callTool(\n\t\t\t\tserverName,\n\t\t\t\tmcpTool.name,\n\t\t\t\tparams as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst governedOutcome = classifyGovernedOutcome(\n\t\t\t\tresolveGovernedPayload(result),\n\t\t\t);\n\t\t\tconst toolExecutionState =\n\t\t\t\tnormalizeMcpGovernedToolExecution(governedOutcome);\n\t\t\temitGovernedOutcomeTelemetry(mcpTool.name, governedOutcome);\n\n\t\t\tconst output =\n\t\t\t\tformatGovernedOutcomeSummary(governedOutcome, toolExecutionState) ??\n\t\t\t\textractMcpTextContent(result.content) ??\n\t\t\t\tJSON.stringify(result.structuredContent ?? result.content, null, 2);\n\n\t\t\tconst response = result.isError\n\t\t\t\t? respond.error(output)\n\t\t\t\t: respond.text(output);\n\t\t\treturn response.detail({\n\t\t\t\tserver: serverName,\n\t\t\t\ttool: mcpTool.name,\n\t\t\t\tcontent: result.content,\n\t\t\t\tstructuredContent: result.structuredContent,\n\t\t\t\tisError: result.isError,\n\t\t\t\tgovernedOutcome,\n\t\t\t\ttoolExecutionState,\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function getAllMcpTools(): AgentTool[] {\n\tconst mcpTools = mcpManager.getAllTools();\n\treturn [\n\t\t...mcpTools.map(\n\t\t\t({ server, tool, supportsParallelToolCalls, parallelSafety }) =>\n\t\t\t\tcreateMcpToolWrapper(server, tool, {\n\t\t\t\t\tsupportsParallelToolCalls,\n\t\t\t\t\tparallelSafety,\n\t\t\t\t}),\n\t\t),\n\t\t...getMcpHelperTools(),\n\t];\n}\n\nexport function getMcpToolMap(): Map<string, AgentTool> {\n\tconst map = new Map<string, AgentTool>();\n\tconst mcpTools = mcpManager.getAllTools();\n\n\tfor (const tool of getMcpHelperTools()) {\n\t\tmap.set(tool.name, tool);\n\t}\n\n\tfor (const {\n\t\tserver,\n\t\ttool,\n\t\tsupportsParallelToolCalls,\n\t\tparallelSafety,\n\t} of mcpTools) {\n\t\tconst wrapper = createMcpToolWrapper(server, tool, {\n\t\t\tsupportsParallelToolCalls,\n\t\t\tparallelSafety,\n\t\t});\n\t\tmap.set(wrapper.name, wrapper);\n\t}\n\n\treturn map;\n}\n\n// ─────────────────────────────────────────────────────────────\n// MCP Resource Tools (inspired by Claude Code's ListMcpResources/ReadMcpResource)\n// ─────────────────────────────────────────────────────────────\n\ninterface McpResourceListDetails {\n\tservers: Array<{\n\t\tname: string;\n\t\tresources: string[];\n\t}>;\n}\n\nconst listMcpResourcesSchema = Type.Object({\n\tserver: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Optional server name to filter resources. If omitted, lists resources from all servers.\",\n\t\t}),\n\t),\n});\n\n/**\n * Tool to list available MCP resources across all connected servers.\n */\nexport const listMcpResourcesTool = createTool<\n\ttypeof listMcpResourcesSchema,\n\tMcpResourceListDetails\n>({\n\tname: \"mcp_list_resources\",\n\tdescription:\n\t\t\"List available resources from MCP servers. Resources are data sources that can be read (files, configs, etc.).\",\n\tschema: listMcpResourcesSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst status = mcpManager.getStatus();\n\t\tconst result: Array<{ name: string; resources: string[] }> = [];\n\n\t\tfor (const server of status.servers) {\n\t\t\tif (params.server && server.name !== params.server) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (server.connected && server.resources.length > 0) {\n\t\t\t\tresult.push({\n\t\t\t\t\tname: server.name,\n\t\t\t\t\tresources: server.resources,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (result.length === 0) {\n\t\t\treturn respond\n\t\t\t\t.text(\n\t\t\t\t\t\"No MCP resources available. Either no servers are connected or they don't expose resources.\",\n\t\t\t\t)\n\t\t\t\t.detail({ servers: [] });\n\t\t}\n\n\t\tconst lines: string[] = [\"# Available MCP Resources\\n\"];\n\t\tfor (const server of result) {\n\t\t\tlines.push(`## ${server.name}`);\n\t\t\tfor (const uri of server.resources) {\n\t\t\t\tlines.push(`- ${uri}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn respond.text(lines.join(\"\\n\")).detail({ servers: result });\n\t},\n});\n\ninterface McpResourceReadDetails {\n\tserver: string;\n\turi: string;\n\tcontents: Array<{\n\t\turi: string;\n\t\ttext?: string;\n\t\tmimeType?: string;\n\t}>;\n}\n\nconst readMcpResourceSchema = Type.Object({\n\tserver: Type.String({\n\t\tdescription: \"Name of the MCP server that hosts the resource\",\n\t}),\n\turi: Type.String({\n\t\tdescription: \"URI of the resource to read\",\n\t}),\n});\n\n/**\n * Tool to read a specific MCP resource.\n */\nexport const readMcpResourceTool = createTool<\n\ttypeof readMcpResourceSchema,\n\tMcpResourceReadDetails\n>({\n\tname: \"mcp_read_resource\",\n\tdescription:\n\t\t\"Read the contents of an MCP resource by URI. Use mcp_list_resources first to discover available resources.\",\n\tschema: readMcpResourceSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst { server, uri } = params;\n\n\t\ttry {\n\t\t\tconst result = await mcpManager.readResource(server, uri);\n\n\t\t\tif (result.contents.length === 0) {\n\t\t\t\treturn respond.text(`Resource '${uri}' is empty.`).detail({\n\t\t\t\t\tserver,\n\t\t\t\t\turi,\n\t\t\t\t\tcontents: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Format output based on content type\n\t\t\tconst textContents = result.contents\n\t\t\t\t.filter((c) => c.text !== undefined)\n\t\t\t\t.map((c) => c.text)\n\t\t\t\t.join(\"\\n---\\n\");\n\n\t\t\tconst output = textContents || JSON.stringify(result.contents, null, 2);\n\n\t\t\treturn respond.text(output).detail({\n\t\t\t\tserver,\n\t\t\t\turi,\n\t\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\t\turi: c.uri,\n\t\t\t\t\ttext: c.text,\n\t\t\t\t\tmimeType: c.mimeType,\n\t\t\t\t})),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn respond.error(`Failed to read resource: ${message}`);\n\t\t}\n\t},\n});\n\ninterface McpPromptListDetails {\n\tservers: Array<{\n\t\tname: string;\n\t\tprompts: string[];\n\t}>;\n}\n\nconst listMcpPromptsSchema = Type.Object({\n\tserver: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Optional server name to filter prompts. If omitted, lists prompts from all servers.\",\n\t\t}),\n\t),\n});\n\n/**\n * Tool to list available MCP prompts across all connected servers.\n */\nexport const listMcpPromptsTool = createTool<\n\ttypeof listMcpPromptsSchema,\n\tMcpPromptListDetails\n>({\n\tname: \"mcp_list_prompts\",\n\tdescription:\n\t\t\"List available prompts from MCP servers. Prompts are reusable prompt templates exposed by servers.\",\n\tschema: listMcpPromptsSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst status = mcpManager.getStatus();\n\t\tconst result: Array<{ name: string; prompts: string[] }> = [];\n\n\t\tfor (const server of status.servers) {\n\t\t\tif (params.server && server.name !== params.server) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (server.connected && server.prompts.length > 0) {\n\t\t\t\tresult.push({\n\t\t\t\t\tname: server.name,\n\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (result.length === 0) {\n\t\t\treturn respond\n\t\t\t\t.text(\n\t\t\t\t\t\"No MCP prompts available. Either no servers are connected or they don't expose prompts.\",\n\t\t\t\t)\n\t\t\t\t.detail({ servers: [] });\n\t\t}\n\n\t\tconst lines: string[] = [\"# Available MCP Prompts\\n\"];\n\t\tfor (const server of result) {\n\t\t\tlines.push(`## ${server.name}`);\n\t\t\tfor (const prompt of server.prompts) {\n\t\t\t\tlines.push(`- ${prompt}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn respond.text(lines.join(\"\\n\")).detail({ servers: result });\n\t},\n});\n\ninterface McpPromptDetails {\n\tserver: string;\n\tname: string;\n\tdescription?: string;\n\tmessages: Array<{ role: string; content: string }>;\n}\n\nconst getMcpPromptSchema = Type.Object({\n\tserver: Type.String({\n\t\tdescription: \"Name of the MCP server that hosts the prompt\",\n\t}),\n\tname: Type.String({\n\t\tdescription: \"Name of the prompt to fetch\",\n\t}),\n\targs: Type.Optional(\n\t\tType.Record(\n\t\t\tType.String(),\n\t\t\tType.String({\n\t\t\t\tdescription: \"Optional string arguments passed to the prompt\",\n\t\t\t}),\n\t\t),\n\t),\n});\n\n/**\n * Tool to fetch a specific MCP prompt.\n */\nexport const getMcpPromptTool = createTool<\n\ttypeof getMcpPromptSchema,\n\tMcpPromptDetails\n>({\n\tname: \"mcp_get_prompt\",\n\tdescription:\n\t\t\"Fetch an MCP prompt by name. Use mcp_list_prompts first to discover available prompts.\",\n\tschema: getMcpPromptSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst { server, name, args } = params;\n\n\t\ttry {\n\t\t\tconst result = await mcpManager.getPrompt(server, name, args);\n\t\t\tconst lines: string[] = [`Prompt: ${name}`];\n\t\t\tconst description = promptSafeText(result.description);\n\n\t\t\tif (description) {\n\t\t\t\tlines.push(`Description: ${description}`);\n\t\t\t}\n\n\t\t\tif (result.messages.length === 0) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tlines.push(\"No prompt messages returned.\");\n\t\t\t} else {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tfor (const message of result.messages) {\n\t\t\t\t\tlines.push(`[${message.role}]`);\n\t\t\t\t\tlines.push(message.content);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn respond.text(lines.join(\"\\n\").trimEnd()).detail({\n\t\t\t\tserver,\n\t\t\t\tname,\n\t\t\t\tdescription: description ?? undefined,\n\t\t\t\tmessages: result.messages,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn respond.error(`Failed to get prompt: ${message}`);\n\t\t}\n\t},\n});\n\n/**\n * Get all MCP resource tools.\n */\nexport function getMcpResourceTools() {\n\treturn [listMcpResourcesTool, readMcpResourceTool];\n}\n\nfunction getMcpHelperTools() {\n\treturn [\n\t\tlistMcpResourcesTool,\n\t\treadMcpResourceTool,\n\t\tlistMcpPromptsTool,\n\t\tgetMcpPromptTool,\n\t];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-bridge.js","sourceRoot":"","sources":["../../src/mcp/tool-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Tool as McpTool } from \"@modelcontextprotocol/sdk/types.js\";\nimport { type TSchema, Type } from \"@sinclair/typebox\";\nimport type {\n\tAgentTool,\n\tToolAnnotations,\n\tToolSourceMetadata,\n} from \"../agent/types.js\";\nimport {\n\ttrackToolApprovalRequired,\n\ttrackToolBlocked,\n} from \"../telemetry/security-events.js\";\nimport { createTool } from \"../tools/tool-dsl.js\";\nimport { promptSafeText } from \"../utils/prompt-safe-text.js\";\nimport { mcpManager } from \"./manager.js\";\nimport type { McpToolCallResult } from \"./manager.js\";\nimport { buildMcpToolName } from \"./names.js\";\nimport { classifyToolCapability } from \"./tool-capabilities.js\";\nimport type { McpToolParallelSafety } from \"./types.js\";\n\ninterface McpToolDetails {\n\tserver: string;\n\ttool: string;\n\tcontent: unknown[];\n\tstructuredContent?: unknown;\n\tisError?: boolean;\n\tgovernedOutcome?: McpGovernedOutcome;\n\ttoolExecutionState?: McpGovernedToolExecutionState;\n}\n\nexport const MCP_GOVERNED_TOOL_EXECUTION_SCHEMA =\n\t\"evalops.maestro.mcp-governed-tool-execution.v1\";\n\nexport type McpGovernedClassification =\n\t| \"approval_required\"\n\t| \"approval_pending\"\n\t| \"authentication_required\"\n\t| \"denied\"\n\t| \"rate_limited\";\n\nexport type McpGovernedToolExecutionStateKind =\n\t| \"waiting_approval\"\n\t| \"blocked_authentication\"\n\t| \"blocked_retry_later\"\n\t| \"denied\";\n\nexport interface McpGovernedToolExecutionState {\n\tschemaVersion: typeof MCP_GOVERNED_TOOL_EXECUTION_SCHEMA;\n\tauthority: \"mcp_result_adapter\";\n\tstate: McpGovernedToolExecutionStateKind;\n\tterminal: boolean;\n\tclassification: McpGovernedClassification;\n\tapprovalRequestId?: string;\n\tretryAfterMs?: number;\n\tmessage?: string;\n\treasons?: string[];\n\tcode?: string;\n\triskLevel?: string;\n}\n\nexport interface McpGovernedOutcome {\n\tclassification:\n\t\t| \"approval_required\"\n\t\t| \"approval_pending\"\n\t\t| \"authentication_required\"\n\t\t| \"denied\"\n\t\t| \"rate_limited\";\n\tdecision?: string;\n\triskLevel?: string;\n\treasons?: string[];\n\tapprovalRequestId?: string;\n\tmatchedRules?: string[];\n\tmessage?: string;\n\tcode?: string;\n\tstate?: string;\n\tretryAfterMs?: number;\n\tretryAfterSeconds?: number;\n}\n\nexport function normalizeMcpGovernedToolExecution(\n\toutcome: McpGovernedOutcome | undefined,\n): McpGovernedToolExecutionState | undefined {\n\tif (!outcome) {\n\t\treturn undefined;\n\t}\n\tlet state: McpGovernedToolExecutionStateKind;\n\tlet terminal = true;\n\tswitch (outcome.classification) {\n\t\tcase \"approval_required\":\n\t\tcase \"approval_pending\":\n\t\t\tstate = \"waiting_approval\";\n\t\t\tterminal = false;\n\t\t\tbreak;\n\t\tcase \"authentication_required\":\n\t\t\tstate = \"blocked_authentication\";\n\t\t\tbreak;\n\t\tcase \"rate_limited\":\n\t\t\tstate = \"blocked_retry_later\";\n\t\t\tbreak;\n\t\tcase \"denied\":\n\t\t\tstate = \"denied\";\n\t\t\tbreak;\n\t}\n\tconst retryAfterMs =\n\t\toutcome.retryAfterMs ??\n\t\t(outcome.retryAfterSeconds !== undefined\n\t\t\t? outcome.retryAfterSeconds * 1000\n\t\t\t: undefined);\n\treturn {\n\t\tschemaVersion: MCP_GOVERNED_TOOL_EXECUTION_SCHEMA,\n\t\tauthority: \"mcp_result_adapter\",\n\t\tstate,\n\t\tterminal,\n\t\tclassification: outcome.classification,\n\t\t...(outcome.approvalRequestId\n\t\t\t? { approvalRequestId: outcome.approvalRequestId }\n\t\t\t: {}),\n\t\t...(retryAfterMs !== undefined ? { retryAfterMs } : {}),\n\t\t...(outcome.message ? { message: outcome.message } : {}),\n\t\t...(outcome.reasons ? { reasons: outcome.reasons } : {}),\n\t\t...(outcome.code ? { code: outcome.code } : {}),\n\t\t...(outcome.riskLevel ? { riskLevel: outcome.riskLevel } : {}),\n\t};\n}\n\nfunction normalizeObject(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: null;\n}\n\nfunction firstString(\n\tvalue: Record<string, unknown>,\n\t...keys: string[]\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst candidate = value[key];\n\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\treturn candidate.trim();\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction firstNumber(\n\tvalue: Record<string, unknown>,\n\t...keys: string[]\n): number | undefined {\n\tfor (const key of keys) {\n\t\tconst candidate = value[key];\n\t\tif (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t\tif (typeof candidate === \"string\" && candidate.trim().length > 0) {\n\t\t\tconst parsed = Number(candidate);\n\t\t\tif (Number.isFinite(parsed)) {\n\t\t\t\treturn parsed;\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction toStringArray(value: unknown): string[] | undefined {\n\tif (!Array.isArray(value)) {\n\t\treturn undefined;\n\t}\n\tconst entries = value\n\t\t.filter((item): item is string => typeof item === \"string\")\n\t\t.map((item) => item.trim())\n\t\t.filter(Boolean);\n\treturn entries.length > 0 ? entries : undefined;\n}\n\nfunction extractMcpTextContent(\n\tcontent: McpToolCallResult[\"content\"],\n): string | undefined {\n\tconst text = content\n\t\t.filter((item) => item.type === \"text\" && typeof item.text === \"string\")\n\t\t.map((item) => item.text as string)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\treturn text.length > 0 ? text : undefined;\n}\n\nfunction parseJsonObjectFromText(\n\ttext: string | undefined,\n): Record<string, unknown> | null {\n\tif (!text) {\n\t\treturn null;\n\t}\n\tconst trimmed = text.trim();\n\tif (!(trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\"))) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn normalizeObject(JSON.parse(trimmed));\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction resolveGovernedPayload(\n\tresult: McpToolCallResult,\n): Record<string, unknown> | null {\n\treturn (\n\t\tnormalizeObject(result.structuredContent) ??\n\t\tparseJsonObjectFromText(extractMcpTextContent(result.content))\n\t);\n}\n\nfunction classifyGovernedOutcome(\n\tpayload: Record<string, unknown> | null,\n): McpGovernedOutcome | undefined {\n\tif (!payload) {\n\t\treturn undefined;\n\t}\n\n\tconst decision = firstString(payload, \"decision\")?.toLowerCase();\n\tconst code = firstString(payload, \"code\", \"error_code\")?.toLowerCase();\n\tconst state = firstString(payload, \"state\")?.toLowerCase();\n\tconst status = firstNumber(payload, \"status\", \"status_code\");\n\tconst approvalRequestId = firstString(\n\t\tpayload,\n\t\t\"approval_id\",\n\t\t\"approvalId\",\n\t\t\"approval_request_id\",\n\t\t\"approvalRequestId\",\n\t);\n\tconst reasons = toStringArray(payload.reasons);\n\tconst matchedRules = toStringArray(\n\t\tpayload.matched_rules ?? payload.matchedRules,\n\t);\n\tconst outcome: Omit<McpGovernedOutcome, \"classification\"> = {\n\t\tdecision,\n\t\triskLevel: firstString(payload, \"risk_level\", \"riskLevel\"),\n\t\treasons,\n\t\tapprovalRequestId,\n\t\tmatchedRules,\n\t\tmessage: firstString(payload, \"message\", \"detail\", \"error\"),\n\t\tcode,\n\t\tstate,\n\t\tretryAfterMs: firstNumber(payload, \"retry_after_ms\", \"retryAfterMs\"),\n\t\tretryAfterSeconds: firstNumber(\n\t\t\tpayload,\n\t\t\t\"retry_after_seconds\",\n\t\t\t\"retryAfterSeconds\",\n\t\t),\n\t};\n\n\tif (decision === \"require_approval\" || code?.includes(\"approval_required\")) {\n\t\treturn { classification: \"approval_required\", ...outcome };\n\t}\n\tif (state === \"pending\" && approvalRequestId) {\n\t\treturn { classification: \"approval_pending\", ...outcome };\n\t}\n\tif (\n\t\tcode?.includes(\"rate_limit\") ||\n\t\tcode?.includes(\"too_many_requests\") ||\n\t\tstatus === 429\n\t) {\n\t\treturn { classification: \"rate_limited\", ...outcome };\n\t}\n\tif (\n\t\tcode?.includes(\"authentication_required\") ||\n\t\tcode?.includes(\"unauthorized\") ||\n\t\tstatus === 401\n\t) {\n\t\treturn { classification: \"authentication_required\", ...outcome };\n\t}\n\tif (\n\t\tdecision === \"deny\" ||\n\t\tcode?.includes(\"denied\") ||\n\t\tcode?.includes(\"forbidden\") ||\n\t\tstatus === 403\n\t) {\n\t\treturn { classification: \"denied\", ...outcome };\n\t}\n\treturn undefined;\n}\n\nfunction formatGovernedOutcomeSummary(\n\toutcome: McpGovernedOutcome | undefined,\n\ttoolExecutionState: McpGovernedToolExecutionState | undefined,\n): string | undefined {\n\tif (!outcome) {\n\t\treturn undefined;\n\t}\n\n\tconst lines: string[] = [];\n\tswitch (outcome.classification) {\n\t\tcase \"approval_required\":\n\t\t\tlines.push(\"Approval required.\");\n\t\t\tbreak;\n\t\tcase \"approval_pending\":\n\t\t\tlines.push(\"Approval pending.\");\n\t\t\tbreak;\n\t\tcase \"authentication_required\":\n\t\t\tlines.push(\"Authentication required.\");\n\t\t\tbreak;\n\t\tcase \"rate_limited\":\n\t\t\tlines.push(\"Rate limit reached.\");\n\t\t\tbreak;\n\t\tcase \"denied\":\n\t\t\tlines.push(\"Action denied.\");\n\t\t\tbreak;\n\t}\n\n\tif (outcome.message) {\n\t\tlines.push(outcome.message);\n\t}\n\tif (outcome.reasons?.length) {\n\t\tlines.push(`Reasons: ${outcome.reasons.join(\"; \")}`);\n\t}\n\tif (outcome.approvalRequestId) {\n\t\tlines.push(`Approval request: ${outcome.approvalRequestId}`);\n\t}\n\tif (toolExecutionState) {\n\t\tlines.push(\n\t\t\t`ToolExecution state: ${toolExecutionState.state} (${toolExecutionState.authority}).`,\n\t\t);\n\t}\n\tif (outcome.state && outcome.classification !== \"approval_pending\") {\n\t\tlines.push(`State: ${outcome.state}`);\n\t}\n\tif (outcome.riskLevel) {\n\t\tlines.push(`Risk level: ${outcome.riskLevel}`);\n\t}\n\tif (typeof outcome.retryAfterSeconds === \"number\") {\n\t\tlines.push(`Retry after: ${outcome.retryAfterSeconds} seconds`);\n\t} else if (typeof outcome.retryAfterMs === \"number\") {\n\t\tlines.push(`Retry after: ${outcome.retryAfterMs} ms`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction emitGovernedOutcomeTelemetry(\n\ttoolName: string,\n\toutcome: McpGovernedOutcome | undefined,\n): void {\n\tif (!outcome) {\n\t\treturn;\n\t}\n\n\tconst reason =\n\t\toutcome.message ??\n\t\toutcome.reasons?.join(\"; \") ??\n\t\toutcome.code ??\n\t\t\"policy event\";\n\n\tif (\n\t\toutcome.classification === \"approval_required\" ||\n\t\toutcome.classification === \"approval_pending\"\n\t) {\n\t\ttrackToolApprovalRequired({\n\t\t\ttoolName,\n\t\t\treason,\n\t\t\tsource: \"policy\",\n\t\t});\n\t\treturn;\n\t}\n\n\ttrackToolBlocked({\n\t\ttoolName,\n\t\treason,\n\t\tsource: \"policy\",\n\t\tseverity:\n\t\t\toutcome.classification === \"authentication_required\" ? \"medium\" : \"high\",\n\t});\n}\n\nfunction convertJsonSchemaToTypebox(schema: unknown): TSchema {\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn Type.Unknown();\n\t}\n\n\tconst s = schema as Record<string, unknown>;\n\tconst type = s.type as string | undefined;\n\tconst description =\n\t\ttypeof s.description === \"string\"\n\t\t\t? (promptSafeText(s.description) ?? undefined)\n\t\t\t: undefined;\n\n\tswitch (type) {\n\t\tcase \"string\":\n\t\t\treturn Type.String({ description });\n\t\tcase \"number\":\n\t\tcase \"integer\":\n\t\t\treturn Type.Number({ description });\n\t\tcase \"boolean\":\n\t\t\treturn Type.Boolean({ description });\n\t\tcase \"array\":\n\t\t\treturn Type.Array(convertJsonSchemaToTypebox(s.items), {\n\t\t\t\tdescription,\n\t\t\t});\n\t\tcase \"object\": {\n\t\t\tconst properties = s.properties as Record<string, unknown> | undefined;\n\t\t\tif (!properties) {\n\t\t\t\treturn Type.Record(Type.String(), Type.Unknown());\n\t\t\t}\n\t\t\tconst required = (s.required as string[]) ?? [];\n\t\t\tconst props: Record<string, TSchema> = {};\n\t\t\tfor (const [key, value] of Object.entries(properties)) {\n\t\t\t\tconst converted = convertJsonSchemaToTypebox(value);\n\t\t\t\tprops[key] = required.includes(key)\n\t\t\t\t\t? converted\n\t\t\t\t\t: Type.Optional(converted);\n\t\t\t}\n\t\t\treturn Type.Object(props, {\n\t\t\t\tdescription,\n\t\t\t});\n\t\t}\n\t\tdefault:\n\t\t\treturn Type.Unknown({ description });\n\t}\n}\n\nexport function createMcpToolWrapper(\n\tserverName: string,\n\tmcpTool: McpTool,\n\toptions?: {\n\t\tsupportsParallelToolCalls?: boolean;\n\t\tparallelSafety?: McpToolParallelSafety;\n\t},\n) {\n\tconst toolName = buildMcpToolName(serverName, mcpTool.name);\n\tconst schema = mcpTool.inputSchema\n\t\t? convertJsonSchemaToTypebox(mcpTool.inputSchema)\n\t\t: Type.Object({});\n\n\t// Extract MCP tool annotations for approval decisions\n\tconst mcpAnnotations = mcpTool.annotations as\n\t\t| {\n\t\t\t\treadOnlyHint?: boolean;\n\t\t\t\tdestructiveHint?: boolean;\n\t\t\t\tidempotentHint?: boolean;\n\t\t\t\topenWorldHint?: boolean;\n\t\t }\n\t\t| undefined;\n\tconst supportsParallelToolCalls =\n\t\toptions?.parallelSafety?.supportsParallelToolCalls === true ||\n\t\toptions?.supportsParallelToolCalls === true;\n\tconst parallelSafetyProvenance =\n\t\toptions?.parallelSafety?.provenance ??\n\t\t(options?.supportsParallelToolCalls === true ? \"static_config\" : \"none\");\n\tconst parallelMaxConcurrency = options?.parallelSafety?.maxConcurrency;\n\tconst advertisedReadOnly = options?.parallelSafety?.readOnlyHint === true;\n\tconst annotations: ToolAnnotations | undefined =\n\t\tmcpAnnotations || advertisedReadOnly\n\t\t\t? {\n\t\t\t\t\treadOnlyHint:\n\t\t\t\t\t\tmcpAnnotations?.readOnlyHint ??\n\t\t\t\t\t\t(advertisedReadOnly ? true : undefined),\n\t\t\t\t\tdestructiveHint: mcpAnnotations?.destructiveHint,\n\t\t\t\t\tidempotentHint: mcpAnnotations?.idempotentHint,\n\t\t\t\t\topenWorldHint: mcpAnnotations?.openWorldHint,\n\t\t\t\t}\n\t\t\t: undefined;\n\tconst capabilityAnnotations = annotations\n\t\t? Object.fromEntries(\n\t\t\t\tObject.entries(annotations).filter(([, value]) => value !== undefined),\n\t\t\t)\n\t\t: undefined;\n\tconst source: ToolSourceMetadata = {\n\t\ttype: \"mcp\",\n\t\tserver: serverName,\n\t\ttool: mcpTool.name,\n\t\tcapability: classifyToolCapability({\n\t\t\tserver: serverName,\n\t\t\ttoolName: mcpTool.name,\n\t\t\tannotations: capabilityAnnotations,\n\t\t}),\n\t\tsupportsParallelToolCalls,\n\t\tparallelSafetyProvenance,\n\t\t...(parallelMaxConcurrency ? { parallelMaxConcurrency } : {}),\n\t};\n\n\treturn createTool<typeof schema, McpToolDetails>({\n\t\tname: toolName,\n\t\tlabel: `${serverName}/${mcpTool.name}`,\n\t\tdescription:\n\t\t\tpromptSafeText(mcpTool.description) ??\n\t\t\t`MCP tool from ${serverName}: ${mcpTool.name}`,\n\t\tschema,\n\t\tannotations,\n\t\tsource,\n\t\tasync run(params, { respond }) {\n\t\t\tconst result = await mcpManager.callTool(\n\t\t\t\tserverName,\n\t\t\t\tmcpTool.name,\n\t\t\t\tparams as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst governedOutcome = classifyGovernedOutcome(\n\t\t\t\tresolveGovernedPayload(result),\n\t\t\t);\n\t\t\tconst toolExecutionState =\n\t\t\t\tnormalizeMcpGovernedToolExecution(governedOutcome);\n\t\t\temitGovernedOutcomeTelemetry(mcpTool.name, governedOutcome);\n\n\t\t\tconst output =\n\t\t\t\tformatGovernedOutcomeSummary(governedOutcome, toolExecutionState) ??\n\t\t\t\textractMcpTextContent(result.content) ??\n\t\t\t\tJSON.stringify(result.structuredContent ?? result.content, null, 2);\n\n\t\t\tconst response = result.isError\n\t\t\t\t? respond.error(output)\n\t\t\t\t: respond.text(output);\n\t\t\treturn response.detail({\n\t\t\t\tserver: serverName,\n\t\t\t\ttool: mcpTool.name,\n\t\t\t\tcontent: result.content,\n\t\t\t\tstructuredContent: result.structuredContent,\n\t\t\t\tisError: result.isError,\n\t\t\t\tgovernedOutcome,\n\t\t\t\ttoolExecutionState,\n\t\t\t});\n\t\t},\n\t});\n}\n\nexport function getAllMcpTools(): AgentTool[] {\n\tconst mcpTools = mcpManager.getAllTools();\n\treturn [\n\t\t...mcpTools.map(\n\t\t\t({ server, tool, supportsParallelToolCalls, parallelSafety }) =>\n\t\t\t\tcreateMcpToolWrapper(server, tool, {\n\t\t\t\t\tsupportsParallelToolCalls,\n\t\t\t\t\tparallelSafety,\n\t\t\t\t}),\n\t\t),\n\t\t...getMcpHelperTools(),\n\t];\n}\n\nexport function getMcpToolMap(): Map<string, AgentTool> {\n\tconst map = new Map<string, AgentTool>();\n\tconst mcpTools = mcpManager.getAllTools();\n\n\tfor (const tool of getMcpHelperTools()) {\n\t\tmap.set(tool.name, tool);\n\t}\n\n\tfor (const {\n\t\tserver,\n\t\ttool,\n\t\tsupportsParallelToolCalls,\n\t\tparallelSafety,\n\t} of mcpTools) {\n\t\tconst wrapper = createMcpToolWrapper(server, tool, {\n\t\t\tsupportsParallelToolCalls,\n\t\t\tparallelSafety,\n\t\t});\n\t\tmap.set(wrapper.name, wrapper);\n\t}\n\n\treturn map;\n}\n\n// ─────────────────────────────────────────────────────────────\n// MCP Resource Tools (inspired by Claude Code's ListMcpResources/ReadMcpResource)\n// ─────────────────────────────────────────────────────────────\n\ninterface McpResourceListDetails {\n\tservers: Array<{\n\t\tname: string;\n\t\tresources: string[];\n\t}>;\n}\n\nconst listMcpResourcesSchema = Type.Object({\n\tserver: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Optional server name to filter resources. If omitted, lists resources from all servers.\",\n\t\t}),\n\t),\n});\n\n/**\n * Tool to list available MCP resources across all connected servers.\n */\nexport const listMcpResourcesTool = createTool<\n\ttypeof listMcpResourcesSchema,\n\tMcpResourceListDetails\n>({\n\tname: \"mcp_list_resources\",\n\tdescription:\n\t\t\"List available resources from MCP servers. Resources are data sources that can be read (files, configs, etc.).\",\n\tschema: listMcpResourcesSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst status = mcpManager.getStatus();\n\t\tconst result: Array<{ name: string; resources: string[] }> = [];\n\n\t\tfor (const server of status.servers) {\n\t\t\tif (params.server && server.name !== params.server) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (server.connected && server.resources.length > 0) {\n\t\t\t\tresult.push({\n\t\t\t\t\tname: server.name,\n\t\t\t\t\tresources: server.resources,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (result.length === 0) {\n\t\t\treturn respond\n\t\t\t\t.text(\n\t\t\t\t\t\"No MCP resources available. Either no servers are connected or they don't expose resources.\",\n\t\t\t\t)\n\t\t\t\t.detail({ servers: [] });\n\t\t}\n\n\t\tconst lines: string[] = [\"# Available MCP Resources\\n\"];\n\t\tfor (const server of result) {\n\t\t\tlines.push(`## ${server.name}`);\n\t\t\tfor (const uri of server.resources) {\n\t\t\t\tlines.push(`- ${uri}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn respond.text(lines.join(\"\\n\")).detail({ servers: result });\n\t},\n});\n\ninterface McpResourceReadDetails {\n\tserver: string;\n\turi: string;\n\tcontents: Array<{\n\t\turi: string;\n\t\ttext?: string;\n\t\tmimeType?: string;\n\t}>;\n}\n\nconst readMcpResourceSchema = Type.Object({\n\tserver: Type.String({\n\t\tdescription: \"Name of the MCP server that hosts the resource\",\n\t}),\n\turi: Type.String({\n\t\tdescription: \"URI of the resource to read\",\n\t}),\n});\n\n/**\n * Tool to read a specific MCP resource.\n */\nexport const readMcpResourceTool = createTool<\n\ttypeof readMcpResourceSchema,\n\tMcpResourceReadDetails\n>({\n\tname: \"mcp_read_resource\",\n\tdescription:\n\t\t\"Read the contents of an MCP resource by URI. Use mcp_list_resources first to discover available resources.\",\n\tschema: readMcpResourceSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst { server, uri } = params;\n\n\t\ttry {\n\t\t\tconst result = await mcpManager.readResource(server, uri);\n\n\t\t\tif (result.contents.length === 0) {\n\t\t\t\treturn respond.text(`Resource '${uri}' is empty.`).detail({\n\t\t\t\t\tserver,\n\t\t\t\t\turi,\n\t\t\t\t\tcontents: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Format output based on content type\n\t\t\tconst textContents = result.contents\n\t\t\t\t.filter((c) => c.text !== undefined)\n\t\t\t\t.map((c) => c.text)\n\t\t\t\t.join(\"\\n---\\n\");\n\n\t\t\tconst output = textContents || JSON.stringify(result.contents, null, 2);\n\n\t\t\treturn respond.text(output).detail({\n\t\t\t\tserver,\n\t\t\t\turi,\n\t\t\t\tcontents: result.contents.map((c) => ({\n\t\t\t\t\turi: c.uri,\n\t\t\t\t\ttext: c.text,\n\t\t\t\t\tmimeType: c.mimeType,\n\t\t\t\t})),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn respond.error(`Failed to read resource: ${message}`);\n\t\t}\n\t},\n});\n\ninterface McpPromptListDetails {\n\tservers: Array<{\n\t\tname: string;\n\t\tprompts: string[];\n\t}>;\n}\n\nconst listMcpPromptsSchema = Type.Object({\n\tserver: Type.Optional(\n\t\tType.String({\n\t\t\tdescription:\n\t\t\t\t\"Optional server name to filter prompts. If omitted, lists prompts from all servers.\",\n\t\t}),\n\t),\n});\n\n/**\n * Tool to list available MCP prompts across all connected servers.\n */\nexport const listMcpPromptsTool = createTool<\n\ttypeof listMcpPromptsSchema,\n\tMcpPromptListDetails\n>({\n\tname: \"mcp_list_prompts\",\n\tdescription:\n\t\t\"List available prompts from MCP servers. Prompts are reusable prompt templates exposed by servers.\",\n\tschema: listMcpPromptsSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst status = mcpManager.getStatus();\n\t\tconst result: Array<{ name: string; prompts: string[] }> = [];\n\n\t\tfor (const server of status.servers) {\n\t\t\tif (params.server && server.name !== params.server) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (server.connected && server.prompts.length > 0) {\n\t\t\t\tresult.push({\n\t\t\t\t\tname: server.name,\n\t\t\t\t\tprompts: server.prompts,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (result.length === 0) {\n\t\t\treturn respond\n\t\t\t\t.text(\n\t\t\t\t\t\"No MCP prompts available. Either no servers are connected or they don't expose prompts.\",\n\t\t\t\t)\n\t\t\t\t.detail({ servers: [] });\n\t\t}\n\n\t\tconst lines: string[] = [\"# Available MCP Prompts\\n\"];\n\t\tfor (const server of result) {\n\t\t\tlines.push(`## ${server.name}`);\n\t\t\tfor (const prompt of server.prompts) {\n\t\t\t\tlines.push(`- ${prompt}`);\n\t\t\t}\n\t\t\tlines.push(\"\");\n\t\t}\n\n\t\treturn respond.text(lines.join(\"\\n\")).detail({ servers: result });\n\t},\n});\n\ninterface McpPromptDetails {\n\tserver: string;\n\tname: string;\n\tdescription?: string;\n\tmessages: Array<{ role: string; content: string }>;\n}\n\nconst getMcpPromptSchema = Type.Object({\n\tserver: Type.String({\n\t\tdescription: \"Name of the MCP server that hosts the prompt\",\n\t}),\n\tname: Type.String({\n\t\tdescription: \"Name of the prompt to fetch\",\n\t}),\n\targs: Type.Optional(\n\t\tType.Record(\n\t\t\tType.String(),\n\t\t\tType.String({\n\t\t\t\tdescription: \"Optional string arguments passed to the prompt\",\n\t\t\t}),\n\t\t),\n\t),\n});\n\n/**\n * Tool to fetch a specific MCP prompt.\n */\nexport const getMcpPromptTool = createTool<\n\ttypeof getMcpPromptSchema,\n\tMcpPromptDetails\n>({\n\tname: \"mcp_get_prompt\",\n\tdescription:\n\t\t\"Fetch an MCP prompt by name. Use mcp_list_prompts first to discover available prompts.\",\n\tschema: getMcpPromptSchema,\n\tannotations: {\n\t\treadOnlyHint: true,\n\t},\n\tasync run(params, { respond }) {\n\t\tconst { server, name, args } = params;\n\n\t\ttry {\n\t\t\tconst result = await mcpManager.getPrompt(server, name, args);\n\t\t\tconst lines: string[] = [`Prompt: ${name}`];\n\t\t\tconst description = promptSafeText(result.description);\n\n\t\t\tif (description) {\n\t\t\t\tlines.push(`Description: ${description}`);\n\t\t\t}\n\n\t\t\tif (result.messages.length === 0) {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tlines.push(\"No prompt messages returned.\");\n\t\t\t} else {\n\t\t\t\tlines.push(\"\");\n\t\t\t\tfor (const message of result.messages) {\n\t\t\t\t\tlines.push(`[${message.role}]`);\n\t\t\t\t\tlines.push(message.content);\n\t\t\t\t\tlines.push(\"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn respond.text(lines.join(\"\\n\").trimEnd()).detail({\n\t\t\t\tserver,\n\t\t\t\tname,\n\t\t\t\tdescription: description ?? undefined,\n\t\t\t\tmessages: result.messages,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn respond.error(`Failed to get prompt: ${message}`);\n\t\t}\n\t},\n});\n\n/**\n * Get all MCP resource tools.\n */\nexport function getMcpResourceTools() {\n\treturn [listMcpResourcesTool, readMcpResourceTool];\n}\n\nfunction getMcpHelperTools() {\n\treturn [\n\t\tlistMcpResourcesTool,\n\t\treadMcpResourceTool,\n\t\tlistMcpPromptsTool,\n\t\tgetMcpPromptTool,\n\t];\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TOOL_CAPABILITY_SCHEMA_VERSION, type ToolCapabilityInput, type ToolCapabilityMetadata, type ToolCapabilitySummary, type ToolDomain, type ToolLane, type ToolRiskClass } from "../agent/tool-capability-types.js";
|
|
2
|
+
export { TOOL_CAPABILITY_SCHEMA_VERSION, type ToolCapabilityInput, type ToolCapabilityMetadata, type ToolCapabilitySummary, type ToolDomain, type ToolLane, type ToolRiskClass, };
|
|
3
|
+
export declare function classifyToolCapability(input: ToolCapabilityInput): ToolCapabilityMetadata;
|
|
4
|
+
export declare function summarizeToolCapabilities(capabilities: readonly ToolCapabilityMetadata[]): ToolCapabilitySummary;
|
|
5
|
+
//# sourceMappingURL=tool-capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-capabilities.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACN,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,GAClB,CAAC;AAqIF,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,mBAAmB,GACxB,sBAAsB,CAyGxB;AA4BD,wBAAgB,yBAAyB,CACxC,YAAY,EAAE,SAAS,sBAAsB,EAAE,GAC7C,qBAAqB,CAuCvB"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { TOOL_CAPABILITY_SCHEMA_VERSION, } from "../agent/tool-capability-types.js";
|
|
2
|
+
export { TOOL_CAPABILITY_SCHEMA_VERSION, };
|
|
3
|
+
const DESKTOP_OBSERVE_TOOLS = new Set([
|
|
4
|
+
"get_app_state",
|
|
5
|
+
"list_apps",
|
|
6
|
+
"tool_search",
|
|
7
|
+
"wait_for_ui_change",
|
|
8
|
+
]);
|
|
9
|
+
const DESKTOP_RAW_SECRET_TOOLS = new Set([
|
|
10
|
+
"paste_text",
|
|
11
|
+
"select_text",
|
|
12
|
+
"set_text_selection",
|
|
13
|
+
"set_value",
|
|
14
|
+
"type_text",
|
|
15
|
+
]);
|
|
16
|
+
const DESKTOP_HIGH_RISK_TOOLS = new Set([
|
|
17
|
+
"activate_menu_item",
|
|
18
|
+
"drag",
|
|
19
|
+
"move_mouse",
|
|
20
|
+
"paste_text",
|
|
21
|
+
"press_window_button",
|
|
22
|
+
"scroll",
|
|
23
|
+
"set_window_bounds",
|
|
24
|
+
"set_window_minimized",
|
|
25
|
+
]);
|
|
26
|
+
const FATHOM_DESKTOP_TOOLS = new Set([
|
|
27
|
+
...DESKTOP_OBSERVE_TOOLS,
|
|
28
|
+
"activate_app",
|
|
29
|
+
"activate_menu_item",
|
|
30
|
+
"click",
|
|
31
|
+
"decrement_element",
|
|
32
|
+
"double_click",
|
|
33
|
+
"drag",
|
|
34
|
+
"focus_element",
|
|
35
|
+
"increment_element",
|
|
36
|
+
"move_mouse",
|
|
37
|
+
"open_context_menu",
|
|
38
|
+
"paste_text",
|
|
39
|
+
"perform_secondary_action",
|
|
40
|
+
"press_element",
|
|
41
|
+
"press_key",
|
|
42
|
+
"press_window_button",
|
|
43
|
+
"raise_window",
|
|
44
|
+
"scroll",
|
|
45
|
+
"scroll_to_element",
|
|
46
|
+
"select_context_menu_item",
|
|
47
|
+
"select_list_item",
|
|
48
|
+
"select_menu_option",
|
|
49
|
+
"select_radio_button",
|
|
50
|
+
"select_text",
|
|
51
|
+
"set_disclosure_expanded",
|
|
52
|
+
"set_slider_value",
|
|
53
|
+
"set_text_selection",
|
|
54
|
+
"set_toggle_state",
|
|
55
|
+
"set_value",
|
|
56
|
+
"set_window_bounds",
|
|
57
|
+
"set_window_minimized",
|
|
58
|
+
"type_text",
|
|
59
|
+
]);
|
|
60
|
+
const FILE_READ_TOOLS = new Set([
|
|
61
|
+
"diff",
|
|
62
|
+
"extract_document",
|
|
63
|
+
"find",
|
|
64
|
+
"jetbrains_read_file_range",
|
|
65
|
+
"list",
|
|
66
|
+
"parallel_ripgrep",
|
|
67
|
+
"read",
|
|
68
|
+
"search",
|
|
69
|
+
"vscode_read_file_range",
|
|
70
|
+
]);
|
|
71
|
+
const FILE_EDIT_TOOLS = new Set([
|
|
72
|
+
"apply_patch",
|
|
73
|
+
"edit",
|
|
74
|
+
"notebook_edit",
|
|
75
|
+
"write",
|
|
76
|
+
]);
|
|
77
|
+
const SHELL_TOOLS = new Set(["background_tasks", "bash"]);
|
|
78
|
+
const WEB_TOOLS = new Set(["codesearch", "webfetch", "websearch"]);
|
|
79
|
+
const MCP_META_TOOLS = new Set([
|
|
80
|
+
"get_mcp_prompt",
|
|
81
|
+
"list_mcp_prompts",
|
|
82
|
+
"list_mcp_resources",
|
|
83
|
+
"read_mcp_resource",
|
|
84
|
+
]);
|
|
85
|
+
const FATHOM_SERVER_NAME_ENV_VARS = [
|
|
86
|
+
"MAESTRO_FATHOM_CUA_MCP_NAME",
|
|
87
|
+
"FATHOM_CUA_MCP_NAME",
|
|
88
|
+
];
|
|
89
|
+
function readOnlyHint(annotations) {
|
|
90
|
+
const value = annotations?.readOnlyHint;
|
|
91
|
+
return typeof value === "boolean" ? value : undefined;
|
|
92
|
+
}
|
|
93
|
+
function baseCapability(input) {
|
|
94
|
+
return {
|
|
95
|
+
schemaVersion: TOOL_CAPABILITY_SCHEMA_VERSION,
|
|
96
|
+
server: input.server,
|
|
97
|
+
toolName: input.toolName,
|
|
98
|
+
...(readOnlyHint(input.annotations) !== undefined
|
|
99
|
+
? { readOnlyHint: readOnlyHint(input.annotations) }
|
|
100
|
+
: {}),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function isFathomDesktopTool(input) {
|
|
104
|
+
return (isFathomServerName(input.server) && FATHOM_DESKTOP_TOOLS.has(input.toolName));
|
|
105
|
+
}
|
|
106
|
+
function isFathomServerName(server) {
|
|
107
|
+
if (server === "fathom-cua") {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return FATHOM_SERVER_NAME_ENV_VARS.some((name) => process.env[name]?.trim() === server);
|
|
111
|
+
}
|
|
112
|
+
export function classifyToolCapability(input) {
|
|
113
|
+
const base = baseCapability(input);
|
|
114
|
+
const toolName = input.toolName;
|
|
115
|
+
if (isFathomDesktopTool(input)) {
|
|
116
|
+
const observe = DESKTOP_OBSERVE_TOOLS.has(toolName);
|
|
117
|
+
const riskClass = observe
|
|
118
|
+
? "observe"
|
|
119
|
+
: DESKTOP_HIGH_RISK_TOOLS.has(toolName)
|
|
120
|
+
? "high"
|
|
121
|
+
: "medium";
|
|
122
|
+
return {
|
|
123
|
+
...base,
|
|
124
|
+
domain: "desktop",
|
|
125
|
+
toolLane: observe ? "desktop_observe" : "desktop_action",
|
|
126
|
+
riskClass,
|
|
127
|
+
requiresReceipt: true,
|
|
128
|
+
proofRequired: true,
|
|
129
|
+
mutatesDesktop: !observe,
|
|
130
|
+
mutatesFiles: false,
|
|
131
|
+
rawSecretPossible: DESKTOP_RAW_SECRET_TOOLS.has(toolName),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (FILE_READ_TOOLS.has(toolName)) {
|
|
135
|
+
return {
|
|
136
|
+
...base,
|
|
137
|
+
domain: "file",
|
|
138
|
+
toolLane: "file_read",
|
|
139
|
+
riskClass: "observe",
|
|
140
|
+
requiresReceipt: false,
|
|
141
|
+
proofRequired: false,
|
|
142
|
+
mutatesDesktop: false,
|
|
143
|
+
mutatesFiles: false,
|
|
144
|
+
rawSecretPossible: false,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (FILE_EDIT_TOOLS.has(toolName)) {
|
|
148
|
+
return {
|
|
149
|
+
...base,
|
|
150
|
+
domain: "file",
|
|
151
|
+
toolLane: "file_edit",
|
|
152
|
+
riskClass: "medium",
|
|
153
|
+
requiresReceipt: false,
|
|
154
|
+
proofRequired: true,
|
|
155
|
+
mutatesDesktop: false,
|
|
156
|
+
mutatesFiles: true,
|
|
157
|
+
rawSecretPossible: true,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if (SHELL_TOOLS.has(toolName)) {
|
|
161
|
+
return {
|
|
162
|
+
...base,
|
|
163
|
+
domain: "shell",
|
|
164
|
+
toolLane: "shell_exec",
|
|
165
|
+
riskClass: "high",
|
|
166
|
+
requiresReceipt: false,
|
|
167
|
+
proofRequired: true,
|
|
168
|
+
mutatesDesktop: false,
|
|
169
|
+
mutatesFiles: true,
|
|
170
|
+
rawSecretPossible: true,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (WEB_TOOLS.has(toolName)) {
|
|
174
|
+
return {
|
|
175
|
+
...base,
|
|
176
|
+
domain: "web",
|
|
177
|
+
toolLane: "web_access",
|
|
178
|
+
riskClass: "low",
|
|
179
|
+
requiresReceipt: false,
|
|
180
|
+
proofRequired: false,
|
|
181
|
+
mutatesDesktop: false,
|
|
182
|
+
mutatesFiles: false,
|
|
183
|
+
rawSecretPossible: false,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (MCP_META_TOOLS.has(toolName)) {
|
|
187
|
+
return {
|
|
188
|
+
...base,
|
|
189
|
+
domain: "mcp",
|
|
190
|
+
toolLane: "mcp_meta",
|
|
191
|
+
riskClass: "observe",
|
|
192
|
+
requiresReceipt: false,
|
|
193
|
+
proofRequired: false,
|
|
194
|
+
mutatesDesktop: false,
|
|
195
|
+
mutatesFiles: false,
|
|
196
|
+
rawSecretPossible: false,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
...base,
|
|
201
|
+
domain: "unknown",
|
|
202
|
+
toolLane: "unknown",
|
|
203
|
+
riskClass: readOnlyHint(input.annotations) === true ? "observe" : "medium",
|
|
204
|
+
requiresReceipt: false,
|
|
205
|
+
proofRequired: false,
|
|
206
|
+
mutatesDesktop: false,
|
|
207
|
+
mutatesFiles: false,
|
|
208
|
+
rawSecretPossible: false,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
const DOMAIN_KEYS = [
|
|
212
|
+
"desktop",
|
|
213
|
+
"file",
|
|
214
|
+
"shell",
|
|
215
|
+
"web",
|
|
216
|
+
"mcp",
|
|
217
|
+
"unknown",
|
|
218
|
+
];
|
|
219
|
+
const RISK_KEYS = ["observe", "low", "medium", "high"];
|
|
220
|
+
const LANE_KEYS = [
|
|
221
|
+
"desktop_observe",
|
|
222
|
+
"desktop_action",
|
|
223
|
+
"file_read",
|
|
224
|
+
"file_edit",
|
|
225
|
+
"shell_exec",
|
|
226
|
+
"web_access",
|
|
227
|
+
"mcp_meta",
|
|
228
|
+
"unknown",
|
|
229
|
+
];
|
|
230
|
+
function zeroCounts(keys) {
|
|
231
|
+
return Object.fromEntries(keys.map((key) => [key, 0]));
|
|
232
|
+
}
|
|
233
|
+
export function summarizeToolCapabilities(capabilities) {
|
|
234
|
+
const byDomain = zeroCounts(DOMAIN_KEYS);
|
|
235
|
+
const byRiskClass = zeroCounts(RISK_KEYS);
|
|
236
|
+
const byToolLane = zeroCounts(LANE_KEYS);
|
|
237
|
+
let mutatingDesktop = 0;
|
|
238
|
+
let mutatingFiles = 0;
|
|
239
|
+
let requiresReceipt = 0;
|
|
240
|
+
let rawSecretPossible = 0;
|
|
241
|
+
for (const capability of capabilities) {
|
|
242
|
+
byDomain[capability.domain] += 1;
|
|
243
|
+
byRiskClass[capability.riskClass] += 1;
|
|
244
|
+
byToolLane[capability.toolLane] += 1;
|
|
245
|
+
if (capability.mutatesDesktop) {
|
|
246
|
+
mutatingDesktop += 1;
|
|
247
|
+
}
|
|
248
|
+
if (capability.mutatesFiles) {
|
|
249
|
+
mutatingFiles += 1;
|
|
250
|
+
}
|
|
251
|
+
if (capability.requiresReceipt) {
|
|
252
|
+
requiresReceipt += 1;
|
|
253
|
+
}
|
|
254
|
+
if (capability.rawSecretPossible) {
|
|
255
|
+
rawSecretPossible += 1;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
total: capabilities.length,
|
|
260
|
+
byDomain,
|
|
261
|
+
byRiskClass,
|
|
262
|
+
byToolLane,
|
|
263
|
+
mutating: {
|
|
264
|
+
desktop: mutatingDesktop,
|
|
265
|
+
files: mutatingFiles,
|
|
266
|
+
},
|
|
267
|
+
requiresReceipt,
|
|
268
|
+
rawSecretPossible,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=tool-capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-capabilities.js","sourceRoot":"","sources":["../../src/mcp/tool-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,8BAA8B,GAO9B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACN,8BAA8B,GAO9B,CAAC;AAEF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACrC,eAAe;IACf,WAAW;IACX,aAAa;IACb,oBAAoB;CACpB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACxC,YAAY;IACZ,aAAa;IACb,oBAAoB;IACpB,WAAW;IACX,WAAW;CACX,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACvC,oBAAoB;IACpB,MAAM;IACN,YAAY;IACZ,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,mBAAmB;IACnB,sBAAsB;CACtB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,GAAG,qBAAqB;IACxB,cAAc;IACd,oBAAoB;IACpB,OAAO;IACP,mBAAmB;IACnB,cAAc;IACd,MAAM;IACN,eAAe;IACf,mBAAmB;IACnB,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,0BAA0B;IAC1B,eAAe;IACf,WAAW;IACX,qBAAqB;IACrB,cAAc;IACd,QAAQ;IACR,mBAAmB;IACnB,0BAA0B;IAC1B,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,aAAa;IACb,yBAAyB;IACzB,kBAAkB;IAClB,oBAAoB;IACpB,kBAAkB;IAClB,WAAW;IACX,mBAAmB;IACnB,sBAAsB;IACtB,WAAW;CACX,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC/B,MAAM;IACN,kBAAkB;IAClB,MAAM;IACN,2BAA2B;IAC3B,MAAM;IACN,kBAAkB;IAClB,MAAM;IACN,QAAQ;IACR,wBAAwB;CACxB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC/B,aAAa;IACb,MAAM;IACN,eAAe;IACf,OAAO;CACP,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACnE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC9B,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;CACnB,CAAC,CAAC;AACH,MAAM,2BAA2B,GAAG;IACnC,6BAA6B;IAC7B,qBAAqB;CACZ,CAAC;AAEX,SAAS,YAAY,CACpB,WAAgD;IAEhD,MAAM,KAAK,GAAG,WAAW,EAAE,YAAY,CAAC;IACxC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CACtB,KAA0B;IAK1B,OAAO;QACN,aAAa,EAAE,8BAA8B;QAC7C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;KACN,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0B;IACtD,OAAO,CACN,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC5E,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACzC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,2BAA2B,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAC9C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,KAA0B;IAE1B,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEhC,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,SAAS,GAAkB,OAAO;YACvC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACtC,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,QAAQ,CAAC;QACb,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB;YACxD,SAAS;YACT,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,CAAC,OAAO;YACxB,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC;SACzD,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,KAAK;SACxB,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,QAAQ;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,IAAI;SACvB,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,MAAM;YACjB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,IAAI;SACvB,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,KAAK;SACxB,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO;YACN,GAAG,IAAI;YACP,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,KAAK;SACxB,CAAC;IACH,CAAC;IAED,OAAO;QACN,GAAG,IAAI;QACP,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAC1E,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,KAAK;KACxB,CAAC;AACH,CAAC;AAED,MAAM,WAAW,GAAiB;IACjC,SAAS;IACT,MAAM;IACN,OAAO;IACP,KAAK;IACL,KAAK;IACL,SAAS;CACT,CAAC;AACF,MAAM,SAAS,GAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxE,MAAM,SAAS,GAAe;IAC7B,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,SAAS;CACT,CAAC;AAEF,SAAS,UAAU,CAClB,IAAoB;IAEpB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAwB,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,yBAAyB,CACxC,YAA+C;IAE/C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACvC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;YAC/B,eAAe,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YAC7B,aAAa,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;YAChC,eAAe,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAClC,iBAAiB,IAAI,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,OAAO;QACN,KAAK,EAAE,YAAY,CAAC,MAAM;QAC1B,QAAQ;QACR,WAAW;QACX,UAAU;QACV,QAAQ,EAAE;YACT,OAAO,EAAE,eAAe;YACxB,KAAK,EAAE,aAAa;SACpB;QACD,eAAe;QACf,iBAAiB;KACjB,CAAC;AACH,CAAC","sourcesContent":["import {\n\tTOOL_CAPABILITY_SCHEMA_VERSION,\n\ttype ToolCapabilityInput,\n\ttype ToolCapabilityMetadata,\n\ttype ToolCapabilitySummary,\n\ttype ToolDomain,\n\ttype ToolLane,\n\ttype ToolRiskClass,\n} from \"../agent/tool-capability-types.js\";\n\nexport {\n\tTOOL_CAPABILITY_SCHEMA_VERSION,\n\ttype ToolCapabilityInput,\n\ttype ToolCapabilityMetadata,\n\ttype ToolCapabilitySummary,\n\ttype ToolDomain,\n\ttype ToolLane,\n\ttype ToolRiskClass,\n};\n\nconst DESKTOP_OBSERVE_TOOLS = new Set([\n\t\"get_app_state\",\n\t\"list_apps\",\n\t\"tool_search\",\n\t\"wait_for_ui_change\",\n]);\n\nconst DESKTOP_RAW_SECRET_TOOLS = new Set([\n\t\"paste_text\",\n\t\"select_text\",\n\t\"set_text_selection\",\n\t\"set_value\",\n\t\"type_text\",\n]);\n\nconst DESKTOP_HIGH_RISK_TOOLS = new Set([\n\t\"activate_menu_item\",\n\t\"drag\",\n\t\"move_mouse\",\n\t\"paste_text\",\n\t\"press_window_button\",\n\t\"scroll\",\n\t\"set_window_bounds\",\n\t\"set_window_minimized\",\n]);\n\nconst FATHOM_DESKTOP_TOOLS = new Set([\n\t...DESKTOP_OBSERVE_TOOLS,\n\t\"activate_app\",\n\t\"activate_menu_item\",\n\t\"click\",\n\t\"decrement_element\",\n\t\"double_click\",\n\t\"drag\",\n\t\"focus_element\",\n\t\"increment_element\",\n\t\"move_mouse\",\n\t\"open_context_menu\",\n\t\"paste_text\",\n\t\"perform_secondary_action\",\n\t\"press_element\",\n\t\"press_key\",\n\t\"press_window_button\",\n\t\"raise_window\",\n\t\"scroll\",\n\t\"scroll_to_element\",\n\t\"select_context_menu_item\",\n\t\"select_list_item\",\n\t\"select_menu_option\",\n\t\"select_radio_button\",\n\t\"select_text\",\n\t\"set_disclosure_expanded\",\n\t\"set_slider_value\",\n\t\"set_text_selection\",\n\t\"set_toggle_state\",\n\t\"set_value\",\n\t\"set_window_bounds\",\n\t\"set_window_minimized\",\n\t\"type_text\",\n]);\n\nconst FILE_READ_TOOLS = new Set([\n\t\"diff\",\n\t\"extract_document\",\n\t\"find\",\n\t\"jetbrains_read_file_range\",\n\t\"list\",\n\t\"parallel_ripgrep\",\n\t\"read\",\n\t\"search\",\n\t\"vscode_read_file_range\",\n]);\n\nconst FILE_EDIT_TOOLS = new Set([\n\t\"apply_patch\",\n\t\"edit\",\n\t\"notebook_edit\",\n\t\"write\",\n]);\n\nconst SHELL_TOOLS = new Set([\"background_tasks\", \"bash\"]);\nconst WEB_TOOLS = new Set([\"codesearch\", \"webfetch\", \"websearch\"]);\nconst MCP_META_TOOLS = new Set([\n\t\"get_mcp_prompt\",\n\t\"list_mcp_prompts\",\n\t\"list_mcp_resources\",\n\t\"read_mcp_resource\",\n]);\nconst FATHOM_SERVER_NAME_ENV_VARS = [\n\t\"MAESTRO_FATHOM_CUA_MCP_NAME\",\n\t\"FATHOM_CUA_MCP_NAME\",\n] as const;\n\nfunction readOnlyHint(\n\tannotations: Record<string, unknown> | undefined,\n): boolean | undefined {\n\tconst value = annotations?.readOnlyHint;\n\treturn typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction baseCapability(\n\tinput: ToolCapabilityInput,\n): Pick<\n\tToolCapabilityMetadata,\n\t\"schemaVersion\" | \"server\" | \"toolName\" | \"readOnlyHint\"\n> {\n\treturn {\n\t\tschemaVersion: TOOL_CAPABILITY_SCHEMA_VERSION,\n\t\tserver: input.server,\n\t\ttoolName: input.toolName,\n\t\t...(readOnlyHint(input.annotations) !== undefined\n\t\t\t? { readOnlyHint: readOnlyHint(input.annotations) }\n\t\t\t: {}),\n\t};\n}\n\nfunction isFathomDesktopTool(input: ToolCapabilityInput): boolean {\n\treturn (\n\t\tisFathomServerName(input.server) && FATHOM_DESKTOP_TOOLS.has(input.toolName)\n\t);\n}\n\nfunction isFathomServerName(server: string): boolean {\n\tif (server === \"fathom-cua\") {\n\t\treturn true;\n\t}\n\treturn FATHOM_SERVER_NAME_ENV_VARS.some(\n\t\t(name) => process.env[name]?.trim() === server,\n\t);\n}\n\nexport function classifyToolCapability(\n\tinput: ToolCapabilityInput,\n): ToolCapabilityMetadata {\n\tconst base = baseCapability(input);\n\tconst toolName = input.toolName;\n\n\tif (isFathomDesktopTool(input)) {\n\t\tconst observe = DESKTOP_OBSERVE_TOOLS.has(toolName);\n\t\tconst riskClass: ToolRiskClass = observe\n\t\t\t? \"observe\"\n\t\t\t: DESKTOP_HIGH_RISK_TOOLS.has(toolName)\n\t\t\t\t? \"high\"\n\t\t\t\t: \"medium\";\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"desktop\",\n\t\t\ttoolLane: observe ? \"desktop_observe\" : \"desktop_action\",\n\t\t\triskClass,\n\t\t\trequiresReceipt: true,\n\t\t\tproofRequired: true,\n\t\t\tmutatesDesktop: !observe,\n\t\t\tmutatesFiles: false,\n\t\t\trawSecretPossible: DESKTOP_RAW_SECRET_TOOLS.has(toolName),\n\t\t};\n\t}\n\n\tif (FILE_READ_TOOLS.has(toolName)) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"file\",\n\t\t\ttoolLane: \"file_read\",\n\t\t\triskClass: \"observe\",\n\t\t\trequiresReceipt: false,\n\t\t\tproofRequired: false,\n\t\t\tmutatesDesktop: false,\n\t\t\tmutatesFiles: false,\n\t\t\trawSecretPossible: false,\n\t\t};\n\t}\n\n\tif (FILE_EDIT_TOOLS.has(toolName)) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"file\",\n\t\t\ttoolLane: \"file_edit\",\n\t\t\triskClass: \"medium\",\n\t\t\trequiresReceipt: false,\n\t\t\tproofRequired: true,\n\t\t\tmutatesDesktop: false,\n\t\t\tmutatesFiles: true,\n\t\t\trawSecretPossible: true,\n\t\t};\n\t}\n\n\tif (SHELL_TOOLS.has(toolName)) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"shell\",\n\t\t\ttoolLane: \"shell_exec\",\n\t\t\triskClass: \"high\",\n\t\t\trequiresReceipt: false,\n\t\t\tproofRequired: true,\n\t\t\tmutatesDesktop: false,\n\t\t\tmutatesFiles: true,\n\t\t\trawSecretPossible: true,\n\t\t};\n\t}\n\n\tif (WEB_TOOLS.has(toolName)) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"web\",\n\t\t\ttoolLane: \"web_access\",\n\t\t\triskClass: \"low\",\n\t\t\trequiresReceipt: false,\n\t\t\tproofRequired: false,\n\t\t\tmutatesDesktop: false,\n\t\t\tmutatesFiles: false,\n\t\t\trawSecretPossible: false,\n\t\t};\n\t}\n\n\tif (MCP_META_TOOLS.has(toolName)) {\n\t\treturn {\n\t\t\t...base,\n\t\t\tdomain: \"mcp\",\n\t\t\ttoolLane: \"mcp_meta\",\n\t\t\triskClass: \"observe\",\n\t\t\trequiresReceipt: false,\n\t\t\tproofRequired: false,\n\t\t\tmutatesDesktop: false,\n\t\t\tmutatesFiles: false,\n\t\t\trawSecretPossible: false,\n\t\t};\n\t}\n\n\treturn {\n\t\t...base,\n\t\tdomain: \"unknown\",\n\t\ttoolLane: \"unknown\",\n\t\triskClass: readOnlyHint(input.annotations) === true ? \"observe\" : \"medium\",\n\t\trequiresReceipt: false,\n\t\tproofRequired: false,\n\t\tmutatesDesktop: false,\n\t\tmutatesFiles: false,\n\t\trawSecretPossible: false,\n\t};\n}\n\nconst DOMAIN_KEYS: ToolDomain[] = [\n\t\"desktop\",\n\t\"file\",\n\t\"shell\",\n\t\"web\",\n\t\"mcp\",\n\t\"unknown\",\n];\nconst RISK_KEYS: ToolRiskClass[] = [\"observe\", \"low\", \"medium\", \"high\"];\nconst LANE_KEYS: ToolLane[] = [\n\t\"desktop_observe\",\n\t\"desktop_action\",\n\t\"file_read\",\n\t\"file_edit\",\n\t\"shell_exec\",\n\t\"web_access\",\n\t\"mcp_meta\",\n\t\"unknown\",\n];\n\nfunction zeroCounts<const Key extends string>(\n\tkeys: readonly Key[],\n): Record<Key, number> {\n\treturn Object.fromEntries(keys.map((key) => [key, 0])) as Record<Key, number>;\n}\n\nexport function summarizeToolCapabilities(\n\tcapabilities: readonly ToolCapabilityMetadata[],\n): ToolCapabilitySummary {\n\tconst byDomain = zeroCounts(DOMAIN_KEYS);\n\tconst byRiskClass = zeroCounts(RISK_KEYS);\n\tconst byToolLane = zeroCounts(LANE_KEYS);\n\tlet mutatingDesktop = 0;\n\tlet mutatingFiles = 0;\n\tlet requiresReceipt = 0;\n\tlet rawSecretPossible = 0;\n\n\tfor (const capability of capabilities) {\n\t\tbyDomain[capability.domain] += 1;\n\t\tbyRiskClass[capability.riskClass] += 1;\n\t\tbyToolLane[capability.toolLane] += 1;\n\t\tif (capability.mutatesDesktop) {\n\t\t\tmutatingDesktop += 1;\n\t\t}\n\t\tif (capability.mutatesFiles) {\n\t\t\tmutatingFiles += 1;\n\t\t}\n\t\tif (capability.requiresReceipt) {\n\t\t\trequiresReceipt += 1;\n\t\t}\n\t\tif (capability.rawSecretPossible) {\n\t\t\trawSecretPossible += 1;\n\t\t}\n\t}\n\n\treturn {\n\t\ttotal: capabilities.length,\n\t\tbyDomain,\n\t\tbyRiskClass,\n\t\tbyToolLane,\n\t\tmutating: {\n\t\t\tdesktop: mutatingDesktop,\n\t\t\tfiles: mutatingFiles,\n\t\t},\n\t\trequiresReceipt,\n\t\trawSecretPossible,\n\t};\n}\n"]}
|
package/dist/mcp/types.d.ts
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
* @module mcp/types
|
|
34
34
|
*/
|
|
35
35
|
import type { Tool as McpTool } from "@modelcontextprotocol/sdk/types.js";
|
|
36
|
+
import type { ToolCapabilityMetadata, ToolCapabilitySummary } from "./tool-capabilities.js";
|
|
36
37
|
export type McpTransport = "stdio" | "http" | "sse";
|
|
37
38
|
export type McpScope = "enterprise" | "plugin" | "project" | "local" | "user";
|
|
38
39
|
export type McpRemoteTrust = "official" | "custom" | "unknown";
|
|
@@ -125,13 +126,17 @@ export interface McpConfig {
|
|
|
125
126
|
message?: string;
|
|
126
127
|
}>;
|
|
127
128
|
}
|
|
129
|
+
export type McpToolStatus = McpTool & {
|
|
130
|
+
capability?: ToolCapabilityMetadata;
|
|
131
|
+
};
|
|
128
132
|
export interface McpServerStatus {
|
|
129
133
|
name: string;
|
|
130
134
|
connected: boolean;
|
|
131
135
|
error?: string;
|
|
132
136
|
scope?: McpScope;
|
|
133
137
|
transport: McpTransport;
|
|
134
|
-
tools:
|
|
138
|
+
tools: McpToolStatus[];
|
|
139
|
+
toolCapabilitySummary?: ToolCapabilitySummary;
|
|
135
140
|
resources: string[];
|
|
136
141
|
prompts: string[];
|
|
137
142
|
promptDetails?: McpPromptDefinition[];
|
package/dist/mcp/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG","sourcesContent":["/**\n * MCP Types - Model Context Protocol Type Definitions\n *\n * This module defines the core types used throughout the MCP (Model Context\n * Protocol) integration. These types represent server configurations, connection\n * states, and status information.\n *\n * ## Transport Types\n *\n * | Transport | Description |\n * |-----------|------------------------------------------|\n * | stdio | Subprocess communication via stdin/stdout|\n * | http | HTTP-based REST transport |\n * | sse | Server-Sent Events for streaming |\n *\n * ## Configuration Scopes\n *\n * | Scope | Precedence | Description |\n * |------------|------------|------------------------------------|\n * | enterprise | Highest | Organization-wide settings |\n * | plugin | High | Programmatically provided |\n * | project | Medium | Per-project .maestro/mcp.json |\n * | local | Low | Local overrides (git-ignored) |\n * | user | Lowest | User's global settings |\n *\n * ## Server Status\n *\n * The `McpServerStatus` interface tracks:\n * - Connection state (connected/disconnected)\n * - Available tools, resources, and prompts\n * - Error messages if connection failed\n *\n * @module mcp/types\n */\n\nimport type { Tool as McpTool } from \"@modelcontextprotocol/sdk/types.js\";\n\nexport type McpTransport = \"stdio\" | \"http\" | \"sse\";\nexport type McpScope = \"enterprise\" | \"plugin\" | \"project\" | \"local\" | \"user\";\nexport type McpRemoteTrust = \"official\" | \"custom\" | \"unknown\";\nexport type McpProjectApprovalDecision = \"approved\" | \"denied\";\nexport type McpProjectApprovalStatus = \"pending\" | McpProjectApprovalDecision;\nexport type McpWorkspaceTrustMode = \"trusted\" | \"ask\" | \"blocked\" | \"untrusted\";\nexport type McpWorkspaceTrustDefault = \"trusted\" | \"ask\" | \"untrusted\";\n\nexport interface McpWorkspaceTrustEntry {\n\tworkspaceUri: string;\n\tmode: Exclude<McpWorkspaceTrustMode, \"untrusted\">;\n\tserverFingerprint?: string;\n\tgrantedBy?: string;\n\tgrantedAt?: string;\n\texpiresAt?: string;\n\treason?: string;\n}\n\nexport interface McpOfficialRegistryInfo {\n\tdisplayName?: string;\n\tdirectoryUrl?: string;\n\tdocumentationUrl?: string;\n\tpermissions?: string;\n\tauthorName?: string;\n\turl?: string;\n}\n\nexport interface McpOfficialRegistryUrlOption {\n\turl: string;\n\tlabel?: string;\n\tdescription?: string;\n}\n\nexport interface McpOfficialRegistryEntry extends McpOfficialRegistryInfo {\n\tslug?: string;\n\tserverName?: string;\n\toneLiner?: string;\n\ttransport?: McpTransport;\n\turlOptions?: McpOfficialRegistryUrlOption[];\n\turlRegex?: string;\n\ttoolCount?: number;\n\tpromptCount?: number;\n}\n\nexport interface McpPromptArgument {\n\tname: string;\n\tdescription?: string;\n\trequired?: boolean;\n}\n\nexport interface McpPromptDefinition {\n\tname: string;\n\ttitle?: string;\n\tdescription?: string;\n\targuments?: McpPromptArgument[];\n}\n\nexport interface McpAuthPresetConfig {\n\tname: string;\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tscope?: McpScope;\n}\n\nexport interface McpServerConfig {\n\tname: string;\n\ttransport: McpTransport;\n\t// For stdio transport\n\tcommand?: string;\n\targs?: string[];\n\tenv?: Record<string, string>;\n\tcwd?: string;\n\t// For http/sse transport\n\turl?: string;\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tauthPreset?: string;\n\t// Common options\n\tenabled?: boolean;\n\tdisabled?: boolean;\n\ttimeout?: number;\n\tsupportsParallelToolCalls?: boolean;\n\tscope?: McpScope;\n}\n\nexport type McpParallelSafetyProvenance =\n\t| \"static_config\"\n\t| \"server_capability\"\n\t| \"none\";\n\nexport interface McpToolParallelSafety {\n\tsupportsParallelToolCalls: boolean;\n\tprovenance: McpParallelSafetyProvenance;\n\tmaxConcurrency?: number;\n\treadOnlyHint?: boolean;\n}\n\nexport interface McpConfig {\n\tservers: McpServerConfig[];\n\tauthPresets: McpAuthPresetConfig[];\n\tprojectRoot?: string;\n\ttrustedWorkspaces?: Record<string, McpWorkspaceTrustEntry[]>;\n\tworkspaceTrustDefault?: McpWorkspaceTrustDefault;\n\tenvLimits?: Record<\n\t\tstring,\n\t\t{ effective: number; status: string; message?: string }\n\t>;\n}\n\nexport interface McpServerStatus {\n\tname: string;\n\tconnected: boolean;\n\terror?: string;\n\tscope?: McpScope;\n\ttransport: McpTransport;\n\ttools:
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG","sourcesContent":["/**\n * MCP Types - Model Context Protocol Type Definitions\n *\n * This module defines the core types used throughout the MCP (Model Context\n * Protocol) integration. These types represent server configurations, connection\n * states, and status information.\n *\n * ## Transport Types\n *\n * | Transport | Description |\n * |-----------|------------------------------------------|\n * | stdio | Subprocess communication via stdin/stdout|\n * | http | HTTP-based REST transport |\n * | sse | Server-Sent Events for streaming |\n *\n * ## Configuration Scopes\n *\n * | Scope | Precedence | Description |\n * |------------|------------|------------------------------------|\n * | enterprise | Highest | Organization-wide settings |\n * | plugin | High | Programmatically provided |\n * | project | Medium | Per-project .maestro/mcp.json |\n * | local | Low | Local overrides (git-ignored) |\n * | user | Lowest | User's global settings |\n *\n * ## Server Status\n *\n * The `McpServerStatus` interface tracks:\n * - Connection state (connected/disconnected)\n * - Available tools, resources, and prompts\n * - Error messages if connection failed\n *\n * @module mcp/types\n */\n\nimport type { Tool as McpTool } from \"@modelcontextprotocol/sdk/types.js\";\nimport type {\n\tToolCapabilityMetadata,\n\tToolCapabilitySummary,\n} from \"./tool-capabilities.js\";\n\nexport type McpTransport = \"stdio\" | \"http\" | \"sse\";\nexport type McpScope = \"enterprise\" | \"plugin\" | \"project\" | \"local\" | \"user\";\nexport type McpRemoteTrust = \"official\" | \"custom\" | \"unknown\";\nexport type McpProjectApprovalDecision = \"approved\" | \"denied\";\nexport type McpProjectApprovalStatus = \"pending\" | McpProjectApprovalDecision;\nexport type McpWorkspaceTrustMode = \"trusted\" | \"ask\" | \"blocked\" | \"untrusted\";\nexport type McpWorkspaceTrustDefault = \"trusted\" | \"ask\" | \"untrusted\";\n\nexport interface McpWorkspaceTrustEntry {\n\tworkspaceUri: string;\n\tmode: Exclude<McpWorkspaceTrustMode, \"untrusted\">;\n\tserverFingerprint?: string;\n\tgrantedBy?: string;\n\tgrantedAt?: string;\n\texpiresAt?: string;\n\treason?: string;\n}\n\nexport interface McpOfficialRegistryInfo {\n\tdisplayName?: string;\n\tdirectoryUrl?: string;\n\tdocumentationUrl?: string;\n\tpermissions?: string;\n\tauthorName?: string;\n\turl?: string;\n}\n\nexport interface McpOfficialRegistryUrlOption {\n\turl: string;\n\tlabel?: string;\n\tdescription?: string;\n}\n\nexport interface McpOfficialRegistryEntry extends McpOfficialRegistryInfo {\n\tslug?: string;\n\tserverName?: string;\n\toneLiner?: string;\n\ttransport?: McpTransport;\n\turlOptions?: McpOfficialRegistryUrlOption[];\n\turlRegex?: string;\n\ttoolCount?: number;\n\tpromptCount?: number;\n}\n\nexport interface McpPromptArgument {\n\tname: string;\n\tdescription?: string;\n\trequired?: boolean;\n}\n\nexport interface McpPromptDefinition {\n\tname: string;\n\ttitle?: string;\n\tdescription?: string;\n\targuments?: McpPromptArgument[];\n}\n\nexport interface McpAuthPresetConfig {\n\tname: string;\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tscope?: McpScope;\n}\n\nexport interface McpServerConfig {\n\tname: string;\n\ttransport: McpTransport;\n\t// For stdio transport\n\tcommand?: string;\n\targs?: string[];\n\tenv?: Record<string, string>;\n\tcwd?: string;\n\t// For http/sse transport\n\turl?: string;\n\theaders?: Record<string, string>;\n\theadersHelper?: string;\n\tauthPreset?: string;\n\t// Common options\n\tenabled?: boolean;\n\tdisabled?: boolean;\n\ttimeout?: number;\n\tsupportsParallelToolCalls?: boolean;\n\tscope?: McpScope;\n}\n\nexport type McpParallelSafetyProvenance =\n\t| \"static_config\"\n\t| \"server_capability\"\n\t| \"none\";\n\nexport interface McpToolParallelSafety {\n\tsupportsParallelToolCalls: boolean;\n\tprovenance: McpParallelSafetyProvenance;\n\tmaxConcurrency?: number;\n\treadOnlyHint?: boolean;\n}\n\nexport interface McpConfig {\n\tservers: McpServerConfig[];\n\tauthPresets: McpAuthPresetConfig[];\n\tprojectRoot?: string;\n\ttrustedWorkspaces?: Record<string, McpWorkspaceTrustEntry[]>;\n\tworkspaceTrustDefault?: McpWorkspaceTrustDefault;\n\tenvLimits?: Record<\n\t\tstring,\n\t\t{ effective: number; status: string; message?: string }\n\t>;\n}\n\nexport type McpToolStatus = McpTool & {\n\tcapability?: ToolCapabilityMetadata;\n};\n\nexport interface McpServerStatus {\n\tname: string;\n\tconnected: boolean;\n\terror?: string;\n\tscope?: McpScope;\n\ttransport: McpTransport;\n\ttools: McpToolStatus[];\n\ttoolCapabilitySummary?: ToolCapabilitySummary;\n\tresources: string[];\n\tprompts: string[];\n\tpromptDetails?: McpPromptDefinition[];\n\tcommand?: string;\n\targs?: string[];\n\tcwd?: string;\n\tenvKeys?: string[];\n\tremoteUrl?: string;\n\tremoteHost?: string;\n\theaderKeys?: string[];\n\theadersHelper?: string;\n\tauthPreset?: string;\n\ttimeout?: number;\n\tsupportsParallelToolCalls?: boolean;\n\tparallelSafety?: {\n\t\tsupportsParallelToolCalls: boolean;\n\t\tprovenance: McpParallelSafetyProvenance;\n\t\tmaxConcurrency?: number;\n\t};\n\tremoteTrust?: McpRemoteTrust;\n\tofficialRegistry?: McpOfficialRegistryInfo;\n\tprojectApproval?: McpProjectApprovalStatus;\n}\n\nexport interface McpAuthPresetStatus {\n\tname: string;\n\tscope?: McpScope;\n\theaderKeys: string[];\n\theadersHelper?: string;\n}\n\nexport interface McpManagerStatus {\n\tservers: McpServerStatus[];\n\tauthPresets: McpAuthPresetStatus[];\n}\n"]}
|
|
@@ -156,8 +156,8 @@ export declare const configValidator: import("ajv/dist/core.js").AnyValidateFunc
|
|
|
156
156
|
} | undefined;
|
|
157
157
|
name: string;
|
|
158
158
|
id: string;
|
|
159
|
-
contextWindow: number;
|
|
160
159
|
maxTokens: number;
|
|
160
|
+
contextWindow: number;
|
|
161
161
|
}[] | undefined;
|
|
162
162
|
api?: "openai-completions" | "openai-responses" | "openai-codex-responses" | "openai-codex-app-server" | "anthropic-messages" | "google-generative-ai" | "google-gemini-cli" | "bedrock-converse" | "vertex-ai" | "scripted-replay" | undefined;
|
|
163
163
|
apiKeyEnv?: string | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Factory Integration
|
|
3
|
-
* Reads and converts Factory config files (~/.factory/) into
|
|
3
|
+
* Reads and converts Factory config files (~/.factory/) into Maestro model configuration.
|
|
4
4
|
*/
|
|
5
5
|
import { type CustomModelConfig } from "./config-loader.js";
|
|
6
6
|
export declare const FACTORY_HOME: string;
|