@evalops/maestro 0.10.17 → 0.10.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -1
- package/dist/agent/action-approval.d.ts +12 -2
- package/dist/agent/action-approval.d.ts.map +1 -1
- package/dist/agent/action-approval.js +19 -32
- package/dist/agent/action-approval.js.map +1 -1
- package/dist/agent/agent.d.ts +1 -0
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +26 -0
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/compaction.d.ts +2 -0
- package/dist/agent/compaction.d.ts.map +1 -1
- package/dist/agent/compaction.js +4 -2
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/modes.d.ts +56 -4
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +163 -2
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/prompt-recovery.d.ts.map +1 -1
- package/dist/agent/prompt-recovery.js +1 -3
- package/dist/agent/prompt-recovery.js.map +1 -1
- package/dist/agent/providers/anthropic.d.ts.map +1 -1
- package/dist/agent/providers/anthropic.js +9 -1
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts +12 -0
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -0
- package/dist/agent/providers/codex-app-server.js +788 -0
- package/dist/agent/providers/codex-app-server.js.map +1 -0
- package/dist/agent/providers/google-gemini-cli.js +14 -3
- package/dist/agent/providers/google.js +22 -3
- package/dist/agent/providers/scripted.d.ts +11 -0
- package/dist/agent/providers/scripted.d.ts.map +1 -0
- package/dist/agent/providers/scripted.js +399 -0
- package/dist/agent/providers/scripted.js.map +1 -0
- package/dist/agent/providers/vertex.js +14 -3
- package/dist/agent/scenario-source.d.ts +19 -0
- package/dist/agent/scenario-source.d.ts.map +1 -0
- package/dist/agent/scenario-source.js +112 -0
- package/dist/agent/scenario-source.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +1 -1
- package/dist/agent/subagent-specs.js +1 -1
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/executor.d.ts +25 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +795 -20
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/runtime-events.d.ts +11 -0
- package/dist/agent/swarm/runtime-events.d.ts.map +1 -0
- package/dist/agent/swarm/runtime-events.js +26 -0
- package/dist/agent/swarm/runtime-events.js.map +1 -0
- package/dist/agent/swarm/types.d.ts +78 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/tracing.d.ts +1 -1
- package/dist/agent/tracing.d.ts.map +1 -1
- package/dist/agent/tracing.js +17 -9
- package/dist/agent/tracing.js.map +1 -1
- package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
- package/dist/agent/transport/create-provider-stream.js +14 -0
- package/dist/agent/transport/create-provider-stream.js.map +1 -1
- package/dist/agent/transport/stable-stringify.d.ts +2 -0
- package/dist/agent/transport/stable-stringify.d.ts.map +1 -0
- package/dist/agent/transport/stable-stringify.js +14 -0
- package/dist/agent/transport/stable-stringify.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +2 -15
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts +5 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.js +184 -36
- package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
- package/dist/agent/transport.d.ts +8 -0
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +1613 -68
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/types.d.ts +170 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +34 -3
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +32 -0
- package/dist/app-server/in-process-client.d.ts.map +1 -0
- package/dist/app-server/in-process-client.js +73 -0
- package/dist/app-server/in-process-client.js.map +1 -0
- package/dist/app-server/session-api.d.ts +36 -0
- package/dist/app-server/session-api.d.ts.map +1 -0
- package/dist/app-server/session-api.js +713 -0
- package/dist/app-server/session-api.js.map +1 -0
- package/dist/approvals/platform-action-approval.d.ts +3 -1
- package/dist/approvals/platform-action-approval.d.ts.map +1 -1
- package/dist/approvals/platform-action-approval.js +16 -9
- package/dist/approvals/platform-action-approval.js.map +1 -1
- package/dist/approvals/service-client.d.ts.map +1 -1
- package/dist/approvals/service-client.js +7 -7
- package/dist/approvals/service-client.js.map +1 -1
- package/dist/audit/logger.d.ts +4 -4
- package/dist/bootstrap/agent-creation-setup.d.ts +4 -0
- package/dist/bootstrap/agent-creation-setup.d.ts.map +1 -1
- package/dist/bootstrap/agent-creation-setup.js +3 -1
- package/dist/bootstrap/agent-creation-setup.js.map +1 -1
- package/dist/bootstrap/auth-setup.js +1 -1
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.d.ts +6 -0
- package/dist/bootstrap/event-subscriptions-setup.d.ts.map +1 -1
- package/dist/bootstrap/event-subscriptions-setup.js +26 -2
- package/dist/bootstrap/event-subscriptions-setup.js.map +1 -1
- package/dist/bootstrap/model-resolution-setup.d.ts.map +1 -1
- package/dist/bootstrap/model-resolution-setup.js +4 -1
- package/dist/bootstrap/model-resolution-setup.js.map +1 -1
- package/dist/bootstrap/tools-setup.d.ts +2 -1
- package/dist/bootstrap/tools-setup.d.ts.map +1 -1
- package/dist/bootstrap/tools-setup.js +5 -1
- package/dist/bootstrap/tools-setup.js.map +1 -1
- package/dist/cli/args.d.ts +9 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +130 -5
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts +9 -0
- package/dist/cli/commands/a2a.d.ts.map +1 -0
- package/dist/cli/commands/a2a.js +1714 -0
- package/dist/cli/commands/a2a.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +16 -2
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +223 -35
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/codex.d.ts +1 -1
- package/dist/cli/commands/codex.d.ts.map +1 -1
- package/dist/cli/commands/codex.js +145 -39
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/context.d.ts +10 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +176 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/hosted-runner.d.ts +1 -0
- package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
- package/dist/cli/commands/hosted-runner.js +9 -1
- package/dist/cli/commands/hosted-runner.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/modes.d.ts +8 -0
- package/dist/cli/commands/modes.d.ts.map +1 -0
- package/dist/cli/commands/modes.js +151 -0
- package/dist/cli/commands/modes.js.map +1 -0
- package/dist/cli/commands/operating-plane.d.ts +14 -0
- package/dist/cli/commands/operating-plane.d.ts.map +1 -0
- package/dist/cli/commands/operating-plane.js +160 -0
- package/dist/cli/commands/operating-plane.js.map +1 -0
- package/dist/cli/commands/run.d.ts +87 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +356 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/scenario.d.ts +7 -0
- package/dist/cli/commands/scenario.d.ts.map +1 -0
- package/dist/cli/commands/scenario.js +195 -0
- package/dist/cli/commands/scenario.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +7 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +286 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts +55 -1
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +446 -7
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/headless-runtime-selection.d.ts +38 -0
- package/dist/cli/headless-runtime-selection.d.ts.map +1 -0
- package/dist/cli/headless-runtime-selection.js +48 -0
- package/dist/cli/headless-runtime-selection.js.map +1 -0
- package/dist/cli/headless.d.ts +5 -1
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +11 -1
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/help.d.ts +3 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +136 -30
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts +22 -4
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +224 -127
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-tui/commands/a2a-handlers.d.ts +7 -0
- package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -0
- package/dist/cli-tui/commands/a2a-handlers.js +160 -0
- package/dist/cli-tui/commands/a2a-handlers.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +15 -0
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-registry-adapter.js +10 -1
- package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.d.ts.map +1 -1
- package/dist/cli-tui/commands/handlers/mode-handler.js +22 -10
- package/dist/cli-tui/commands/handlers/mode-handler.js.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/mcp-handlers.js +6 -5
- package/dist/cli-tui/commands/mcp-handlers.js.map +1 -1
- package/dist/cli-tui/commands/types.d.ts +1 -0
- package/dist/cli-tui/commands/types.d.ts.map +1 -1
- package/dist/cli-tui/commands/types.js.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.d.ts +4 -0
- package/dist/cli-tui/commands/utility-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/utility-handlers.js +45 -6
- package/dist/cli-tui/commands/utility-handlers.js.map +1 -1
- package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/run-shell-command.js +14 -5
- package/dist/cli-tui/run/run-shell-command.js.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.js +14 -5
- package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts +1 -0
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +6 -2
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.js +5 -0
- package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.d.ts.map +1 -1
- package/dist/cli-tui/utils/commands/review-prompt.js +8 -3
- package/dist/cli-tui/utils/commands/review-prompt.js.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.d.ts +1 -0
- package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.js +7 -0
- package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
- package/dist/cli-tui/utils/text-formatting.d.ts +1 -0
- package/dist/cli-tui/utils/text-formatting.d.ts.map +1 -1
- package/dist/cli-tui/utils/text-formatting.js +5 -0
- package/dist/cli-tui/utils/text-formatting.js.map +1 -1
- package/dist/cli.js +49209 -26165
- package/dist/cli.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +139 -0
- package/dist/codex/app-server-client.d.ts.map +1 -0
- package/dist/codex/app-server-client.js +352 -0
- package/dist/codex/app-server-client.js.map +1 -0
- package/dist/codex/compatibility.d.ts +48 -0
- package/dist/codex/compatibility.d.ts.map +1 -0
- package/dist/codex/compatibility.js +344 -0
- package/dist/codex/compatibility.js.map +1 -0
- package/dist/codex/subagent-dispatch-table.d.ts +66 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -0
- package/dist/codex/subagent-dispatch-table.js +127 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -0
- package/dist/codex/subagent-workgraph.d.ts +56 -0
- package/dist/codex/subagent-workgraph.d.ts.map +1 -0
- package/dist/codex/subagent-workgraph.js +89 -0
- package/dist/codex/subagent-workgraph.js.map +1 -0
- package/dist/config/constants.d.ts +3 -1
- package/dist/config/constants.d.ts.map +1 -1
- package/dist/config/constants.js +9 -0
- package/dist/config/constants.js.map +1 -1
- package/dist/config/feature-flags.d.ts +10 -1
- package/dist/config/feature-flags.d.ts.map +1 -1
- package/dist/config/feature-flags.js +17 -6
- package/dist/config/feature-flags.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/toml-config.d.ts +32 -0
- package/dist/config/toml-config.d.ts.map +1 -1
- package/dist/config/toml-config.js +152 -43
- package/dist/config/toml-config.js.map +1 -1
- package/dist/connectors/service-client.d.ts.map +1 -1
- package/dist/connectors/service-client.js +4 -7
- package/dist/connectors/service-client.js.map +1 -1
- package/dist/context/manifest-types.d.ts +59 -0
- package/dist/context/manifest-types.d.ts.map +1 -0
- package/dist/context/manifest-types.js +2 -0
- package/dist/context/manifest-types.js.map +1 -0
- package/dist/context/manifest.d.ts +16 -0
- package/dist/context/manifest.d.ts.map +1 -0
- package/dist/context/manifest.js +503 -0
- package/dist/context/manifest.js.map +1 -0
- package/dist/db/schema.d.ts +10 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts +1 -0
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +41 -1
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/env-aliases.d.ts +13 -0
- package/dist/evalops/env-aliases.d.ts.map +1 -0
- package/dist/evalops/env-aliases.js +60 -0
- package/dist/evalops/env-aliases.js.map +1 -0
- package/dist/evalops/managed-context.d.ts.map +1 -1
- package/dist/evalops/managed-context.js +28 -62
- package/dist/evalops/managed-context.js.map +1 -1
- package/dist/guardian/config.d.ts.map +1 -1
- package/dist/guardian/config.js +1 -0
- package/dist/guardian/config.js.map +1 -1
- package/dist/guardian/runner.d.ts +2 -0
- package/dist/guardian/runner.d.ts.map +1 -1
- package/dist/guardian/runner.js +105 -2
- package/dist/guardian/runner.js.map +1 -1
- package/dist/guardian/types.d.ts +1 -0
- package/dist/guardian/types.d.ts.map +1 -1
- package/dist/guardian/types.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +267 -55
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +89 -7
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/manager.d.ts +5 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +159 -4
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/platform-plugin.d.ts.map +1 -1
- package/dist/mcp/platform-plugin.js +9 -26
- package/dist/mcp/platform-plugin.js.map +1 -1
- package/dist/mcp/schema.d.ts +15 -0
- package/dist/mcp/schema.d.ts.map +1 -1
- package/dist/mcp/schema.js +24 -0
- package/dist/mcp/schema.js.map +1 -1
- package/dist/mcp/tool-bridge.d.ts +39 -10
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +101 -24
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/mcp/types.d.ts +27 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts +10 -0
- package/dist/mcp/workspace-trust.d.ts.map +1 -0
- package/dist/mcp/workspace-trust.js +295 -0
- package/dist/mcp/workspace-trust.js.map +1 -0
- package/dist/memory/service-client.d.ts +1 -0
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +194 -9
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/builtin.d.ts.map +1 -1
- package/dist/models/builtin.js +66 -25
- package/dist/models/builtin.js.map +1 -1
- package/dist/models/config-loader.d.ts +10 -10
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +2 -0
- package/dist/models/config-loader.js.map +1 -1
- package/dist/models/registry.d.ts +1 -0
- package/dist/models/registry.d.ts.map +1 -1
- package/dist/models/registry.js +1 -0
- package/dist/models/registry.js.map +1 -1
- package/dist/oauth/device-identity.d.ts.map +1 -1
- package/dist/oauth/device-identity.js +1 -3
- package/dist/oauth/device-identity.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +2 -5
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/opentelemetry.d.ts.map +1 -1
- package/dist/opentelemetry.js +12 -12
- package/dist/opentelemetry.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +11 -0
- package/dist/package-version.js.map +1 -0
- package/dist/packages/constants.d.ts +3 -0
- package/dist/packages/constants.d.ts.map +1 -0
- package/dist/packages/constants.js +3 -0
- package/dist/packages/constants.js.map +1 -0
- package/dist/packages/inspection.d.ts.map +1 -1
- package/dist/packages/inspection.js +2 -1
- package/dist/packages/inspection.js.map +1 -1
- package/dist/packages/search.d.ts.map +1 -1
- package/dist/packages/search.js +1 -1
- package/dist/packages/search.js.map +1 -1
- package/dist/platform/a2a-capability-market.d.ts +21 -0
- package/dist/platform/a2a-capability-market.d.ts.map +1 -0
- package/dist/platform/a2a-capability-market.js +176 -0
- package/dist/platform/a2a-capability-market.js.map +1 -0
- package/dist/platform/a2a-client.d.ts +217 -0
- package/dist/platform/a2a-client.d.ts.map +1 -0
- package/dist/platform/a2a-client.js +589 -0
- package/dist/platform/a2a-client.js.map +1 -0
- package/dist/platform/a2a-fleet.d.ts +41 -0
- package/dist/platform/a2a-fleet.d.ts.map +1 -0
- package/dist/platform/a2a-fleet.js +109 -0
- package/dist/platform/a2a-fleet.js.map +1 -0
- package/dist/platform/a2a-maestro-peer.d.ts +20 -0
- package/dist/platform/a2a-maestro-peer.d.ts.map +1 -0
- package/dist/platform/a2a-maestro-peer.js +176 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -0
- package/dist/platform/a2a-peer-pairing.d.ts +107 -0
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -0
- package/dist/platform/a2a-peer-pairing.js +489 -0
- package/dist/platform/a2a-peer-pairing.js.map +1 -0
- package/dist/platform/a2a-peer-registry.d.ts +68 -0
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -0
- package/dist/platform/a2a-peer-registry.js +320 -0
- package/dist/platform/a2a-peer-registry.js.map +1 -0
- package/dist/platform/a2a-task-ledger.d.ts +86 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -0
- package/dist/platform/a2a-task-ledger.js +546 -0
- package/dist/platform/a2a-task-ledger.js.map +1 -0
- package/dist/platform/a2a-work-graph.d.ts +43 -0
- package/dist/platform/a2a-work-graph.d.ts.map +1 -0
- package/dist/platform/a2a-work-graph.js +267 -0
- package/dist/platform/a2a-work-graph.js.map +1 -0
- package/dist/platform/agent-registry-client.d.ts +327 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -0
- package/dist/platform/agent-registry-client.js +803 -0
- package/dist/platform/agent-registry-client.js.map +1 -0
- package/dist/platform/agent-runtime-client.d.ts +135 -1
- package/dist/platform/agent-runtime-client.d.ts.map +1 -1
- package/dist/platform/agent-runtime-client.js +467 -10
- package/dist/platform/agent-runtime-client.js.map +1 -1
- package/dist/platform/cerebro-facts-client.d.ts.map +1 -1
- package/dist/platform/cerebro-facts-client.js +4 -7
- package/dist/platform/cerebro-facts-client.js.map +1 -1
- package/dist/platform/client.d.ts +2 -0
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +7 -14
- package/dist/platform/client.js.map +1 -1
- package/dist/platform/core-services.d.ts +68 -0
- package/dist/platform/core-services.d.ts.map +1 -1
- package/dist/platform/core-services.js +68 -0
- package/dist/platform/core-services.js.map +1 -1
- package/dist/platform/fermata-eval-client.d.ts +195 -0
- package/dist/platform/fermata-eval-client.d.ts.map +1 -0
- package/dist/platform/fermata-eval-client.js +146 -0
- package/dist/platform/fermata-eval-client.js.map +1 -0
- package/dist/platform/fermata-scenario-suite.d.ts +99 -0
- package/dist/platform/fermata-scenario-suite.d.ts.map +1 -0
- package/dist/platform/fermata-scenario-suite.js +459 -0
- package/dist/platform/fermata-scenario-suite.js.map +1 -0
- package/dist/platform/maestro-timeline-client.d.ts.map +1 -1
- package/dist/platform/maestro-timeline-client.js +5 -11
- package/dist/platform/maestro-timeline-client.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +156 -0
- package/dist/platform/operating-plane-client.d.ts.map +1 -0
- package/dist/platform/operating-plane-client.js +131 -0
- package/dist/platform/operating-plane-client.js.map +1 -0
- package/dist/platform/operating-plane-summary.d.ts +47 -0
- package/dist/platform/operating-plane-summary.d.ts.map +1 -0
- package/dist/platform/operating-plane-summary.js +209 -0
- package/dist/platform/operating-plane-summary.js.map +1 -0
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +4 -11
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/prompts/service-client.d.ts.map +1 -1
- package/dist/prompts/service-client.js +3 -5
- package/dist/prompts/service-client.js.map +1 -1
- package/dist/prompts/system-prompt.d.ts +3 -0
- package/dist/prompts/system-prompt.d.ts.map +1 -1
- package/dist/prompts/system-prompt.js +13 -3
- package/dist/prompts/system-prompt.js.map +1 -1
- package/dist/prompts/types.d.ts +2 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/types.js.map +1 -1
- package/dist/providers/api-keys.d.ts +1 -1
- package/dist/providers/api-keys.d.ts.map +1 -1
- package/dist/providers/api-keys.js +2 -1
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +48 -25
- package/dist/providers/auth.js.map +1 -1
- package/dist/remote-runner/attach-client.d.ts.map +1 -1
- package/dist/remote-runner/attach-client.js +1 -0
- package/dist/remote-runner/attach-client.js.map +1 -1
- package/dist/remote-runner/client.d.ts.map +1 -1
- package/dist/remote-runner/client.js +4 -7
- package/dist/remote-runner/client.js.map +1 -1
- package/dist/rpc/rpc-types.d.ts.map +1 -1
- package/dist/rpc/rpc-types.js +1 -0
- package/dist/rpc/rpc-types.js.map +1 -1
- package/dist/safety/action-firewall.d.ts.map +1 -1
- package/dist/safety/action-firewall.js +69 -6
- package/dist/safety/action-firewall.js.map +1 -1
- package/dist/safety/attack-patterns.d.ts.map +1 -1
- package/dist/safety/attack-patterns.js +31 -14
- package/dist/safety/attack-patterns.js.map +1 -1
- package/dist/safety/bash-parser.d.ts.map +1 -1
- package/dist/safety/bash-parser.js +4 -3
- package/dist/safety/bash-parser.js.map +1 -1
- package/dist/safety/execpolicy.d.ts +15 -3
- package/dist/safety/execpolicy.d.ts.map +1 -1
- package/dist/safety/execpolicy.js +248 -37
- package/dist/safety/execpolicy.js.map +1 -1
- package/dist/safety/governance-service-client.d.ts.map +1 -1
- package/dist/safety/governance-service-client.js +4 -7
- package/dist/safety/governance-service-client.js.map +1 -1
- package/dist/safety/guarded-files.d.ts +34 -0
- package/dist/safety/guarded-files.d.ts.map +1 -0
- package/dist/safety/guarded-files.js +372 -0
- package/dist/safety/guarded-files.js.map +1 -0
- package/dist/safety/loop-detector.d.ts.map +1 -1
- package/dist/safety/loop-detector.js +6 -1
- package/dist/safety/loop-detector.js.map +1 -1
- package/dist/safety/permission-profile.d.ts +47 -0
- package/dist/safety/permission-profile.d.ts.map +1 -0
- package/dist/safety/permission-profile.js +349 -0
- package/dist/safety/permission-profile.js.map +1 -0
- package/dist/safety/safety-middleware.d.ts +5 -1
- package/dist/safety/safety-middleware.d.ts.map +1 -1
- package/dist/safety/safety-middleware.js +3 -2
- package/dist/safety/safety-middleware.js.map +1 -1
- package/dist/safety/suspicious-patterns.d.ts.map +1 -1
- package/dist/safety/suspicious-patterns.js +12 -7
- package/dist/safety/suspicious-patterns.js.map +1 -1
- package/dist/safety/tool-categorization.js +1 -1
- package/dist/safety/tool-categorization.js.map +1 -1
- package/dist/safety/validators/path-policy-validator.d.ts.map +1 -1
- package/dist/safety/validators/path-policy-validator.js +7 -0
- package/dist/safety/validators/path-policy-validator.js.map +1 -1
- package/dist/sandbox/index.d.ts +6 -1
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +30 -4
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/native-sandbox.d.ts +3 -0
- package/dist/sandbox/native-sandbox.d.ts.map +1 -1
- package/dist/sandbox/native-sandbox.js +139 -18
- package/dist/sandbox/native-sandbox.js.map +1 -1
- package/dist/sentry.d.ts +17 -0
- package/dist/sentry.d.ts.map +1 -0
- package/dist/sentry.js +91 -0
- package/dist/sentry.js.map +1 -0
- package/dist/server/agent-runtime-ledger.d.ts +141 -0
- package/dist/server/agent-runtime-ledger.d.ts.map +1 -0
- package/dist/server/agent-runtime-ledger.js +334 -0
- package/dist/server/agent-runtime-ledger.js.map +1 -0
- package/dist/server/agent-trajectory-inspection.d.ts +104 -0
- package/dist/server/agent-trajectory-inspection.d.ts.map +1 -0
- package/dist/server/agent-trajectory-inspection.js +168 -0
- package/dist/server/agent-trajectory-inspection.js.map +1 -0
- package/dist/server/agent-trajectory-replay.d.ts +56 -0
- package/dist/server/agent-trajectory-replay.d.ts.map +1 -0
- package/dist/server/agent-trajectory-replay.js +214 -0
- package/dist/server/agent-trajectory-replay.js.map +1 -0
- package/dist/server/agent-trajectory-scenarios.d.ts +109 -0
- package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scenarios.js +822 -0
- package/dist/server/agent-trajectory-scenarios.js.map +1 -0
- package/dist/server/agent-trajectory-scorers.d.ts +61 -0
- package/dist/server/agent-trajectory-scorers.d.ts.map +1 -0
- package/dist/server/agent-trajectory-scorers.js +162 -0
- package/dist/server/agent-trajectory-scorers.js.map +1 -0
- package/dist/server/agent-trajectory-validation.d.ts +7 -0
- package/dist/server/agent-trajectory-validation.d.ts.map +1 -0
- package/dist/server/agent-trajectory-validation.js +101 -0
- package/dist/server/agent-trajectory-validation.js.map +1 -0
- package/dist/server/agent-trajectory.d.ts +50 -0
- package/dist/server/agent-trajectory.d.ts.map +1 -0
- package/dist/server/agent-trajectory.js +159 -0
- package/dist/server/agent-trajectory.js.map +1 -0
- package/dist/server/app-context.d.ts +18 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +64 -27
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/health.d.ts +6 -0
- package/dist/server/handlers/health.d.ts.map +1 -1
- package/dist/server/handlers/health.js +6 -0
- package/dist/server/handlers/health.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts +69 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +309 -18
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +16 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +43 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/mode.d.ts.map +1 -1
- package/dist/server/handlers/mode.js +3 -1
- package/dist/server/handlers/mode.js.map +1 -1
- package/dist/server/handlers/pending-requests.d.ts.map +1 -1
- package/dist/server/handlers/pending-requests.js +336 -51
- package/dist/server/handlers/pending-requests.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts +6 -0
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -0
- package/dist/server/handlers/platform-a2a-push.js +136 -0
- package/dist/server/handlers/platform-a2a-push.js.map +1 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +21 -1
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +9 -2
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +39 -0
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts +144 -0
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -0
- package/dist/server/hosted-agent-runtime-progress.js +1650 -0
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -0
- package/dist/server/hosted-runner-lease.d.ts +41 -0
- package/dist/server/hosted-runner-lease.d.ts.map +1 -0
- package/dist/server/hosted-runner-lease.js +140 -0
- package/dist/server/hosted-runner-lease.js.map +1 -0
- package/dist/server/hosted-session-manager.d.ts +16 -8
- package/dist/server/hosted-session-manager.d.ts.map +1 -1
- package/dist/server/hosted-session-manager.js +98 -76
- package/dist/server/hosted-session-manager.js.map +1 -1
- package/dist/server/junit-xml.d.ts +2 -0
- package/dist/server/junit-xml.d.ts.map +1 -0
- package/dist/server/junit-xml.js +9 -0
- package/dist/server/junit-xml.js.map +1 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +6 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/server/scenario-recorder.d.ts +56 -0
- package/dist/server/scenario-recorder.d.ts.map +1 -0
- package/dist/server/scenario-recorder.js +109 -0
- package/dist/server/scenario-recorder.js.map +1 -0
- package/dist/server/scripted-scenario-runner.d.ts +46 -0
- package/dist/server/scripted-scenario-runner.d.ts.map +1 -0
- package/dist/server/scripted-scenario-runner.js +190 -0
- package/dist/server/scripted-scenario-runner.js.map +1 -0
- package/dist/server/server-middlewares.d.ts +6 -2
- package/dist/server/server-middlewares.d.ts.map +1 -1
- package/dist/server/server-middlewares.js +8 -2
- package/dist/server/server-middlewares.js.map +1 -1
- package/dist/server/server-request-manager.d.ts +9 -1
- package/dist/server/server-request-manager.d.ts.map +1 -1
- package/dist/server/server-request-manager.js +49 -4
- package/dist/server/server-request-manager.js.map +1 -1
- package/dist/services/intelligent-router/service.d.ts +2 -0
- package/dist/services/intelligent-router/service.d.ts.map +1 -1
- package/dist/services/intelligent-router/service.js +4 -0
- package/dist/services/intelligent-router/service.js.map +1 -1
- package/dist/services/service-authority.d.ts +25 -0
- package/dist/services/service-authority.d.ts.map +1 -0
- package/dist/services/service-authority.js +143 -0
- package/dist/services/service-authority.js.map +1 -0
- package/dist/services/workspace-config/service.d.ts +2 -0
- package/dist/services/workspace-config/service.d.ts.map +1 -1
- package/dist/services/workspace-config/service.js +4 -0
- package/dist/services/workspace-config/service.js.map +1 -1
- package/dist/session/manager.d.ts +8 -2
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +19 -4
- package/dist/session/manager.js.map +1 -1
- package/dist/session/session-branch.d.ts.map +1 -1
- package/dist/session/session-branch.js +5 -1
- package/dist/session/session-branch.js.map +1 -1
- package/dist/session/session-catalog.d.ts +7 -2
- package/dist/session/session-catalog.d.ts.map +1 -1
- package/dist/session/session-catalog.js +13 -2
- package/dist/session/session-catalog.js.map +1 -1
- package/dist/session/session-context.d.ts +6 -2
- package/dist/session/session-context.d.ts.map +1 -1
- package/dist/session/session-context.js +44 -4
- package/dist/session/session-context.js.map +1 -1
- package/dist/session/session-graph-projection.d.ts +32 -0
- package/dist/session/session-graph-projection.d.ts.map +1 -0
- package/dist/session/session-graph-projection.js +133 -0
- package/dist/session/session-graph-projection.js.map +1 -0
- package/dist/session/types.d.ts +18 -0
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +8 -0
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.generated.d.ts +3 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -1
- package/dist/session/wire-format.generated.js +20 -0
- package/dist/session/wire-format.generated.js.map +1 -1
- package/dist/skills/eval-harness.d.ts +38 -0
- package/dist/skills/eval-harness.d.ts.map +1 -0
- package/dist/skills/eval-harness.js +112 -0
- package/dist/skills/eval-harness.js.map +1 -0
- package/dist/skills/index.d.ts +5 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +5 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/linter.d.ts +36 -0
- package/dist/skills/linter.d.ts.map +1 -0
- package/dist/skills/linter.js +398 -0
- package/dist/skills/linter.js.map +1 -0
- package/dist/skills/loader.d.ts +36 -6
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +169 -86
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/package-contract.d.ts +45 -0
- package/dist/skills/package-contract.d.ts.map +1 -0
- package/dist/skills/package-contract.js +153 -0
- package/dist/skills/package-contract.js.map +1 -0
- package/dist/skills/runtime-activation.d.ts +68 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -0
- package/dist/skills/runtime-activation.js +228 -0
- package/dist/skills/runtime-activation.js.map +1 -0
- package/dist/skills/service-client.d.ts.map +1 -1
- package/dist/skills/service-client.js +3 -4
- package/dist/skills/service-client.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +2 -0
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/types.d.ts +14 -0
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/skills/types.js.map +1 -1
- package/dist/telemetry/agent-operating-plane-context.d.ts +24 -0
- package/dist/telemetry/agent-operating-plane-context.d.ts.map +1 -0
- package/dist/telemetry/agent-operating-plane-context.js +54 -0
- package/dist/telemetry/agent-operating-plane-context.js.map +1 -0
- package/dist/telemetry/beacon.d.ts +24 -0
- package/dist/telemetry/beacon.d.ts.map +1 -0
- package/dist/telemetry/beacon.js +115 -0
- package/dist/telemetry/beacon.js.map +1 -0
- package/dist/telemetry/cli-command-aggregator.d.ts +36 -0
- package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -0
- package/dist/telemetry/cli-command-aggregator.js +251 -0
- package/dist/telemetry/cli-command-aggregator.js.map +1 -0
- package/dist/telemetry/cli-startup.d.ts +21 -0
- package/dist/telemetry/cli-startup.d.ts.map +1 -0
- package/dist/telemetry/cli-startup.js +83 -0
- package/dist/telemetry/cli-startup.js.map +1 -0
- package/dist/telemetry/disablement.d.ts +13 -0
- package/dist/telemetry/disablement.d.ts.map +1 -0
- package/dist/telemetry/disablement.js +19 -0
- package/dist/telemetry/disablement.js.map +1 -0
- package/dist/telemetry/index.d.ts +6 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +6 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +52 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +179 -3
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-event-catalog.d.ts +3 -1
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-catalog.js +2 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +74 -9
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-publisher-conformance-fixture.js +46 -11
- package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -1
- package/dist/telemetry/mcp-beacon.d.ts +20 -0
- package/dist/telemetry/mcp-beacon.d.ts.map +1 -0
- package/dist/telemetry/mcp-beacon.js +54 -0
- package/dist/telemetry/mcp-beacon.js.map +1 -0
- package/dist/telemetry/metadata-normalization.d.ts +7 -0
- package/dist/telemetry/metadata-normalization.d.ts.map +1 -0
- package/dist/telemetry/metadata-normalization.js +189 -0
- package/dist/telemetry/metadata-normalization.js.map +1 -0
- package/dist/telemetry/meter-service-client.d.ts.map +1 -1
- package/dist/telemetry/meter-service-client.js +5 -10
- package/dist/telemetry/meter-service-client.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +123 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +184 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/turn-tracker.d.ts +1 -0
- package/dist/telemetry/turn-tracker.d.ts.map +1 -1
- package/dist/telemetry/turn-tracker.js +22 -1
- package/dist/telemetry/turn-tracker.js.map +1 -1
- package/dist/telemetry/wide-events.d.ts +31 -1
- package/dist/telemetry/wide-events.d.ts.map +1 -1
- package/dist/telemetry/wide-events.js +229 -1
- package/dist/telemetry/wide-events.js.map +1 -1
- package/dist/telemetry.d.ts +39 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +160 -3
- package/dist/telemetry.js.map +1 -1
- package/dist/testing/test-verification-hook.d.ts.map +1 -1
- package/dist/testing/test-verification-hook.js +34 -21
- package/dist/testing/test-verification-hook.js.map +1 -1
- package/dist/tools/apply-patch-parser.d.ts +26 -0
- package/dist/tools/apply-patch-parser.d.ts.map +1 -0
- package/dist/tools/apply-patch-parser.js +146 -0
- package/dist/tools/apply-patch-parser.js.map +1 -0
- package/dist/tools/apply-patch.d.ts +42 -0
- package/dist/tools/apply-patch.d.ts.map +1 -0
- package/dist/tools/apply-patch.js +648 -0
- package/dist/tools/apply-patch.js.map +1 -0
- package/dist/tools/ask-user.d.ts +1 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/background/tool-handler.d.ts +1 -0
- package/dist/tools/background/tool-handler.d.ts.map +1 -1
- package/dist/tools/bash.d.ts +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/codesearch.d.ts +1 -0
- package/dist/tools/codesearch.d.ts.map +1 -1
- package/dist/tools/conductor-client.d.ts +1 -0
- package/dist/tools/conductor-client.d.ts.map +1 -1
- package/dist/tools/conductor-client.js +63 -0
- package/dist/tools/conductor-client.js.map +1 -1
- package/dist/tools/diff.d.ts +1 -0
- package/dist/tools/diff.d.ts.map +1 -1
- package/dist/tools/edit.d.ts +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/extract-document.d.ts +1 -0
- package/dist/tools/extract-document.d.ts.map +1 -1
- package/dist/tools/find.d.ts +10 -0
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +236 -27
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/gh.d.ts +3 -0
- package/dist/tools/gh.d.ts.map +1 -1
- package/dist/tools/index.d.ts +50 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list.d.ts +1 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/notebook.d.ts +1 -0
- package/dist/tools/notebook.d.ts.map +1 -1
- package/dist/tools/oracle.d.ts +1 -0
- package/dist/tools/oracle.d.ts.map +1 -1
- package/dist/tools/oracle.js +17 -32
- package/dist/tools/oracle.js.map +1 -1
- package/dist/tools/parallel-execution.d.ts +13 -2
- package/dist/tools/parallel-execution.d.ts.map +1 -1
- package/dist/tools/parallel-execution.js +178 -7
- package/dist/tools/parallel-execution.js.map +1 -1
- package/dist/tools/parallel-ripgrep.d.ts +1 -0
- package/dist/tools/parallel-ripgrep.d.ts.map +1 -1
- package/dist/tools/pipeline.d.ts +4 -0
- package/dist/tools/pipeline.d.ts.map +1 -1
- package/dist/tools/read.d.ts +1 -0
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/status.d.ts +1 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/todo.d.ts +1 -0
- package/dist/tools/todo.d.ts.map +1 -1
- package/dist/tools/tool-dsl.d.ts +5 -1
- package/dist/tools/tool-dsl.d.ts.map +1 -1
- package/dist/tools/tool-dsl.js +1 -0
- package/dist/tools/tool-dsl.js.map +1 -1
- package/dist/tools/tool-result-cache.d.ts.map +1 -1
- package/dist/tools/tool-result-cache.js +1 -0
- package/dist/tools/tool-result-cache.js.map +1 -1
- package/dist/tools/typebox-tool.d.ts.map +1 -1
- package/dist/tools/typebox-tool.js +3 -0
- package/dist/tools/typebox-tool.js.map +1 -1
- package/dist/tools/webfetch.d.ts +1 -0
- package/dist/tools/webfetch.d.ts.map +1 -1
- package/dist/tools/websearch.d.ts +1 -0
- package/dist/tools/websearch.d.ts.map +1 -1
- package/dist/tools/write.d.ts +1 -0
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/utils/abort-error.d.ts +2 -0
- package/dist/utils/abort-error.d.ts.map +1 -0
- package/dist/utils/abort-error.js +7 -0
- package/dist/utils/abort-error.js.map +1 -0
- package/dist/utils/downstream.d.ts.map +1 -1
- package/dist/utils/downstream.js +4 -0
- package/dist/utils/downstream.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +14 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/path-containment.d.ts +2 -0
- package/dist/utils/path-containment.d.ts.map +1 -0
- package/dist/utils/path-containment.js +14 -0
- package/dist/utils/path-containment.js.map +1 -0
- package/dist/utils/prompt-safe-text.d.ts +7 -0
- package/dist/utils/prompt-safe-text.d.ts.map +1 -0
- package/dist/utils/prompt-safe-text.js +44 -0
- package/dist/utils/prompt-safe-text.js.map +1 -0
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +32 -7
- package/dist/web-server.js.map +1 -1
- package/dist/workspace/root-resolver.d.ts +4 -1
- package/dist/workspace/root-resolver.d.ts.map +1 -1
- package/dist/workspace/root-resolver.js +16 -6
- package/dist/workspace/root-resolver.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts +8 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js +35 -0
- package/node_modules/@evalops/contracts/dist/advisor-effort.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts +10 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js +48 -0
- package/node_modules/@evalops/contracts/dist/delegation-prompt.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts +20 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js +147 -0
- package/node_modules/@evalops/contracts/dist/guarded-files-settings.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts +2 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js +1 -0
- package/node_modules/@evalops/contracts/dist/headless-protocol-generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +280 -5
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +36 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts +15 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.js +6 -0
- package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +593 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js +218 -0
- package/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +91 -0
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +92 -61
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +3 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts +28 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js +71 -0
- package/node_modules/@evalops/contracts/dist/runtime-constraints.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +7 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js +2 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/scenario.d.ts +191 -0
- package/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/scenario.js +4 -0
- package/node_modules/@evalops/contracts/dist/scenario.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/schemas.d.ts +17 -3
- package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/schemas.js +16 -0
- package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
- package/node_modules/@evalops/contracts/package.json +1 -1
- package/node_modules/@evalops/tui/package.json +1 -1
- package/package.json +41 -7
- package/skills/incident-triage/SKILL.md +40 -0
- package/skills/incident-triage/mcp.json +14 -0
- package/skills/incident-triage/reference/triage.md +20 -0
- package/skills/incident-triage/toolbox/incident-timeline +22 -0
- package/skills/incident-triage/toolbox/incident-timeline.cmd +16 -0
- package/skills/pr-review/SKILL.md +40 -0
- package/skills/pr-review/mcp.json +14 -0
- package/skills/pr-review/reference/rubric.md +20 -0
- package/skills/pr-review/toolbox/review-summary +20 -0
- package/skills/pr-review/toolbox/review-summary.cmd +14 -0
- package/skills/release-verification/SKILL.md +40 -0
- package/skills/release-verification/mcp.json +15 -0
- package/skills/release-verification/reference/checklist.md +21 -0
- package/skills/release-verification/toolbox/release-readiness +18 -0
- package/skills/release-verification/toolbox/release-readiness.cmd +12 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { HUMAN_EGRESS_PII_RULE_ID, } from "../../safety/action-firewall.js";
|
|
9
9
|
import { METRICS } from "../../safety/adaptive-thresholds.js";
|
|
10
|
+
import { DEFAULT_GUARDED_FILE_RULE_ID, GUARDED_FILES_BLOCK_POLICY_ID, classifyGuardedFileAccessAction, describeDefaultGuardedFileMatch, findGuardedToolCallMatch, } from "../../safety/guarded-files.js";
|
|
10
11
|
import { recordMaestroApprovalHit, recordMaestroFirewallBlock, } from "../../telemetry/maestro-event-bus.js";
|
|
11
12
|
import { trackToolBlocked } from "../../telemetry/security-events.js";
|
|
12
13
|
import { createLogger } from "../../utils/logger.js";
|
|
@@ -14,6 +15,32 @@ import { describeToolActivity, describeToolDisplayName, summarizeToolUse, } from
|
|
|
14
15
|
import { validateToolArguments } from "../providers/validation.js";
|
|
15
16
|
import { buildPiiPolicyResult, extractTextFromContent, logToolExecutionAudit, } from "./transport-utils.js";
|
|
16
17
|
const logger = createLogger("transport:tool-safety");
|
|
18
|
+
function guardedFileAuditContext(toolName, args, match, metadata) {
|
|
19
|
+
const context = {
|
|
20
|
+
tool_name: toolName,
|
|
21
|
+
display_name: metadata.displayName,
|
|
22
|
+
summary_label: metadata.summaryLabel,
|
|
23
|
+
args,
|
|
24
|
+
};
|
|
25
|
+
if (match) {
|
|
26
|
+
context.guarded_file = {
|
|
27
|
+
rule_id: match.ruleId,
|
|
28
|
+
category: match.category,
|
|
29
|
+
pattern: match.pattern,
|
|
30
|
+
path: match.path,
|
|
31
|
+
action: classifyGuardedFileAccessAction(toolName),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return context;
|
|
35
|
+
}
|
|
36
|
+
function guardedFileAuditFields(guardedFileApprovalRequired) {
|
|
37
|
+
return guardedFileApprovalRequired
|
|
38
|
+
? {
|
|
39
|
+
policy_id: GUARDED_FILES_BLOCK_POLICY_ID,
|
|
40
|
+
risk_level: "guarded_file",
|
|
41
|
+
}
|
|
42
|
+
: {};
|
|
43
|
+
}
|
|
17
44
|
async function waitForPendingApprovalRegistration(approvalService, requestId, decisionPromise, signal) {
|
|
18
45
|
const registrationAware = approvalService;
|
|
19
46
|
if (typeof registrationAware.waitForPendingApprovalRegistration !== "function") {
|
|
@@ -50,7 +77,9 @@ function checkRateLimit(ctx) {
|
|
|
50
77
|
if (toolNameLower === "read" || toolNameLower === "glob") {
|
|
51
78
|
adaptiveThresholds.recordObservation(METRICS.READS_PER_MINUTE, 1);
|
|
52
79
|
}
|
|
53
|
-
else if (toolNameLower === "write" ||
|
|
80
|
+
else if (toolNameLower === "write" ||
|
|
81
|
+
toolNameLower === "edit" ||
|
|
82
|
+
toolNameLower === "apply_patch") {
|
|
54
83
|
adaptiveThresholds.recordObservation(METRICS.WRITES_PER_MINUTE, 1);
|
|
55
84
|
}
|
|
56
85
|
else if (toolNameLower === "webfetch" ||
|
|
@@ -138,7 +167,7 @@ function checkRateLimit(ctx) {
|
|
|
138
167
|
* Yields events as they occur and returns the final verdict.
|
|
139
168
|
*/
|
|
140
169
|
export async function* evaluateToolSafety(ctx) {
|
|
141
|
-
const { toolCall, tools, userMessage, cfg, signal, clock, safetyMiddleware, workflowState, auditLogger, approvalService, toolExecutionBridge, hookService, firewall, emitToolResult, } = ctx;
|
|
170
|
+
const { toolCall, tools, userMessage, cfg, signal, clock, safetyMiddleware, workflowState, auditLogger, approvalService, toolExecutionBridge, hookService, firewall, shouldSkipLoopDetection, emitToolResult, } = ctx;
|
|
142
171
|
const events = [];
|
|
143
172
|
const recordEvent = (event) => {
|
|
144
173
|
events.push(event);
|
|
@@ -167,6 +196,7 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
167
196
|
toolCallId: toolCall.id,
|
|
168
197
|
toolName: toolCall.name,
|
|
169
198
|
args: sanitizedStartArgs,
|
|
199
|
+
scheduling: ctx.schedulingMetadata,
|
|
170
200
|
});
|
|
171
201
|
// 2. PreToolUse hooks
|
|
172
202
|
let effectiveToolCall = toolCall;
|
|
@@ -218,7 +248,9 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
218
248
|
}
|
|
219
249
|
}
|
|
220
250
|
// 3. Safety middleware sequence analysis
|
|
221
|
-
const safetyCheck = safetyMiddleware.preExecution(effectiveToolCall.name, effectiveToolCall.arguments
|
|
251
|
+
const safetyCheck = safetyMiddleware.preExecution(effectiveToolCall.name, effectiveToolCall.arguments, {
|
|
252
|
+
skipLoopDetection: shouldSkipLoopDetection?.(effectiveToolCall) === true,
|
|
253
|
+
});
|
|
222
254
|
if (!safetyCheck.allowed && !safetyCheck.requiresApproval) {
|
|
223
255
|
const safetyBlockedResult = {
|
|
224
256
|
role: "toolResult",
|
|
@@ -263,47 +295,84 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
263
295
|
metadata: {
|
|
264
296
|
workflowState: workflowSnapshot,
|
|
265
297
|
annotations: toolDef?.annotations,
|
|
298
|
+
guardedFiles: cfg.guardedFiles,
|
|
266
299
|
},
|
|
267
300
|
user: cfg.user,
|
|
268
301
|
session: cfg.session,
|
|
269
302
|
userIntent: extractTextFromContent(userMessage.content),
|
|
270
303
|
});
|
|
271
|
-
|
|
304
|
+
let guardedFileMatch = findGuardedToolCallMatch(effectiveToolCall.name, effectiveToolCall.arguments, { policy: cfg.guardedFiles });
|
|
305
|
+
let guardedFileApprovalRequired = Boolean(guardedFileMatch) ||
|
|
306
|
+
(verdict.action === "require_approval" &&
|
|
307
|
+
verdict.ruleId === DEFAULT_GUARDED_FILE_RULE_ID);
|
|
308
|
+
let guardedFileApprovalReason = guardedFileMatch
|
|
309
|
+
? describeDefaultGuardedFileMatch(guardedFileMatch)
|
|
310
|
+
: guardedFileApprovalRequired && verdict.action === "require_approval"
|
|
311
|
+
? verdict.reason
|
|
312
|
+
: undefined;
|
|
313
|
+
const guardedFileBlockVerdict = (match) => ({
|
|
314
|
+
action: "block",
|
|
315
|
+
ruleId: DEFAULT_GUARDED_FILE_RULE_ID,
|
|
316
|
+
reason: describeDefaultGuardedFileMatch(match),
|
|
317
|
+
remediation: "Remove the matching custom guard or change its defaultBehavior to ask if this access should be approval-gated instead of blocked.",
|
|
318
|
+
});
|
|
319
|
+
const emitFirewallBlock = async (blockVerdict, blockedToolCall) => {
|
|
272
320
|
const blockedResult = {
|
|
273
321
|
role: "toolResult",
|
|
274
|
-
toolCallId:
|
|
275
|
-
toolName:
|
|
322
|
+
toolCallId: blockedToolCall.id,
|
|
323
|
+
toolName: blockedToolCall.name,
|
|
276
324
|
content: [
|
|
277
325
|
{
|
|
278
326
|
type: "text",
|
|
279
|
-
text: `Action blocked by firewall: ${
|
|
327
|
+
text: `Action blocked by firewall: ${blockVerdict.reason}${blockVerdict.remediation
|
|
328
|
+
? `\n\nSuggestion: ${blockVerdict.remediation}`
|
|
329
|
+
: ""}`,
|
|
280
330
|
},
|
|
281
331
|
],
|
|
282
332
|
isError: true,
|
|
283
333
|
timestamp: clock.now(),
|
|
284
334
|
};
|
|
285
|
-
await logToolExecutionAudit(auditLogger,
|
|
286
|
-
const firewallBlockedEvents = recordEvents(emitToolResult(blockedResult,
|
|
287
|
-
const sanitizedFirewallArgs = safetyMiddleware.sanitizeForLogging(
|
|
335
|
+
await logToolExecutionAudit(auditLogger, blockedToolCall.name, safetyMiddleware.sanitizeForLogging(blockedToolCall.arguments), "denied", 0, blockVerdict.reason);
|
|
336
|
+
const firewallBlockedEvents = recordEvents(emitToolResult(blockedResult, blockedToolCall, true));
|
|
337
|
+
const sanitizedFirewallArgs = safetyMiddleware.sanitizeForLogging(blockedToolCall.arguments);
|
|
288
338
|
recordMaestroFirewallBlock({
|
|
289
|
-
rule_id:
|
|
290
|
-
operation:
|
|
339
|
+
rule_id: blockVerdict.ruleId,
|
|
340
|
+
operation: blockedToolCall.name,
|
|
291
341
|
target: typeof sanitizedFirewallArgs.command === "string"
|
|
292
342
|
? sanitizedFirewallArgs.command
|
|
293
|
-
:
|
|
294
|
-
reason:
|
|
343
|
+
: blockedToolCall.name,
|
|
344
|
+
reason: blockVerdict.reason,
|
|
295
345
|
context: sanitizedFirewallArgs,
|
|
296
346
|
correlation: {
|
|
297
347
|
session_id: cfg.session?.id,
|
|
298
|
-
agent_run_step_id:
|
|
348
|
+
agent_run_step_id: blockedToolCall.id,
|
|
299
349
|
},
|
|
300
350
|
});
|
|
301
|
-
|
|
351
|
+
const blockedToolSafetyVerdict = { outcome: "blocked", events };
|
|
352
|
+
return {
|
|
353
|
+
eventsToYield: firewallBlockedEvents,
|
|
354
|
+
verdict: blockedToolSafetyVerdict,
|
|
355
|
+
rateLimitUpdate: rateLimitResult.updatedState,
|
|
356
|
+
};
|
|
357
|
+
};
|
|
358
|
+
if (verdict.action === "block") {
|
|
359
|
+
const blocked = await emitFirewallBlock(verdict, effectiveToolCall);
|
|
360
|
+
for (const event of blocked.eventsToYield) {
|
|
302
361
|
yield event;
|
|
303
362
|
}
|
|
304
363
|
return {
|
|
305
|
-
verdict:
|
|
306
|
-
rateLimitUpdate:
|
|
364
|
+
verdict: blocked.verdict,
|
|
365
|
+
rateLimitUpdate: blocked.rateLimitUpdate,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
if (guardedFileMatch?.defaultBehavior === "block") {
|
|
369
|
+
const blocked = await emitFirewallBlock(guardedFileBlockVerdict(guardedFileMatch), effectiveToolCall);
|
|
370
|
+
for (const event of blocked.eventsToYield) {
|
|
371
|
+
yield event;
|
|
372
|
+
}
|
|
373
|
+
return {
|
|
374
|
+
verdict: blocked.verdict,
|
|
375
|
+
rateLimitUpdate: blocked.rateLimitUpdate,
|
|
307
376
|
};
|
|
308
377
|
}
|
|
309
378
|
// 5. PII policy check
|
|
@@ -362,7 +431,10 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
362
431
|
break;
|
|
363
432
|
case "wait_approval":
|
|
364
433
|
toolExecutionBridgePlan = bridgeResult.plan;
|
|
365
|
-
platformApprovalRequest =
|
|
434
|
+
platformApprovalRequest =
|
|
435
|
+
bridgeResult.request.startedAtMs === undefined
|
|
436
|
+
? { ...bridgeResult.request, startedAtMs: clock.now() }
|
|
437
|
+
: bridgeResult.request;
|
|
366
438
|
approvalAllowed = false;
|
|
367
439
|
approvalReason = bridgeResult.request.reason;
|
|
368
440
|
break;
|
|
@@ -393,24 +465,68 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
393
465
|
}
|
|
394
466
|
}
|
|
395
467
|
// 6. Approval flow
|
|
396
|
-
if (verdict.action === "require_approval" ||
|
|
468
|
+
if (verdict.action === "require_approval" ||
|
|
469
|
+
platformApprovalRequest ||
|
|
470
|
+
guardedFileApprovalRequired) {
|
|
397
471
|
const localApprovalReason = verdict.action === "require_approval" ? verdict.reason : undefined;
|
|
398
472
|
let permissionHookMadeDecision = false;
|
|
399
473
|
if (hookService?.runPermissionRequestHooks) {
|
|
400
474
|
const permissionHookResult = await hookService.runPermissionRequestHooks(effectiveToolCall, platformApprovalRequest?.reason ??
|
|
475
|
+
guardedFileApprovalReason ??
|
|
401
476
|
localApprovalReason ??
|
|
402
477
|
approvalReason ??
|
|
403
478
|
"Approval required", signal);
|
|
404
|
-
if (permissionHookResult.updatedInput) {
|
|
479
|
+
if (permissionHookResult.updatedInput && !guardedFileApprovalRequired) {
|
|
405
480
|
effectiveToolCall = {
|
|
406
481
|
...effectiveToolCall,
|
|
407
482
|
arguments: permissionHookResult.updatedInput,
|
|
408
483
|
};
|
|
484
|
+
const rewrittenVerdict = await firewall.evaluate({
|
|
485
|
+
toolName: effectiveToolCall.name,
|
|
486
|
+
args: effectiveToolCall.arguments,
|
|
487
|
+
metadata: {
|
|
488
|
+
workflowState: workflowSnapshot,
|
|
489
|
+
annotations: toolDef?.annotations,
|
|
490
|
+
guardedFiles: cfg.guardedFiles,
|
|
491
|
+
},
|
|
492
|
+
user: cfg.user,
|
|
493
|
+
session: cfg.session,
|
|
494
|
+
userIntent: extractTextFromContent(userMessage.content),
|
|
495
|
+
});
|
|
496
|
+
if (rewrittenVerdict.action === "block") {
|
|
497
|
+
const blocked = await emitFirewallBlock(rewrittenVerdict, effectiveToolCall);
|
|
498
|
+
for (const event of blocked.eventsToYield) {
|
|
499
|
+
yield event;
|
|
500
|
+
}
|
|
501
|
+
return {
|
|
502
|
+
verdict: blocked.verdict,
|
|
503
|
+
rateLimitUpdate: blocked.rateLimitUpdate,
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
const guardedMatch = findGuardedToolCallMatch(effectiveToolCall.name, effectiveToolCall.arguments, { policy: cfg.guardedFiles });
|
|
507
|
+
if (guardedMatch?.defaultBehavior === "block") {
|
|
508
|
+
const blocked = await emitFirewallBlock(guardedFileBlockVerdict(guardedMatch), effectiveToolCall);
|
|
509
|
+
for (const event of blocked.eventsToYield) {
|
|
510
|
+
yield event;
|
|
511
|
+
}
|
|
512
|
+
return {
|
|
513
|
+
verdict: blocked.verdict,
|
|
514
|
+
rateLimitUpdate: blocked.rateLimitUpdate,
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
if (guardedMatch) {
|
|
518
|
+
guardedFileMatch = guardedMatch;
|
|
519
|
+
guardedFileApprovalRequired = true;
|
|
520
|
+
guardedFileApprovalReason =
|
|
521
|
+
describeDefaultGuardedFileMatch(guardedMatch);
|
|
522
|
+
}
|
|
409
523
|
}
|
|
410
524
|
if (permissionHookResult.decision === "allow") {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
525
|
+
if (!guardedFileApprovalRequired) {
|
|
526
|
+
permissionHookMadeDecision = true;
|
|
527
|
+
approvalAllowed = true;
|
|
528
|
+
approvalReason = permissionHookResult.decisionReason;
|
|
529
|
+
}
|
|
414
530
|
}
|
|
415
531
|
else if (permissionHookResult.decision === "deny") {
|
|
416
532
|
permissionHookMadeDecision = true;
|
|
@@ -440,18 +556,48 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
440
556
|
approvalReason = undefined;
|
|
441
557
|
}
|
|
442
558
|
}
|
|
443
|
-
if (
|
|
559
|
+
if (guardedFileApprovalRequired &&
|
|
560
|
+
approvalService?.requiresUserInteraction() !== true) {
|
|
561
|
+
approvalAllowed = false;
|
|
562
|
+
if (!permissionHookMadeDecision) {
|
|
563
|
+
approvalReason = `${guardedFileApprovalReason ?? localApprovalReason ?? "Guarded file access requires explicit approval"} Approval mode must be prompt for guarded file access.`;
|
|
564
|
+
}
|
|
444
565
|
const sanitizedApprovalArgs = safetyMiddleware.sanitizeForLogging(effectiveToolCall.arguments);
|
|
445
|
-
const
|
|
446
|
-
|
|
566
|
+
const approvalDescription = describeArgs(sanitizedApprovalArgs);
|
|
567
|
+
recordMaestroApprovalHit({
|
|
568
|
+
approval_request_id: toolExecutionBridgePlan?.metadata.approvalRequestId ?? toolCall.id,
|
|
569
|
+
action: approvalDescription.actionDescription ??
|
|
570
|
+
approvalDescription.summaryLabel ??
|
|
571
|
+
effectiveToolCall.name,
|
|
572
|
+
command: typeof sanitizedApprovalArgs.command === "string"
|
|
573
|
+
? sanitizedApprovalArgs.command
|
|
574
|
+
: undefined,
|
|
575
|
+
decision_mode: "MAESTRO_DECISION_MODE_REQUIRE_APPROVAL",
|
|
576
|
+
...guardedFileAuditFields(true),
|
|
577
|
+
reason: approvalReason,
|
|
578
|
+
context: guardedFileAuditContext(effectiveToolCall.name, sanitizedApprovalArgs, guardedFileMatch, approvalDescription),
|
|
579
|
+
correlation: {
|
|
580
|
+
session_id: cfg.session?.id,
|
|
581
|
+
agent_run_step_id: toolCall.id,
|
|
582
|
+
},
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
else if (approvalService && !permissionHookMadeDecision) {
|
|
586
|
+
const sanitizedApprovalArgs = safetyMiddleware.sanitizeForLogging(effectiveToolCall.arguments);
|
|
587
|
+
const request = !guardedFileApprovalRequired && platformApprovalRequest
|
|
588
|
+
? platformApprovalRequest
|
|
589
|
+
: {
|
|
447
590
|
id: toolCall.id,
|
|
448
591
|
toolName: toolCall.name,
|
|
449
592
|
...describeArgs(sanitizedApprovalArgs),
|
|
450
593
|
args: sanitizedApprovalArgs,
|
|
451
|
-
reason:
|
|
594
|
+
reason: guardedFileApprovalReason ??
|
|
595
|
+
localApprovalReason ??
|
|
596
|
+
"Approval required",
|
|
597
|
+
startedAtMs: clock.now(),
|
|
452
598
|
};
|
|
453
599
|
const shouldEmitEvents = approvalService.requiresUserInteraction();
|
|
454
|
-
const decisionPromise = approvalService.requestApproval(request, signal);
|
|
600
|
+
const decisionPromise = approvalService.requestApproval(request, signal, clock);
|
|
455
601
|
const registrationMetadata = await waitForPendingApprovalRegistration(approvalService, request.id, decisionPromise, signal);
|
|
456
602
|
recordMaestroApprovalHit({
|
|
457
603
|
approval_request_id: platformApprovalRequest?.id ??
|
|
@@ -463,13 +609,12 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
463
609
|
? sanitizedApprovalArgs.command
|
|
464
610
|
: undefined,
|
|
465
611
|
decision_mode: "MAESTRO_DECISION_MODE_REQUIRE_APPROVAL",
|
|
612
|
+
...guardedFileAuditFields(guardedFileApprovalRequired),
|
|
466
613
|
reason: request.reason,
|
|
467
|
-
context: {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
args: sanitizedApprovalArgs,
|
|
472
|
-
},
|
|
614
|
+
context: guardedFileAuditContext(request.toolName, sanitizedApprovalArgs, guardedFileApprovalRequired ? guardedFileMatch : null, {
|
|
615
|
+
displayName: request.displayName,
|
|
616
|
+
summaryLabel: request.summaryLabel,
|
|
617
|
+
}),
|
|
473
618
|
correlation: {
|
|
474
619
|
session_id: cfg.session?.id,
|
|
475
620
|
agent_run_step_id: toolCall.id,
|
|
@@ -478,7 +623,10 @@ export async function* evaluateToolSafety(ctx) {
|
|
|
478
623
|
if (shouldEmitEvents) {
|
|
479
624
|
yield recordEvent({ type: "action_approval_required", request });
|
|
480
625
|
}
|
|
481
|
-
const
|
|
626
|
+
const rawDecision = await decisionPromise;
|
|
627
|
+
const decision = rawDecision.resolvedAtMs === undefined
|
|
628
|
+
? { ...rawDecision, resolvedAtMs: clock.now() }
|
|
629
|
+
: rawDecision;
|
|
482
630
|
if (shouldEmitEvents) {
|
|
483
631
|
yield recordEvent({
|
|
484
632
|
type: "action_approval_resolved",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-safety-pipeline.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-safety-pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tool Safety Pipeline\n * Pre-execution safety evaluation: rate limiting, adaptive thresholds,\n * safety middleware, firewall checks, PII policy, approval flow, and tool validation.\n *\n * Yields events as they occur and returns a verdict when complete.\n */\n\nimport {\n\ttype ActionFirewall,\n\tHUMAN_EGRESS_PII_RULE_ID,\n} from \"../../safety/action-firewall.js\";\nimport type { AdaptiveThresholds } from \"../../safety/adaptive-thresholds.js\";\nimport { METRICS } from \"../../safety/adaptive-thresholds.js\";\nimport type { SafetyMiddleware } from \"../../safety/safety-middleware.js\";\nimport type { WorkflowStateTracker } from \"../../safety/workflow-state.js\";\nimport {\n\trecordMaestroApprovalHit,\n\trecordMaestroFirewallBlock,\n} from \"../../telemetry/maestro-event-bus.js\";\nimport { trackToolBlocked } from \"../../telemetry/security-events.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport {\n\tdescribeToolActivity,\n\tdescribeToolDisplayName,\n\tsummarizeToolUse,\n} from \"../../utils/tool-use-summary.js\";\nimport type {\n\tActionApprovalDecision,\n\tActionApprovalService,\n} from \"../action-approval.js\";\nimport { validateToolArguments } from \"../providers/validation.js\";\nimport type {\n\tAgentEvent,\n\tAgentRunConfig,\n\tAgentTool,\n\tMessage,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\nimport type {\n\tPlatformToolExecutionBridge,\n\tToolExecutionBridgeInput,\n\tToolExecutionBridgePlan,\n} from \"./tool-execution-bridge.js\";\nimport {\n\ttype ToolAuditLogger,\n\tbuildPiiPolicyResult,\n\textractTextFromContent,\n\tlogToolExecutionAudit,\n} from \"./transport-utils.js\";\n\nconst logger = createLogger(\"transport:tool-safety\");\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ToolSafetyVerdict =\n\t| { outcome: \"blocked\"; events: AgentEvent[] }\n\t| {\n\t\t\toutcome: \"proceed\";\n\t\t\teffectiveToolCall: ToolCall;\n\t\t\tvalidatedArgs: Record<string, unknown>;\n\t\t\ttoolDef: AgentTool;\n\t\t\tevents: AgentEvent[];\n\t\t\tsanitizedExecutionArgs: Record<string, unknown>;\n\t\t\ttoolExecutionBridgePlan?: ToolExecutionBridgePlan;\n\t };\n\nexport interface ToolSafetyContext {\n\ttoolCall: ToolCall;\n\ttools: AgentTool[];\n\tuserMessage: Message;\n\tcfg: AgentRunConfig;\n\tsignal?: AbortSignal;\n\t// Services\n\tclock: Clock;\n\tsafetyMiddleware: SafetyMiddleware;\n\tworkflowState: WorkflowStateTracker;\n\tadaptiveThresholds: AdaptiveThresholds;\n\tauditLogger?: ToolAuditLogger;\n\tapprovalService?: ActionApprovalService;\n\ttoolExecutionBridge?: PlatformToolExecutionBridge;\n\thookService?: {\n\t\trunPreToolUseHooks: (\n\t\t\ttoolCall: ToolCall,\n\t\t\tsignal?: AbortSignal,\n\t\t) => Promise<{\n\t\t\tblocked?: boolean;\n\t\t\tblockReason?: string;\n\t\t\tupdatedInput?: Record<string, unknown>;\n\t\t}>;\n\t\trunPermissionRequestHooks?: (\n\t\t\ttoolCall: ToolCall,\n\t\t\treason: string,\n\t\t\tsignal?: AbortSignal,\n\t\t) => Promise<{\n\t\t\tdecision?: \"allow\" | \"deny\";\n\t\t\tdecisionReason?: string;\n\t\t\tupdatedInput?: Record<string, unknown>;\n\t\t}>;\n\t};\n\tfirewall: ActionFirewall;\n\t// Mutable rate-limit state\n\trateLimitState: {\n\t\trecentToolTimestamps: Map<string, number[]>;\n\t\ttoolCallsThisMinute: number;\n\t\tminuteWindowStart: number;\n\t\trateWindowMs: number;\n\t\trateLimit: number;\n\t};\n\t// Emit helpers\n\temitToolResult: (\n\t\tmessage: ToolResultMessage,\n\t\ttoolCall: ToolCall,\n\t\tisError: boolean,\n\t\tmetadata?: {\n\t\t\ttoolExecutionId?: string;\n\t\t\tapprovalRequestId?: string;\n\t\t},\n\t) => AgentEvent[];\n}\n\ninterface ApprovalRegistrationMetadata {\n\tremoteApprovalRequestId?: string;\n}\n\ninterface ApprovalRegistrationAwareService {\n\twaitForPendingApprovalRegistration?: (\n\t\trequestId: string,\n\t\toptions?: { signal?: AbortSignal },\n\t) => Promise<ApprovalRegistrationMetadata | null>;\n}\n\nasync function waitForPendingApprovalRegistration(\n\tapprovalService: ActionApprovalService,\n\trequestId: string,\n\tdecisionPromise: Promise<ActionApprovalDecision>,\n\tsignal?: AbortSignal,\n): Promise<ApprovalRegistrationMetadata | null> {\n\tconst registrationAware = approvalService as ActionApprovalService &\n\t\tApprovalRegistrationAwareService;\n\tif (\n\t\ttypeof registrationAware.waitForPendingApprovalRegistration !== \"function\"\n\t) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tregistrationAware.waitForPendingApprovalRegistration(requestId, {\n\t\t\t\tsignal,\n\t\t\t}),\n\t\t\tdecisionPromise.then(\n\t\t\t\t() => null,\n\t\t\t\t() => null,\n\t\t\t),\n\t\t]);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Rate Limiting\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype RateLimitBlockKind = \"anomaly\" | \"rate_limit\";\n\ninterface RateLimitBlock {\n\tkind: RateLimitBlockKind;\n\treason: string;\n}\n\nfunction checkRateLimit(ctx: ToolSafetyContext):\n\t| {\n\t\t\tblocked: true;\n\t\t\tevents: AgentEvent[];\n\t\t\tupdatedState: RateLimitUpdate;\n\t\t\tblock: RateLimitBlock;\n\t }\n\t| {\n\t\t\tblocked: false;\n\t\t\trecent: number[];\n\t\t\tupdatedState: RateLimitUpdate;\n\t } {\n\tconst { toolCall, clock, adaptiveThresholds, emitToolResult } = ctx;\n\tconst { recentToolTimestamps, rateWindowMs, rateLimit } = ctx.rateLimitState;\n\tlet { toolCallsThisMinute, minuteWindowStart } = ctx.rateLimitState;\n\n\tconst now = clock.now();\n\tconst timestamps = recentToolTimestamps.get(toolCall.name) ?? [];\n\tconst recent = timestamps.filter((ts) => now - ts < rateWindowMs);\n\n\t// Track tool calls per minute for adaptive thresholds\n\tif (now - minuteWindowStart >= 60_000) {\n\t\tadaptiveThresholds.recordObservation(\n\t\t\tMETRICS.TOOL_CALLS_PER_MINUTE,\n\t\t\ttoolCallsThisMinute,\n\t\t);\n\t\ttoolCallsThisMinute = 0;\n\t\tminuteWindowStart = now;\n\t}\n\ttoolCallsThisMinute++;\n\n\t// Track tool-specific metrics\n\tconst toolNameLower = toolCall.name.toLowerCase();\n\tif (toolNameLower === \"read\" || toolNameLower === \"glob\") {\n\t\tadaptiveThresholds.recordObservation(METRICS.READS_PER_MINUTE, 1);\n\t} else if (toolNameLower === \"write\" || toolNameLower === \"edit\") {\n\t\tadaptiveThresholds.recordObservation(METRICS.WRITES_PER_MINUTE, 1);\n\t} else if (\n\t\ttoolNameLower === \"webfetch\" ||\n\t\ttoolNameLower === \"websearch\" ||\n\t\ttoolNameLower.includes(\"mcp\")\n\t) {\n\t\tadaptiveThresholds.recordObservation(METRICS.EGRESS_PER_MINUTE, 1);\n\t}\n\n\tconst updatedState: RateLimitUpdate = {\n\t\ttoolCallsThisMinute,\n\t\tminuteWindowStart,\n\t};\n\n\t// Check for anomalous tool call rate\n\tconst anomalyCheck = adaptiveThresholds.checkAnomaly(\n\t\tMETRICS.TOOL_CALLS_PER_MINUTE,\n\t\ttoolCallsThisMinute,\n\t);\n\n\t// Enforce anomaly detection\n\tif (anomalyCheck.isAnomaly) {\n\t\tconst reason = `Anomaly detected: ${anomalyCheck.reason ?? \"Unusual tool call rate\"}`;\n\t\ttrackToolBlocked({\n\t\t\ttoolName: toolCall.name,\n\t\t\treason,\n\t\t\tsource: \"adaptive\",\n\t\t});\n\t\tconst anomalyMessage: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked \"${toolCall.name}\" due to anomalous behavior: ${anomalyCheck.reason ?? \"Unusual tool call pattern detected\"}. Z-score: ${anomalyCheck.zScore.toFixed(2)}, Baseline: ${anomalyCheck.mean.toFixed(2)} ± ${anomalyCheck.stdDev.toFixed(2)}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: now,\n\t\t};\n\t\treturn {\n\t\t\tblocked: true,\n\t\t\tevents: emitToolResult(anomalyMessage, toolCall, true),\n\t\t\tupdatedState,\n\t\t\tblock: {\n\t\t\t\tkind: \"anomaly\",\n\t\t\t\treason,\n\t\t\t},\n\t\t};\n\t}\n\n\t// Use adaptive threshold if we have enough data, otherwise use static limit\n\tconst effectiveRateLimit = adaptiveThresholds.getAdaptedThreshold(\n\t\t`tool_rate_${toolCall.name}`,\n\t\trateLimit,\n\t);\n\n\tif (recent.length >= effectiveRateLimit) {\n\t\tconst reason = `Rate limit exceeded: >${effectiveRateLimit} calls in ${rateWindowMs / 1000}s window`;\n\t\tconst rateMessage: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked \"${toolCall.name}\" due to rate limit: >${effectiveRateLimit} calls in ${rateWindowMs / 1000}s window.${\n\t\t\t\t\t\tanomalyCheck.isAnomaly\n\t\t\t\t\t\t\t? ` (Anomaly detected: ${anomalyCheck.reason})`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: now,\n\t\t};\n\t\treturn {\n\t\t\tblocked: true,\n\t\t\tevents: emitToolResult(rateMessage, toolCall, true),\n\t\t\tupdatedState,\n\t\t\tblock: {\n\t\t\t\tkind: \"rate_limit\",\n\t\t\t\treason,\n\t\t\t},\n\t\t};\n\t}\n\n\t// Record observation for per-tool adaptive rate\n\tadaptiveThresholds.recordObservation(\n\t\t`tool_rate_${toolCall.name}`,\n\t\trecent.length,\n\t);\n\trecent.push(now);\n\trecentToolTimestamps.set(toolCall.name, recent);\n\n\treturn { blocked: false, recent, updatedState };\n}\n\ninterface RateLimitUpdate {\n\ttoolCallsThisMinute: number;\n\tminuteWindowStart: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Main Safety Evaluation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Evaluate all safety checks for a tool call before execution.\n * Yields events as they occur and returns the final verdict.\n */\nexport async function* evaluateToolSafety(\n\tctx: ToolSafetyContext,\n): AsyncGenerator<\n\tAgentEvent,\n\t{ verdict: ToolSafetyVerdict; rateLimitUpdate: RateLimitUpdate }\n> {\n\tconst {\n\t\ttoolCall,\n\t\ttools,\n\t\tuserMessage,\n\t\tcfg,\n\t\tsignal,\n\t\tclock,\n\t\tsafetyMiddleware,\n\t\tworkflowState,\n\t\tauditLogger,\n\t\tapprovalService,\n\t\ttoolExecutionBridge,\n\t\thookService,\n\t\tfirewall,\n\t\temitToolResult,\n\t} = ctx;\n\n\tconst events: AgentEvent[] = [];\n\tconst recordEvent = (event: AgentEvent) => {\n\t\tevents.push(event);\n\t\treturn event;\n\t};\n\tconst recordEvents = (newEvents: AgentEvent[]) => {\n\t\tevents.push(...newEvents);\n\t\treturn newEvents;\n\t};\n\n\tconst sanitizedStartArgs = safetyMiddleware.sanitizeForLogging(\n\t\ttoolCall.arguments as Record<string, unknown>,\n\t);\n\n\t// 1. Rate limiting\n\tconst rateLimitResult = checkRateLimit(ctx);\n\tif (rateLimitResult.blocked) {\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\ttoolCall.name,\n\t\t\tsanitizedStartArgs,\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\trateLimitResult.block.reason,\n\t\t);\n\t\tconst blockedEvents = recordEvents(rateLimitResult.events);\n\t\tfor (const event of blockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\tyield recordEvent({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: sanitizedStartArgs,\n\t});\n\n\t// 2. PreToolUse hooks\n\tlet effectiveToolCall = toolCall;\n\tif (hookService) {\n\t\tconst hookResult = await hookService.runPreToolUseHooks(toolCall, signal);\n\n\t\tif (hookResult.blocked) {\n\t\t\tconst hookBlockedResult: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `Blocked by hook: ${hookResult.blockReason ?? \"Hook denied execution\"}`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t\t),\n\t\t\t\t\"denied\",\n\t\t\t\t0,\n\t\t\t\thookResult.blockReason,\n\t\t\t);\n\t\t\tconst hookBlockedEvents = recordEvents(\n\t\t\t\temitToolResult(hookBlockedResult, toolCall, true),\n\t\t\t);\n\t\t\tfor (const event of hookBlockedEvents) {\n\t\t\t\tyield event;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t\t};\n\t\t}\n\n\t\tif (hookResult.updatedInput) {\n\t\t\tconst originalKeys = Object.keys(\n\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst updatedKeys = Object.keys(hookResult.updatedInput);\n\t\t\tconst addedKeys = updatedKeys.filter((k) => !originalKeys.includes(k));\n\t\t\tconst removedKeys = originalKeys.filter((k) => !updatedKeys.includes(k));\n\t\t\tconst modifiedKeys = updatedKeys.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\toriginalKeys.includes(k) &&\n\t\t\t\t\t(toolCall.arguments as Record<string, unknown>)[k] !==\n\t\t\t\t\t\thookResult.updatedInput![k],\n\t\t\t);\n\t\t\tlogger.debug(\"Hook modified tool input\", {\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\taddedKeys,\n\t\t\t\tremovedKeys,\n\t\t\t\tmodifiedKeys,\n\t\t\t});\n\t\t\teffectiveToolCall = {\n\t\t\t\t...toolCall,\n\t\t\t\targuments: hookResult.updatedInput,\n\t\t\t};\n\t\t}\n\t}\n\n\t// 3. Safety middleware sequence analysis\n\tconst safetyCheck = safetyMiddleware.preExecution(\n\t\teffectiveToolCall.name,\n\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t);\n\n\tif (!safetyCheck.allowed && !safetyCheck.requiresApproval) {\n\t\tconst safetyBlockedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked by safety check: ${safetyCheck.reason ?? \"Safety policy violation\"}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\ttoolCall.name,\n\t\t\tsafetyCheck.sanitizedArgs,\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tsafetyCheck.reason,\n\t\t);\n\t\tconst safetyBlockedEvents = recordEvents(\n\t\t\temitToolResult(safetyBlockedResult, toolCall, true),\n\t\t);\n\t\tfor (const event of safetyBlockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tlet approvalAllowed = true;\n\tlet approvalReason: string | undefined;\n\n\tif (safetyCheck.requiresApproval) {\n\t\tapprovalAllowed = false;\n\t\tapprovalReason = safetyCheck.reason;\n\t}\n\n\t// 4. Firewall evaluation\n\tconst workflowSnapshot = workflowState.snapshot();\n\tconst toolDef = tools.find((t) => t.name === effectiveToolCall.name);\n\tconst describeArgs = (args: Record<string, unknown>) => ({\n\t\tdisplayName: describeToolDisplayName(toolCall.name, args, toolDef),\n\t\tsummaryLabel: summarizeToolUse(toolCall.name, args, toolDef),\n\t\tactionDescription: describeToolActivity(toolCall.name, args, toolDef),\n\t});\n\tconst verdict = await firewall.evaluate({\n\t\ttoolName: effectiveToolCall.name,\n\t\targs: effectiveToolCall.arguments,\n\t\tmetadata: {\n\t\t\tworkflowState: workflowSnapshot,\n\t\t\tannotations: toolDef?.annotations,\n\t\t},\n\t\tuser: cfg.user,\n\t\tsession: cfg.session,\n\t\tuserIntent: extractTextFromContent(userMessage.content),\n\t});\n\n\tif (verdict.action === \"block\") {\n\t\tconst blockedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Action blocked by firewall: ${verdict.reason}${\n\t\t\t\t\t\tverdict.remediation ? `\\n\\nSuggestion: ${verdict.remediation}` : \"\"\n\t\t\t\t\t}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\ttoolCall.name,\n\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t),\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tverdict.reason,\n\t\t);\n\t\tconst firewallBlockedEvents = recordEvents(\n\t\t\temitToolResult(blockedResult, toolCall, true),\n\t\t);\n\t\tconst sanitizedFirewallArgs = safetyMiddleware.sanitizeForLogging(\n\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t);\n\t\trecordMaestroFirewallBlock({\n\t\t\trule_id: verdict.ruleId,\n\t\t\toperation: toolCall.name,\n\t\t\ttarget:\n\t\t\t\ttypeof sanitizedFirewallArgs.command === \"string\"\n\t\t\t\t\t? sanitizedFirewallArgs.command\n\t\t\t\t\t: toolCall.name,\n\t\t\treason: verdict.reason,\n\t\t\tcontext: sanitizedFirewallArgs,\n\t\t\tcorrelation: {\n\t\t\t\tsession_id: cfg.session?.id,\n\t\t\t\tagent_run_step_id: toolCall.id,\n\t\t\t},\n\t\t});\n\t\tfor (const event of firewallBlockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\t// 5. PII policy check\n\tif (\n\t\tverdict.action === \"require_approval\" &&\n\t\tverdict.ruleId === HUMAN_EGRESS_PII_RULE_ID\n\t) {\n\t\tconst policyResult = buildPiiPolicyResult(\n\t\t\ttoolCall,\n\t\t\tworkflowSnapshot,\n\t\t\tclock,\n\t\t);\n\t\tconst policyBlockedEvents = recordEvents(\n\t\t\temitToolResult(policyResult, toolCall, true),\n\t\t);\n\t\tfor (const event of policyBlockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tif (!toolDef) {\n\t\tconst errorResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Error: Tool \"${toolCall.name}\" not found`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst errorEvents = recordEvents(\n\t\t\temitToolResult(errorResult, toolCall, true),\n\t\t);\n\t\tfor (const event of errorEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tlet toolExecutionBridgePlan: ToolExecutionBridgePlan | undefined;\n\tlet platformApprovalRequest:\n\t\t| import(\"../action-approval.js\").ActionApprovalRequest\n\t\t| undefined;\n\tlet platformApprovalResolved = false;\n\tconst bridgeArgs = safetyMiddleware.sanitizeForLogging(\n\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t);\n\tconst bridgeInput: ToolExecutionBridgeInput = {\n\t\tcfg,\n\t\ttoolCall,\n\t\ttoolDef,\n\t\tsanitizedArgs: bridgeArgs,\n\t\t...describeArgs(bridgeArgs),\n\t};\n\tif (toolExecutionBridge) {\n\t\tconst bridgeResult = await toolExecutionBridge.prepare(bridgeInput, signal);\n\t\tswitch (bridgeResult.status) {\n\t\t\tcase \"observe\":\n\t\t\tcase \"allow\":\n\t\t\t\ttoolExecutionBridgePlan = bridgeResult.plan;\n\t\t\t\tbreak;\n\t\t\tcase \"wait_approval\":\n\t\t\t\ttoolExecutionBridgePlan = bridgeResult.plan;\n\t\t\t\tplatformApprovalRequest = bridgeResult.request;\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = bridgeResult.request.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"deny\": {\n\t\t\t\tawait logToolExecutionAudit(\n\t\t\t\t\tauditLogger,\n\t\t\t\t\teffectiveToolCall.name,\n\t\t\t\t\tbridgeArgs,\n\t\t\t\t\t\"denied\",\n\t\t\t\t\t0,\n\t\t\t\t\tbridgeResult.reason,\n\t\t\t\t);\n\t\t\t\tconst deniedResult: ToolResultMessage = {\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text: bridgeResult.reason }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\ttimestamp: clock.now(),\n\t\t\t\t};\n\t\t\t\tconst deniedEvents = recordEvents(\n\t\t\t\t\temitToolResult(deniedResult, toolCall, true, {\n\t\t\t\t\t\ttoolExecutionId: bridgeResult.plan?.metadata.toolExecutionId,\n\t\t\t\t\t\tapprovalRequestId: bridgeResult.plan?.metadata.approvalRequestId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tfor (const event of deniedEvents) {\n\t\t\t\t\tyield event;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t\t\t};\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// 6. Approval flow\n\tif (verdict.action === \"require_approval\" || platformApprovalRequest) {\n\t\tconst localApprovalReason =\n\t\t\tverdict.action === \"require_approval\" ? verdict.reason : undefined;\n\t\tlet permissionHookMadeDecision = false;\n\t\tif (hookService?.runPermissionRequestHooks) {\n\t\t\tconst permissionHookResult = await hookService.runPermissionRequestHooks(\n\t\t\t\teffectiveToolCall,\n\t\t\t\tplatformApprovalRequest?.reason ??\n\t\t\t\t\tlocalApprovalReason ??\n\t\t\t\t\tapprovalReason ??\n\t\t\t\t\t\"Approval required\",\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (permissionHookResult.updatedInput) {\n\t\t\t\teffectiveToolCall = {\n\t\t\t\t\t...effectiveToolCall,\n\t\t\t\t\targuments: permissionHookResult.updatedInput,\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (permissionHookResult.decision === \"allow\") {\n\t\t\t\tpermissionHookMadeDecision = true;\n\t\t\t\tapprovalAllowed = true;\n\t\t\t\tapprovalReason = permissionHookResult.decisionReason;\n\t\t\t} else if (permissionHookResult.decision === \"deny\") {\n\t\t\t\tpermissionHookMadeDecision = true;\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason =\n\t\t\t\t\tpermissionHookResult.decisionReason ??\n\t\t\t\t\t\"Permission denied by PermissionRequest hook\";\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tpermissionHookMadeDecision &&\n\t\t\ttoolExecutionBridge &&\n\t\t\tplatformApprovalRequest &&\n\t\t\ttoolExecutionBridgePlan?.kind === \"governed\"\n\t\t) {\n\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\tbridgeInput,\n\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t{\n\t\t\t\t\tapproved: approvalAllowed,\n\t\t\t\t\treason: approvalReason,\n\t\t\t\t\tresolvedBy: \"policy\",\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tplatformApprovalResolved = true;\n\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\tif (resolution.status === \"deny\") {\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = resolution.reason;\n\t\t\t} else {\n\t\t\t\tapprovalAllowed = true;\n\t\t\t\tapprovalReason = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (approvalService && !permissionHookMadeDecision) {\n\t\t\tconst sanitizedApprovalArgs = safetyMiddleware.sanitizeForLogging(\n\t\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst request =\n\t\t\t\tplatformApprovalRequest ??\n\t\t\t\t({\n\t\t\t\t\tid: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t...describeArgs(sanitizedApprovalArgs),\n\t\t\t\t\targs: sanitizedApprovalArgs,\n\t\t\t\t\treason: localApprovalReason ?? \"Approval required\",\n\t\t\t\t} satisfies import(\"../action-approval.js\").ActionApprovalRequest);\n\t\t\tconst shouldEmitEvents = approvalService.requiresUserInteraction();\n\t\t\tconst decisionPromise = approvalService.requestApproval(request, signal);\n\t\t\tconst registrationMetadata = await waitForPendingApprovalRegistration(\n\t\t\t\tapprovalService,\n\t\t\t\trequest.id,\n\t\t\t\tdecisionPromise,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\trecordMaestroApprovalHit({\n\t\t\t\tapproval_request_id:\n\t\t\t\t\tplatformApprovalRequest?.id ??\n\t\t\t\t\ttoolExecutionBridgePlan?.metadata.approvalRequestId ??\n\t\t\t\t\tregistrationMetadata?.remoteApprovalRequestId ??\n\t\t\t\t\trequest.id,\n\t\t\t\taction:\n\t\t\t\t\trequest.actionDescription ?? request.summaryLabel ?? request.toolName,\n\t\t\t\tcommand:\n\t\t\t\t\ttypeof sanitizedApprovalArgs.command === \"string\"\n\t\t\t\t\t\t? sanitizedApprovalArgs.command\n\t\t\t\t\t\t: undefined,\n\t\t\t\tdecision_mode: \"MAESTRO_DECISION_MODE_REQUIRE_APPROVAL\",\n\t\t\t\treason: request.reason,\n\t\t\t\tcontext: {\n\t\t\t\t\ttool_name: request.toolName,\n\t\t\t\t\tdisplay_name: request.displayName,\n\t\t\t\t\tsummary_label: request.summaryLabel,\n\t\t\t\t\targs: sanitizedApprovalArgs,\n\t\t\t\t},\n\t\t\t\tcorrelation: {\n\t\t\t\t\tsession_id: cfg.session?.id,\n\t\t\t\t\tagent_run_step_id: toolCall.id,\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (shouldEmitEvents) {\n\t\t\t\tyield recordEvent({ type: \"action_approval_required\", request });\n\t\t\t}\n\n\t\t\tconst decision = await decisionPromise;\n\t\t\tif (shouldEmitEvents) {\n\t\t\t\tyield recordEvent({\n\t\t\t\t\ttype: \"action_approval_resolved\",\n\t\t\t\t\trequest,\n\t\t\t\t\tdecision,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttoolExecutionBridge &&\n\t\t\t\tplatformApprovalRequest &&\n\t\t\t\ttoolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t) {\n\t\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\t\tbridgeInput,\n\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\tdecision,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tplatformApprovalResolved = true;\n\t\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\t\tif (resolution.status === \"deny\") {\n\t\t\t\t\tapprovalAllowed = false;\n\t\t\t\t\tapprovalReason = resolution.reason;\n\t\t\t\t} else {\n\t\t\t\t\tapprovalAllowed = true;\n\t\t\t\t\tapprovalReason = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!decision.approved) {\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = decision.reason ?? localApprovalReason;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!approvalAllowed) {\n\t\tif (\n\t\t\ttoolExecutionBridge &&\n\t\t\tplatformApprovalRequest &&\n\t\t\ttoolExecutionBridgePlan?.kind === \"governed\" &&\n\t\t\t!platformApprovalResolved\n\t\t) {\n\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\tbridgeInput,\n\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t{\n\t\t\t\t\tapproved: false,\n\t\t\t\t\treason: approvalReason ?? \"Approval denied\",\n\t\t\t\t\tresolvedBy: \"policy\",\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\tapprovalReason =\n\t\t\t\tresolution.status === \"deny\"\n\t\t\t\t\t? resolution.reason\n\t\t\t\t\t: (approvalReason ?? \"Approval denied\");\n\t\t}\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\teffectiveToolCall.name,\n\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t\t),\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tapprovalReason,\n\t\t);\n\t\tconst deniedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [{ type: \"text\", text: approvalReason ?? \"Action denied\" }],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst deniedEvents = recordEvents(\n\t\t\temitToolResult(deniedResult, toolCall, true, {\n\t\t\t\ttoolExecutionId: toolExecutionBridgePlan?.metadata.toolExecutionId,\n\t\t\t\tapprovalRequestId: toolExecutionBridgePlan?.metadata.approvalRequestId,\n\t\t\t}),\n\t\t);\n\t\tfor (const event of deniedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\t// 7. Argument validation\n\tlet validatedArgs: Record<string, unknown>;\n\ttry {\n\t\tconst rawArgs = validateToolArguments(toolDef, effectiveToolCall);\n\t\tconst vaultedArgs = safetyMiddleware.prepareExecutionArgs(rawArgs);\n\t\tvalidatedArgs = safetyMiddleware.resolveCredentials(vaultedArgs);\n\t} catch (error: unknown) {\n\t\tconst validationErrorResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: error instanceof Error ? error.message : String(error),\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst validationEvents = recordEvents(\n\t\t\temitToolResult(validationErrorResult, toolCall, true),\n\t\t);\n\t\tfor (const event of validationEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tconst sanitizedExecutionArgs =\n\t\tsafetyMiddleware.sanitizeForLogging(validatedArgs);\n\n\treturn {\n\t\tverdict: {\n\t\t\toutcome: \"proceed\",\n\t\t\teffectiveToolCall,\n\t\t\tvalidatedArgs,\n\t\t\ttoolDef,\n\t\t\tevents,\n\t\t\tsanitizedExecutionArgs,\n\t\t\t...(toolExecutionBridgePlan ? { toolExecutionBridgePlan } : {}),\n\t\t},\n\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-safety-pipeline.js","sourceRoot":"","sources":["../../../src/agent/transport/tool-safety-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEN,wBAAwB,GACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EACN,4BAA4B,EAC5B,6BAA6B,EAE7B,+BAA+B,EAC/B,+BAA+B,EAC/B,wBAAwB,GACxB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAEN,wBAAwB,EACxB,0BAA0B,GAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EACN,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAenE,OAAO,EAEN,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AAuFrD,SAAS,uBAAuB,CAC/B,QAAgB,EAChB,IAA6B,EAC7B,KAA8B,EAC9B,QAGC;IAED,MAAM,OAAO,GAA4B;QACxC,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,QAAQ,CAAC,WAAW;QAClC,aAAa,EAAE,QAAQ,CAAC,YAAY;QACpC,IAAI;KACJ,CAAC;IACF,IAAI,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,YAAY,GAAG;YACtB,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,+BAA+B,CAAC,QAAQ,CAAC;SACjD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC9B,2BAAoC;IAEpC,OAAO,2BAA2B;QACjC,CAAC,CAAC;YACA,SAAS,EAAE,6BAA6B;YACxC,UAAU,EAAE,cAAc;SAC1B;QACF,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;AAED,KAAK,UAAU,kCAAkC,CAChD,eAAsC,EACtC,SAAiB,EACjB,eAAgD,EAChD,MAAoB;IAEpB,MAAM,iBAAiB,GAAG,eACO,CAAC;IAClC,IACC,OAAO,iBAAiB,CAAC,kCAAkC,KAAK,UAAU,EACzE,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACzB,iBAAiB,CAAC,kCAAkC,CAAC,SAAS,EAAE;gBAC/D,MAAM;aACN,CAAC;YACF,eAAe,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,IAAI,CACV;SACD,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAaD,SAAS,cAAc,CAAC,GAAsB;IAY7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;IACpE,MAAM,EAAE,oBAAoB,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC;IAC7E,IAAI,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,cAAc,CAAC;IAEpE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC,CAAC;IAElE,sDAAsD;IACtD,IAAI,GAAG,GAAG,iBAAiB,IAAI,MAAM,EAAE,CAAC;QACvC,kBAAkB,CAAC,iBAAiB,CACnC,OAAO,CAAC,qBAAqB,EAC7B,mBAAmB,CACnB,CAAC;QACF,mBAAmB,GAAG,CAAC,CAAC;QACxB,iBAAiB,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,mBAAmB,EAAE,CAAC;IAEtB,8BAA8B;IAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC1D,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;SAAM,IACN,aAAa,KAAK,OAAO;QACzB,aAAa,KAAK,MAAM;QACxB,aAAa,KAAK,aAAa,EAC9B,CAAC;QACF,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,IACN,aAAa,KAAK,UAAU;QAC5B,aAAa,KAAK,WAAW;QAC7B,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC5B,CAAC;QACF,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,YAAY,GAAoB;QACrC,mBAAmB;QACnB,iBAAiB;KACjB,CAAC;IAEF,qCAAqC;IACrC,MAAM,YAAY,GAAG,kBAAkB,CAAC,YAAY,CACnD,OAAO,CAAC,qBAAqB,EAC7B,mBAAmB,CACnB,CAAC;IAEF,4BAA4B;IAC5B,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,qBAAqB,YAAY,CAAC,MAAM,IAAI,wBAAwB,EAAE,CAAC;QACtF,gBAAgB,CAAC;YAChB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,MAAM;YACN,MAAM,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,MAAM,cAAc,GAAsB;YACzC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY,QAAQ,CAAC,IAAI,gCAAgC,YAAY,CAAC,MAAM,IAAI,oCAAoC,cAAc,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;iBACvP;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,GAAG;SACd,CAAC;QACF,OAAO;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC;YACtD,YAAY;YACZ,KAAK,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,MAAM;aACN;SACD,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,mBAAmB,CAChE,aAAa,QAAQ,CAAC,IAAI,EAAE,EAC5B,SAAS,CACT,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,yBAAyB,kBAAkB,aAAa,YAAY,GAAG,IAAI,UAAU,CAAC;QACrG,MAAM,WAAW,GAAsB;YACtC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,YAAY,QAAQ,CAAC,IAAI,yBAAyB,kBAAkB,aAAa,YAAY,GAAG,IAAI,YACzG,YAAY,CAAC,SAAS;wBACrB,CAAC,CAAC,uBAAuB,YAAY,CAAC,MAAM,GAAG;wBAC/C,CAAC,CAAC,EACJ,EAAE;iBACF;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,GAAG;SACd,CAAC;QACF,OAAO;YACN,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,cAAc,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC;YACnD,YAAY;YACZ,KAAK,EAAE;gBACN,IAAI,EAAE,YAAY;gBAClB,MAAM;aACN;SACD,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,kBAAkB,CAAC,iBAAiB,CACnC,aAAa,QAAQ,CAAC,IAAI,EAAE,EAC5B,MAAM,CAAC,MAAM,CACb,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACjD,CAAC;AAOD,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CACxC,GAAsB;IAKtB,MAAM,EACL,QAAQ,EACR,KAAK,EACL,WAAW,EACX,GAAG,EACH,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,uBAAuB,EACvB,cAAc,GACd,GAAG,GAAG,CAAC;IAER,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,SAAuB,EAAE,EAAE;QAChD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC1B,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,kBAAkB,CAC7D,QAAQ,CAAC,SAAoC,CAC7C,CAAC;IAEF,mBAAmB;IACnB,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,qBAAqB,CAC1B,WAAW,EACX,QAAQ,CAAC,IAAI,EACb,kBAAkB,EAClB,QAAQ,EACR,CAAC,EACD,eAAe,CAAC,KAAK,CAAC,MAAM,CAC5B,CAAC;QACF,MAAM,aAAa,GAAG,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IACD,MAAM,WAAW,CAAC;QACjB,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,IAAI,EAAE,kBAAkB;QACxB,UAAU,EAAE,GAAG,CAAC,kBAAkB;KAClC,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,iBAAiB,GAAG,QAAQ,CAAC;IACjC,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE1E,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,iBAAiB,GAAsB;gBAC5C,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,oBAAoB,UAAU,CAAC,WAAW,IAAI,uBAAuB,EAAE;qBAC7E;iBACD;gBACD,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;aACtB,CAAC;YACF,MAAM,qBAAqB,CAC1B,WAAW,EACX,QAAQ,CAAC,IAAI,EACb,gBAAgB,CAAC,kBAAkB,CAClC,QAAQ,CAAC,SAAoC,CAC7C,EACD,QAAQ,EACR,CAAC,EACD,UAAU,CAAC,WAAW,CACtB,CAAC;YACF,MAAM,iBAAiB,GAAG,YAAY,CACrC,cAAc,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,CACjD,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACvC,MAAM,KAAK,CAAC;YACb,CAAC;YACD,OAAO;gBACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;gBACvC,eAAe,EAAE,eAAe,CAAC,YAAY;aAC7C,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC/B,QAAQ,CAAC,SAAoC,CAC7C,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CACL,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvB,QAAQ,CAAC,SAAqC,CAAC,CAAC,CAAC;oBACjD,UAAU,CAAC,YAAa,CAAC,CAAC,CAAC,CAC7B,CAAC;YACF,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBACxC,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,UAAU,EAAE,QAAQ,CAAC,EAAE;gBACvB,SAAS;gBACT,WAAW;gBACX,YAAY;aACZ,CAAC,CAAC;YACH,iBAAiB,GAAG;gBACnB,GAAG,QAAQ;gBACX,SAAS,EAAE,UAAU,CAAC,YAAY;aAClC,CAAC;QACH,CAAC;IACF,CAAC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAChD,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,SAAoC,EACtD;QACC,iBAAiB,EAAE,uBAAuB,EAAE,CAAC,iBAAiB,CAAC,KAAK,IAAI;KACxE,CACD,CAAC;IAEF,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAC3D,MAAM,mBAAmB,GAAsB;YAC9C,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,4BAA4B,WAAW,CAAC,MAAM,IAAI,yBAAyB,EAAE;iBACnF;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,qBAAqB,CAC1B,WAAW,EACX,QAAQ,CAAC,IAAI,EACb,WAAW,CAAC,aAAa,EACzB,QAAQ,EACR,CAAC,EACD,WAAW,CAAC,MAAM,CAClB,CAAC;QACF,MAAM,mBAAmB,GAAG,YAAY,CACvC,cAAc,CAAC,mBAAmB,EAAE,QAAQ,EAAE,IAAI,CAAC,CACnD,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACzC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IAED,IAAI,eAAe,GAAG,IAAI,CAAC;IAC3B,IAAI,cAAkC,CAAC;IAEvC,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;QAClC,eAAe,GAAG,KAAK,CAAC;QACxB,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,yBAAyB;IACzB,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,CAAC,IAA6B,EAAE,EAAE,CAAC,CAAC;QACxD,WAAW,EAAE,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;QAClE,YAAY,EAAE,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;QAC5D,iBAAiB,EAAE,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;KACrE,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC;QACvC,QAAQ,EAAE,iBAAiB,CAAC,IAAI;QAChC,IAAI,EAAE,iBAAiB,CAAC,SAAS;QACjC,QAAQ,EAAE;YACT,aAAa,EAAE,gBAAgB;YAC/B,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,YAAY,EAAE,GAAG,CAAC,YAAY;SAC9B;QACD,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC;KACvD,CAAC,CAAC;IACH,IAAI,gBAAgB,GAAG,wBAAwB,CAC9C,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,SAAS,EAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,CAC5B,CAAC;IACF,IAAI,2BAA2B,GAC9B,OAAO,CAAC,gBAAgB,CAAC;QACzB,CAAC,OAAO,CAAC,MAAM,KAAK,kBAAkB;YACrC,OAAO,CAAC,MAAM,KAAK,4BAA4B,CAAC,CAAC;IACnD,IAAI,yBAAyB,GAAG,gBAAgB;QAC/C,CAAC,CAAC,+BAA+B,CAAC,gBAAgB,CAAC;QACnD,CAAC,CAAC,2BAA2B,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB;YACrE,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,uBAAuB,GAAG,CAC/B,KAAuB,EAC+B,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,4BAA4B;QACpC,MAAM,EAAE,+BAA+B,CAAC,KAAK,CAAC;QAC9C,WAAW,EACV,mIAAmI;KACpI,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,KAAK,EAC9B,YAAiE,EACjE,eAAyB,EACxB,EAAE;QACH,MAAM,aAAa,GAAsB;YACxC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,eAAe,CAAC,EAAE;YAC9B,QAAQ,EAAE,eAAe,CAAC,IAAI;YAC9B,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,+BAA+B,YAAY,CAAC,MAAM,GACvD,YAAY,CAAC,WAAW;wBACvB,CAAC,CAAC,mBAAmB,YAAY,CAAC,WAAW,EAAE;wBAC/C,CAAC,CAAC,EACJ,EAAE;iBACF;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,qBAAqB,CAC1B,WAAW,EACX,eAAe,CAAC,IAAI,EACpB,gBAAgB,CAAC,kBAAkB,CAClC,eAAe,CAAC,SAAoC,CACpD,EACD,QAAQ,EACR,CAAC,EACD,YAAY,CAAC,MAAM,CACnB,CAAC;QACF,MAAM,qBAAqB,GAAG,YAAY,CACzC,cAAc,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,CACpD,CAAC;QACF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,kBAAkB,CAChE,eAAe,CAAC,SAAoC,CACpD,CAAC;QACF,0BAA0B,CAAC;YAC1B,OAAO,EAAE,YAAY,CAAC,MAAM;YAC5B,SAAS,EAAE,eAAe,CAAC,IAAI;YAC/B,MAAM,EACL,OAAO,qBAAqB,CAAC,OAAO,KAAK,QAAQ;gBAChD,CAAC,CAAC,qBAAqB,CAAC,OAAO;gBAC/B,CAAC,CAAC,eAAe,CAAC,IAAI;YACxB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,OAAO,EAAE,qBAAqB;YAC9B,WAAW,EAAE;gBACZ,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE;gBAC3B,iBAAiB,EAAE,eAAe,CAAC,EAAE;aACrC;SACD,CAAC,CAAC;QACH,MAAM,wBAAwB,GAAG,EAAE,OAAO,EAAE,SAAkB,EAAE,MAAM,EAAE,CAAC;QACzE,OAAO;YACN,aAAa,EAAE,qBAAqB;YACpC,OAAO,EAAE,wBAAwB;YACjC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,eAAe;SACxC,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,EAAE,eAAe,KAAK,OAAO,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACtC,uBAAuB,CAAC,gBAAgB,CAAC,EACzC,iBAAiB,CACjB,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,OAAO,CAAC,eAAe;SACxC,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IACC,OAAO,CAAC,MAAM,KAAK,kBAAkB;QACrC,OAAO,CAAC,MAAM,KAAK,wBAAwB,EAC1C,CAAC;QACF,MAAM,YAAY,GAAG,oBAAoB,CACxC,QAAQ,EACR,gBAAgB,EAChB,KAAK,CACL,CAAC;QACF,MAAM,mBAAmB,GAAG,YAAY,CACvC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAC5C,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACzC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,WAAW,GAAsB;YACtC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gBAAgB,QAAQ,CAAC,IAAI,aAAa;iBAChD;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,WAAW,GAAG,YAAY,CAC/B,cAAc,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAC3C,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IAED,IAAI,uBAA4D,CAAC;IACjE,IAAI,uBAEQ,CAAC;IACb,IAAI,wBAAwB,GAAG,KAAK,CAAC;IACrC,MAAM,UAAU,GAAG,gBAAgB,CAAC,kBAAkB,CACrD,iBAAiB,CAAC,SAAoC,CACtD,CAAC;IACF,MAAM,WAAW,GAA6B;QAC7C,GAAG;QACH,QAAQ;QACR,OAAO;QACP,aAAa,EAAE,UAAU;QACzB,GAAG,YAAY,CAAC,UAAU,CAAC;KAC3B,CAAC;IACF,IAAI,mBAAmB,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC5E,QAAQ,YAAY,CAAC,MAAM,EAAE,CAAC;YAC7B,KAAK,SAAS,CAAC;YACf,KAAK,OAAO;gBACX,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC;gBAC5C,MAAM;YACP,KAAK,eAAe;gBACnB,uBAAuB,GAAG,YAAY,CAAC,IAAI,CAAC;gBAC5C,uBAAuB;oBACtB,YAAY,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;wBAC7C,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE;wBACvD,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;gBACzB,eAAe,GAAG,KAAK,CAAC;gBACxB,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC7C,MAAM;YACP,KAAK,MAAM,CAAC,CAAC,CAAC;gBACb,MAAM,qBAAqB,CAC1B,WAAW,EACX,iBAAiB,CAAC,IAAI,EACtB,UAAU,EACV,QAAQ,EACR,CAAC,EACD,YAAY,CAAC,MAAM,CACnB,CAAC;gBACF,MAAM,YAAY,GAAsB;oBACvC,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;oBACtD,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;iBACtB,CAAC;gBACF,MAAM,YAAY,GAAG,YAAY,CAChC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC5C,eAAe,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe;oBAC5D,iBAAiB,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,iBAAiB;iBAChE,CAAC,CACF,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;oBAClC,MAAM,KAAK,CAAC;gBACb,CAAC;gBACD,OAAO;oBACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;oBACvC,eAAe,EAAE,eAAe,CAAC,YAAY;iBAC7C,CAAC;YACH,CAAC;YACD;gBACC,MAAM;QACR,CAAC;IACF,CAAC;IAED,mBAAmB;IACnB,IACC,OAAO,CAAC,MAAM,KAAK,kBAAkB;QACrC,uBAAuB;QACvB,2BAA2B,EAC1B,CAAC;QACF,MAAM,mBAAmB,GACxB,OAAO,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,0BAA0B,GAAG,KAAK,CAAC;QACvC,IAAI,WAAW,EAAE,yBAAyB,EAAE,CAAC;YAC5C,MAAM,oBAAoB,GAAG,MAAM,WAAW,CAAC,yBAAyB,CACvE,iBAAiB,EACjB,uBAAuB,EAAE,MAAM;gBAC9B,yBAAyB;gBACzB,mBAAmB;gBACnB,cAAc;gBACd,mBAAmB,EACpB,MAAM,CACN,CAAC;YACF,IAAI,oBAAoB,CAAC,YAAY,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACvE,iBAAiB,GAAG;oBACnB,GAAG,iBAAiB;oBACpB,SAAS,EAAE,oBAAoB,CAAC,YAAY;iBAC5C,CAAC;gBACF,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC;oBAChD,QAAQ,EAAE,iBAAiB,CAAC,IAAI;oBAChC,IAAI,EAAE,iBAAiB,CAAC,SAAS;oBACjC,QAAQ,EAAE;wBACT,aAAa,EAAE,gBAAgB;wBAC/B,WAAW,EAAE,OAAO,EAAE,WAAW;wBACjC,YAAY,EAAE,GAAG,CAAC,YAAY;qBAC9B;oBACD,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,UAAU,EAAE,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC;iBACvD,CAAC,CAAC;gBACH,IAAI,gBAAgB,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACtC,gBAAgB,EAChB,iBAAiB,CACjB,CAAC;oBACF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC3C,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,OAAO;wBACN,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,eAAe,EAAE,OAAO,CAAC,eAAe;qBACxC,CAAC;gBACH,CAAC;gBACD,MAAM,YAAY,GAAG,wBAAwB,CAC5C,iBAAiB,CAAC,IAAI,EACtB,iBAAiB,CAAC,SAAS,EAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,CAC5B,CAAC;gBACF,IAAI,YAAY,EAAE,eAAe,KAAK,OAAO,EAAE,CAAC;oBAC/C,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACtC,uBAAuB,CAAC,YAAY,CAAC,EACrC,iBAAiB,CACjB,CAAC;oBACF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC3C,MAAM,KAAK,CAAC;oBACb,CAAC;oBACD,OAAO;wBACN,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,eAAe,EAAE,OAAO,CAAC,eAAe;qBACxC,CAAC;gBACH,CAAC;gBACD,IAAI,YAAY,EAAE,CAAC;oBAClB,gBAAgB,GAAG,YAAY,CAAC;oBAChC,2BAA2B,GAAG,IAAI,CAAC;oBACnC,yBAAyB;wBACxB,+BAA+B,CAAC,YAAY,CAAC,CAAC;gBAChD,CAAC;YACF,CAAC;YACD,IAAI,oBAAoB,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC/C,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBAClC,0BAA0B,GAAG,IAAI,CAAC;oBAClC,eAAe,GAAG,IAAI,CAAC;oBACvB,cAAc,GAAG,oBAAoB,CAAC,cAAc,CAAC;gBACtD,CAAC;YACF,CAAC;iBAAM,IAAI,oBAAoB,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACrD,0BAA0B,GAAG,IAAI,CAAC;gBAClC,eAAe,GAAG,KAAK,CAAC;gBACxB,cAAc;oBACb,oBAAoB,CAAC,cAAc;wBACnC,6CAA6C,CAAC;YAChD,CAAC;QACF,CAAC;QAED,IACC,0BAA0B;YAC1B,mBAAmB;YACnB,uBAAuB;YACvB,uBAAuB,EAAE,IAAI,KAAK,UAAU,EAC3C,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAC3D,WAAW,EACX,uBAAuB,EACvB;gBACC,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,cAAc;gBACtB,UAAU,EAAE,QAAQ;aACpB,EACD,MAAM,CACN,CAAC;YACF,wBAAwB,GAAG,IAAI,CAAC;YAChC,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC;YAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAClC,eAAe,GAAG,KAAK,CAAC;gBACxB,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACP,eAAe,GAAG,IAAI,CAAC;gBACvB,cAAc,GAAG,SAAS,CAAC;YAC5B,CAAC;QACF,CAAC;QAED,IACC,2BAA2B;YAC3B,eAAe,EAAE,uBAAuB,EAAE,KAAK,IAAI,EAClD,CAAC;YACF,eAAe,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACjC,cAAc,GAAG,GAAG,yBAAyB,IAAI,mBAAmB,IAAI,gDAAgD,wDAAwD,CAAC;YAClL,CAAC;YACD,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,kBAAkB,CAChE,iBAAiB,CAAC,SAAoC,CACtD,CAAC;YACF,MAAM,mBAAmB,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;YAChE,wBAAwB,CAAC;gBACxB,mBAAmB,EAClB,uBAAuB,EAAE,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,EAAE;gBACnE,MAAM,EACL,mBAAmB,CAAC,iBAAiB;oBACrC,mBAAmB,CAAC,YAAY;oBAChC,iBAAiB,CAAC,IAAI;gBACvB,OAAO,EACN,OAAO,qBAAqB,CAAC,OAAO,KAAK,QAAQ;oBAChD,CAAC,CAAC,qBAAqB,CAAC,OAAO;oBAC/B,CAAC,CAAC,SAAS;gBACb,aAAa,EAAE,wCAAwC;gBACvD,GAAG,sBAAsB,CAAC,IAAI,CAAC;gBAC/B,MAAM,EAAE,cAAc;gBACtB,OAAO,EAAE,uBAAuB,CAC/B,iBAAiB,CAAC,IAAI,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,CACnB;gBACD,WAAW,EAAE;oBACZ,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE;oBAC3B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;iBAC9B;aACD,CAAC,CAAC;QACJ,CAAC;aAAM,IAAI,eAAe,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAC3D,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,kBAAkB,CAChE,iBAAiB,CAAC,SAAoC,CACtD,CAAC;YACF,MAAM,OAAO,GACZ,CAAC,2BAA2B,IAAI,uBAAuB;gBACtD,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAE;oBACD,EAAE,EAAE,QAAQ,CAAC,EAAE;oBACf,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,GAAG,YAAY,CAAC,qBAAqB,CAAC;oBACtC,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EACL,yBAAyB;wBACzB,mBAAmB;wBACnB,mBAAmB;oBACpB,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE;iBACyC,CAAC;YACtE,MAAM,gBAAgB,GAAG,eAAe,CAAC,uBAAuB,EAAE,CAAC;YACnE,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,CACtD,OAAO,EACP,MAAM,EACN,KAAK,CACL,CAAC;YACF,MAAM,oBAAoB,GAAG,MAAM,kCAAkC,CACpE,eAAe,EACf,OAAO,CAAC,EAAE,EACV,eAAe,EACf,MAAM,CACN,CAAC;YACF,wBAAwB,CAAC;gBACxB,mBAAmB,EAClB,uBAAuB,EAAE,EAAE;oBAC3B,uBAAuB,EAAE,QAAQ,CAAC,iBAAiB;oBACnD,oBAAoB,EAAE,uBAAuB;oBAC7C,OAAO,CAAC,EAAE;gBACX,MAAM,EACL,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,QAAQ;gBACtE,OAAO,EACN,OAAO,qBAAqB,CAAC,OAAO,KAAK,QAAQ;oBAChD,CAAC,CAAC,qBAAqB,CAAC,OAAO;oBAC/B,CAAC,CAAC,SAAS;gBACb,aAAa,EAAE,wCAAwC;gBACvD,GAAG,sBAAsB,CAAC,2BAA2B,CAAC;gBACtD,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,uBAAuB,CAC/B,OAAO,CAAC,QAAQ,EAChB,qBAAqB,EACrB,2BAA2B,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EACrD;oBACC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY,EAAE,OAAO,CAAC,YAAY;iBAClC,CACD;gBACD,WAAW,EAAE;oBACZ,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE;oBAC3B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;iBAC9B;aACD,CAAC,CAAC;YACH,IAAI,gBAAgB,EAAE,CAAC;gBACtB,MAAM,WAAW,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC;YAC1C,MAAM,QAAQ,GACb,WAAW,CAAC,YAAY,KAAK,SAAS;gBACrC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE;gBAC/C,CAAC,CAAC,WAAW,CAAC;YAChB,IAAI,gBAAgB,EAAE,CAAC;gBACtB,MAAM,WAAW,CAAC;oBACjB,IAAI,EAAE,0BAA0B;oBAChC,OAAO;oBACP,QAAQ;iBACR,CAAC,CAAC;YACJ,CAAC;YAED,IACC,mBAAmB;gBACnB,uBAAuB;gBACvB,uBAAuB,EAAE,IAAI,KAAK,UAAU,EAC3C,CAAC;gBACF,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAC3D,WAAW,EACX,uBAAuB,EACvB,QAAQ,EACR,MAAM,CACN,CAAC;gBACF,wBAAwB,GAAG,IAAI,CAAC;gBAChC,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC;gBAC1C,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAClC,eAAe,GAAG,KAAK,CAAC;oBACxB,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACP,eAAe,GAAG,IAAI,CAAC;oBACvB,cAAc,GAAG,SAAS,CAAC;gBAC5B,CAAC;YACF,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACxB,eAAe,GAAG,KAAK,CAAC;gBACxB,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,mBAAmB,CAAC;YACzD,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACtB,IACC,mBAAmB;YACnB,uBAAuB;YACvB,uBAAuB,EAAE,IAAI,KAAK,UAAU;YAC5C,CAAC,wBAAwB,EACxB,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAC3D,WAAW,EACX,uBAAuB,EACvB;gBACC,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,cAAc,IAAI,iBAAiB;gBAC3C,UAAU,EAAE,QAAQ;aACpB,EACD,MAAM,CACN,CAAC;YACF,uBAAuB,GAAG,UAAU,CAAC,IAAI,CAAC;YAC1C,cAAc;gBACb,UAAU,CAAC,MAAM,KAAK,MAAM;oBAC3B,CAAC,CAAC,UAAU,CAAC,MAAM;oBACnB,CAAC,CAAC,CAAC,cAAc,IAAI,iBAAiB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,qBAAqB,CAC1B,WAAW,EACX,iBAAiB,CAAC,IAAI,EACtB,gBAAgB,CAAC,kBAAkB,CAClC,iBAAiB,CAAC,SAAoC,CACtD,EACD,QAAQ,EACR,CAAC,EACD,cAAc,CACd,CAAC;QACF,MAAM,YAAY,GAAsB;YACvC,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC;YACpE,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,YAAY,GAAG,YAAY,CAChC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC5C,eAAe,EAAE,uBAAuB,EAAE,QAAQ,CAAC,eAAe;YAClE,iBAAiB,EAAE,uBAAuB,EAAE,QAAQ,CAAC,iBAAiB;SACtE,CAAC,CACF,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,aAAsC,CAAC;IAC3C,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACnE,aAAa,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,MAAM,qBAAqB,GAAsB;YAChD,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC5D;aACD;YACD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,gBAAgB,GAAG,YAAY,CACpC,cAAc,CAAC,qBAAqB,EAAE,QAAQ,EAAE,IAAI,CAAC,CACrD,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACb,CAAC;QACD,OAAO;YACN,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;YACvC,eAAe,EAAE,eAAe,CAAC,YAAY;SAC7C,CAAC;IACH,CAAC;IAED,MAAM,sBAAsB,GAC3B,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEpD,OAAO;QACN,OAAO,EAAE;YACR,OAAO,EAAE,SAAS;YAClB,iBAAiB;YACjB,aAAa;YACb,OAAO;YACP,MAAM;YACN,sBAAsB;YACtB,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D;QACD,eAAe,EAAE,eAAe,CAAC,YAAY;KAC7C,CAAC;AACH,CAAC","sourcesContent":["/**\n * Tool Safety Pipeline\n * Pre-execution safety evaluation: rate limiting, adaptive thresholds,\n * safety middleware, firewall checks, PII policy, approval flow, and tool validation.\n *\n * Yields events as they occur and returns a verdict when complete.\n */\n\nimport {\n\ttype ActionFirewall,\n\tHUMAN_EGRESS_PII_RULE_ID,\n} from \"../../safety/action-firewall.js\";\nimport type { AdaptiveThresholds } from \"../../safety/adaptive-thresholds.js\";\nimport { METRICS } from \"../../safety/adaptive-thresholds.js\";\nimport {\n\tDEFAULT_GUARDED_FILE_RULE_ID,\n\tGUARDED_FILES_BLOCK_POLICY_ID,\n\ttype GuardedFileMatch,\n\tclassifyGuardedFileAccessAction,\n\tdescribeDefaultGuardedFileMatch,\n\tfindGuardedToolCallMatch,\n} from \"../../safety/guarded-files.js\";\nimport type { SafetyMiddleware } from \"../../safety/safety-middleware.js\";\nimport type { WorkflowStateTracker } from \"../../safety/workflow-state.js\";\nimport {\n\ttype RecordMaestroApprovalHitInput,\n\trecordMaestroApprovalHit,\n\trecordMaestroFirewallBlock,\n} from \"../../telemetry/maestro-event-bus.js\";\nimport { trackToolBlocked } from \"../../telemetry/security-events.js\";\nimport type { Clock } from \"../../utils/clock.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport {\n\tdescribeToolActivity,\n\tdescribeToolDisplayName,\n\tsummarizeToolUse,\n} from \"../../utils/tool-use-summary.js\";\nimport type {\n\tActionApprovalDecision,\n\tActionApprovalService,\n\tActionFirewallVerdict,\n} from \"../action-approval.js\";\nimport { validateToolArguments } from \"../providers/validation.js\";\nimport type {\n\tAgentEvent,\n\tAgentRunConfig,\n\tAgentTool,\n\tMessage,\n\tToolCall,\n\tToolResultMessage,\n\tToolSchedulingMetadata,\n} from \"../types.js\";\nimport type {\n\tPlatformToolExecutionBridge,\n\tToolExecutionBridgeInput,\n\tToolExecutionBridgePlan,\n} from \"./tool-execution-bridge.js\";\nimport {\n\ttype ToolAuditLogger,\n\tbuildPiiPolicyResult,\n\textractTextFromContent,\n\tlogToolExecutionAudit,\n} from \"./transport-utils.js\";\n\nconst logger = createLogger(\"transport:tool-safety\");\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type ToolSafetyVerdict =\n\t| { outcome: \"blocked\"; events: AgentEvent[] }\n\t| {\n\t\t\toutcome: \"proceed\";\n\t\t\teffectiveToolCall: ToolCall;\n\t\t\tvalidatedArgs: Record<string, unknown>;\n\t\t\ttoolDef: AgentTool;\n\t\t\tevents: AgentEvent[];\n\t\t\tsanitizedExecutionArgs: Record<string, unknown>;\n\t\t\ttoolExecutionBridgePlan?: ToolExecutionBridgePlan;\n\t };\n\nexport interface ToolSafetyContext {\n\ttoolCall: ToolCall;\n\ttools: AgentTool[];\n\tuserMessage: Message;\n\tcfg: AgentRunConfig;\n\tsignal?: AbortSignal;\n\t// Services\n\tclock: Clock;\n\tsafetyMiddleware: SafetyMiddleware;\n\tworkflowState: WorkflowStateTracker;\n\tadaptiveThresholds: AdaptiveThresholds;\n\tauditLogger?: ToolAuditLogger;\n\tapprovalService?: ActionApprovalService;\n\ttoolExecutionBridge?: PlatformToolExecutionBridge;\n\thookService?: {\n\t\trunPreToolUseHooks: (\n\t\t\ttoolCall: ToolCall,\n\t\t\tsignal?: AbortSignal,\n\t\t) => Promise<{\n\t\t\tblocked?: boolean;\n\t\t\tblockReason?: string;\n\t\t\tupdatedInput?: Record<string, unknown>;\n\t\t}>;\n\t\trunPermissionRequestHooks?: (\n\t\t\ttoolCall: ToolCall,\n\t\t\treason: string,\n\t\t\tsignal?: AbortSignal,\n\t\t) => Promise<{\n\t\t\tdecision?: \"allow\" | \"deny\";\n\t\t\tdecisionReason?: string;\n\t\t\tupdatedInput?: Record<string, unknown>;\n\t\t}>;\n\t};\n\tfirewall: ActionFirewall;\n\t// Mutable rate-limit state\n\trateLimitState: {\n\t\trecentToolTimestamps: Map<string, number[]>;\n\t\ttoolCallsThisMinute: number;\n\t\tminuteWindowStart: number;\n\t\trateWindowMs: number;\n\t\trateLimit: number;\n\t};\n\t/** Suppress loop warnings for a transport-managed read-only duplicate while preserving other policy checks. */\n\tshouldSkipLoopDetection?: (toolCall: ToolCall) => boolean;\n\t/** Scheduler diagnostics captured before safety hooks mutate the call. */\n\tschedulingMetadata?: ToolSchedulingMetadata;\n\t// Emit helpers\n\temitToolResult: (\n\t\tmessage: ToolResultMessage,\n\t\ttoolCall: ToolCall,\n\t\tisError: boolean,\n\t\tmetadata?: {\n\t\t\ttoolExecutionId?: string;\n\t\t\tapprovalRequestId?: string;\n\t\t},\n\t) => AgentEvent[];\n}\n\ninterface ApprovalRegistrationMetadata {\n\tremoteApprovalRequestId?: string;\n}\n\ninterface ApprovalRegistrationAwareService {\n\twaitForPendingApprovalRegistration?: (\n\t\trequestId: string,\n\t\toptions?: { signal?: AbortSignal },\n\t) => Promise<ApprovalRegistrationMetadata | null>;\n}\n\nfunction guardedFileAuditContext(\n\ttoolName: string,\n\targs: Record<string, unknown>,\n\tmatch: GuardedFileMatch | null,\n\tmetadata: {\n\t\tdisplayName?: string;\n\t\tsummaryLabel?: string;\n\t},\n): Record<string, unknown> {\n\tconst context: Record<string, unknown> = {\n\t\ttool_name: toolName,\n\t\tdisplay_name: metadata.displayName,\n\t\tsummary_label: metadata.summaryLabel,\n\t\targs,\n\t};\n\tif (match) {\n\t\tcontext.guarded_file = {\n\t\t\trule_id: match.ruleId,\n\t\t\tcategory: match.category,\n\t\t\tpattern: match.pattern,\n\t\t\tpath: match.path,\n\t\t\taction: classifyGuardedFileAccessAction(toolName),\n\t\t};\n\t}\n\treturn context;\n}\n\nfunction guardedFileAuditFields(\n\tguardedFileApprovalRequired: boolean,\n): Pick<RecordMaestroApprovalHitInput, \"policy_id\" | \"risk_level\"> {\n\treturn guardedFileApprovalRequired\n\t\t? {\n\t\t\t\tpolicy_id: GUARDED_FILES_BLOCK_POLICY_ID,\n\t\t\t\trisk_level: \"guarded_file\",\n\t\t\t}\n\t\t: {};\n}\n\nasync function waitForPendingApprovalRegistration(\n\tapprovalService: ActionApprovalService,\n\trequestId: string,\n\tdecisionPromise: Promise<ActionApprovalDecision>,\n\tsignal?: AbortSignal,\n): Promise<ApprovalRegistrationMetadata | null> {\n\tconst registrationAware = approvalService as ActionApprovalService &\n\t\tApprovalRegistrationAwareService;\n\tif (\n\t\ttypeof registrationAware.waitForPendingApprovalRegistration !== \"function\"\n\t) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tregistrationAware.waitForPendingApprovalRegistration(requestId, {\n\t\t\t\tsignal,\n\t\t\t}),\n\t\t\tdecisionPromise.then(\n\t\t\t\t() => null,\n\t\t\t\t() => null,\n\t\t\t),\n\t\t]);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Rate Limiting\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype RateLimitBlockKind = \"anomaly\" | \"rate_limit\";\n\ninterface RateLimitBlock {\n\tkind: RateLimitBlockKind;\n\treason: string;\n}\n\nfunction checkRateLimit(ctx: ToolSafetyContext):\n\t| {\n\t\t\tblocked: true;\n\t\t\tevents: AgentEvent[];\n\t\t\tupdatedState: RateLimitUpdate;\n\t\t\tblock: RateLimitBlock;\n\t }\n\t| {\n\t\t\tblocked: false;\n\t\t\trecent: number[];\n\t\t\tupdatedState: RateLimitUpdate;\n\t } {\n\tconst { toolCall, clock, adaptiveThresholds, emitToolResult } = ctx;\n\tconst { recentToolTimestamps, rateWindowMs, rateLimit } = ctx.rateLimitState;\n\tlet { toolCallsThisMinute, minuteWindowStart } = ctx.rateLimitState;\n\n\tconst now = clock.now();\n\tconst timestamps = recentToolTimestamps.get(toolCall.name) ?? [];\n\tconst recent = timestamps.filter((ts) => now - ts < rateWindowMs);\n\n\t// Track tool calls per minute for adaptive thresholds\n\tif (now - minuteWindowStart >= 60_000) {\n\t\tadaptiveThresholds.recordObservation(\n\t\t\tMETRICS.TOOL_CALLS_PER_MINUTE,\n\t\t\ttoolCallsThisMinute,\n\t\t);\n\t\ttoolCallsThisMinute = 0;\n\t\tminuteWindowStart = now;\n\t}\n\ttoolCallsThisMinute++;\n\n\t// Track tool-specific metrics\n\tconst toolNameLower = toolCall.name.toLowerCase();\n\tif (toolNameLower === \"read\" || toolNameLower === \"glob\") {\n\t\tadaptiveThresholds.recordObservation(METRICS.READS_PER_MINUTE, 1);\n\t} else if (\n\t\ttoolNameLower === \"write\" ||\n\t\ttoolNameLower === \"edit\" ||\n\t\ttoolNameLower === \"apply_patch\"\n\t) {\n\t\tadaptiveThresholds.recordObservation(METRICS.WRITES_PER_MINUTE, 1);\n\t} else if (\n\t\ttoolNameLower === \"webfetch\" ||\n\t\ttoolNameLower === \"websearch\" ||\n\t\ttoolNameLower.includes(\"mcp\")\n\t) {\n\t\tadaptiveThresholds.recordObservation(METRICS.EGRESS_PER_MINUTE, 1);\n\t}\n\n\tconst updatedState: RateLimitUpdate = {\n\t\ttoolCallsThisMinute,\n\t\tminuteWindowStart,\n\t};\n\n\t// Check for anomalous tool call rate\n\tconst anomalyCheck = adaptiveThresholds.checkAnomaly(\n\t\tMETRICS.TOOL_CALLS_PER_MINUTE,\n\t\ttoolCallsThisMinute,\n\t);\n\n\t// Enforce anomaly detection\n\tif (anomalyCheck.isAnomaly) {\n\t\tconst reason = `Anomaly detected: ${anomalyCheck.reason ?? \"Unusual tool call rate\"}`;\n\t\ttrackToolBlocked({\n\t\t\ttoolName: toolCall.name,\n\t\t\treason,\n\t\t\tsource: \"adaptive\",\n\t\t});\n\t\tconst anomalyMessage: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked \"${toolCall.name}\" due to anomalous behavior: ${anomalyCheck.reason ?? \"Unusual tool call pattern detected\"}. Z-score: ${anomalyCheck.zScore.toFixed(2)}, Baseline: ${anomalyCheck.mean.toFixed(2)} ± ${anomalyCheck.stdDev.toFixed(2)}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: now,\n\t\t};\n\t\treturn {\n\t\t\tblocked: true,\n\t\t\tevents: emitToolResult(anomalyMessage, toolCall, true),\n\t\t\tupdatedState,\n\t\t\tblock: {\n\t\t\t\tkind: \"anomaly\",\n\t\t\t\treason,\n\t\t\t},\n\t\t};\n\t}\n\n\t// Use adaptive threshold if we have enough data, otherwise use static limit\n\tconst effectiveRateLimit = adaptiveThresholds.getAdaptedThreshold(\n\t\t`tool_rate_${toolCall.name}`,\n\t\trateLimit,\n\t);\n\n\tif (recent.length >= effectiveRateLimit) {\n\t\tconst reason = `Rate limit exceeded: >${effectiveRateLimit} calls in ${rateWindowMs / 1000}s window`;\n\t\tconst rateMessage: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked \"${toolCall.name}\" due to rate limit: >${effectiveRateLimit} calls in ${rateWindowMs / 1000}s window.${\n\t\t\t\t\t\tanomalyCheck.isAnomaly\n\t\t\t\t\t\t\t? ` (Anomaly detected: ${anomalyCheck.reason})`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: now,\n\t\t};\n\t\treturn {\n\t\t\tblocked: true,\n\t\t\tevents: emitToolResult(rateMessage, toolCall, true),\n\t\t\tupdatedState,\n\t\t\tblock: {\n\t\t\t\tkind: \"rate_limit\",\n\t\t\t\treason,\n\t\t\t},\n\t\t};\n\t}\n\n\t// Record observation for per-tool adaptive rate\n\tadaptiveThresholds.recordObservation(\n\t\t`tool_rate_${toolCall.name}`,\n\t\trecent.length,\n\t);\n\trecent.push(now);\n\trecentToolTimestamps.set(toolCall.name, recent);\n\n\treturn { blocked: false, recent, updatedState };\n}\n\ninterface RateLimitUpdate {\n\ttoolCallsThisMinute: number;\n\tminuteWindowStart: number;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Main Safety Evaluation\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Evaluate all safety checks for a tool call before execution.\n * Yields events as they occur and returns the final verdict.\n */\nexport async function* evaluateToolSafety(\n\tctx: ToolSafetyContext,\n): AsyncGenerator<\n\tAgentEvent,\n\t{ verdict: ToolSafetyVerdict; rateLimitUpdate: RateLimitUpdate }\n> {\n\tconst {\n\t\ttoolCall,\n\t\ttools,\n\t\tuserMessage,\n\t\tcfg,\n\t\tsignal,\n\t\tclock,\n\t\tsafetyMiddleware,\n\t\tworkflowState,\n\t\tauditLogger,\n\t\tapprovalService,\n\t\ttoolExecutionBridge,\n\t\thookService,\n\t\tfirewall,\n\t\tshouldSkipLoopDetection,\n\t\temitToolResult,\n\t} = ctx;\n\n\tconst events: AgentEvent[] = [];\n\tconst recordEvent = (event: AgentEvent) => {\n\t\tevents.push(event);\n\t\treturn event;\n\t};\n\tconst recordEvents = (newEvents: AgentEvent[]) => {\n\t\tevents.push(...newEvents);\n\t\treturn newEvents;\n\t};\n\n\tconst sanitizedStartArgs = safetyMiddleware.sanitizeForLogging(\n\t\ttoolCall.arguments as Record<string, unknown>,\n\t);\n\n\t// 1. Rate limiting\n\tconst rateLimitResult = checkRateLimit(ctx);\n\tif (rateLimitResult.blocked) {\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\ttoolCall.name,\n\t\t\tsanitizedStartArgs,\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\trateLimitResult.block.reason,\n\t\t);\n\t\tconst blockedEvents = recordEvents(rateLimitResult.events);\n\t\tfor (const event of blockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\tyield recordEvent({\n\t\ttype: \"tool_execution_start\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\targs: sanitizedStartArgs,\n\t\tscheduling: ctx.schedulingMetadata,\n\t});\n\n\t// 2. PreToolUse hooks\n\tlet effectiveToolCall = toolCall;\n\tif (hookService) {\n\t\tconst hookResult = await hookService.runPreToolUseHooks(toolCall, signal);\n\n\t\tif (hookResult.blocked) {\n\t\t\tconst hookBlockedResult: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `Blocked by hook: ${hookResult.blockReason ?? \"Hook denied execution\"}`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tisError: true,\n\t\t\t\ttimestamp: clock.now(),\n\t\t\t};\n\t\t\tawait logToolExecutionAudit(\n\t\t\t\tauditLogger,\n\t\t\t\ttoolCall.name,\n\t\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t\t),\n\t\t\t\t\"denied\",\n\t\t\t\t0,\n\t\t\t\thookResult.blockReason,\n\t\t\t);\n\t\t\tconst hookBlockedEvents = recordEvents(\n\t\t\t\temitToolResult(hookBlockedResult, toolCall, true),\n\t\t\t);\n\t\t\tfor (const event of hookBlockedEvents) {\n\t\t\t\tyield event;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t\t};\n\t\t}\n\n\t\tif (hookResult.updatedInput) {\n\t\t\tconst originalKeys = Object.keys(\n\t\t\t\ttoolCall.arguments as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst updatedKeys = Object.keys(hookResult.updatedInput);\n\t\t\tconst addedKeys = updatedKeys.filter((k) => !originalKeys.includes(k));\n\t\t\tconst removedKeys = originalKeys.filter((k) => !updatedKeys.includes(k));\n\t\t\tconst modifiedKeys = updatedKeys.filter(\n\t\t\t\t(k) =>\n\t\t\t\t\toriginalKeys.includes(k) &&\n\t\t\t\t\t(toolCall.arguments as Record<string, unknown>)[k] !==\n\t\t\t\t\t\thookResult.updatedInput![k],\n\t\t\t);\n\t\t\tlogger.debug(\"Hook modified tool input\", {\n\t\t\t\ttoolName: toolCall.name,\n\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\taddedKeys,\n\t\t\t\tremovedKeys,\n\t\t\t\tmodifiedKeys,\n\t\t\t});\n\t\t\teffectiveToolCall = {\n\t\t\t\t...toolCall,\n\t\t\t\targuments: hookResult.updatedInput,\n\t\t\t};\n\t\t}\n\t}\n\n\t// 3. Safety middleware sequence analysis\n\tconst safetyCheck = safetyMiddleware.preExecution(\n\t\teffectiveToolCall.name,\n\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t{\n\t\t\tskipLoopDetection: shouldSkipLoopDetection?.(effectiveToolCall) === true,\n\t\t},\n\t);\n\n\tif (!safetyCheck.allowed && !safetyCheck.requiresApproval) {\n\t\tconst safetyBlockedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Blocked by safety check: ${safetyCheck.reason ?? \"Safety policy violation\"}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\ttoolCall.name,\n\t\t\tsafetyCheck.sanitizedArgs,\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tsafetyCheck.reason,\n\t\t);\n\t\tconst safetyBlockedEvents = recordEvents(\n\t\t\temitToolResult(safetyBlockedResult, toolCall, true),\n\t\t);\n\t\tfor (const event of safetyBlockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tlet approvalAllowed = true;\n\tlet approvalReason: string | undefined;\n\n\tif (safetyCheck.requiresApproval) {\n\t\tapprovalAllowed = false;\n\t\tapprovalReason = safetyCheck.reason;\n\t}\n\n\t// 4. Firewall evaluation\n\tconst workflowSnapshot = workflowState.snapshot();\n\tconst toolDef = tools.find((t) => t.name === effectiveToolCall.name);\n\tconst describeArgs = (args: Record<string, unknown>) => ({\n\t\tdisplayName: describeToolDisplayName(toolCall.name, args, toolDef),\n\t\tsummaryLabel: summarizeToolUse(toolCall.name, args, toolDef),\n\t\tactionDescription: describeToolActivity(toolCall.name, args, toolDef),\n\t});\n\tconst verdict = await firewall.evaluate({\n\t\ttoolName: effectiveToolCall.name,\n\t\targs: effectiveToolCall.arguments,\n\t\tmetadata: {\n\t\t\tworkflowState: workflowSnapshot,\n\t\t\tannotations: toolDef?.annotations,\n\t\t\tguardedFiles: cfg.guardedFiles,\n\t\t},\n\t\tuser: cfg.user,\n\t\tsession: cfg.session,\n\t\tuserIntent: extractTextFromContent(userMessage.content),\n\t});\n\tlet guardedFileMatch = findGuardedToolCallMatch(\n\t\teffectiveToolCall.name,\n\t\teffectiveToolCall.arguments,\n\t\t{ policy: cfg.guardedFiles },\n\t);\n\tlet guardedFileApprovalRequired =\n\t\tBoolean(guardedFileMatch) ||\n\t\t(verdict.action === \"require_approval\" &&\n\t\t\tverdict.ruleId === DEFAULT_GUARDED_FILE_RULE_ID);\n\tlet guardedFileApprovalReason = guardedFileMatch\n\t\t? describeDefaultGuardedFileMatch(guardedFileMatch)\n\t\t: guardedFileApprovalRequired && verdict.action === \"require_approval\"\n\t\t\t? verdict.reason\n\t\t\t: undefined;\n\tconst guardedFileBlockVerdict = (\n\t\tmatch: GuardedFileMatch,\n\t): Extract<ActionFirewallVerdict, { action: \"block\" }> => ({\n\t\taction: \"block\",\n\t\truleId: DEFAULT_GUARDED_FILE_RULE_ID,\n\t\treason: describeDefaultGuardedFileMatch(match),\n\t\tremediation:\n\t\t\t\"Remove the matching custom guard or change its defaultBehavior to ask if this access should be approval-gated instead of blocked.\",\n\t});\n\n\tconst emitFirewallBlock = async (\n\t\tblockVerdict: Extract<ActionFirewallVerdict, { action: \"block\" }>,\n\t\tblockedToolCall: ToolCall,\n\t) => {\n\t\tconst blockedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: blockedToolCall.id,\n\t\t\ttoolName: blockedToolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Action blocked by firewall: ${blockVerdict.reason}${\n\t\t\t\t\t\tblockVerdict.remediation\n\t\t\t\t\t\t\t? `\\n\\nSuggestion: ${blockVerdict.remediation}`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\tblockedToolCall.name,\n\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\tblockedToolCall.arguments as Record<string, unknown>,\n\t\t\t),\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tblockVerdict.reason,\n\t\t);\n\t\tconst firewallBlockedEvents = recordEvents(\n\t\t\temitToolResult(blockedResult, blockedToolCall, true),\n\t\t);\n\t\tconst sanitizedFirewallArgs = safetyMiddleware.sanitizeForLogging(\n\t\t\tblockedToolCall.arguments as Record<string, unknown>,\n\t\t);\n\t\trecordMaestroFirewallBlock({\n\t\t\trule_id: blockVerdict.ruleId,\n\t\t\toperation: blockedToolCall.name,\n\t\t\ttarget:\n\t\t\t\ttypeof sanitizedFirewallArgs.command === \"string\"\n\t\t\t\t\t? sanitizedFirewallArgs.command\n\t\t\t\t\t: blockedToolCall.name,\n\t\t\treason: blockVerdict.reason,\n\t\t\tcontext: sanitizedFirewallArgs,\n\t\t\tcorrelation: {\n\t\t\t\tsession_id: cfg.session?.id,\n\t\t\t\tagent_run_step_id: blockedToolCall.id,\n\t\t\t},\n\t\t});\n\t\tconst blockedToolSafetyVerdict = { outcome: \"blocked\" as const, events };\n\t\treturn {\n\t\t\teventsToYield: firewallBlockedEvents,\n\t\t\tverdict: blockedToolSafetyVerdict,\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t};\n\n\tif (verdict.action === \"block\") {\n\t\tconst blocked = await emitFirewallBlock(verdict, effectiveToolCall);\n\t\tfor (const event of blocked.eventsToYield) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: blocked.verdict,\n\t\t\trateLimitUpdate: blocked.rateLimitUpdate,\n\t\t};\n\t}\n\n\tif (guardedFileMatch?.defaultBehavior === \"block\") {\n\t\tconst blocked = await emitFirewallBlock(\n\t\t\tguardedFileBlockVerdict(guardedFileMatch),\n\t\t\teffectiveToolCall,\n\t\t);\n\t\tfor (const event of blocked.eventsToYield) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: blocked.verdict,\n\t\t\trateLimitUpdate: blocked.rateLimitUpdate,\n\t\t};\n\t}\n\n\t// 5. PII policy check\n\tif (\n\t\tverdict.action === \"require_approval\" &&\n\t\tverdict.ruleId === HUMAN_EGRESS_PII_RULE_ID\n\t) {\n\t\tconst policyResult = buildPiiPolicyResult(\n\t\t\ttoolCall,\n\t\t\tworkflowSnapshot,\n\t\t\tclock,\n\t\t);\n\t\tconst policyBlockedEvents = recordEvents(\n\t\t\temitToolResult(policyResult, toolCall, true),\n\t\t);\n\t\tfor (const event of policyBlockedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tif (!toolDef) {\n\t\tconst errorResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Error: Tool \"${toolCall.name}\" not found`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst errorEvents = recordEvents(\n\t\t\temitToolResult(errorResult, toolCall, true),\n\t\t);\n\t\tfor (const event of errorEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tlet toolExecutionBridgePlan: ToolExecutionBridgePlan | undefined;\n\tlet platformApprovalRequest:\n\t\t| import(\"../action-approval.js\").ActionApprovalRequest\n\t\t| undefined;\n\tlet platformApprovalResolved = false;\n\tconst bridgeArgs = safetyMiddleware.sanitizeForLogging(\n\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t);\n\tconst bridgeInput: ToolExecutionBridgeInput = {\n\t\tcfg,\n\t\ttoolCall,\n\t\ttoolDef,\n\t\tsanitizedArgs: bridgeArgs,\n\t\t...describeArgs(bridgeArgs),\n\t};\n\tif (toolExecutionBridge) {\n\t\tconst bridgeResult = await toolExecutionBridge.prepare(bridgeInput, signal);\n\t\tswitch (bridgeResult.status) {\n\t\t\tcase \"observe\":\n\t\t\tcase \"allow\":\n\t\t\t\ttoolExecutionBridgePlan = bridgeResult.plan;\n\t\t\t\tbreak;\n\t\t\tcase \"wait_approval\":\n\t\t\t\ttoolExecutionBridgePlan = bridgeResult.plan;\n\t\t\t\tplatformApprovalRequest =\n\t\t\t\t\tbridgeResult.request.startedAtMs === undefined\n\t\t\t\t\t\t? { ...bridgeResult.request, startedAtMs: clock.now() }\n\t\t\t\t\t\t: bridgeResult.request;\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = bridgeResult.request.reason;\n\t\t\t\tbreak;\n\t\t\tcase \"deny\": {\n\t\t\t\tawait logToolExecutionAudit(\n\t\t\t\t\tauditLogger,\n\t\t\t\t\teffectiveToolCall.name,\n\t\t\t\t\tbridgeArgs,\n\t\t\t\t\t\"denied\",\n\t\t\t\t\t0,\n\t\t\t\t\tbridgeResult.reason,\n\t\t\t\t);\n\t\t\t\tconst deniedResult: ToolResultMessage = {\n\t\t\t\t\trole: \"toolResult\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tcontent: [{ type: \"text\", text: bridgeResult.reason }],\n\t\t\t\t\tisError: true,\n\t\t\t\t\ttimestamp: clock.now(),\n\t\t\t\t};\n\t\t\t\tconst deniedEvents = recordEvents(\n\t\t\t\t\temitToolResult(deniedResult, toolCall, true, {\n\t\t\t\t\t\ttoolExecutionId: bridgeResult.plan?.metadata.toolExecutionId,\n\t\t\t\t\t\tapprovalRequestId: bridgeResult.plan?.metadata.approvalRequestId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tfor (const event of deniedEvents) {\n\t\t\t\t\tyield event;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t\t\t};\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// 6. Approval flow\n\tif (\n\t\tverdict.action === \"require_approval\" ||\n\t\tplatformApprovalRequest ||\n\t\tguardedFileApprovalRequired\n\t) {\n\t\tconst localApprovalReason =\n\t\t\tverdict.action === \"require_approval\" ? verdict.reason : undefined;\n\t\tlet permissionHookMadeDecision = false;\n\t\tif (hookService?.runPermissionRequestHooks) {\n\t\t\tconst permissionHookResult = await hookService.runPermissionRequestHooks(\n\t\t\t\teffectiveToolCall,\n\t\t\t\tplatformApprovalRequest?.reason ??\n\t\t\t\t\tguardedFileApprovalReason ??\n\t\t\t\t\tlocalApprovalReason ??\n\t\t\t\t\tapprovalReason ??\n\t\t\t\t\t\"Approval required\",\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (permissionHookResult.updatedInput && !guardedFileApprovalRequired) {\n\t\t\t\teffectiveToolCall = {\n\t\t\t\t\t...effectiveToolCall,\n\t\t\t\t\targuments: permissionHookResult.updatedInput,\n\t\t\t\t};\n\t\t\t\tconst rewrittenVerdict = await firewall.evaluate({\n\t\t\t\t\ttoolName: effectiveToolCall.name,\n\t\t\t\t\targs: effectiveToolCall.arguments,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tworkflowState: workflowSnapshot,\n\t\t\t\t\t\tannotations: toolDef?.annotations,\n\t\t\t\t\t\tguardedFiles: cfg.guardedFiles,\n\t\t\t\t\t},\n\t\t\t\t\tuser: cfg.user,\n\t\t\t\t\tsession: cfg.session,\n\t\t\t\t\tuserIntent: extractTextFromContent(userMessage.content),\n\t\t\t\t});\n\t\t\t\tif (rewrittenVerdict.action === \"block\") {\n\t\t\t\t\tconst blocked = await emitFirewallBlock(\n\t\t\t\t\t\trewrittenVerdict,\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const event of blocked.eventsToYield) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tverdict: blocked.verdict,\n\t\t\t\t\t\trateLimitUpdate: blocked.rateLimitUpdate,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst guardedMatch = findGuardedToolCallMatch(\n\t\t\t\t\teffectiveToolCall.name,\n\t\t\t\t\teffectiveToolCall.arguments,\n\t\t\t\t\t{ policy: cfg.guardedFiles },\n\t\t\t\t);\n\t\t\t\tif (guardedMatch?.defaultBehavior === \"block\") {\n\t\t\t\t\tconst blocked = await emitFirewallBlock(\n\t\t\t\t\t\tguardedFileBlockVerdict(guardedMatch),\n\t\t\t\t\t\teffectiveToolCall,\n\t\t\t\t\t);\n\t\t\t\t\tfor (const event of blocked.eventsToYield) {\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tverdict: blocked.verdict,\n\t\t\t\t\t\trateLimitUpdate: blocked.rateLimitUpdate,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (guardedMatch) {\n\t\t\t\t\tguardedFileMatch = guardedMatch;\n\t\t\t\t\tguardedFileApprovalRequired = true;\n\t\t\t\t\tguardedFileApprovalReason =\n\t\t\t\t\t\tdescribeDefaultGuardedFileMatch(guardedMatch);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (permissionHookResult.decision === \"allow\") {\n\t\t\t\tif (!guardedFileApprovalRequired) {\n\t\t\t\t\tpermissionHookMadeDecision = true;\n\t\t\t\t\tapprovalAllowed = true;\n\t\t\t\t\tapprovalReason = permissionHookResult.decisionReason;\n\t\t\t\t}\n\t\t\t} else if (permissionHookResult.decision === \"deny\") {\n\t\t\t\tpermissionHookMadeDecision = true;\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason =\n\t\t\t\t\tpermissionHookResult.decisionReason ??\n\t\t\t\t\t\"Permission denied by PermissionRequest hook\";\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tpermissionHookMadeDecision &&\n\t\t\ttoolExecutionBridge &&\n\t\t\tplatformApprovalRequest &&\n\t\t\ttoolExecutionBridgePlan?.kind === \"governed\"\n\t\t) {\n\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\tbridgeInput,\n\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t{\n\t\t\t\t\tapproved: approvalAllowed,\n\t\t\t\t\treason: approvalReason,\n\t\t\t\t\tresolvedBy: \"policy\",\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tplatformApprovalResolved = true;\n\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\tif (resolution.status === \"deny\") {\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = resolution.reason;\n\t\t\t} else {\n\t\t\t\tapprovalAllowed = true;\n\t\t\t\tapprovalReason = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tguardedFileApprovalRequired &&\n\t\t\tapprovalService?.requiresUserInteraction() !== true\n\t\t) {\n\t\t\tapprovalAllowed = false;\n\t\t\tif (!permissionHookMadeDecision) {\n\t\t\t\tapprovalReason = `${guardedFileApprovalReason ?? localApprovalReason ?? \"Guarded file access requires explicit approval\"} Approval mode must be prompt for guarded file access.`;\n\t\t\t}\n\t\t\tconst sanitizedApprovalArgs = safetyMiddleware.sanitizeForLogging(\n\t\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst approvalDescription = describeArgs(sanitizedApprovalArgs);\n\t\t\trecordMaestroApprovalHit({\n\t\t\t\tapproval_request_id:\n\t\t\t\t\ttoolExecutionBridgePlan?.metadata.approvalRequestId ?? toolCall.id,\n\t\t\t\taction:\n\t\t\t\t\tapprovalDescription.actionDescription ??\n\t\t\t\t\tapprovalDescription.summaryLabel ??\n\t\t\t\t\teffectiveToolCall.name,\n\t\t\t\tcommand:\n\t\t\t\t\ttypeof sanitizedApprovalArgs.command === \"string\"\n\t\t\t\t\t\t? sanitizedApprovalArgs.command\n\t\t\t\t\t\t: undefined,\n\t\t\t\tdecision_mode: \"MAESTRO_DECISION_MODE_REQUIRE_APPROVAL\",\n\t\t\t\t...guardedFileAuditFields(true),\n\t\t\t\treason: approvalReason,\n\t\t\t\tcontext: guardedFileAuditContext(\n\t\t\t\t\teffectiveToolCall.name,\n\t\t\t\t\tsanitizedApprovalArgs,\n\t\t\t\t\tguardedFileMatch,\n\t\t\t\t\tapprovalDescription,\n\t\t\t\t),\n\t\t\t\tcorrelation: {\n\t\t\t\t\tsession_id: cfg.session?.id,\n\t\t\t\t\tagent_run_step_id: toolCall.id,\n\t\t\t\t},\n\t\t\t});\n\t\t} else if (approvalService && !permissionHookMadeDecision) {\n\t\t\tconst sanitizedApprovalArgs = safetyMiddleware.sanitizeForLogging(\n\t\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t\t);\n\t\t\tconst request =\n\t\t\t\t!guardedFileApprovalRequired && platformApprovalRequest\n\t\t\t\t\t? platformApprovalRequest\n\t\t\t\t\t: ({\n\t\t\t\t\t\t\tid: toolCall.id,\n\t\t\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\t\t\t...describeArgs(sanitizedApprovalArgs),\n\t\t\t\t\t\t\targs: sanitizedApprovalArgs,\n\t\t\t\t\t\t\treason:\n\t\t\t\t\t\t\t\tguardedFileApprovalReason ??\n\t\t\t\t\t\t\t\tlocalApprovalReason ??\n\t\t\t\t\t\t\t\t\"Approval required\",\n\t\t\t\t\t\t\tstartedAtMs: clock.now(),\n\t\t\t\t\t\t} satisfies import(\"../action-approval.js\").ActionApprovalRequest);\n\t\t\tconst shouldEmitEvents = approvalService.requiresUserInteraction();\n\t\t\tconst decisionPromise = approvalService.requestApproval(\n\t\t\t\trequest,\n\t\t\t\tsignal,\n\t\t\t\tclock,\n\t\t\t);\n\t\t\tconst registrationMetadata = await waitForPendingApprovalRegistration(\n\t\t\t\tapprovalService,\n\t\t\t\trequest.id,\n\t\t\t\tdecisionPromise,\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\trecordMaestroApprovalHit({\n\t\t\t\tapproval_request_id:\n\t\t\t\t\tplatformApprovalRequest?.id ??\n\t\t\t\t\ttoolExecutionBridgePlan?.metadata.approvalRequestId ??\n\t\t\t\t\tregistrationMetadata?.remoteApprovalRequestId ??\n\t\t\t\t\trequest.id,\n\t\t\t\taction:\n\t\t\t\t\trequest.actionDescription ?? request.summaryLabel ?? request.toolName,\n\t\t\t\tcommand:\n\t\t\t\t\ttypeof sanitizedApprovalArgs.command === \"string\"\n\t\t\t\t\t\t? sanitizedApprovalArgs.command\n\t\t\t\t\t\t: undefined,\n\t\t\t\tdecision_mode: \"MAESTRO_DECISION_MODE_REQUIRE_APPROVAL\",\n\t\t\t\t...guardedFileAuditFields(guardedFileApprovalRequired),\n\t\t\t\treason: request.reason,\n\t\t\t\tcontext: guardedFileAuditContext(\n\t\t\t\t\trequest.toolName,\n\t\t\t\t\tsanitizedApprovalArgs,\n\t\t\t\t\tguardedFileApprovalRequired ? guardedFileMatch : null,\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: request.displayName,\n\t\t\t\t\t\tsummaryLabel: request.summaryLabel,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tcorrelation: {\n\t\t\t\t\tsession_id: cfg.session?.id,\n\t\t\t\t\tagent_run_step_id: toolCall.id,\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (shouldEmitEvents) {\n\t\t\t\tyield recordEvent({ type: \"action_approval_required\", request });\n\t\t\t}\n\n\t\t\tconst rawDecision = await decisionPromise;\n\t\t\tconst decision =\n\t\t\t\trawDecision.resolvedAtMs === undefined\n\t\t\t\t\t? { ...rawDecision, resolvedAtMs: clock.now() }\n\t\t\t\t\t: rawDecision;\n\t\t\tif (shouldEmitEvents) {\n\t\t\t\tyield recordEvent({\n\t\t\t\t\ttype: \"action_approval_resolved\",\n\t\t\t\t\trequest,\n\t\t\t\t\tdecision,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttoolExecutionBridge &&\n\t\t\t\tplatformApprovalRequest &&\n\t\t\t\ttoolExecutionBridgePlan?.kind === \"governed\"\n\t\t\t) {\n\t\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\t\tbridgeInput,\n\t\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t\tdecision,\n\t\t\t\t\tsignal,\n\t\t\t\t);\n\t\t\t\tplatformApprovalResolved = true;\n\t\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\t\tif (resolution.status === \"deny\") {\n\t\t\t\t\tapprovalAllowed = false;\n\t\t\t\t\tapprovalReason = resolution.reason;\n\t\t\t\t} else {\n\t\t\t\t\tapprovalAllowed = true;\n\t\t\t\t\tapprovalReason = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!decision.approved) {\n\t\t\t\tapprovalAllowed = false;\n\t\t\t\tapprovalReason = decision.reason ?? localApprovalReason;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!approvalAllowed) {\n\t\tif (\n\t\t\ttoolExecutionBridge &&\n\t\t\tplatformApprovalRequest &&\n\t\t\ttoolExecutionBridgePlan?.kind === \"governed\" &&\n\t\t\t!platformApprovalResolved\n\t\t) {\n\t\t\tconst resolution = await toolExecutionBridge.resolveApproval(\n\t\t\t\tbridgeInput,\n\t\t\t\ttoolExecutionBridgePlan,\n\t\t\t\t{\n\t\t\t\t\tapproved: false,\n\t\t\t\t\treason: approvalReason ?? \"Approval denied\",\n\t\t\t\t\tresolvedBy: \"policy\",\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\ttoolExecutionBridgePlan = resolution.plan;\n\t\t\tapprovalReason =\n\t\t\t\tresolution.status === \"deny\"\n\t\t\t\t\t? resolution.reason\n\t\t\t\t\t: (approvalReason ?? \"Approval denied\");\n\t\t}\n\t\tawait logToolExecutionAudit(\n\t\t\tauditLogger,\n\t\t\teffectiveToolCall.name,\n\t\t\tsafetyMiddleware.sanitizeForLogging(\n\t\t\t\teffectiveToolCall.arguments as Record<string, unknown>,\n\t\t\t),\n\t\t\t\"denied\",\n\t\t\t0,\n\t\t\tapprovalReason,\n\t\t);\n\t\tconst deniedResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [{ type: \"text\", text: approvalReason ?? \"Action denied\" }],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst deniedEvents = recordEvents(\n\t\t\temitToolResult(deniedResult, toolCall, true, {\n\t\t\t\ttoolExecutionId: toolExecutionBridgePlan?.metadata.toolExecutionId,\n\t\t\t\tapprovalRequestId: toolExecutionBridgePlan?.metadata.approvalRequestId,\n\t\t\t}),\n\t\t);\n\t\tfor (const event of deniedEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\t// 7. Argument validation\n\tlet validatedArgs: Record<string, unknown>;\n\ttry {\n\t\tconst rawArgs = validateToolArguments(toolDef, effectiveToolCall);\n\t\tconst vaultedArgs = safetyMiddleware.prepareExecutionArgs(rawArgs);\n\t\tvalidatedArgs = safetyMiddleware.resolveCredentials(vaultedArgs);\n\t} catch (error: unknown) {\n\t\tconst validationErrorResult: ToolResultMessage = {\n\t\t\trole: \"toolResult\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: error instanceof Error ? error.message : String(error),\n\t\t\t\t},\n\t\t\t],\n\t\t\tisError: true,\n\t\t\ttimestamp: clock.now(),\n\t\t};\n\t\tconst validationEvents = recordEvents(\n\t\t\temitToolResult(validationErrorResult, toolCall, true),\n\t\t);\n\t\tfor (const event of validationEvents) {\n\t\t\tyield event;\n\t\t}\n\t\treturn {\n\t\t\tverdict: { outcome: \"blocked\", events },\n\t\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t\t};\n\t}\n\n\tconst sanitizedExecutionArgs =\n\t\tsafetyMiddleware.sanitizeForLogging(validatedArgs);\n\n\treturn {\n\t\tverdict: {\n\t\t\toutcome: \"proceed\",\n\t\t\teffectiveToolCall,\n\t\t\tvalidatedArgs,\n\t\t\ttoolDef,\n\t\t\tevents,\n\t\t\tsanitizedExecutionArgs,\n\t\t\t...(toolExecutionBridgePlan ? { toolExecutionBridgePlan } : {}),\n\t\t},\n\t\trateLimitUpdate: rateLimitResult.updatedState,\n\t};\n}\n"]}
|
|
@@ -130,6 +130,13 @@ export declare class ProviderTransport implements AgentTransport {
|
|
|
130
130
|
private readonly clock;
|
|
131
131
|
private readonly sessionTokenCounter?;
|
|
132
132
|
private readonly auditLogger?;
|
|
133
|
+
private readonly reusableToolResults;
|
|
134
|
+
private readonly pendingReusableToolResults;
|
|
135
|
+
private readonly policyCheckedReusableToolResultKeys;
|
|
136
|
+
private readonly pendingReusableToolSafetyChecks;
|
|
137
|
+
private readonly reusableToolResultCacheGeneration;
|
|
138
|
+
private reusableToolResultSnapshot?;
|
|
139
|
+
private reusableToolRegistrySignature?;
|
|
133
140
|
/**
|
|
134
141
|
* Rate Limit Window - time window for counting tool invocations
|
|
135
142
|
* 10 seconds balances burst protection with legitimate rapid use
|
|
@@ -141,6 +148,7 @@ export declare class ProviderTransport implements AgentTransport {
|
|
|
141
148
|
*/
|
|
142
149
|
private static readonly TOOL_RATE_LIMIT;
|
|
143
150
|
constructor(options?: ProviderTransportOptions);
|
|
151
|
+
private refreshReusableToolResultState;
|
|
144
152
|
/**
|
|
145
153
|
* Continue from current context without a new user message.
|
|
146
154
|
*
|