@evalops/maestro 0.10.23 → 0.10.24
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":"types.js","sourceRoot":"","sources":["../../../src/agent/swarm/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * Swarm Mode Types\n *\n * Type definitions for the swarm execution system that enables\n * parallel agent execution for implementing plans.\n */\n\nimport type { A2ATaskPushNotificationConfig } from \"../../platform/a2a-client.js\";\nimport type { AgentMode, ModelProvider, ReasoningEffort } from \"../modes.js\";\nimport type { SubagentType } from \"../subagent-specs.js\";\n\n/**\n * Status of a swarm teammate.\n */\nexport type TeammateStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"cancelled\";\n\n/**\n * A single task assigned to a teammate in the swarm.\n */\nexport interface SwarmTask {\n\t/** Unique task identifier */\n\tid: string;\n\t/** Task description/prompt for the teammate */\n\tprompt: string;\n\t/** Files relevant to this task */\n\tfiles?: string[];\n\t/** Dependencies on other task IDs (must complete first) */\n\tdependsOn?: string[];\n\t/** Optional model override for this task */\n\tmodel?: string;\n\t/** Optional subagent type used for mode-level model dispatch */\n\tsubagentType?: SubagentType;\n\t/** Optional A2A peer override when the swarm uses remote transport */\n\ta2aPeer?: string;\n\t/** Optional A2A skill override when the task maps to a remote Maestro lane */\n\ta2aSkillId?: string;\n\t/** Priority (higher = earlier execution when no dependencies) */\n\tpriority?: number;\n}\n\n/**\n * A teammate in the swarm - an individual agent working on tasks.\n */\nexport interface SwarmTeammate {\n\t/** Unique teammate identifier */\n\tid: string;\n\t/** Display name for the teammate */\n\tname: string;\n\t/** Current status */\n\tstatus: TeammateStatus;\n\t/** Currently assigned task */\n\tcurrentTask?: SwarmTask;\n\t/** Tasks completed by this teammate */\n\tcompletedTasks: string[];\n\t/** Process ID if running as subprocess */\n\tpid?: number;\n\t/** Remote A2A task correlation when this teammate runs on a peer */\n\ta2a?: SwarmA2ATeammateExecution;\n\t/** Start timestamp */\n\tstartedAt?: number;\n\t/** Completion timestamp */\n\tcompletedAt?: number;\n\t/** Error message if failed */\n\terror?: string;\n\t/** Output/results from the teammate */\n\toutput?: string;\n}\n\n/**\n * Configuration for launching a swarm.\n */\nexport interface SwarmConfig {\n\t/** Number of teammates to spawn (1-10) */\n\tteammateCount: number;\n\t/** Plan file path to implement */\n\tplanFile: string;\n\t/** Tasks to distribute among teammates */\n\ttasks: SwarmTask[];\n\t/** Working directory for all teammates */\n\tcwd: string;\n\t/** Session ID of the parent session */\n\tparentSessionId?: string;\n\t/** Model to use for teammates (defaults to parent's model) */\n\tmodel?: string;\n\t/** Agent mode used to resolve subagent model dispatch */\n\tmode?: AgentMode;\n\t/** Parent model provider used when dispatch falls back to a model tier */\n\tmodelProvider?: ModelProvider;\n\t/** Default subagent type for teammate tasks without their own type */\n\tsubagentType?: SubagentType;\n\t/** Default reasoning hint for teammate tasks */\n\treasoningEffort?: ReasoningEffort;\n\t/** Execution transport for teammates; local preserves subprocess behavior. */\n\ttransport?: \"local\" | \"a2a\";\n\t/** Remote A2A routing options for Platform-discovered or registry peers. */\n\ta2a?: SwarmA2AConfig;\n\t/** Maximum time per task in milliseconds */\n\ttaskTimeout?: number;\n\t/** Whether to continue on individual task failures */\n\tcontinueOnFailure?: boolean;\n\t/** Git branch to work on (creates if doesn't exist) */\n\tgitBranch?: string;\n}\n\n/**\n * Configuration for remote A2A-backed swarm teammates.\n */\nexport interface SwarmA2AConfig {\n\t/** Named peers from the local A2A registry, used round-robin. */\n\tpeers?: string[];\n\t/** Override for the local A2A peer registry path. */\n\tregistryPath?: string;\n\t/** Override for the local A2A task ledger path. */\n\ttasksPath?: string;\n\t/** Default remote A2A skill id. */\n\tskillId?: string;\n\t/** Optional delegation role shown in task ledger metadata. */\n\trole?: string;\n\t/** Discover remote peers from Platform Agent Registry instead of local peers. */\n\tdiscover?: boolean;\n\t/** Platform workspace id for discovery. */\n\tworkspaceId?: string;\n\t/** Capability filter for Platform discovery. */\n\tcapability?: string;\n\t/** Surface filter for Platform discovery. Defaults to a2a. */\n\tsurface?: string;\n\t/** Prefer internal endpoints returned by Platform Agent Registry. */\n\tpreferInternalEndpoint?: boolean;\n\t/** Maximum Platform candidates to consider. */\n\tlimit?: number;\n\t/** Timeout for individual A2A HTTP calls. */\n\ttimeoutMs?: number;\n\t/** Max attempts for individual A2A HTTP calls. */\n\tmaxAttempts?: number;\n\t/** Max time to wait for a remote task to reach terminal state. */\n\tmaxWaitMs?: number;\n\t/** Poll interval while waiting for remote task state. */\n\tpollIntervalMs?: number;\n\t/** Optional push callback config sent to remote peers for task progress/artifact updates. */\n\tpushNotificationConfig?: A2ATaskPushNotificationConfig;\n}\n\n/**\n * Public, non-secret correlation metadata for a remote A2A swarm teammate.\n */\nexport interface SwarmA2ATeammateExecution {\n\t/** Peer selected for this teammate task. */\n\tpeer: string;\n\t/** Optional human-readable peer label. */\n\tpeerDisplayName?: string;\n\t/** Peer source used by the router. */\n\tsource: \"registry\" | \"platform-agent-registry\";\n\t/** A2A task id returned by the peer. */\n\ttaskId: string;\n\t/** A2A context id used for resume/reply. */\n\tcontextId?: string;\n\t/** A2A message id sent by the coordinator. */\n\tmessageId: string;\n\t/** A2A skill id used for remote routing. */\n\tskillId?: string;\n\t/** Delegation role recorded for the remote task. */\n\trole?: string;\n}\n\n/**\n * Status of the overall swarm execution.\n */\nexport type SwarmStatus =\n\t| \"initializing\"\n\t| \"running\"\n\t| \"completing\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"cancelled\";\n\n/**\n * State of the swarm execution.\n */\nexport interface SwarmState {\n\t/** Unique swarm execution ID */\n\tid: string;\n\t/** Current status */\n\tstatus: SwarmStatus;\n\t/** Configuration used to launch */\n\tconfig: SwarmConfig;\n\t/** All teammates in the swarm */\n\tteammates: SwarmTeammate[];\n\t/** Tasks pending assignment */\n\tpendingTasks: SwarmTask[];\n\t/** Tasks currently being worked on */\n\tactiveTasks: Map<string, string>; // taskId -> teammateId\n\t/** Completed task IDs */\n\tcompletedTasks: Set<string>;\n\t/** Failed task IDs */\n\tfailedTasks: Set<string>;\n\t/** Start timestamp */\n\tstartedAt: number;\n\t/** Completion timestamp */\n\tcompletedAt?: number;\n\t/** Error message if swarm failed */\n\terror?: string;\n}\n\n/**\n * Event emitted during swarm execution.\n */\nexport type SwarmEvent =\n\t| { type: \"swarm_start\"; swarmId: string; config: SwarmConfig }\n\t| { type: \"teammate_spawn\"; swarmId: string; teammate: SwarmTeammate }\n\t| {\n\t\t\ttype: \"task_start\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttask: SwarmTask;\n\t }\n\t| {\n\t\t\ttype: \"task_complete\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttaskId: string;\n\t\t\toutput: string;\n\t }\n\t| {\n\t\t\ttype: \"task_fail\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttaskId: string;\n\t\t\terror: string;\n\t }\n\t| {\n\t\t\ttype: \"teammate_complete\";\n\t\t\tswarmId: string;\n\t\t\tteammate: SwarmTeammate;\n\t }\n\t| { type: \"swarm_complete\"; swarmId: string; state: SwarmState }\n\t| { type: \"swarm_fail\"; swarmId: string; error: string };\n\n/**\n * Callback for swarm events.\n */\nexport type SwarmEventHandler = (event: SwarmEvent) => void;\n\n/**\n * Result of parsing a plan file into tasks.\n */\nexport interface ParsedPlan {\n\t/** Plan title/name */\n\ttitle: string;\n\t/** Extracted tasks */\n\ttasks: SwarmTask[];\n\t/** Raw plan content */\n\tcontent: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agent/swarm/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * Swarm Mode Types\n *\n * Type definitions for the swarm execution system that enables\n * parallel agent execution for implementing plans.\n */\n\nimport type { A2ATaskPushNotificationConfig } from \"../../platform/a2a-client.js\";\nimport type { AgentMode, ModelProvider, ReasoningEffort } from \"../modes.js\";\nimport type { SubagentType } from \"../subagent-specs.js\";\n\n/**\n * Status of a swarm teammate.\n */\nexport type TeammateStatus =\n\t| \"pending\"\n\t| \"running\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"cancelled\";\n\n/**\n * A single task assigned to a teammate in the swarm.\n */\nexport interface SwarmTask {\n\t/** Unique task identifier */\n\tid: string;\n\t/** Task description/prompt for the teammate */\n\tprompt: string;\n\t/** Files relevant to this task */\n\tfiles?: string[];\n\t/** Dependencies on other task IDs (must complete first) */\n\tdependsOn?: string[];\n\t/** Optional model override for this task */\n\tmodel?: string;\n\t/** Optional subagent type used for mode-level model dispatch */\n\tsubagentType?: SubagentType;\n\t/** Optional A2A peer override when the swarm uses remote transport */\n\ta2aPeer?: string;\n\t/** Optional A2A skill override when the task maps to a remote Maestro lane */\n\ta2aSkillId?: string;\n\t/** Priority (higher = earlier execution when no dependencies) */\n\tpriority?: number;\n}\n\n/**\n * A teammate in the swarm - an individual agent working on tasks.\n */\nexport interface SwarmTeammate {\n\t/** Unique teammate identifier */\n\tid: string;\n\t/** Display name for the teammate */\n\tname: string;\n\t/** Current status */\n\tstatus: TeammateStatus;\n\t/** Currently assigned task */\n\tcurrentTask?: SwarmTask;\n\t/** Tasks completed by this teammate */\n\tcompletedTasks: string[];\n\t/** Process ID if running as subprocess */\n\tpid?: number;\n\t/** Remote A2A task correlation when this teammate runs on a peer */\n\ta2a?: SwarmA2ATeammateExecution;\n\t/** Start timestamp */\n\tstartedAt?: number;\n\t/** Completion timestamp */\n\tcompletedAt?: number;\n\t/** Error message if failed */\n\terror?: string;\n\t/** Output/results from the teammate */\n\toutput?: string;\n}\n\n/**\n * Configuration for launching a swarm.\n */\nexport interface SwarmConfig {\n\t/** Number of teammates to spawn (1-10) */\n\tteammateCount: number;\n\t/** Plan file path to implement */\n\tplanFile: string;\n\t/** Tasks to distribute among teammates */\n\ttasks: SwarmTask[];\n\t/** Working directory for all teammates */\n\tcwd: string;\n\t/** Session ID of the parent session */\n\tparentSessionId?: string;\n\t/** Model to use for teammates (defaults to parent's model) */\n\tmodel?: string;\n\t/** Agent mode used to resolve subagent model dispatch */\n\tmode?: AgentMode;\n\t/** Parent model provider used when dispatch falls back to a model tier */\n\tmodelProvider?: ModelProvider;\n\t/** Default subagent type for teammate tasks without their own type */\n\tsubagentType?: SubagentType;\n\t/** Default reasoning hint for teammate tasks */\n\treasoningEffort?: ReasoningEffort;\n\t/** Execution transport for teammates; local preserves subprocess behavior. */\n\ttransport?: \"local\" | \"a2a\";\n\t/** Remote A2A routing options for Platform-discovered or registry peers. */\n\ta2a?: SwarmA2AConfig;\n\t/** Maximum time per task in milliseconds */\n\ttaskTimeout?: number;\n\t/** Whether to continue on individual task failures */\n\tcontinueOnFailure?: boolean;\n\t/** Git branch to work on (creates if doesn't exist) */\n\tgitBranch?: string;\n}\n\n/**\n * Configuration for remote A2A-backed swarm teammates.\n */\nexport interface SwarmA2AConfig {\n\t/** Named peers from the local A2A registry, used round-robin. */\n\tpeers?: string[];\n\t/** Override for the local A2A peer registry path. */\n\tregistryPath?: string;\n\t/** Override for the local A2A task ledger path. */\n\ttasksPath?: string;\n\t/** Default remote A2A skill id. */\n\tskillId?: string;\n\t/** Optional delegation role shown in task ledger metadata. */\n\trole?: string;\n\t/** Discover remote peers from Platform Agent Registry instead of local peers. */\n\tdiscover?: boolean;\n\t/** Platform workspace id for discovery. */\n\tworkspaceId?: string;\n\t/** Capability filter for Platform discovery. */\n\tcapability?: string;\n\t/** Surface filter for Platform discovery. Defaults to a2a. */\n\tsurface?: string;\n\t/** Prefer internal endpoints returned by Platform Agent Registry. */\n\tpreferInternalEndpoint?: boolean;\n\t/** Maximum Platform candidates to consider. */\n\tlimit?: number;\n\t/** Timeout for individual A2A HTTP calls. */\n\ttimeoutMs?: number;\n\t/** Max attempts for individual A2A HTTP calls. */\n\tmaxAttempts?: number;\n\t/** Max time to wait for a remote task to reach terminal state. */\n\tmaxWaitMs?: number;\n\t/** Poll interval while waiting for remote task state. */\n\tpollIntervalMs?: number;\n\t/** Optional push callback config sent to remote peers for task progress/artifact updates. */\n\tpushNotificationConfig?: A2ATaskPushNotificationConfig;\n}\n\n/**\n * Public, non-secret correlation metadata for a remote A2A swarm teammate.\n */\nexport interface SwarmA2ATeammateExecution {\n\t/** Peer selected for this teammate task. */\n\tpeer: string;\n\t/** Optional human-readable peer label. */\n\tpeerDisplayName?: string;\n\t/** Peer source used by the router. */\n\tsource: \"registry\" | \"platform-agent-registry\";\n\t/** Parent swarm task id used to derive telemetry lane ids. */\n\tparentTaskId?: string;\n\t/** A2A task id returned by the peer. */\n\ttaskId: string;\n\t/** A2A context id used for resume/reply. */\n\tcontextId?: string;\n\t/** A2A message id sent by the coordinator. */\n\tmessageId: string;\n\t/** A2A skill id used for remote routing. */\n\tskillId?: string;\n\t/** Delegation role recorded for the remote task. */\n\trole?: string;\n}\n\n/**\n * Status of the overall swarm execution.\n */\nexport type SwarmStatus =\n\t| \"initializing\"\n\t| \"running\"\n\t| \"completing\"\n\t| \"completed\"\n\t| \"failed\"\n\t| \"cancelled\";\n\n/**\n * State of the swarm execution.\n */\nexport interface SwarmState {\n\t/** Unique swarm execution ID */\n\tid: string;\n\t/** Current status */\n\tstatus: SwarmStatus;\n\t/** Configuration used to launch */\n\tconfig: SwarmConfig;\n\t/** All teammates in the swarm */\n\tteammates: SwarmTeammate[];\n\t/** Tasks pending assignment */\n\tpendingTasks: SwarmTask[];\n\t/** Tasks currently being worked on */\n\tactiveTasks: Map<string, string>; // taskId -> teammateId\n\t/** Completed task IDs */\n\tcompletedTasks: Set<string>;\n\t/** Failed task IDs */\n\tfailedTasks: Set<string>;\n\t/** Start timestamp */\n\tstartedAt: number;\n\t/** Completion timestamp */\n\tcompletedAt?: number;\n\t/** Error message if swarm failed */\n\terror?: string;\n}\n\n/**\n * Event emitted during swarm execution.\n */\nexport type SwarmEvent =\n\t| { type: \"swarm_start\"; swarmId: string; config: SwarmConfig }\n\t| { type: \"teammate_spawn\"; swarmId: string; teammate: SwarmTeammate }\n\t| {\n\t\t\ttype: \"task_start\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttask: SwarmTask;\n\t }\n\t| {\n\t\t\ttype: \"task_complete\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttaskId: string;\n\t\t\toutput: string;\n\t }\n\t| {\n\t\t\ttype: \"task_fail\";\n\t\t\tswarmId: string;\n\t\t\tteammateId: string;\n\t\t\ttaskId: string;\n\t\t\terror: string;\n\t }\n\t| {\n\t\t\ttype: \"teammate_complete\";\n\t\t\tswarmId: string;\n\t\t\tteammate: SwarmTeammate;\n\t }\n\t| { type: \"swarm_complete\"; swarmId: string; state: SwarmState }\n\t| { type: \"swarm_fail\"; swarmId: string; error: string };\n\n/**\n * Callback for swarm events.\n */\nexport type SwarmEventHandler = (event: SwarmEvent) => void;\n\n/**\n * Result of parsing a plan file into tasks.\n */\nexport interface ParsedPlan {\n\t/** Plan title/name */\n\ttitle: string;\n\t/** Extracted tasks */\n\ttasks: SwarmTask[];\n\t/** Raw plan content */\n\tcontent: string;\n}\n"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const TOOL_CAPABILITY_SCHEMA_VERSION = "evalops.maestro.tool-capability.v1";
|
|
2
|
+
export type ToolDomain = "desktop" | "file" | "shell" | "web" | "mcp" | "unknown";
|
|
3
|
+
export type ToolRiskClass = "observe" | "low" | "medium" | "high";
|
|
4
|
+
export type ToolLane = "desktop_observe" | "desktop_action" | "file_read" | "file_edit" | "shell_exec" | "web_access" | "mcp_meta" | "unknown";
|
|
5
|
+
export interface ToolCapabilityInput {
|
|
6
|
+
server: string;
|
|
7
|
+
toolName: string;
|
|
8
|
+
annotations?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface ToolCapabilityMetadata {
|
|
11
|
+
schemaVersion: typeof TOOL_CAPABILITY_SCHEMA_VERSION;
|
|
12
|
+
server: string;
|
|
13
|
+
toolName: string;
|
|
14
|
+
domain: ToolDomain;
|
|
15
|
+
toolLane: ToolLane;
|
|
16
|
+
riskClass: ToolRiskClass;
|
|
17
|
+
requiresReceipt: boolean;
|
|
18
|
+
proofRequired: boolean;
|
|
19
|
+
mutatesDesktop: boolean;
|
|
20
|
+
mutatesFiles: boolean;
|
|
21
|
+
rawSecretPossible: boolean;
|
|
22
|
+
readOnlyHint?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ToolCapabilitySummary {
|
|
25
|
+
total: number;
|
|
26
|
+
byDomain: Record<ToolDomain, number>;
|
|
27
|
+
byRiskClass: Record<ToolRiskClass, number>;
|
|
28
|
+
byToolLane: Record<ToolLane, number>;
|
|
29
|
+
mutating: {
|
|
30
|
+
desktop: number;
|
|
31
|
+
files: number;
|
|
32
|
+
};
|
|
33
|
+
requiresReceipt: number;
|
|
34
|
+
rawSecretPossible: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=tool-capability-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-capability-types.d.ts","sourceRoot":"","sources":["../../src/agent/tool-capability-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,uCACN,CAAC;AAEtC,MAAM,MAAM,UAAU,GACnB,SAAS,GACT,MAAM,GACN,OAAO,GACP,KAAK,GACL,KAAK,GACL,SAAS,CAAC;AACb,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAClE,MAAM,MAAM,QAAQ,GACjB,iBAAiB,GACjB,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,UAAU,GACV,SAAS,CAAC;AAEb,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACtC,aAAa,EAAE,OAAO,8BAA8B,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,QAAQ,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-capability-types.js","sourceRoot":"","sources":["../../src/agent/tool-capability-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,8BAA8B,GAC1C,oCAAoC,CAAC","sourcesContent":["export const TOOL_CAPABILITY_SCHEMA_VERSION =\n\t\"evalops.maestro.tool-capability.v1\";\n\nexport type ToolDomain =\n\t| \"desktop\"\n\t| \"file\"\n\t| \"shell\"\n\t| \"web\"\n\t| \"mcp\"\n\t| \"unknown\";\nexport type ToolRiskClass = \"observe\" | \"low\" | \"medium\" | \"high\";\nexport type 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\nexport interface ToolCapabilityInput {\n\tserver: string;\n\ttoolName: string;\n\tannotations?: Record<string, unknown>;\n}\n\nexport interface ToolCapabilityMetadata {\n\tschemaVersion: typeof TOOL_CAPABILITY_SCHEMA_VERSION;\n\tserver: string;\n\ttoolName: string;\n\tdomain: ToolDomain;\n\ttoolLane: ToolLane;\n\triskClass: ToolRiskClass;\n\trequiresReceipt: boolean;\n\tproofRequired: boolean;\n\tmutatesDesktop: boolean;\n\tmutatesFiles: boolean;\n\trawSecretPossible: boolean;\n\treadOnlyHint?: boolean;\n}\n\nexport interface ToolCapabilitySummary {\n\ttotal: number;\n\tbyDomain: Record<ToolDomain, number>;\n\tbyRiskClass: Record<ToolRiskClass, number>;\n\tbyToolLane: Record<ToolLane, number>;\n\tmutating: {\n\t\tdesktop: number;\n\t\tfiles: number;\n\t};\n\trequiresReceipt: number;\n\trawSecretPossible: number;\n}\n"]}
|
|
@@ -61,6 +61,17 @@ export interface ToolExecutionBridgeInput {
|
|
|
61
61
|
summaryLabel?: string;
|
|
62
62
|
actionDescription?: string;
|
|
63
63
|
}
|
|
64
|
+
export interface ToolExecutionBridgeRuntimeLinkage {
|
|
65
|
+
agentRunId?: string;
|
|
66
|
+
agentId?: string;
|
|
67
|
+
workspaceId?: string;
|
|
68
|
+
sessionId?: string;
|
|
69
|
+
remoteRunnerSessionId?: string;
|
|
70
|
+
}
|
|
71
|
+
export type ToolExecutionBridgeRuntimeLinkageProvider = ToolExecutionBridgeRuntimeLinkage | (() => ToolExecutionBridgeRuntimeLinkage | undefined);
|
|
72
|
+
export interface DefaultPlatformToolExecutionBridgeOptions {
|
|
73
|
+
runtimeLinkage?: ToolExecutionBridgeRuntimeLinkageProvider;
|
|
74
|
+
}
|
|
64
75
|
interface ToolExecutionClassification {
|
|
65
76
|
family: "bash" | "mcp";
|
|
66
77
|
mode: PlatformBridgeMode;
|
|
@@ -75,6 +86,8 @@ export interface PlatformToolExecutionBridge {
|
|
|
75
86
|
recordGovernedOutput(plan: GovernedToolExecutionPlan, result: ToolResultMessage, durationMs?: number, signal?: AbortSignal): Promise<ObserveToolExecutionResult>;
|
|
76
87
|
}
|
|
77
88
|
export declare class DefaultPlatformToolExecutionBridge implements PlatformToolExecutionBridge {
|
|
89
|
+
private readonly runtimeLinkage?;
|
|
90
|
+
constructor(options?: DefaultPlatformToolExecutionBridgeOptions);
|
|
78
91
|
prepare(input: ToolExecutionBridgeInput, signal?: AbortSignal): Promise<ToolExecutionBridgePreparation>;
|
|
79
92
|
resolveApproval(input: ToolExecutionBridgeInput, plan: GovernedToolExecutionPlan, decision: ActionApprovalDecision, signal?: AbortSignal): Promise<ToolExecutionBridgeApprovalResolution>;
|
|
80
93
|
recordObservation(plan: ObserveToolExecutionPlan, result: ToolResultMessage, signal?: AbortSignal): Promise<ObserveToolExecutionResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution-bridge.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution-bridge.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,KAAK,0BAA0B,EAE/B,KAAK,oBAAoB,EAEzB,KAAK,eAAe,EAIpB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAK/B,MAAM,yCAAyC,CAAC;AAIjD,OAAO,KAAK,EACX,sBAAsB,EACtB,qBAAqB,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACX,cAAc,EACd,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,MAAM,aAAa,CAAC;AAmErB,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,cAAc,EAAE,2BAA2B,CAAC;IAC5C,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,0BAA0B,CAAC;IACpC,QAAQ,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACzC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,2BAA2B,CAAC;IAC5C,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,0BAA0B,CAAC;IACpC,QAAQ,EAAE,2BAA2B,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,uBAAuB,GAChC,wBAAwB,GACxB,yBAAyB,CAAC;AAE7B,MAAM,MAAM,8BAA8B,GACvC;IACA,MAAM,EAAE,MAAM,CAAC;CACd,GACD;IACA,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,wBAAwB,CAAC;CAC9B,GACD;IACA,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,yBAAyB,CAAC;CAC/B,GACD;IACA,MAAM,EAAE,eAAe,CAAC;IACxB,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,qBAAqB,CAAC;CAC9B,GACD;IACA,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,yBAAyB,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CACd,CAAC;AAEL,MAAM,MAAM,qCAAqC,GAC9C;IACA,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,yBAAyB,CAAC;CAC/B,GACD;IACA,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CACd,CAAC;AAEL,MAAM,WAAW,0BAA0B;IAC1C,QAAQ,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACxC,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,2BAA2B;IACpC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,sBAAsB,CAAC;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,oBAAoB,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"tool-execution-bridge.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -286,13 +286,17 @@ function buildOutputPayload(result, durationMs) {
|
|
|
286
286
|
: {}),
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
|
-
function buildLinkage(cfg, toolCall, organizationId, workspaceId) {
|
|
290
|
-
const sessionId = trimString(cfg.session?.id) ??
|
|
291
|
-
|
|
289
|
+
function buildLinkage(cfg, toolCall, organizationId, workspaceId, runtimeLinkage) {
|
|
290
|
+
const sessionId = trimString(cfg.session?.id) ??
|
|
291
|
+
trimString(runtimeLinkage?.sessionId) ??
|
|
292
|
+
getEnvValue(["MAESTRO_SESSION_ID"]);
|
|
293
|
+
const agentRunId = trimString(runtimeLinkage?.agentRunId) ??
|
|
294
|
+
getEnvValue(["MAESTRO_AGENT_RUN_ID"]);
|
|
292
295
|
return {
|
|
293
|
-
workspaceId,
|
|
296
|
+
workspaceId: trimString(runtimeLinkage?.workspaceId) ?? workspaceId,
|
|
294
297
|
...(organizationId ? { organizationId } : {}),
|
|
295
|
-
agentId:
|
|
298
|
+
agentId: trimString(runtimeLinkage?.agentId) ??
|
|
299
|
+
getEnvValue(["MAESTRO_AGENT_ID"]) ??
|
|
296
300
|
trimString(process.env.npm_package_name) ??
|
|
297
301
|
"maestro",
|
|
298
302
|
...(agentRunId ? { runId: agentRunId } : {}),
|
|
@@ -352,14 +356,17 @@ function buildRuntimeContextMetadata(linkage) {
|
|
|
352
356
|
...(gitCommit ? { maestro_git_commit: gitCommit } : {}),
|
|
353
357
|
};
|
|
354
358
|
}
|
|
355
|
-
function buildMetadata(input, classification, linkage) {
|
|
359
|
+
function buildMetadata(input, classification, linkage, runtimeLinkage) {
|
|
356
360
|
const originalArgs = input.toolCall.arguments;
|
|
357
361
|
const redactedArguments = stableStringify(originalArgs) !== stableStringify(input.sanitizedArgs);
|
|
358
|
-
const sessionId = trimString(input.cfg.session?.id) ??
|
|
359
|
-
|
|
360
|
-
"
|
|
361
|
-
|
|
362
|
-
|
|
362
|
+
const sessionId = trimString(input.cfg.session?.id) ??
|
|
363
|
+
trimString(runtimeLinkage?.sessionId) ??
|
|
364
|
+
getEnvValue(["MAESTRO_SESSION_ID"]);
|
|
365
|
+
const remoteRunnerSessionId = trimString(runtimeLinkage?.remoteRunnerSessionId) ??
|
|
366
|
+
getEnvValue([
|
|
367
|
+
"MAESTRO_REMOTE_RUNNER_SESSION_ID",
|
|
368
|
+
"MAESTRO_RUNNER_SESSION_ID",
|
|
369
|
+
]);
|
|
363
370
|
return {
|
|
364
371
|
maestro_bridge_mode: classification.mode,
|
|
365
372
|
maestro_tool_call_id: input.toolCall.id,
|
|
@@ -380,8 +387,8 @@ function buildMetadata(input, classification, linkage) {
|
|
|
380
387
|
maestro_local_execution_authoritative: String(classification.mode === "governed"),
|
|
381
388
|
};
|
|
382
389
|
}
|
|
383
|
-
function buildExecuteRequest(input, config, classification) {
|
|
384
|
-
const linkage = buildLinkage(input.cfg, input.toolCall, config.organizationId, config.workspaceId ?? process.cwd());
|
|
390
|
+
function buildExecuteRequest(input, config, classification, runtimeLinkage) {
|
|
391
|
+
const linkage = buildLinkage(input.cfg, input.toolCall, config.organizationId, config.workspaceId ?? process.cwd(), runtimeLinkage);
|
|
385
392
|
return {
|
|
386
393
|
linkage,
|
|
387
394
|
tool: classification.tool,
|
|
@@ -397,7 +404,7 @@ function buildExecuteRequest(input, config, classification) {
|
|
|
397
404
|
allowNonIdempotentRetry: false,
|
|
398
405
|
},
|
|
399
406
|
idempotencyKey: `maestro:${input.toolCall.id}`,
|
|
400
|
-
metadata: buildMetadata(input, classification, linkage),
|
|
407
|
+
metadata: buildMetadata(input, classification, linkage, runtimeLinkage),
|
|
401
408
|
};
|
|
402
409
|
}
|
|
403
410
|
function planFromResponse(classification, config, request, response) {
|
|
@@ -439,6 +446,9 @@ function isBridgeGloballyDisabled() {
|
|
|
439
446
|
return isFeatureFlagEnabled(MAESTRO_PLATFORM_RUNTIME_BRIDGE_KILL_SWITCH);
|
|
440
447
|
}
|
|
441
448
|
export class DefaultPlatformToolExecutionBridge {
|
|
449
|
+
constructor(options = {}) {
|
|
450
|
+
this.runtimeLinkage = options.runtimeLinkage;
|
|
451
|
+
}
|
|
442
452
|
async prepare(input, signal) {
|
|
443
453
|
if (isBridgeGloballyDisabled()) {
|
|
444
454
|
return { status: "skip" };
|
|
@@ -456,7 +466,7 @@ export class DefaultPlatformToolExecutionBridge {
|
|
|
456
466
|
if (!config) {
|
|
457
467
|
return { status: "skip" };
|
|
458
468
|
}
|
|
459
|
-
const request = buildExecuteRequest(input, config, classification);
|
|
469
|
+
const request = buildExecuteRequest(input, config, classification, resolveRuntimeLinkage(this.runtimeLinkage));
|
|
460
470
|
if (classification.mode === "observe") {
|
|
461
471
|
return {
|
|
462
472
|
status: "observe",
|
|
@@ -636,6 +646,9 @@ export class DefaultPlatformToolExecutionBridge {
|
|
|
636
646
|
}
|
|
637
647
|
}
|
|
638
648
|
}
|
|
649
|
+
function resolveRuntimeLinkage(provider) {
|
|
650
|
+
return typeof provider === "function" ? provider() : provider;
|
|
651
|
+
}
|
|
639
652
|
let defaultBridge = null;
|
|
640
653
|
export function getDefaultPlatformToolExecutionBridge() {
|
|
641
654
|
if (!defaultBridge) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution-bridge.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tMAESTRO_PLATFORM_RUNTIME_BRIDGE_KILL_SWITCH,\n\tisFeatureFlagEnabled,\n\tisPlatformRuntimeObserveEnabled,\n\tisPlatformToolExecutionBridgeEnabled,\n} from \"../../config/feature-flags.js\";\nimport {\n\ttype ExecutePlatformToolRequest,\n\ttype ExecutePlatformToolResponse,\n\ttype PlatformConnectorRef,\n\ttype PlatformToolExecutionRecord,\n\ttype PlatformToolRef,\n\ttype RecordPlatformToolExecutionOutputRequest,\n\ttype ResumePlatformToolExecutionRequest,\n\ttype ToolExecutionLinkage,\n\ttype ToolExecutionRiskLevel,\n\ttype ToolExecutionServiceConfig,\n\texecuteToolWithPlatform,\n\trecordToolExecutionOutputWithPlatform,\n\tresolveToolExecutionServiceConfig,\n\tresumeToolExecutionWithPlatform,\n} from \"../../platform/tool-execution-client.js\";\nimport { isReadOnlyTool } from \"../../tools/parallel-execution.js\";\nimport { isAbortError } from \"../../utils/abort-error.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type {\n\tActionApprovalDecision,\n\tActionApprovalRequest,\n} from \"../action-approval.js\";\nimport type {\n\tAgentRunConfig,\n\tAgentTool,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport { stableStringify } from \"./stable-stringify.js\";\n\nconst logger = createLogger(\"transport:tool-execution-bridge\");\n\nconst OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH = 280;\nconst METADATA_VALUE_MAX_LENGTH = 512;\nconst READ_ONLY_BASH_PREFIXES = [\n\t\"cat\",\n\t\"cd\",\n\t\"df\",\n\t\"du\",\n\t\"echo\",\n\t\"env\",\n\t\"find\",\n\t\"git diff\",\n\t\"git log\",\n\t\"git remote -v\",\n\t\"git rev-parse\",\n\t\"git show\",\n\t\"git status\",\n\t\"grep\",\n\t\"head\",\n\t\"ls\",\n\t\"pwd\",\n\t\"printenv\",\n\t\"ps\",\n\t\"rg\",\n\t\"sed -n\",\n\t\"tail\",\n\t\"which\",\n].map((value) => value.toLowerCase());\n\nconst BASH_MUTATION_MARKERS = [\n\t/\\bchmod\\b/u,\n\t/\\bchown\\b/u,\n\t/\\bcp\\b/u,\n\t/\\bgit\\s+(add|am|apply|branch|checkout|cherry-pick|clean|commit|merge|mv|pull|push|rebase|reset|restore|revert|rm|stash|switch|tag)\\b/u,\n\t/\\bmkdir\\b/u,\n\t/\\bmv\\b/u,\n\t/\\bnpm\\s+(install|publish|uninstall|update|version)\\b/u,\n\t/\\bpnpm\\s+(add|install|remove|update)\\b/u,\n\t/\\bpython\\b.*-c/u,\n\t/\\brm\\b/u,\n\t/\\bsed\\s+-i\\b/u,\n\t/\\btee\\b/u,\n\t/\\btouch\\b/u,\n\t/\\byarn\\s+(add|install|remove|upgrade)\\b/u,\n\t/\\bbun\\s+(add|install|remove|update)\\b/u,\n\t/\\bkubectl\\s+(apply|create|delete|patch|replace|scale)\\b/u,\n\t/\\bterraform\\s+(apply|destroy|import)\\b/u,\n\t/(^|[^<])>{1,2}/u,\n] as const;\n\nconst READ_ONLY_GIT_BRANCH_ARGS = new Set([\n\t\"--all\",\n\t\"--list\",\n\t\"--merged\",\n\t\"--no-contains\",\n\t\"--no-merged\",\n\t\"--points-at\",\n\t\"--remotes\",\n\t\"-a\",\n\t\"-l\",\n\t\"-r\",\n]);\n\nexport type PlatformBridgeMode = \"observe\" | \"governed\";\n\nexport interface ToolExecutionBridgeMetadata {\n\ttoolExecutionId?: string;\n\tapprovalRequestId?: string;\n}\n\nexport interface ObserveToolExecutionPlan {\n\tkind: \"observe\";\n\tmode: \"observe\";\n\tclassification: ToolExecutionClassification;\n\tconfig: ToolExecutionServiceConfig;\n\trequest: ExecutePlatformToolRequest;\n\tmetadata: ToolExecutionBridgeMetadata;\n}\n\nexport interface GovernedToolExecutionPlan {\n\tkind: \"governed\";\n\tmode: \"governed\";\n\tclassification: ToolExecutionClassification;\n\tconfig: ToolExecutionServiceConfig;\n\trequest: ExecutePlatformToolRequest;\n\tmetadata: ToolExecutionBridgeMetadata;\n\tresumeToken?: string;\n}\n\nexport type ToolExecutionBridgePlan =\n\t| ObserveToolExecutionPlan\n\t| GovernedToolExecutionPlan;\n\nexport type ToolExecutionBridgePreparation =\n\t| {\n\t\t\tstatus: \"skip\";\n\t }\n\t| {\n\t\t\tstatus: \"observe\";\n\t\t\tplan: ObserveToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"allow\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"wait_approval\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t\t\trequest: ActionApprovalRequest;\n\t }\n\t| {\n\t\t\tstatus: \"deny\";\n\t\t\tplan?: GovernedToolExecutionPlan;\n\t\t\treason: string;\n\t };\n\nexport type ToolExecutionBridgeApprovalResolution =\n\t| {\n\t\t\tstatus: \"allow\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"deny\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t\t\treason: string;\n\t };\n\nexport interface ObserveToolExecutionResult {\n\tmetadata: ToolExecutionBridgeMetadata;\n}\n\nexport interface ToolExecutionBridgeInput {\n\tcfg: AgentRunConfig;\n\ttoolCall: ToolCall;\n\ttoolDef?: AgentTool;\n\tsanitizedArgs: Record<string, unknown>;\n\tdisplayName?: string;\n\tsummaryLabel?: string;\n\tactionDescription?: string;\n}\n\ninterface ToolExecutionClassification {\n\tfamily: \"bash\" | \"mcp\";\n\tmode: PlatformBridgeMode;\n\triskLevel: ToolExecutionRiskLevel;\n\ttool: PlatformToolRef;\n\tconnector?: PlatformConnectorRef;\n}\n\nfunction trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction getEnvValue(names: readonly string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction metadataValue(value: string | undefined): string | undefined {\n\t// biome-ignore lint/suspicious/noControlCharactersInRegex: metadata must neutralize C0 control characters and DEL.\n\tconst normalized = value?.replace(/[\\x00-\\x1f\\x7f]/gu, \" \");\n\tconst trimmed = trimString(normalized);\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tif (trimmed.length <= METADATA_VALUE_MAX_LENGTH) {\n\t\treturn trimmed;\n\t}\n\tconst suffix = \"...\";\n\tconst maxPrefixLength = METADATA_VALUE_MAX_LENGTH - suffix.length;\n\tlet prefix = \"\";\n\tfor (const char of trimmed) {\n\t\tif (prefix.length + char.length > maxPrefixLength) {\n\t\t\tbreak;\n\t\t}\n\t\tprefix += char;\n\t}\n\treturn `${prefix.trimEnd()}${suffix}`;\n}\n\nfunction getMetadataEnvValue(names: readonly string[]): string | undefined {\n\treturn metadataValue(getEnvValue(names));\n}\n\nfunction getCurrentWorkingDirectory(): string | undefined {\n\ttry {\n\t\treturn metadataValue(process.cwd());\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction buildShellCommandSummary(command: string): string {\n\tconst normalized = command.replace(/\\s+/gu, \" \").trim();\n\tif (normalized.length <= 96) {\n\t\treturn normalized;\n\t}\n\treturn `${normalized.slice(0, 93).trimEnd()}...`;\n}\n\nfunction isReadOnlyBashCommand(command: string): boolean {\n\tconst normalized = command.replace(/\\s+/gu, \" \").trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (isReadOnlyGitBranchCommand(normalized)) {\n\t\treturn true;\n\t}\n\tif (BASH_MUTATION_MARKERS.some((pattern) => pattern.test(normalized))) {\n\t\treturn false;\n\t}\n\treturn READ_ONLY_BASH_PREFIXES.some(\n\t\t(prefix) => normalized === prefix || normalized.startsWith(`${prefix} `),\n\t);\n}\n\nfunction isReadOnlyGitBranchCommand(normalized: string): boolean {\n\tconst parts = normalized.split(\" \");\n\tif (parts[0] !== \"git\" || parts[1] !== \"branch\") {\n\t\treturn false;\n\t}\n\tconst args = parts.slice(2);\n\tif (args.length === 0) {\n\t\treturn true;\n\t}\n\treturn args.every(\n\t\t(arg) =>\n\t\t\tREAD_ONLY_GIT_BRANCH_ARGS.has(arg) ||\n\t\t\targ.startsWith(\"--format=\") ||\n\t\t\targ.startsWith(\"--sort=\"),\n\t);\n}\n\nfunction inferBashRiskLevel(command: string): ToolExecutionRiskLevel {\n\tconst normalized = command.toLowerCase();\n\tif (\n\t\t/\\brm\\s+-rf\\b/u.test(normalized) ||\n\t\t/\\bgit\\s+push(\\s+--force|\\s+-f)\\b/u.test(normalized) ||\n\t\t/\\bnpm\\s+publish\\b/u.test(normalized) ||\n\t\t/\\bkubectl\\s+delete\\b/u.test(normalized) ||\n\t\t/\\bterraform\\s+destroy\\b/u.test(normalized)\n\t) {\n\t\treturn \"RISK_LEVEL_CRITICAL\";\n\t}\n\treturn isReadOnlyBashCommand(command) ? \"RISK_LEVEL_LOW\" : \"RISK_LEVEL_HIGH\";\n}\n\nfunction normalizeCapabilitySegment(value: string): string {\n\treturn value.replace(/[^a-zA-Z0-9_.-]/gu, \"_\");\n}\n\nfunction parseBridgeMcpToolName(\n\tname: string,\n): { server: string; tool?: string } | null {\n\tconst parts = name.split(\"__\");\n\tif (parts[0] !== \"mcp\" || parts.length < 2) {\n\t\treturn null;\n\t}\n\tconst server = parts[1];\n\tif (!server) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tserver,\n\t\ttool: parts.length > 2 ? parts.slice(2).join(\"__\") : undefined,\n\t};\n}\n\nfunction classifyToolExecution(\n\ttoolCall: ToolCall,\n\ttoolDef: AgentTool | undefined,\n\trollout: {\n\t\tobserveEnabled: boolean;\n\t\tgovernedEnabled: boolean;\n\t},\n): ToolExecutionClassification | null {\n\tif (!rollout.observeEnabled && !rollout.governedEnabled) {\n\t\treturn null;\n\t}\n\n\tif (toolCall.name === \"bash\") {\n\t\tconst command =\n\t\t\ttypeof toolCall.arguments.command === \"string\"\n\t\t\t\t? toolCall.arguments.command\n\t\t\t\t: \"\";\n\t\tconst isReadOnly = isReadOnlyBashCommand(command);\n\t\tconst mode: PlatformBridgeMode =\n\t\t\tisReadOnly || !rollout.governedEnabled ? \"observe\" : \"governed\";\n\t\tif (mode === \"observe\" && !rollout.observeEnabled) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tfamily: \"bash\",\n\t\t\tmode,\n\t\t\triskLevel: inferBashRiskLevel(command),\n\t\t\ttool: {\n\t\t\t\tnamespace: \"maestro\",\n\t\t\t\tname: \"bash\",\n\t\t\t\tversion: process.env.npm_package_version,\n\t\t\t\tcapability: \"maestro.tool.bash\",\n\t\t\t\toperation: command ? buildShellCommandSummary(command) : \"shell\",\n\t\t\t\tidempotent: isReadOnly,\n\t\t\t\tmutatesResource: !isReadOnly,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst mcpTool = parseBridgeMcpToolName(toolCall.name);\n\tif (!mcpTool) {\n\t\treturn null;\n\t}\n\tconst mode: PlatformBridgeMode = rollout.governedEnabled\n\t\t? \"governed\"\n\t\t: \"observe\";\n\tconst toolName = mcpTool.tool ?? toolCall.name;\n\tconst readOnly = isReadOnlyTool(toolCall.name, toolDef?.annotations);\n\treturn {\n\t\tfamily: \"mcp\",\n\t\tmode,\n\t\triskLevel: readOnly ? \"RISK_LEVEL_MEDIUM\" : \"RISK_LEVEL_HIGH\",\n\t\ttool: {\n\t\t\tnamespace: \"mcp\",\n\t\t\tname: toolName,\n\t\t\tversion: process.env.npm_package_version,\n\t\t\tcapability: `mcp.${normalizeCapabilitySegment(mcpTool.server)}.${normalizeCapabilitySegment(toolName)}`,\n\t\t\toperation: toolName,\n\t\t\tidempotent: readOnly,\n\t\t\tmutatesResource: !readOnly,\n\t\t},\n\t\tconnector: {\n\t\t\tproviderId: mcpTool.server,\n\t\t\tresourceId: mcpTool.server,\n\t\t\tresourceKind: \"mcp_server\",\n\t\t},\n\t};\n}\n\nfunction cloneRecord(value: Record<string, unknown>): Record<string, unknown> {\n\treturn JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n}\n\nfunction scrubText(value: string): { text: string; redactions: string[] } {\n\tlet next = value;\n\tconst redactions = new Set<string>();\n\tfor (const pattern of [\n\t\t/\\b(gh[pousr]_[A-Za-z0-9_]{20,})\\b/gu,\n\t\t/\\b(Bearer\\s+[A-Za-z0-9._-]{16,})\\b/giu,\n\t\t/\\b([A-Za-z0-9_-]{32,})\\b/gu,\n\t]) {\n\t\tif (pattern.test(next)) {\n\t\t\tredactions.add(\"secret_like_token\");\n\t\t\tnext = next.replace(pattern, \"[REDACTED]\");\n\t\t}\n\t}\n\treturn { text: next, redactions: [...redactions] };\n}\n\nfunction summarizeToolResult(result: ToolResultMessage): {\n\tsummary: string;\n\tredactions: string[];\n} {\n\tconst text = result.content\n\t\t.filter(\n\t\t\t(part): part is { type: \"text\"; text: string } => part.type === \"text\",\n\t\t)\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\tif (!text) {\n\t\treturn {\n\t\t\tsummary: result.isError\n\t\t\t\t? \"Tool failed without text output\"\n\t\t\t\t: \"Tool completed\",\n\t\t\tredactions: [],\n\t\t};\n\t}\n\tconst firstLine = text.split(/\\r?\\n/u)[0]?.trim() ?? text;\n\tconst shortened =\n\t\tfirstLine.length > OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH\n\t\t\t? `${firstLine.slice(0, OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH - 3).trimEnd()}...`\n\t\t\t: firstLine;\n\tconst scrubbed = scrubText(shortened);\n\treturn {\n\t\tsummary: scrubbed.text,\n\t\tredactions: scrubbed.redactions,\n\t};\n}\n\nfunction buildOutputPayload(\n\tresult: ToolResultMessage,\n\tdurationMs: number | undefined,\n): RecordPlatformToolExecutionOutputRequest[\"output\"] {\n\tconst summary = summarizeToolResult(result);\n\tconst safeOutput = {\n\t\tstatus: result.isError ? \"failed\" : \"succeeded\",\n\t\ttool_name: result.toolName,\n\t\ttool_call_id: result.toolCallId,\n\t\tsummary: summary.summary,\n\t};\n\treturn {\n\t\tsafeOutput,\n\t\tredactions: summary.redactions,\n\t\tcontentType: \"application/json\",\n\t\t...(durationMs !== undefined\n\t\t\t? { durationMs: Math.max(0, Math.round(durationMs)) }\n\t\t\t: {}),\n\t};\n}\n\nfunction buildLinkage(\n\tcfg: AgentRunConfig,\n\ttoolCall: ToolCall,\n\torganizationId: string | undefined,\n\tworkspaceId: string,\n): ToolExecutionLinkage {\n\tconst sessionId =\n\t\ttrimString(cfg.session?.id) ?? getEnvValue([\"MAESTRO_SESSION_ID\"]);\n\tconst agentRunId = getEnvValue([\"MAESTRO_AGENT_RUN_ID\"]);\n\treturn {\n\t\tworkspaceId,\n\t\t...(organizationId ? { organizationId } : {}),\n\t\tagentId:\n\t\t\tgetEnvValue([\"MAESTRO_AGENT_ID\"]) ??\n\t\t\ttrimString(process.env.npm_package_name) ??\n\t\t\t\"maestro\",\n\t\t...(agentRunId ? { runId: agentRunId } : {}),\n\t\tobjectiveId: getEnvValue([\"MAESTRO_OBJECTIVE_ID\"]),\n\t\tstepId: toolCall.id,\n\t\tactorId: trimString(cfg.user?.id) ?? getEnvValue([\"MAESTRO_ACTOR_ID\"]),\n\t\tsurface: getEnvValue([\"MAESTRO_SURFACE\"]) ?? \"maestro\",\n\t\tchannelId: getEnvValue([\"MAESTRO_CHANNEL_ID\"]),\n\t\tcorrelationId: `${sessionId ?? \"session\"}:${toolCall.id}`,\n\t};\n}\n\nfunction buildRuntimeContextMetadata(\n\tlinkage: ToolExecutionLinkage,\n): Record<string, string> {\n\tconst cwd =\n\t\tgetMetadataEnvValue([\"MAESTRO_CWD\"]) ?? getCurrentWorkingDirectory();\n\tconst workspaceRoot = getMetadataEnvValue([\n\t\t\"MAESTRO_WORKSPACE_ROOT\",\n\t\t\"WORKSPACE_ROOT\",\n\t]);\n\tconst repositoryRoot =\n\t\tgetMetadataEnvValue([\n\t\t\t\"MAESTRO_REPOSITORY_ROOT\",\n\t\t\t\"MAESTRO_REPO_ROOT\",\n\t\t\t\"GITHUB_WORKSPACE\",\n\t\t]) ?? workspaceRoot;\n\tconst repository = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_REPOSITORY\",\n\t\t\"GITHUB_REPOSITORY\",\n\t\t\"CI_PROJECT_PATH\",\n\t]);\n\tconst gitBranch = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_BRANCH\",\n\t\t\"GITHUB_HEAD_REF\",\n\t\t\"GITHUB_REF_NAME\",\n\t\t\"CI_COMMIT_REF_NAME\",\n\t\t\"VERCEL_GIT_COMMIT_REF\",\n\t]);\n\tconst gitCommit = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_COMMIT\",\n\t\t\"GITHUB_SHA\",\n\t\t\"CI_COMMIT_SHA\",\n\t\t\"VERCEL_GIT_COMMIT_SHA\",\n\t]);\n\n\treturn {\n\t\t...(linkage.organizationId\n\t\t\t? { organization_id: linkage.organizationId }\n\t\t\t: {}),\n\t\t...(linkage.workspaceId ? { workspace_id: linkage.workspaceId } : {}),\n\t\t...(linkage.runId ? { maestro_agent_run_id: linkage.runId } : {}),\n\t\tmaestro_agent_run_step_id: linkage.stepId,\n\t\t...(linkage.actorId ? { maestro_actor_id: linkage.actorId } : {}),\n\t\t...(linkage.correlationId\n\t\t\t? { maestro_correlation_id: linkage.correlationId }\n\t\t\t: {}),\n\t\t...(cwd ? { maestro_cwd: cwd } : {}),\n\t\t...(workspaceRoot ? { maestro_workspace_root: workspaceRoot } : {}),\n\t\t...(repositoryRoot ? { maestro_repository_root: repositoryRoot } : {}),\n\t\t...(repository ? { maestro_repository: repository } : {}),\n\t\t...(gitBranch ? { maestro_git_branch: gitBranch } : {}),\n\t\t...(gitCommit ? { maestro_git_commit: gitCommit } : {}),\n\t};\n}\n\nfunction buildMetadata(\n\tinput: ToolExecutionBridgeInput,\n\tclassification: ToolExecutionClassification,\n\tlinkage: ToolExecutionLinkage,\n): Record<string, string> {\n\tconst originalArgs = input.toolCall.arguments as Record<string, unknown>;\n\tconst redactedArguments =\n\t\tstableStringify(originalArgs) !== stableStringify(input.sanitizedArgs);\n\tconst sessionId =\n\t\ttrimString(input.cfg.session?.id) ?? getEnvValue([\"MAESTRO_SESSION_ID\"]);\n\tconst remoteRunnerSessionId = getEnvValue([\n\t\t\"MAESTRO_REMOTE_RUNNER_SESSION_ID\",\n\t\t\"MAESTRO_RUNNER_SESSION_ID\",\n\t]);\n\treturn {\n\t\tmaestro_bridge_mode: classification.mode,\n\t\tmaestro_tool_call_id: input.toolCall.id,\n\t\t...buildRuntimeContextMetadata(linkage),\n\t\t...(sessionId ? { maestro_session_id: sessionId } : {}),\n\t\t...(remoteRunnerSessionId\n\t\t\t? { maestro_remote_runner_session_id: remoteRunnerSessionId }\n\t\t\t: {}),\n\t\t...(input.displayName ? { maestro_display_name: input.displayName } : {}),\n\t\t...(input.summaryLabel\n\t\t\t? { maestro_summary_label: input.summaryLabel }\n\t\t\t: {}),\n\t\t...(input.actionDescription\n\t\t\t? { maestro_action_description: input.actionDescription }\n\t\t\t: {}),\n\t\tmaestro_redacted_arguments: String(redactedArguments),\n\t\tmaestro_tool_family: classification.family,\n\t\tmaestro_local_execution_authoritative: String(\n\t\t\tclassification.mode === \"governed\",\n\t\t),\n\t};\n}\n\nfunction buildExecuteRequest(\n\tinput: ToolExecutionBridgeInput,\n\tconfig: ToolExecutionServiceConfig,\n\tclassification: ToolExecutionClassification,\n): ExecutePlatformToolRequest {\n\tconst linkage = buildLinkage(\n\t\tinput.cfg,\n\t\tinput.toolCall,\n\t\tconfig.organizationId,\n\t\tconfig.workspaceId ?? process.cwd(),\n\t);\n\treturn {\n\t\tlinkage,\n\t\ttool: classification.tool,\n\t\t...(classification.connector\n\t\t\t? { connector: classification.connector }\n\t\t\t: {}),\n\t\targuments: cloneRecord(input.sanitizedArgs),\n\t\triskLevel: classification.riskLevel,\n\t\tretryPolicy: {\n\t\t\tmaxAttempts: 1,\n\t\t\tinitialDelayMs: 0,\n\t\t\tmaxDelayMs: 0,\n\t\t\tallowNonIdempotentRetry: false,\n\t\t},\n\t\tidempotencyKey: `maestro:${input.toolCall.id}`,\n\t\tmetadata: buildMetadata(input, classification, linkage),\n\t};\n}\n\nfunction planFromResponse(\n\tclassification: ToolExecutionClassification,\n\tconfig: ToolExecutionServiceConfig,\n\trequest: ExecutePlatformToolRequest,\n\tresponse: ExecutePlatformToolResponse,\n): GovernedToolExecutionPlan {\n\treturn {\n\t\tkind: \"governed\",\n\t\tmode: \"governed\",\n\t\tclassification,\n\t\tconfig,\n\t\trequest,\n\t\tmetadata: {\n\t\t\ttoolExecutionId: response.execution.id,\n\t\t\tapprovalRequestId: response.execution.approvalWait?.approvalRequestId,\n\t\t},\n\t\tresumeToken: response.execution.approvalWait?.resumeToken,\n\t};\n}\n\nfunction waitApprovalRequest(\n\tinput: ToolExecutionBridgeInput,\n\tplan: GovernedToolExecutionPlan,\n\texecution: PlatformToolExecutionRecord,\n): ActionApprovalRequest {\n\treturn {\n\t\tid:\n\t\t\texecution.approvalWait?.approvalRequestId ??\n\t\t\tplan.metadata.approvalRequestId ??\n\t\t\tinput.toolCall.id,\n\t\ttoolName: input.toolCall.name,\n\t\tdisplayName: input.displayName,\n\t\tsummaryLabel: input.summaryLabel,\n\t\tactionDescription: input.actionDescription,\n\t\targs: input.sanitizedArgs,\n\t\treason:\n\t\t\texecution.approvalWait?.reason ??\n\t\t\texecution.errorMessage ??\n\t\t\t\"Approval required by Platform ToolExecution\",\n\t\tplatform: {\n\t\t\tsource: \"tool_execution\",\n\t\t\ttoolExecutionId: execution.id ?? plan.metadata.toolExecutionId,\n\t\t\tapprovalRequestId:\n\t\t\t\texecution.approvalWait?.approvalRequestId ??\n\t\t\t\tplan.metadata.approvalRequestId,\n\t\t},\n\t};\n}\n\nfunction isBridgeGloballyDisabled(): boolean {\n\treturn isFeatureFlagEnabled(MAESTRO_PLATFORM_RUNTIME_BRIDGE_KILL_SWITCH);\n}\n\nexport interface PlatformToolExecutionBridge {\n\tprepare(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgePreparation>;\n\tresolveApproval(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tplan: GovernedToolExecutionPlan,\n\t\tdecision: ActionApprovalDecision,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgeApprovalResolution>;\n\trecordObservation(\n\t\tplan: ObserveToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult>;\n\trecordGovernedOutput(\n\t\tplan: GovernedToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tdurationMs?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult>;\n}\n\nexport class DefaultPlatformToolExecutionBridge\n\timplements PlatformToolExecutionBridge\n{\n\tasync prepare(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgePreparation> {\n\t\tif (isBridgeGloballyDisabled()) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst rollout = {\n\t\t\tobserveEnabled:\n\t\t\t\tisPlatformRuntimeObserveEnabled() ||\n\t\t\t\tisPlatformToolExecutionBridgeEnabled(),\n\t\t\tgovernedEnabled: isPlatformToolExecutionBridgeEnabled(),\n\t\t};\n\t\tconst classification = classifyToolExecution(\n\t\t\tinput.toolCall,\n\t\t\tinput.toolDef,\n\t\t\trollout,\n\t\t);\n\t\tif (!classification) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst config = await resolveToolExecutionServiceConfig();\n\t\tif (!config) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst request = buildExecuteRequest(input, config, classification);\n\t\tif (classification.mode === \"observe\") {\n\t\t\treturn {\n\t\t\t\tstatus: \"observe\",\n\t\t\t\tplan: {\n\t\t\t\t\tkind: \"observe\",\n\t\t\t\t\tmode: \"observe\",\n\t\t\t\t\tclassification,\n\t\t\t\t\tconfig,\n\t\t\t\t\trequest,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await executeToolWithPlatform(config, request, signal);\n\t\t\tconst plan = planFromResponse(classification, config, request, response);\n\t\t\tswitch (response.execution.state) {\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_DENIED\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason:\n\t\t\t\t\t\t\tresponse.execution.errorMessage ??\n\t\t\t\t\t\t\t\"Action denied by Platform ToolExecution\",\n\t\t\t\t\t};\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_WAITING_APPROVAL\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"wait_approval\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\trequest: waitApprovalRequest(input, plan, response.execution),\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn { status: \"allow\", plan };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tstatus: \"deny\",\n\t\t\t\treason: `Platform ToolExecution unavailable: ${message}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync resolveApproval(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tplan: GovernedToolExecutionPlan,\n\t\tdecision: ActionApprovalDecision,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgeApprovalResolution> {\n\t\tif (!plan.resumeToken || !plan.metadata.approvalRequestId) {\n\t\t\treturn decision.approved\n\t\t\t\t? { status: \"allow\", plan }\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: decision.reason ?? \"Approval denied\",\n\t\t\t\t\t};\n\t\t}\n\t\tconst request: ResumePlatformToolExecutionRequest = {\n\t\t\texecutionId: plan.metadata.toolExecutionId ?? \"\",\n\t\t\tapprovalRequestId: plan.metadata.approvalRequestId,\n\t\t\tresumeToken: plan.resumeToken,\n\t\t\tapproved: decision.approved,\n\t\t\tdecidedBy:\n\t\t\t\tdecision.resolvedBy === \"user\"\n\t\t\t\t\t? (trimString(input.cfg.user?.id) ?? \"user\")\n\t\t\t\t\t: \"policy\",\n\t\t\treason: decision.reason,\n\t\t};\n\t\ttry {\n\t\t\tconst response = await resumeToolExecutionWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tconst nextPlan: GovernedToolExecutionPlan = {\n\t\t\t\t...plan,\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId:\n\t\t\t\t\t\tresponse.execution.id ?? plan.metadata.toolExecutionId,\n\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\tresponse.execution.approvalWait?.approvalRequestId ??\n\t\t\t\t\t\tplan.metadata.approvalRequestId,\n\t\t\t\t},\n\t\t\t};\n\t\t\tswitch (response.execution.state) {\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_DENIED\":\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_FAILED\":\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_CANCELLED\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan: nextPlan,\n\t\t\t\t\t\treason:\n\t\t\t\t\t\t\tresponse.execution.errorMessage ??\n\t\t\t\t\t\t\tdecision.reason ??\n\t\t\t\t\t\t\t\"Platform ToolExecution denied the action\",\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn { status: \"allow\", plan: nextPlan };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn decision.approved\n\t\t\t\t? {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: `Platform ToolExecution decision sync failed: ${message}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: decision.reason ?? `Approval denied (${message})`,\n\t\t\t\t\t};\n\t\t}\n\t}\n\n\tasync recordObservation(\n\t\tplan: ObserveToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult> {\n\t\tconst summary = summarizeToolResult(result);\n\t\tconst request: ExecutePlatformToolRequest = {\n\t\t\t...plan.request,\n\t\t\tmetadata: {\n\t\t\t\t...plan.request.metadata,\n\t\t\t\tmaestro_bridge_mode: \"observe\",\n\t\t\t\tmaestro_local_outcome: result.isError ? \"failed\" : \"succeeded\",\n\t\t\t\tmaestro_local_output_summary: summary.summary,\n\t\t\t\tmaestro_local_output_redactions:\n\t\t\t\t\tsummary.redactions.length > 0 ? summary.redactions.join(\",\") : \"none\",\n\t\t\t},\n\t\t};\n\t\ttry {\n\t\t\tconst response = await executeToolWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId: response.execution.id,\n\t\t\t\t\tapprovalRequestId: response.execution.approvalWait?.approvalRequestId,\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\tlogger.warn(\"Failed to record observe-only tool execution\", {\n\t\t\t\terror: message,\n\t\t\t\ttoolName: plan.request.tool.name,\n\t\t\t\ttoolCallId: plan.request.metadata?.maestro_tool_call_id,\n\t\t\t});\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\t}\n\n\tasync recordGovernedOutput(\n\t\tplan: GovernedToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tdurationMs?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult> {\n\t\tconst executionId = plan.metadata.toolExecutionId;\n\t\tif (!executionId) {\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\n\t\tconst request: RecordPlatformToolExecutionOutputRequest = {\n\t\t\texecutionId,\n\t\t\toutput: buildOutputPayload(result, durationMs),\n\t\t\tmetadata: {\n\t\t\t\t...plan.request.metadata,\n\t\t\t\tmaestro_bridge_mode: \"governed\",\n\t\t\t\tmaestro_local_outcome: result.isError ? \"failed\" : \"succeeded\",\n\t\t\t\tmaestro_tool_call_id: result.toolCallId,\n\t\t\t},\n\t\t};\n\t\ttry {\n\t\t\tconst response = await recordToolExecutionOutputWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId: response.execution.id ?? executionId,\n\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\tresponse.execution.approvalWait?.approvalRequestId ??\n\t\t\t\t\t\tplan.metadata.approvalRequestId,\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tlogger.warn(\"Failed to record governed tool execution output\", {\n\t\t\t\terror: message,\n\t\t\t\ttoolName: plan.request.tool.name,\n\t\t\t\ttoolCallId: result.toolCallId,\n\t\t\t\ttoolExecutionId: executionId,\n\t\t\t});\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\t}\n}\n\nlet defaultBridge: PlatformToolExecutionBridge | null = null;\n\nexport function getDefaultPlatformToolExecutionBridge(): PlatformToolExecutionBridge {\n\tif (!defaultBridge) {\n\t\tdefaultBridge = new DefaultPlatformToolExecutionBridge();\n\t}\n\treturn defaultBridge;\n}\n\nexport function buildObservedResultMetadata(\n\tplan: ToolExecutionBridgePlan | undefined,\n\tobservation: ObserveToolExecutionResult | undefined,\n): ToolExecutionBridgeMetadata {\n\tif (!plan) {\n\t\treturn observation?.metadata ?? {};\n\t}\n\treturn {\n\t\ttoolExecutionId:\n\t\t\tobservation?.metadata.toolExecutionId ?? plan.metadata.toolExecutionId,\n\t\tapprovalRequestId:\n\t\t\tobservation?.metadata.approvalRequestId ??\n\t\t\tplan.metadata.approvalRequestId,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-execution-bridge.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-execution-bridge.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tMAESTRO_PLATFORM_RUNTIME_BRIDGE_KILL_SWITCH,\n\tisFeatureFlagEnabled,\n\tisPlatformRuntimeObserveEnabled,\n\tisPlatformToolExecutionBridgeEnabled,\n} from \"../../config/feature-flags.js\";\nimport {\n\ttype ExecutePlatformToolRequest,\n\ttype ExecutePlatformToolResponse,\n\ttype PlatformConnectorRef,\n\ttype PlatformToolExecutionRecord,\n\ttype PlatformToolRef,\n\ttype RecordPlatformToolExecutionOutputRequest,\n\ttype ResumePlatformToolExecutionRequest,\n\ttype ToolExecutionLinkage,\n\ttype ToolExecutionRiskLevel,\n\ttype ToolExecutionServiceConfig,\n\texecuteToolWithPlatform,\n\trecordToolExecutionOutputWithPlatform,\n\tresolveToolExecutionServiceConfig,\n\tresumeToolExecutionWithPlatform,\n} from \"../../platform/tool-execution-client.js\";\nimport { isReadOnlyTool } from \"../../tools/parallel-execution.js\";\nimport { isAbortError } from \"../../utils/abort-error.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type {\n\tActionApprovalDecision,\n\tActionApprovalRequest,\n} from \"../action-approval.js\";\nimport type {\n\tAgentRunConfig,\n\tAgentTool,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport { stableStringify } from \"./stable-stringify.js\";\n\nconst logger = createLogger(\"transport:tool-execution-bridge\");\n\nconst OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH = 280;\nconst METADATA_VALUE_MAX_LENGTH = 512;\nconst READ_ONLY_BASH_PREFIXES = [\n\t\"cat\",\n\t\"cd\",\n\t\"df\",\n\t\"du\",\n\t\"echo\",\n\t\"env\",\n\t\"find\",\n\t\"git diff\",\n\t\"git log\",\n\t\"git remote -v\",\n\t\"git rev-parse\",\n\t\"git show\",\n\t\"git status\",\n\t\"grep\",\n\t\"head\",\n\t\"ls\",\n\t\"pwd\",\n\t\"printenv\",\n\t\"ps\",\n\t\"rg\",\n\t\"sed -n\",\n\t\"tail\",\n\t\"which\",\n].map((value) => value.toLowerCase());\n\nconst BASH_MUTATION_MARKERS = [\n\t/\\bchmod\\b/u,\n\t/\\bchown\\b/u,\n\t/\\bcp\\b/u,\n\t/\\bgit\\s+(add|am|apply|branch|checkout|cherry-pick|clean|commit|merge|mv|pull|push|rebase|reset|restore|revert|rm|stash|switch|tag)\\b/u,\n\t/\\bmkdir\\b/u,\n\t/\\bmv\\b/u,\n\t/\\bnpm\\s+(install|publish|uninstall|update|version)\\b/u,\n\t/\\bpnpm\\s+(add|install|remove|update)\\b/u,\n\t/\\bpython\\b.*-c/u,\n\t/\\brm\\b/u,\n\t/\\bsed\\s+-i\\b/u,\n\t/\\btee\\b/u,\n\t/\\btouch\\b/u,\n\t/\\byarn\\s+(add|install|remove|upgrade)\\b/u,\n\t/\\bbun\\s+(add|install|remove|update)\\b/u,\n\t/\\bkubectl\\s+(apply|create|delete|patch|replace|scale)\\b/u,\n\t/\\bterraform\\s+(apply|destroy|import)\\b/u,\n\t/(^|[^<])>{1,2}/u,\n] as const;\n\nconst READ_ONLY_GIT_BRANCH_ARGS = new Set([\n\t\"--all\",\n\t\"--list\",\n\t\"--merged\",\n\t\"--no-contains\",\n\t\"--no-merged\",\n\t\"--points-at\",\n\t\"--remotes\",\n\t\"-a\",\n\t\"-l\",\n\t\"-r\",\n]);\n\nexport type PlatformBridgeMode = \"observe\" | \"governed\";\n\nexport interface ToolExecutionBridgeMetadata {\n\ttoolExecutionId?: string;\n\tapprovalRequestId?: string;\n}\n\nexport interface ObserveToolExecutionPlan {\n\tkind: \"observe\";\n\tmode: \"observe\";\n\tclassification: ToolExecutionClassification;\n\tconfig: ToolExecutionServiceConfig;\n\trequest: ExecutePlatformToolRequest;\n\tmetadata: ToolExecutionBridgeMetadata;\n}\n\nexport interface GovernedToolExecutionPlan {\n\tkind: \"governed\";\n\tmode: \"governed\";\n\tclassification: ToolExecutionClassification;\n\tconfig: ToolExecutionServiceConfig;\n\trequest: ExecutePlatformToolRequest;\n\tmetadata: ToolExecutionBridgeMetadata;\n\tresumeToken?: string;\n}\n\nexport type ToolExecutionBridgePlan =\n\t| ObserveToolExecutionPlan\n\t| GovernedToolExecutionPlan;\n\nexport type ToolExecutionBridgePreparation =\n\t| {\n\t\t\tstatus: \"skip\";\n\t }\n\t| {\n\t\t\tstatus: \"observe\";\n\t\t\tplan: ObserveToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"allow\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"wait_approval\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t\t\trequest: ActionApprovalRequest;\n\t }\n\t| {\n\t\t\tstatus: \"deny\";\n\t\t\tplan?: GovernedToolExecutionPlan;\n\t\t\treason: string;\n\t };\n\nexport type ToolExecutionBridgeApprovalResolution =\n\t| {\n\t\t\tstatus: \"allow\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t }\n\t| {\n\t\t\tstatus: \"deny\";\n\t\t\tplan: GovernedToolExecutionPlan;\n\t\t\treason: string;\n\t };\n\nexport interface ObserveToolExecutionResult {\n\tmetadata: ToolExecutionBridgeMetadata;\n}\n\nexport interface ToolExecutionBridgeInput {\n\tcfg: AgentRunConfig;\n\ttoolCall: ToolCall;\n\ttoolDef?: AgentTool;\n\tsanitizedArgs: Record<string, unknown>;\n\tdisplayName?: string;\n\tsummaryLabel?: string;\n\tactionDescription?: string;\n}\n\nexport interface ToolExecutionBridgeRuntimeLinkage {\n\tagentRunId?: string;\n\tagentId?: string;\n\tworkspaceId?: string;\n\tsessionId?: string;\n\tremoteRunnerSessionId?: string;\n}\n\nexport type ToolExecutionBridgeRuntimeLinkageProvider =\n\t| ToolExecutionBridgeRuntimeLinkage\n\t| (() => ToolExecutionBridgeRuntimeLinkage | undefined);\n\nexport interface DefaultPlatformToolExecutionBridgeOptions {\n\truntimeLinkage?: ToolExecutionBridgeRuntimeLinkageProvider;\n}\n\ninterface ToolExecutionClassification {\n\tfamily: \"bash\" | \"mcp\";\n\tmode: PlatformBridgeMode;\n\triskLevel: ToolExecutionRiskLevel;\n\ttool: PlatformToolRef;\n\tconnector?: PlatformConnectorRef;\n}\n\nfunction trimString(value: string | undefined): string | undefined {\n\tconst trimmed = value?.trim();\n\treturn trimmed ? trimmed : undefined;\n}\n\nfunction getEnvValue(names: readonly string[]): string | undefined {\n\tfor (const name of names) {\n\t\tconst value = trimString(process.env[name]);\n\t\tif (value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction metadataValue(value: string | undefined): string | undefined {\n\t// biome-ignore lint/suspicious/noControlCharactersInRegex: metadata must neutralize C0 control characters and DEL.\n\tconst normalized = value?.replace(/[\\x00-\\x1f\\x7f]/gu, \" \");\n\tconst trimmed = trimString(normalized);\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tif (trimmed.length <= METADATA_VALUE_MAX_LENGTH) {\n\t\treturn trimmed;\n\t}\n\tconst suffix = \"...\";\n\tconst maxPrefixLength = METADATA_VALUE_MAX_LENGTH - suffix.length;\n\tlet prefix = \"\";\n\tfor (const char of trimmed) {\n\t\tif (prefix.length + char.length > maxPrefixLength) {\n\t\t\tbreak;\n\t\t}\n\t\tprefix += char;\n\t}\n\treturn `${prefix.trimEnd()}${suffix}`;\n}\n\nfunction getMetadataEnvValue(names: readonly string[]): string | undefined {\n\treturn metadataValue(getEnvValue(names));\n}\n\nfunction getCurrentWorkingDirectory(): string | undefined {\n\ttry {\n\t\treturn metadataValue(process.cwd());\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction buildShellCommandSummary(command: string): string {\n\tconst normalized = command.replace(/\\s+/gu, \" \").trim();\n\tif (normalized.length <= 96) {\n\t\treturn normalized;\n\t}\n\treturn `${normalized.slice(0, 93).trimEnd()}...`;\n}\n\nfunction isReadOnlyBashCommand(command: string): boolean {\n\tconst normalized = command.replace(/\\s+/gu, \" \").trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (isReadOnlyGitBranchCommand(normalized)) {\n\t\treturn true;\n\t}\n\tif (BASH_MUTATION_MARKERS.some((pattern) => pattern.test(normalized))) {\n\t\treturn false;\n\t}\n\treturn READ_ONLY_BASH_PREFIXES.some(\n\t\t(prefix) => normalized === prefix || normalized.startsWith(`${prefix} `),\n\t);\n}\n\nfunction isReadOnlyGitBranchCommand(normalized: string): boolean {\n\tconst parts = normalized.split(\" \");\n\tif (parts[0] !== \"git\" || parts[1] !== \"branch\") {\n\t\treturn false;\n\t}\n\tconst args = parts.slice(2);\n\tif (args.length === 0) {\n\t\treturn true;\n\t}\n\treturn args.every(\n\t\t(arg) =>\n\t\t\tREAD_ONLY_GIT_BRANCH_ARGS.has(arg) ||\n\t\t\targ.startsWith(\"--format=\") ||\n\t\t\targ.startsWith(\"--sort=\"),\n\t);\n}\n\nfunction inferBashRiskLevel(command: string): ToolExecutionRiskLevel {\n\tconst normalized = command.toLowerCase();\n\tif (\n\t\t/\\brm\\s+-rf\\b/u.test(normalized) ||\n\t\t/\\bgit\\s+push(\\s+--force|\\s+-f)\\b/u.test(normalized) ||\n\t\t/\\bnpm\\s+publish\\b/u.test(normalized) ||\n\t\t/\\bkubectl\\s+delete\\b/u.test(normalized) ||\n\t\t/\\bterraform\\s+destroy\\b/u.test(normalized)\n\t) {\n\t\treturn \"RISK_LEVEL_CRITICAL\";\n\t}\n\treturn isReadOnlyBashCommand(command) ? \"RISK_LEVEL_LOW\" : \"RISK_LEVEL_HIGH\";\n}\n\nfunction normalizeCapabilitySegment(value: string): string {\n\treturn value.replace(/[^a-zA-Z0-9_.-]/gu, \"_\");\n}\n\nfunction parseBridgeMcpToolName(\n\tname: string,\n): { server: string; tool?: string } | null {\n\tconst parts = name.split(\"__\");\n\tif (parts[0] !== \"mcp\" || parts.length < 2) {\n\t\treturn null;\n\t}\n\tconst server = parts[1];\n\tif (!server) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tserver,\n\t\ttool: parts.length > 2 ? parts.slice(2).join(\"__\") : undefined,\n\t};\n}\n\nfunction classifyToolExecution(\n\ttoolCall: ToolCall,\n\ttoolDef: AgentTool | undefined,\n\trollout: {\n\t\tobserveEnabled: boolean;\n\t\tgovernedEnabled: boolean;\n\t},\n): ToolExecutionClassification | null {\n\tif (!rollout.observeEnabled && !rollout.governedEnabled) {\n\t\treturn null;\n\t}\n\n\tif (toolCall.name === \"bash\") {\n\t\tconst command =\n\t\t\ttypeof toolCall.arguments.command === \"string\"\n\t\t\t\t? toolCall.arguments.command\n\t\t\t\t: \"\";\n\t\tconst isReadOnly = isReadOnlyBashCommand(command);\n\t\tconst mode: PlatformBridgeMode =\n\t\t\tisReadOnly || !rollout.governedEnabled ? \"observe\" : \"governed\";\n\t\tif (mode === \"observe\" && !rollout.observeEnabled) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tfamily: \"bash\",\n\t\t\tmode,\n\t\t\triskLevel: inferBashRiskLevel(command),\n\t\t\ttool: {\n\t\t\t\tnamespace: \"maestro\",\n\t\t\t\tname: \"bash\",\n\t\t\t\tversion: process.env.npm_package_version,\n\t\t\t\tcapability: \"maestro.tool.bash\",\n\t\t\t\toperation: command ? buildShellCommandSummary(command) : \"shell\",\n\t\t\t\tidempotent: isReadOnly,\n\t\t\t\tmutatesResource: !isReadOnly,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst mcpTool = parseBridgeMcpToolName(toolCall.name);\n\tif (!mcpTool) {\n\t\treturn null;\n\t}\n\tconst mode: PlatformBridgeMode = rollout.governedEnabled\n\t\t? \"governed\"\n\t\t: \"observe\";\n\tconst toolName = mcpTool.tool ?? toolCall.name;\n\tconst readOnly = isReadOnlyTool(toolCall.name, toolDef?.annotations);\n\treturn {\n\t\tfamily: \"mcp\",\n\t\tmode,\n\t\triskLevel: readOnly ? \"RISK_LEVEL_MEDIUM\" : \"RISK_LEVEL_HIGH\",\n\t\ttool: {\n\t\t\tnamespace: \"mcp\",\n\t\t\tname: toolName,\n\t\t\tversion: process.env.npm_package_version,\n\t\t\tcapability: `mcp.${normalizeCapabilitySegment(mcpTool.server)}.${normalizeCapabilitySegment(toolName)}`,\n\t\t\toperation: toolName,\n\t\t\tidempotent: readOnly,\n\t\t\tmutatesResource: !readOnly,\n\t\t},\n\t\tconnector: {\n\t\t\tproviderId: mcpTool.server,\n\t\t\tresourceId: mcpTool.server,\n\t\t\tresourceKind: \"mcp_server\",\n\t\t},\n\t};\n}\n\nfunction cloneRecord(value: Record<string, unknown>): Record<string, unknown> {\n\treturn JSON.parse(JSON.stringify(value)) as Record<string, unknown>;\n}\n\nfunction scrubText(value: string): { text: string; redactions: string[] } {\n\tlet next = value;\n\tconst redactions = new Set<string>();\n\tfor (const pattern of [\n\t\t/\\b(gh[pousr]_[A-Za-z0-9_]{20,})\\b/gu,\n\t\t/\\b(Bearer\\s+[A-Za-z0-9._-]{16,})\\b/giu,\n\t\t/\\b([A-Za-z0-9_-]{32,})\\b/gu,\n\t]) {\n\t\tif (pattern.test(next)) {\n\t\t\tredactions.add(\"secret_like_token\");\n\t\t\tnext = next.replace(pattern, \"[REDACTED]\");\n\t\t}\n\t}\n\treturn { text: next, redactions: [...redactions] };\n}\n\nfunction summarizeToolResult(result: ToolResultMessage): {\n\tsummary: string;\n\tredactions: string[];\n} {\n\tconst text = result.content\n\t\t.filter(\n\t\t\t(part): part is { type: \"text\"; text: string } => part.type === \"text\",\n\t\t)\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\")\n\t\t.trim();\n\tif (!text) {\n\t\treturn {\n\t\t\tsummary: result.isError\n\t\t\t\t? \"Tool failed without text output\"\n\t\t\t\t: \"Tool completed\",\n\t\t\tredactions: [],\n\t\t};\n\t}\n\tconst firstLine = text.split(/\\r?\\n/u)[0]?.trim() ?? text;\n\tconst shortened =\n\t\tfirstLine.length > OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH\n\t\t\t? `${firstLine.slice(0, OBSERVE_OUTPUT_SUMMARY_MAX_LENGTH - 3).trimEnd()}...`\n\t\t\t: firstLine;\n\tconst scrubbed = scrubText(shortened);\n\treturn {\n\t\tsummary: scrubbed.text,\n\t\tredactions: scrubbed.redactions,\n\t};\n}\n\nfunction buildOutputPayload(\n\tresult: ToolResultMessage,\n\tdurationMs: number | undefined,\n): RecordPlatformToolExecutionOutputRequest[\"output\"] {\n\tconst summary = summarizeToolResult(result);\n\tconst safeOutput = {\n\t\tstatus: result.isError ? \"failed\" : \"succeeded\",\n\t\ttool_name: result.toolName,\n\t\ttool_call_id: result.toolCallId,\n\t\tsummary: summary.summary,\n\t};\n\treturn {\n\t\tsafeOutput,\n\t\tredactions: summary.redactions,\n\t\tcontentType: \"application/json\",\n\t\t...(durationMs !== undefined\n\t\t\t? { durationMs: Math.max(0, Math.round(durationMs)) }\n\t\t\t: {}),\n\t};\n}\n\nfunction buildLinkage(\n\tcfg: AgentRunConfig,\n\ttoolCall: ToolCall,\n\torganizationId: string | undefined,\n\tworkspaceId: string,\n\truntimeLinkage: ToolExecutionBridgeRuntimeLinkage | undefined,\n): ToolExecutionLinkage {\n\tconst sessionId =\n\t\ttrimString(cfg.session?.id) ??\n\t\ttrimString(runtimeLinkage?.sessionId) ??\n\t\tgetEnvValue([\"MAESTRO_SESSION_ID\"]);\n\tconst agentRunId =\n\t\ttrimString(runtimeLinkage?.agentRunId) ??\n\t\tgetEnvValue([\"MAESTRO_AGENT_RUN_ID\"]);\n\treturn {\n\t\tworkspaceId: trimString(runtimeLinkage?.workspaceId) ?? workspaceId,\n\t\t...(organizationId ? { organizationId } : {}),\n\t\tagentId:\n\t\t\ttrimString(runtimeLinkage?.agentId) ??\n\t\t\tgetEnvValue([\"MAESTRO_AGENT_ID\"]) ??\n\t\t\ttrimString(process.env.npm_package_name) ??\n\t\t\t\"maestro\",\n\t\t...(agentRunId ? { runId: agentRunId } : {}),\n\t\tobjectiveId: getEnvValue([\"MAESTRO_OBJECTIVE_ID\"]),\n\t\tstepId: toolCall.id,\n\t\tactorId: trimString(cfg.user?.id) ?? getEnvValue([\"MAESTRO_ACTOR_ID\"]),\n\t\tsurface: getEnvValue([\"MAESTRO_SURFACE\"]) ?? \"maestro\",\n\t\tchannelId: getEnvValue([\"MAESTRO_CHANNEL_ID\"]),\n\t\tcorrelationId: `${sessionId ?? \"session\"}:${toolCall.id}`,\n\t};\n}\n\nfunction buildRuntimeContextMetadata(\n\tlinkage: ToolExecutionLinkage,\n): Record<string, string> {\n\tconst cwd =\n\t\tgetMetadataEnvValue([\"MAESTRO_CWD\"]) ?? getCurrentWorkingDirectory();\n\tconst workspaceRoot = getMetadataEnvValue([\n\t\t\"MAESTRO_WORKSPACE_ROOT\",\n\t\t\"WORKSPACE_ROOT\",\n\t]);\n\tconst repositoryRoot =\n\t\tgetMetadataEnvValue([\n\t\t\t\"MAESTRO_REPOSITORY_ROOT\",\n\t\t\t\"MAESTRO_REPO_ROOT\",\n\t\t\t\"GITHUB_WORKSPACE\",\n\t\t]) ?? workspaceRoot;\n\tconst repository = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_REPOSITORY\",\n\t\t\"GITHUB_REPOSITORY\",\n\t\t\"CI_PROJECT_PATH\",\n\t]);\n\tconst gitBranch = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_BRANCH\",\n\t\t\"GITHUB_HEAD_REF\",\n\t\t\"GITHUB_REF_NAME\",\n\t\t\"CI_COMMIT_REF_NAME\",\n\t\t\"VERCEL_GIT_COMMIT_REF\",\n\t]);\n\tconst gitCommit = getMetadataEnvValue([\n\t\t\"MAESTRO_GIT_COMMIT\",\n\t\t\"GITHUB_SHA\",\n\t\t\"CI_COMMIT_SHA\",\n\t\t\"VERCEL_GIT_COMMIT_SHA\",\n\t]);\n\n\treturn {\n\t\t...(linkage.organizationId\n\t\t\t? { organization_id: linkage.organizationId }\n\t\t\t: {}),\n\t\t...(linkage.workspaceId ? { workspace_id: linkage.workspaceId } : {}),\n\t\t...(linkage.runId ? { maestro_agent_run_id: linkage.runId } : {}),\n\t\tmaestro_agent_run_step_id: linkage.stepId,\n\t\t...(linkage.actorId ? { maestro_actor_id: linkage.actorId } : {}),\n\t\t...(linkage.correlationId\n\t\t\t? { maestro_correlation_id: linkage.correlationId }\n\t\t\t: {}),\n\t\t...(cwd ? { maestro_cwd: cwd } : {}),\n\t\t...(workspaceRoot ? { maestro_workspace_root: workspaceRoot } : {}),\n\t\t...(repositoryRoot ? { maestro_repository_root: repositoryRoot } : {}),\n\t\t...(repository ? { maestro_repository: repository } : {}),\n\t\t...(gitBranch ? { maestro_git_branch: gitBranch } : {}),\n\t\t...(gitCommit ? { maestro_git_commit: gitCommit } : {}),\n\t};\n}\n\nfunction buildMetadata(\n\tinput: ToolExecutionBridgeInput,\n\tclassification: ToolExecutionClassification,\n\tlinkage: ToolExecutionLinkage,\n\truntimeLinkage: ToolExecutionBridgeRuntimeLinkage | undefined,\n): Record<string, string> {\n\tconst originalArgs = input.toolCall.arguments as Record<string, unknown>;\n\tconst redactedArguments =\n\t\tstableStringify(originalArgs) !== stableStringify(input.sanitizedArgs);\n\tconst sessionId =\n\t\ttrimString(input.cfg.session?.id) ??\n\t\ttrimString(runtimeLinkage?.sessionId) ??\n\t\tgetEnvValue([\"MAESTRO_SESSION_ID\"]);\n\tconst remoteRunnerSessionId =\n\t\ttrimString(runtimeLinkage?.remoteRunnerSessionId) ??\n\t\tgetEnvValue([\n\t\t\t\"MAESTRO_REMOTE_RUNNER_SESSION_ID\",\n\t\t\t\"MAESTRO_RUNNER_SESSION_ID\",\n\t\t]);\n\treturn {\n\t\tmaestro_bridge_mode: classification.mode,\n\t\tmaestro_tool_call_id: input.toolCall.id,\n\t\t...buildRuntimeContextMetadata(linkage),\n\t\t...(sessionId ? { maestro_session_id: sessionId } : {}),\n\t\t...(remoteRunnerSessionId\n\t\t\t? { maestro_remote_runner_session_id: remoteRunnerSessionId }\n\t\t\t: {}),\n\t\t...(input.displayName ? { maestro_display_name: input.displayName } : {}),\n\t\t...(input.summaryLabel\n\t\t\t? { maestro_summary_label: input.summaryLabel }\n\t\t\t: {}),\n\t\t...(input.actionDescription\n\t\t\t? { maestro_action_description: input.actionDescription }\n\t\t\t: {}),\n\t\tmaestro_redacted_arguments: String(redactedArguments),\n\t\tmaestro_tool_family: classification.family,\n\t\tmaestro_local_execution_authoritative: String(\n\t\t\tclassification.mode === \"governed\",\n\t\t),\n\t};\n}\n\nfunction buildExecuteRequest(\n\tinput: ToolExecutionBridgeInput,\n\tconfig: ToolExecutionServiceConfig,\n\tclassification: ToolExecutionClassification,\n\truntimeLinkage: ToolExecutionBridgeRuntimeLinkage | undefined,\n): ExecutePlatformToolRequest {\n\tconst linkage = buildLinkage(\n\t\tinput.cfg,\n\t\tinput.toolCall,\n\t\tconfig.organizationId,\n\t\tconfig.workspaceId ?? process.cwd(),\n\t\truntimeLinkage,\n\t);\n\treturn {\n\t\tlinkage,\n\t\ttool: classification.tool,\n\t\t...(classification.connector\n\t\t\t? { connector: classification.connector }\n\t\t\t: {}),\n\t\targuments: cloneRecord(input.sanitizedArgs),\n\t\triskLevel: classification.riskLevel,\n\t\tretryPolicy: {\n\t\t\tmaxAttempts: 1,\n\t\t\tinitialDelayMs: 0,\n\t\t\tmaxDelayMs: 0,\n\t\t\tallowNonIdempotentRetry: false,\n\t\t},\n\t\tidempotencyKey: `maestro:${input.toolCall.id}`,\n\t\tmetadata: buildMetadata(input, classification, linkage, runtimeLinkage),\n\t};\n}\n\nfunction planFromResponse(\n\tclassification: ToolExecutionClassification,\n\tconfig: ToolExecutionServiceConfig,\n\trequest: ExecutePlatformToolRequest,\n\tresponse: ExecutePlatformToolResponse,\n): GovernedToolExecutionPlan {\n\treturn {\n\t\tkind: \"governed\",\n\t\tmode: \"governed\",\n\t\tclassification,\n\t\tconfig,\n\t\trequest,\n\t\tmetadata: {\n\t\t\ttoolExecutionId: response.execution.id,\n\t\t\tapprovalRequestId: response.execution.approvalWait?.approvalRequestId,\n\t\t},\n\t\tresumeToken: response.execution.approvalWait?.resumeToken,\n\t};\n}\n\nfunction waitApprovalRequest(\n\tinput: ToolExecutionBridgeInput,\n\tplan: GovernedToolExecutionPlan,\n\texecution: PlatformToolExecutionRecord,\n): ActionApprovalRequest {\n\treturn {\n\t\tid:\n\t\t\texecution.approvalWait?.approvalRequestId ??\n\t\t\tplan.metadata.approvalRequestId ??\n\t\t\tinput.toolCall.id,\n\t\ttoolName: input.toolCall.name,\n\t\tdisplayName: input.displayName,\n\t\tsummaryLabel: input.summaryLabel,\n\t\tactionDescription: input.actionDescription,\n\t\targs: input.sanitizedArgs,\n\t\treason:\n\t\t\texecution.approvalWait?.reason ??\n\t\t\texecution.errorMessage ??\n\t\t\t\"Approval required by Platform ToolExecution\",\n\t\tplatform: {\n\t\t\tsource: \"tool_execution\",\n\t\t\ttoolExecutionId: execution.id ?? plan.metadata.toolExecutionId,\n\t\t\tapprovalRequestId:\n\t\t\t\texecution.approvalWait?.approvalRequestId ??\n\t\t\t\tplan.metadata.approvalRequestId,\n\t\t},\n\t};\n}\n\nfunction isBridgeGloballyDisabled(): boolean {\n\treturn isFeatureFlagEnabled(MAESTRO_PLATFORM_RUNTIME_BRIDGE_KILL_SWITCH);\n}\n\nexport interface PlatformToolExecutionBridge {\n\tprepare(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgePreparation>;\n\tresolveApproval(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tplan: GovernedToolExecutionPlan,\n\t\tdecision: ActionApprovalDecision,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgeApprovalResolution>;\n\trecordObservation(\n\t\tplan: ObserveToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult>;\n\trecordGovernedOutput(\n\t\tplan: GovernedToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tdurationMs?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult>;\n}\n\nexport class DefaultPlatformToolExecutionBridge\n\timplements PlatformToolExecutionBridge\n{\n\tprivate readonly runtimeLinkage?: ToolExecutionBridgeRuntimeLinkageProvider;\n\n\tconstructor(options: DefaultPlatformToolExecutionBridgeOptions = {}) {\n\t\tthis.runtimeLinkage = options.runtimeLinkage;\n\t}\n\n\tasync prepare(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgePreparation> {\n\t\tif (isBridgeGloballyDisabled()) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst rollout = {\n\t\t\tobserveEnabled:\n\t\t\t\tisPlatformRuntimeObserveEnabled() ||\n\t\t\t\tisPlatformToolExecutionBridgeEnabled(),\n\t\t\tgovernedEnabled: isPlatformToolExecutionBridgeEnabled(),\n\t\t};\n\t\tconst classification = classifyToolExecution(\n\t\t\tinput.toolCall,\n\t\t\tinput.toolDef,\n\t\t\trollout,\n\t\t);\n\t\tif (!classification) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst config = await resolveToolExecutionServiceConfig();\n\t\tif (!config) {\n\t\t\treturn { status: \"skip\" };\n\t\t}\n\n\t\tconst request = buildExecuteRequest(\n\t\t\tinput,\n\t\t\tconfig,\n\t\t\tclassification,\n\t\t\tresolveRuntimeLinkage(this.runtimeLinkage),\n\t\t);\n\t\tif (classification.mode === \"observe\") {\n\t\t\treturn {\n\t\t\t\tstatus: \"observe\",\n\t\t\t\tplan: {\n\t\t\t\t\tkind: \"observe\",\n\t\t\t\t\tmode: \"observe\",\n\t\t\t\t\tclassification,\n\t\t\t\t\tconfig,\n\t\t\t\t\trequest,\n\t\t\t\t\tmetadata: {},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await executeToolWithPlatform(config, request, signal);\n\t\t\tconst plan = planFromResponse(classification, config, request, response);\n\t\t\tswitch (response.execution.state) {\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_DENIED\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason:\n\t\t\t\t\t\t\tresponse.execution.errorMessage ??\n\t\t\t\t\t\t\t\"Action denied by Platform ToolExecution\",\n\t\t\t\t\t};\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_WAITING_APPROVAL\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"wait_approval\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\trequest: waitApprovalRequest(input, plan, response.execution),\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn { status: \"allow\", plan };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn {\n\t\t\t\tstatus: \"deny\",\n\t\t\t\treason: `Platform ToolExecution unavailable: ${message}`,\n\t\t\t};\n\t\t}\n\t}\n\n\tasync resolveApproval(\n\t\tinput: ToolExecutionBridgeInput,\n\t\tplan: GovernedToolExecutionPlan,\n\t\tdecision: ActionApprovalDecision,\n\t\tsignal?: AbortSignal,\n\t): Promise<ToolExecutionBridgeApprovalResolution> {\n\t\tif (!plan.resumeToken || !plan.metadata.approvalRequestId) {\n\t\t\treturn decision.approved\n\t\t\t\t? { status: \"allow\", plan }\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: decision.reason ?? \"Approval denied\",\n\t\t\t\t\t};\n\t\t}\n\t\tconst request: ResumePlatformToolExecutionRequest = {\n\t\t\texecutionId: plan.metadata.toolExecutionId ?? \"\",\n\t\t\tapprovalRequestId: plan.metadata.approvalRequestId,\n\t\t\tresumeToken: plan.resumeToken,\n\t\t\tapproved: decision.approved,\n\t\t\tdecidedBy:\n\t\t\t\tdecision.resolvedBy === \"user\"\n\t\t\t\t\t? (trimString(input.cfg.user?.id) ?? \"user\")\n\t\t\t\t\t: \"policy\",\n\t\t\treason: decision.reason,\n\t\t};\n\t\ttry {\n\t\t\tconst response = await resumeToolExecutionWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tconst nextPlan: GovernedToolExecutionPlan = {\n\t\t\t\t...plan,\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId:\n\t\t\t\t\t\tresponse.execution.id ?? plan.metadata.toolExecutionId,\n\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\tresponse.execution.approvalWait?.approvalRequestId ??\n\t\t\t\t\t\tplan.metadata.approvalRequestId,\n\t\t\t\t},\n\t\t\t};\n\t\t\tswitch (response.execution.state) {\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_DENIED\":\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_FAILED\":\n\t\t\t\tcase \"TOOL_EXECUTION_STATE_CANCELLED\":\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan: nextPlan,\n\t\t\t\t\t\treason:\n\t\t\t\t\t\t\tresponse.execution.errorMessage ??\n\t\t\t\t\t\t\tdecision.reason ??\n\t\t\t\t\t\t\t\"Platform ToolExecution denied the action\",\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn { status: \"allow\", plan: nextPlan };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\treturn decision.approved\n\t\t\t\t? {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: `Platform ToolExecution decision sync failed: ${message}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tstatus: \"deny\",\n\t\t\t\t\t\tplan,\n\t\t\t\t\t\treason: decision.reason ?? `Approval denied (${message})`,\n\t\t\t\t\t};\n\t\t}\n\t}\n\n\tasync recordObservation(\n\t\tplan: ObserveToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult> {\n\t\tconst summary = summarizeToolResult(result);\n\t\tconst request: ExecutePlatformToolRequest = {\n\t\t\t...plan.request,\n\t\t\tmetadata: {\n\t\t\t\t...plan.request.metadata,\n\t\t\t\tmaestro_bridge_mode: \"observe\",\n\t\t\t\tmaestro_local_outcome: result.isError ? \"failed\" : \"succeeded\",\n\t\t\t\tmaestro_local_output_summary: summary.summary,\n\t\t\t\tmaestro_local_output_redactions:\n\t\t\t\t\tsummary.redactions.length > 0 ? summary.redactions.join(\",\") : \"none\",\n\t\t\t},\n\t\t};\n\t\ttry {\n\t\t\tconst response = await executeToolWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId: response.execution.id,\n\t\t\t\t\tapprovalRequestId: response.execution.approvalWait?.approvalRequestId,\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\tlogger.warn(\"Failed to record observe-only tool execution\", {\n\t\t\t\terror: message,\n\t\t\t\ttoolName: plan.request.tool.name,\n\t\t\t\ttoolCallId: plan.request.metadata?.maestro_tool_call_id,\n\t\t\t});\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\t}\n\n\tasync recordGovernedOutput(\n\t\tplan: GovernedToolExecutionPlan,\n\t\tresult: ToolResultMessage,\n\t\tdurationMs?: number,\n\t\tsignal?: AbortSignal,\n\t): Promise<ObserveToolExecutionResult> {\n\t\tconst executionId = plan.metadata.toolExecutionId;\n\t\tif (!executionId) {\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\n\t\tconst request: RecordPlatformToolExecutionOutputRequest = {\n\t\t\texecutionId,\n\t\t\toutput: buildOutputPayload(result, durationMs),\n\t\t\tmetadata: {\n\t\t\t\t...plan.request.metadata,\n\t\t\t\tmaestro_bridge_mode: \"governed\",\n\t\t\t\tmaestro_local_outcome: result.isError ? \"failed\" : \"succeeded\",\n\t\t\t\tmaestro_tool_call_id: result.toolCallId,\n\t\t\t},\n\t\t};\n\t\ttry {\n\t\t\tconst response = await recordToolExecutionOutputWithPlatform(\n\t\t\t\tplan.config,\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tmetadata: {\n\t\t\t\t\ttoolExecutionId: response.execution.id ?? executionId,\n\t\t\t\t\tapprovalRequestId:\n\t\t\t\t\t\tresponse.execution.approvalWait?.approvalRequestId ??\n\t\t\t\t\t\tplan.metadata.approvalRequestId,\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (isAbortError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tlogger.warn(\"Failed to record governed tool execution output\", {\n\t\t\t\terror: message,\n\t\t\t\ttoolName: plan.request.tool.name,\n\t\t\t\ttoolCallId: result.toolCallId,\n\t\t\t\ttoolExecutionId: executionId,\n\t\t\t});\n\t\t\treturn { metadata: plan.metadata };\n\t\t}\n\t}\n}\n\nfunction resolveRuntimeLinkage(\n\tprovider: ToolExecutionBridgeRuntimeLinkageProvider | undefined,\n): ToolExecutionBridgeRuntimeLinkage | undefined {\n\treturn typeof provider === \"function\" ? provider() : provider;\n}\n\nlet defaultBridge: PlatformToolExecutionBridge | null = null;\n\nexport function getDefaultPlatformToolExecutionBridge(): PlatformToolExecutionBridge {\n\tif (!defaultBridge) {\n\t\tdefaultBridge = new DefaultPlatformToolExecutionBridge();\n\t}\n\treturn defaultBridge;\n}\n\nexport function buildObservedResultMetadata(\n\tplan: ToolExecutionBridgePlan | undefined,\n\tobservation: ObserveToolExecutionResult | undefined,\n): ToolExecutionBridgeMetadata {\n\tif (!plan) {\n\t\treturn observation?.metadata ?? {};\n\t}\n\treturn {\n\t\ttoolExecutionId:\n\t\t\tobservation?.metadata.toolExecutionId ?? plan.metadata.toolExecutionId,\n\t\tapprovalRequestId:\n\t\t\tobservation?.metadata.approvalRequestId ??\n\t\t\tplan.metadata.approvalRequestId,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-utils.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/transport-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQ/D,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAMpB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,SAAS,GAC7D,MAAM,GAAG,SAAS,CAyBpB;AAMD,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,GACd,cAAc,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"transport-utils.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/transport-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQ/D,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAMpB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,SAAS,GAC7D,MAAM,GAAG,SAAS,CAyBpB;AAMD,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,MAAM,GACd,cAAc,GAAG,SAAS,CAc5B;AAMD,+DAA+D;AAC/D,eAAO,MAAM,eAAe,aAU1B,CAAC;AAEH,wBAAsB,qBAAqB,CAC1C,WAAW,EAAE,eAAe,GAAG,SAAS,EACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,EACxC,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAuBf;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,UAAU,EAAE;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB,GACC,MAAM,CAUR;AAMD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAUxE;AAED,wBAAgB,oBAAoB,CACnC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,KAAK,GACV,iBAAiB,CAcnB"}
|
|
@@ -48,12 +48,11 @@ export function resolveEnvCredential(provider) {
|
|
|
48
48
|
const value = process.env[name];
|
|
49
49
|
if (!value)
|
|
50
50
|
continue;
|
|
51
|
-
const isAnthropicOAuth = provider === "anthropic" && name === "ANTHROPIC_OAUTH_TOKEN";
|
|
52
51
|
return {
|
|
53
52
|
provider,
|
|
54
53
|
token: value,
|
|
55
|
-
type:
|
|
56
|
-
source:
|
|
54
|
+
type: "api-key",
|
|
55
|
+
source: "env",
|
|
57
56
|
envVar: name,
|
|
58
57
|
};
|
|
59
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport-utils.js","sourceRoot":"","sources":["../../../src/agent/transport/transport-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Transport Utilities\n * Pure functions for credential resolution, cost calculation, audit logging,\n * and PII policy formatting. Zero class coupling.\n */\n\nimport { getEnvVarsForProvider } from \"../../providers/api-keys.js\";\nimport type { AuthCredential } from \"../../providers/auth.js\";\nimport { sanitizeLogMessage } from \"../../safety/context-firewall.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { WorkflowStateSnapshot } from \"../action-approval.js\";\nimport type { ToolCall, ToolResultMessage } from \"../types.js\";\n\nconst logger = createLogger(\"transport\");\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SessionTokenCounter = (sessionId: string) => Promise<number | null>;\n\nexport type ToolAuditLogger = (entry: {\n\ttoolName: string;\n\targs: Record<string, unknown>;\n\tstatus: \"success\" | \"failure\" | \"denied\";\n\tdurationMs: number;\n\terror?: string;\n}) => Promise<void>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Text Extraction\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extract text content from a message content field.\n * Handles both string format and array format (multimodal messages).\n *\n * This is critical for semantic safety analysis - without this, multimodal\n * messages would bypass intent extraction and skip the semantic judge.\n */\nexport function extractTextFromContent(\n\tcontent: string | { type: string; text?: string }[] | undefined,\n): string | undefined {\n\tif (!content) return undefined;\n\n\t// Simple string content\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\t// Array content (multimodal) - extract text from all text blocks\n\tif (Array.isArray(content)) {\n\t\tconst textParts: string[] = [];\n\t\tfor (const block of content) {\n\t\t\tif (\n\t\t\t\ttypeof block === \"object\" &&\n\t\t\t\tblock !== null &&\n\t\t\t\tblock.type === \"text\" &&\n\t\t\t\ttypeof block.text === \"string\"\n\t\t\t) {\n\t\t\t\ttextParts.push(block.text);\n\t\t\t}\n\t\t}\n\t\treturn textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n\t}\n\n\treturn undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Credential Resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function resolveEnvCredential(\n\tprovider: string,\n): AuthCredential | undefined {\n\tconst vars = getEnvVarsForProvider(provider);\n\tfor (const name of vars) {\n\t\tconst value = process.env[name];\n\t\tif (!value) continue;\n\t\tconst isAnthropicOAuth =\n\t\t\tprovider === \"anthropic\" && name === \"ANTHROPIC_OAUTH_TOKEN\";\n\t\treturn {\n\t\t\tprovider,\n\t\t\ttoken: value,\n\t\t\ttype: isAnthropicOAuth ? \"anthropic-oauth\" : \"api-key\",\n\t\t\tsource: isAnthropicOAuth ? \"anthropic_oauth_env\" : \"env\",\n\t\t\tenvVar: name,\n\t\t};\n\t}\n\treturn undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Audit Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Sensitive tools that should be logged for audit purposes */\nexport const SENSITIVE_TOOLS = new Set([\n\t\"bash\",\n\t\"background_tasks\",\n\t\"write\",\n\t\"edit\",\n\t\"git_cmd\",\n\t\"gh_pr\",\n\t\"gh_issue\",\n\t\"websearch\",\n\t\"webfetch\",\n]);\n\nexport async function logToolExecutionAudit(\n\tauditLogger: ToolAuditLogger | undefined,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tstatus: \"success\" | \"failure\" | \"denied\",\n\tdurationMs: number,\n\terror?: string,\n): Promise<void> {\n\t// Only log sensitive tools and only if enterprise features are available\n\tif (!SENSITIVE_TOOLS.has(toolName) || !auditLogger) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst sanitizedError = error ? sanitizeLogMessage(error) : undefined;\n\t\tawait auditLogger({\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\tstatus,\n\t\t\tdurationMs,\n\t\t\terror: sanitizedError,\n\t\t});\n\t} catch (err) {\n\t\t// Log audit failures but fail open (allow legitimate use) per user feedback\n\t\tlogger.error(\n\t\t\t\"Failed to log tool execution\",\n\t\t\terr instanceof Error ? err : new Error(String(err)),\n\t\t\t{ toolName },\n\t\t);\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Cost Calculation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Calculate API Cost from Token Usage\n *\n * Computes the total cost of an LLM request based on token counts and\n * per-token pricing. Costs are specified in dollars per million tokens\n * (the standard industry format), so we divide by 1,000,000.\n *\n * ## Cost Components\n *\n * - **Input tokens**: Tokens in the prompt (system prompt + messages + tools)\n * - **Output tokens**: Tokens generated by the model\n * - **Cache read**: Tokens loaded from prompt cache (usually cheaper)\n * - **Cache write**: Tokens written to prompt cache (may have different pricing)\n *\n * ## Example Calculation\n *\n * For Claude Sonnet with input=$3/M, output=$15/M:\n * - 10,000 input tokens = 10000 * 3 / 1,000,000 = $0.03\n * - 1,000 output tokens = 1000 * 15 / 1,000,000 = $0.015\n * - Total = $0.045\n *\n * @param usage - Token counts from the API response\n * @param costConfig - Per-million-token pricing for each usage type\n * @returns Total cost in dollars\n */\nexport function calculateCost(\n\tusage: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tcostConfig: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t},\n): number {\n\t// Each cost component: (tokens * dollars_per_million) / 1_000_000\n\tconst inputCost = ((usage.input || 0) * costConfig.input) / 1_000_000;\n\tconst outputCost = ((usage.output || 0) * costConfig.output) / 1_000_000;\n\tconst cacheReadCost =\n\t\t((usage.cacheRead || 0) * costConfig.cacheRead) / 1_000_000;\n\tconst cacheWriteCost =\n\t\t((usage.cacheWrite || 0) * costConfig.cacheWrite) / 1_000_000;\n\n\treturn inputCost + outputCost + cacheReadCost + cacheWriteCost;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// PII Policy Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatPendingPii(snapshot: WorkflowStateSnapshot): string {\n\tif (snapshot.pendingPii.length === 0) {\n\t\treturn \"(none tracked)\";\n\t}\n\treturn snapshot.pendingPii\n\t\t.map(\n\t\t\t(artifact) =>\n\t\t\t\t`• ${artifact.label} (artifact: ${artifact.id}, source: ${artifact.sourceToolCallId})`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nexport function buildPiiPolicyResult(\n\ttoolCall: ToolCall,\n\tsnapshot: WorkflowStateSnapshot,\n\tclock: Clock,\n): ToolResultMessage {\n\tconst artifactSummary = formatPendingPii(snapshot);\n\tconst orphanedSummary = snapshot.orphanedRedactions.length\n\t\t? `Orphaned redaction attempts: ${snapshot.orphanedRedactions.join(\", \")}`\n\t\t: \"\";\n\tconst guidanceText = `Policy block: unredacted PII is still pending, so \"${toolCall.name}\" cannot run.\\n\\nArtifacts requiring redaction:\\n${artifactSummary}\\n\\n${orphanedSummary ? `${orphanedSummary}\\n\\n` : \"\"}Next steps: run \\`redact_transcript\\` (or your workflow's redaction tool) for each artifact above, then retry the egress action.`;\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: [{ type: \"text\", text: guidanceText }],\n\t\tisError: true,\n\t\ttimestamp: clock.now(),\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"transport-utils.js","sourceRoot":"","sources":["../../../src/agent/transport/transport-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Transport Utilities\n * Pure functions for credential resolution, cost calculation, audit logging,\n * and PII policy formatting. Zero class coupling.\n */\n\nimport { getEnvVarsForProvider } from \"../../providers/api-keys.js\";\nimport type { AuthCredential } from \"../../providers/auth.js\";\nimport { sanitizeLogMessage } from \"../../safety/context-firewall.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { WorkflowStateSnapshot } from \"../action-approval.js\";\nimport type { ToolCall, ToolResultMessage } from \"../types.js\";\n\nconst logger = createLogger(\"transport\");\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SessionTokenCounter = (sessionId: string) => Promise<number | null>;\n\nexport type ToolAuditLogger = (entry: {\n\ttoolName: string;\n\targs: Record<string, unknown>;\n\tstatus: \"success\" | \"failure\" | \"denied\";\n\tdurationMs: number;\n\terror?: string;\n}) => Promise<void>;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Text Extraction\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Extract text content from a message content field.\n * Handles both string format and array format (multimodal messages).\n *\n * This is critical for semantic safety analysis - without this, multimodal\n * messages would bypass intent extraction and skip the semantic judge.\n */\nexport function extractTextFromContent(\n\tcontent: string | { type: string; text?: string }[] | undefined,\n): string | undefined {\n\tif (!content) return undefined;\n\n\t// Simple string content\n\tif (typeof content === \"string\") {\n\t\treturn content;\n\t}\n\n\t// Array content (multimodal) - extract text from all text blocks\n\tif (Array.isArray(content)) {\n\t\tconst textParts: string[] = [];\n\t\tfor (const block of content) {\n\t\t\tif (\n\t\t\t\ttypeof block === \"object\" &&\n\t\t\t\tblock !== null &&\n\t\t\t\tblock.type === \"text\" &&\n\t\t\t\ttypeof block.text === \"string\"\n\t\t\t) {\n\t\t\t\ttextParts.push(block.text);\n\t\t\t}\n\t\t}\n\t\treturn textParts.length > 0 ? textParts.join(\"\\n\") : undefined;\n\t}\n\n\treturn undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Credential Resolution\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function resolveEnvCredential(\n\tprovider: string,\n): AuthCredential | undefined {\n\tconst vars = getEnvVarsForProvider(provider);\n\tfor (const name of vars) {\n\t\tconst value = process.env[name];\n\t\tif (!value) continue;\n\t\treturn {\n\t\t\tprovider,\n\t\t\ttoken: value,\n\t\t\ttype: \"api-key\",\n\t\t\tsource: \"env\",\n\t\t\tenvVar: name,\n\t\t};\n\t}\n\treturn undefined;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Audit Logging\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Sensitive tools that should be logged for audit purposes */\nexport const SENSITIVE_TOOLS = new Set([\n\t\"bash\",\n\t\"background_tasks\",\n\t\"write\",\n\t\"edit\",\n\t\"git_cmd\",\n\t\"gh_pr\",\n\t\"gh_issue\",\n\t\"websearch\",\n\t\"webfetch\",\n]);\n\nexport async function logToolExecutionAudit(\n\tauditLogger: ToolAuditLogger | undefined,\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tstatus: \"success\" | \"failure\" | \"denied\",\n\tdurationMs: number,\n\terror?: string,\n): Promise<void> {\n\t// Only log sensitive tools and only if enterprise features are available\n\tif (!SENSITIVE_TOOLS.has(toolName) || !auditLogger) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst sanitizedError = error ? sanitizeLogMessage(error) : undefined;\n\t\tawait auditLogger({\n\t\t\ttoolName,\n\t\t\targs,\n\t\t\tstatus,\n\t\t\tdurationMs,\n\t\t\terror: sanitizedError,\n\t\t});\n\t} catch (err) {\n\t\t// Log audit failures but fail open (allow legitimate use) per user feedback\n\t\tlogger.error(\n\t\t\t\"Failed to log tool execution\",\n\t\t\terr instanceof Error ? err : new Error(String(err)),\n\t\t\t{ toolName },\n\t\t);\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Cost Calculation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Calculate API Cost from Token Usage\n *\n * Computes the total cost of an LLM request based on token counts and\n * per-token pricing. Costs are specified in dollars per million tokens\n * (the standard industry format), so we divide by 1,000,000.\n *\n * ## Cost Components\n *\n * - **Input tokens**: Tokens in the prompt (system prompt + messages + tools)\n * - **Output tokens**: Tokens generated by the model\n * - **Cache read**: Tokens loaded from prompt cache (usually cheaper)\n * - **Cache write**: Tokens written to prompt cache (may have different pricing)\n *\n * ## Example Calculation\n *\n * For Claude Sonnet with input=$3/M, output=$15/M:\n * - 10,000 input tokens = 10000 * 3 / 1,000,000 = $0.03\n * - 1,000 output tokens = 1000 * 15 / 1,000,000 = $0.015\n * - Total = $0.045\n *\n * @param usage - Token counts from the API response\n * @param costConfig - Per-million-token pricing for each usage type\n * @returns Total cost in dollars\n */\nexport function calculateCost(\n\tusage: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tcostConfig: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t},\n): number {\n\t// Each cost component: (tokens * dollars_per_million) / 1_000_000\n\tconst inputCost = ((usage.input || 0) * costConfig.input) / 1_000_000;\n\tconst outputCost = ((usage.output || 0) * costConfig.output) / 1_000_000;\n\tconst cacheReadCost =\n\t\t((usage.cacheRead || 0) * costConfig.cacheRead) / 1_000_000;\n\tconst cacheWriteCost =\n\t\t((usage.cacheWrite || 0) * costConfig.cacheWrite) / 1_000_000;\n\n\treturn inputCost + outputCost + cacheReadCost + cacheWriteCost;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// PII Policy Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatPendingPii(snapshot: WorkflowStateSnapshot): string {\n\tif (snapshot.pendingPii.length === 0) {\n\t\treturn \"(none tracked)\";\n\t}\n\treturn snapshot.pendingPii\n\t\t.map(\n\t\t\t(artifact) =>\n\t\t\t\t`• ${artifact.label} (artifact: ${artifact.id}, source: ${artifact.sourceToolCallId})`,\n\t\t)\n\t\t.join(\"\\n\");\n}\n\nexport function buildPiiPolicyResult(\n\ttoolCall: ToolCall,\n\tsnapshot: WorkflowStateSnapshot,\n\tclock: Clock,\n): ToolResultMessage {\n\tconst artifactSummary = formatPendingPii(snapshot);\n\tconst orphanedSummary = snapshot.orphanedRedactions.length\n\t\t? `Orphaned redaction attempts: ${snapshot.orphanedRedactions.join(\", \")}`\n\t\t: \"\";\n\tconst guidanceText = `Policy block: unredacted PII is still pending, so \"${toolCall.name}\" cannot run.\\n\\nArtifacts requiring redaction:\\n${artifactSummary}\\n\\n${orphanedSummary ? `${orphanedSummary}\\n\\n` : \"\"}Next steps: run \\`redact_transcript\\` (or your workflow's redaction tool) for each artifact above, then retry the egress action.`;\n\treturn {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: [{ type: \"text\", text: guidanceText }],\n\t\tisError: true,\n\t\ttimestamp: clock.now(),\n\t};\n}\n"]}
|
package/dist/agent/transport.js
CHANGED
|
@@ -1311,7 +1311,7 @@ export class ProviderTransport {
|
|
|
1311
1311
|
const cost = model.cost
|
|
1312
1312
|
? calculateCost(usage, model.cost)
|
|
1313
1313
|
: 0;
|
|
1314
|
-
if (credential?.type !== "
|
|
1314
|
+
if (credential?.type !== "bearer-token") {
|
|
1315
1315
|
try {
|
|
1316
1316
|
trackUsage({
|
|
1317
1317
|
sessionId: cfg.session?.id,
|