@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-trajectory-scenarios.js","sourceRoot":"","sources":["../../src/server/agent-trajectory-scenarios.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport {\n\tMAESTRO_SCENARIO_SCHEMA,\n\tMAESTRO_SCENARIO_WORKSPACE_MANIFEST_SCHEMA,\n\ttype MaestroScenario,\n\ttype MaestroScenarioAssertion,\n\ttype MaestroScenarioExternalRefs,\n\ttype MaestroScenarioGateTier,\n\ttype MaestroScenarioOutcome,\n\ttype MaestroScenarioPlatformLink,\n\ttype MaestroScenarioReleaseGate,\n\ttype MaestroScenarioRequiredArtifact,\n\ttype MaestroScenarioReviewLabel,\n\ttype MaestroScenarioSeverity,\n\ttype MaestroScenarioToolAdapterMode,\n\ttype MaestroScenarioWorkspaceHydrationMode,\n\ttype MaestroScenarioWorkspaceManifest,\n\ttype MaestroScenarioWorkspaceSource,\n} from \"@evalops/contracts\";\nimport type { AgentTrajectoryInspectionReport } from \"./agent-trajectory-inspection.js\";\nimport type { AgentTrajectoryReplayReport } from \"./agent-trajectory-replay.js\";\nimport type { AgentTrajectoryScoreReport } from \"./agent-trajectory-scorers.js\";\nimport type {\n\tAgentTrajectoryEvent,\n\tAgentTrajectoryReport,\n} from \"./agent-trajectory.js\";\nimport { escapeXml } from \"./junit-xml.js\";\n\nexport const AGENT_TRAJECTORY_SCENARIO_RESULT_SCHEMA =\n\t\"evalops.maestro.agent-trajectory-scenario-result.v1\";\nexport {\n\tMAESTRO_SCENARIO_WORKSPACE_MANIFEST_SCHEMA,\n\tMAESTRO_SCENARIO_SCHEMA,\n\ttype MaestroScenario,\n\ttype MaestroScenarioAssertion,\n\ttype MaestroScenarioExternalRefs,\n\ttype MaestroScenarioGateTier,\n\ttype MaestroScenarioOutcome,\n\ttype MaestroScenarioPlatformLink,\n\ttype MaestroScenarioReleaseGate,\n\ttype MaestroScenarioReviewLabel,\n\ttype MaestroScenarioRequiredArtifact,\n\ttype MaestroScenarioSeverity,\n\ttype MaestroScenarioWorkspaceManifest,\n\ttype MaestroScenarioWorkspaceHydrationMode,\n} from \"@evalops/contracts\";\n\nexport type AgentTrajectoryScenarioStatus = \"pass\" | \"fail\" | \"warn\";\n\nexport interface AgentTrajectoryScenarioEvidence {\n\tkind: string;\n\tid: string;\n\tsource: \"trajectory\" | \"replay\" | \"score\" | \"inspection\" | \"scenario\";\n\tlabel: string;\n}\n\nexport interface AgentTrajectoryScenarioAssertionResult {\n\tid: string;\n\tkind: MaestroScenarioAssertion[\"kind\"];\n\tstatus: AgentTrajectoryScenarioStatus;\n\tseverity: MaestroScenarioSeverity;\n\tmessage: string;\n\tevidence: AgentTrajectoryScenarioEvidence[];\n}\n\nexport interface AgentTrajectoryScenarioProvenanceStep {\n\teventId: string;\n\teventType: string;\n\tphase: AgentTrajectoryEvent[\"phase\"];\n\tactor: AgentTrajectoryEvent[\"actor\"];\n\tevidence: AgentTrajectoryScenarioEvidence[];\n}\n\nexport interface AgentTrajectoryScenarioDiff {\n\tbaselineRunId: string;\n\tcandidateRunId: string;\n\teventsDelta: number;\n\ttoolCallsDelta: number;\n\tscoreFailuresDelta: number;\n}\n\nexport interface AgentTrajectoryScenarioWorkspaceSummary {\n\tmanifestId: string;\n\tsource: MaestroScenarioWorkspaceManifest[\"source\"];\n\trecordedAt: string;\n\thydrationMode: MaestroScenarioWorkspaceHydrationMode;\n\tfiles: number;\n\ttoolAdapters: number;\n}\n\nexport interface AgentTrajectoryScenarioReleaseGateSummary\n\textends MaestroScenarioReleaseGate {\n\tsatisfied: boolean;\n\tmissingArtifacts: MaestroScenarioRequiredArtifact[];\n\tbudgetViolations: string[];\n\tpolicyViolations: string[];\n}\n\nexport interface AgentTrajectoryScenarioResult {\n\tschemaVersion: typeof AGENT_TRAJECTORY_SCENARIO_RESULT_SCHEMA;\n\tscenarioSchemaVersion: typeof MAESTRO_SCENARIO_SCHEMA;\n\tscenario: {\n\t\tid: string;\n\t\ttitle: string;\n\t\texpectedOutcome: MaestroScenarioOutcome;\n\t\tobservedOutcome: MaestroScenarioOutcome;\n\t\treviewLabels: MaestroScenarioReviewLabel[];\n\t};\n\texternalRefs?: MaestroScenarioExternalRefs;\n\trun: AgentTrajectoryReport[\"run\"] & {\n\t\tscenarioId: string;\n\t\treplay: true;\n\t};\n\tcounts: {\n\t\tassertions: number;\n\t\tpassed: number;\n\t\tfailed: number;\n\t\twarnings: number;\n\t\tevents: number;\n\t\ttoolCalls: number;\n\t\treplayDeltas: number;\n\t\tscoreFailures: number;\n\t\tscoreWarnings: number;\n\t\tworkspaceFiles: number;\n\t\ttoolAdapters: number;\n\t};\n\tplatform: MaestroScenarioPlatformLink & {\n\t\tevidenceEventType: \"maestro.events.eval.scored\";\n\t};\n\treleaseGate?: AgentTrajectoryScenarioReleaseGateSummary;\n\tworkspace?: AgentTrajectoryScenarioWorkspaceSummary;\n\tassumptions: MaestroScenario[\"assumptions\"];\n\tassertions: AgentTrajectoryScenarioAssertionResult[];\n\tprovenance: AgentTrajectoryScenarioProvenanceStep[];\n\tdiff?: AgentTrajectoryScenarioDiff;\n}\n\ninterface ScenarioInputs {\n\ttrajectory: AgentTrajectoryReport;\n\treplay: AgentTrajectoryReplayReport;\n\tscore: AgentTrajectoryScoreReport;\n\tinspection?: AgentTrajectoryInspectionReport;\n\tworkspaceManifest?: MaestroScenarioWorkspaceManifest;\n\tbaselineTrajectory?: AgentTrajectoryReport;\n\tcandidateTrajectory?: AgentTrajectoryReport;\n\tbaselineScore?: AgentTrajectoryScoreReport;\n\tcandidateScore?: AgentTrajectoryScoreReport;\n}\n\nconst AGENT_TRAJECTORY_SCENARIO_ASSERTION_KINDS = new Set<\n\tMaestroScenarioAssertion[\"kind\"]\n>([\n\t\"event.exists\",\n\t\"event.forbidden\",\n\t\"replay.deltas\",\n\t\"score.finding\",\n\t\"inspection.redaction\",\n\t\"workspace.manifest\",\n\t\"efficiency.budget\",\n\t\"provenance.chain\",\n\t\"human.review\",\n\t\"external.refs\",\n\t\"trajectory.diff\",\n]);\n\nconst EXTERNAL_REF_FIELDS = [\n\t\"ensembleTranscriptIds\",\n\t\"platformTraceIds\",\n\t\"platformWorkEnvelopeIds\",\n\t\"slackThreadRefs\",\n\t\"evidenceArtifactIds\",\n] as const satisfies readonly (keyof MaestroScenarioExternalRefs)[];\n\nconst RELEASE_GATE_TIERS = [\n\t\"smoke\",\n\t\"regression\",\n\t\"gauntlet\",\n] as const satisfies readonly MaestroScenarioGateTier[];\n\nconst REQUIRED_ARTIFACTS = [\n\t\"trajectory\",\n\t\"replay\",\n\t\"score\",\n\t\"inspection\",\n\t\"workspace_manifest\",\n] as const satisfies readonly MaestroScenarioRequiredArtifact[];\n\nconst HYDRATION_MODES = [\n\t\"manifest_only\",\n\t\"fixture_workspace\",\n\t\"frozen_archive\",\n] as const satisfies readonly MaestroScenarioWorkspaceHydrationMode[];\n\nconst WORKSPACE_SOURCES = [\n\t\"production\",\n\t\"canary\",\n\t\"fixture\",\n\t\"synthetic\",\n] as const satisfies readonly MaestroScenarioWorkspaceSource[];\n\nconst TOOL_ADAPTER_MODES = [\n\t\"recorded\",\n\t\"mocked\",\n\t\"sandboxed\",\n\t\"disabled\",\n] as const satisfies readonly MaestroScenarioToolAdapterMode[];\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readJson(path: string): unknown {\n\treturn JSON.parse(readFileSync(path, \"utf8\"));\n}\n\nfunction requireString(value: unknown, name: string): string {\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${name} must be a non-empty string`);\n\t}\n\treturn value;\n}\n\nfunction requireOptionalString(value: unknown, name: string): void {\n\tif (value !== undefined) {\n\t\trequireString(value, name);\n\t}\n}\n\nfunction requireStringArray(value: unknown, name: string): void {\n\tif (\n\t\t!Array.isArray(value) ||\n\t\tvalue.some((item) => typeof item !== \"string\" || item.length === 0)\n\t) {\n\t\tthrow new Error(`${name} must contain non-empty strings`);\n\t}\n}\n\nfunction requireOptionalStringArray(value: unknown, name: string): void {\n\tif (value !== undefined) {\n\t\trequireStringArray(value, name);\n\t}\n}\n\nfunction requireOptionalNonNegativeInteger(value: unknown, name: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Number.isInteger(value) || (value as number) < 0)\n\t) {\n\t\tthrow new Error(`${name} must be a non-negative integer`);\n\t}\n}\n\nfunction loadTypedJson<T>(\n\tpath: string,\n\tschemaVersion: string,\n\tname: string,\n): T {\n\tconst value = readJson(path);\n\tif (\n\t\t!isObject(value) ||\n\t\t(value.schemaVersion !== schemaVersion &&\n\t\t\tvalue.trajectorySchemaVersion !== schemaVersion)\n\t) {\n\t\tthrow new Error(\n\t\t\t`${name} at ${path} must use schemaVersion ${schemaVersion}`,\n\t\t);\n\t}\n\treturn value as T;\n}\n\nfunction validateWorkspaceManifest(\n\tmanifest: MaestroScenarioWorkspaceManifest,\n\tlabel: string,\n): void {\n\trequireString(manifest.id, `${label}.id`);\n\trequireString(manifest.recordedAt, `${label}.recordedAt`);\n\tif (!WORKSPACE_SOURCES.includes(manifest.source)) {\n\t\tthrow new Error(\n\t\t\t`${label}.source must be one of: ${WORKSPACE_SOURCES.join(\", \")}`,\n\t\t);\n\t}\n\trequireOptionalString(manifest.workspaceRoot, `${label}.workspaceRoot`);\n\tif (!isObject(manifest.hydration)) {\n\t\tthrow new Error(`${label}.hydration must be an object`);\n\t}\n\tif (!HYDRATION_MODES.includes(manifest.hydration.mode)) {\n\t\tthrow new Error(\n\t\t\t`${label}.hydration.mode must be one of: ${HYDRATION_MODES.join(\", \")}`,\n\t\t);\n\t}\n\trequireOptionalString(\n\t\tmanifest.hydration.archiveUri,\n\t\t`${label}.hydration.archiveUri`,\n\t);\n\trequireOptionalString(\n\t\tmanifest.hydration.rootPath,\n\t\t`${label}.hydration.rootPath`,\n\t);\n\tif (!Array.isArray(manifest.files)) {\n\t\tthrow new Error(`${label}.files must be an array`);\n\t}\n\tfor (const [index, file] of manifest.files.entries()) {\n\t\tconst fileLabel = `${label}.files[${index}]`;\n\t\tif (!isObject(file)) {\n\t\t\tthrow new Error(`${fileLabel} must be an object`);\n\t\t}\n\t\trequireString(file.path, `${fileLabel}.path`);\n\t\trequireOptionalString(file.sha256, `${fileLabel}.sha256`);\n\t\trequireOptionalNonNegativeInteger(file.sizeBytes, `${fileLabel}.sizeBytes`);\n\t\trequireOptionalString(file.purpose, `${fileLabel}.purpose`);\n\t}\n\tif (!Array.isArray(manifest.toolAdapters)) {\n\t\tthrow new Error(`${label}.toolAdapters must be an array`);\n\t}\n\tfor (const [index, adapter] of manifest.toolAdapters.entries()) {\n\t\tconst adapterLabel = `${label}.toolAdapters[${index}]`;\n\t\tif (!isObject(adapter)) {\n\t\t\tthrow new Error(`${adapterLabel} must be an object`);\n\t\t}\n\t\trequireString(adapter.tool, `${adapterLabel}.tool`);\n\t\tif (!TOOL_ADAPTER_MODES.includes(adapter.mode)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${adapterLabel}.mode must be one of: ${TOOL_ADAPTER_MODES.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\trequireOptionalString(adapter.fixturePath, `${adapterLabel}.fixturePath`);\n\t\trequireOptionalString(adapter.rationale, `${adapterLabel}.rationale`);\n\t}\n\tif (!isObject(manifest.redaction)) {\n\t\tthrow new Error(`${label}.redaction must be an object`);\n\t}\n\tif (typeof manifest.redaction.secretsRemoved !== \"boolean\") {\n\t\tthrow new Error(`${label}.redaction.secretsRemoved must be a boolean`);\n\t}\n\tif (typeof manifest.redaction.rawPromptsIncluded !== \"boolean\") {\n\t\tthrow new Error(`${label}.redaction.rawPromptsIncluded must be a boolean`);\n\t}\n\trequireOptionalStringArray(\n\t\tmanifest.redaction.notes,\n\t\t`${label}.redaction.notes`,\n\t);\n}\n\nexport function parseAgentTrajectoryScenario(\n\tvalue: unknown,\n\tlabel: string,\n): MaestroScenario {\n\tif (!isObject(value)) {\n\t\tthrow new Error(`Scenario ${label} must be a JSON object`);\n\t}\n\tconst schemaVersion = value.schemaVersion;\n\tif (schemaVersion !== MAESTRO_SCENARIO_SCHEMA) {\n\t\tthrow new Error(\n\t\t\t`Scenario ${label} must use schemaVersion ${MAESTRO_SCENARIO_SCHEMA}`,\n\t\t);\n\t}\n\tconst scenario = value as unknown as MaestroScenario;\n\tvalidateAgentTrajectoryScenario(scenario, label);\n\treturn scenario;\n}\n\nexport function loadAgentTrajectoryScenario(path: string): MaestroScenario {\n\treturn parseAgentTrajectoryScenario(readJson(path), path);\n}\n\nexport function loadAgentTrajectoryScenarioInputs(\n\tscenario: MaestroScenario,\n\tbaseDir: string,\n): ScenarioInputs {\n\tconst resolvePath = (path: string) => resolve(baseDir, path);\n\tconst source = scenario.source;\n\tconst inputs: ScenarioInputs = {\n\t\ttrajectory: loadTypedJson<AgentTrajectoryReport>(\n\t\t\tresolvePath(source.trajectoryPath),\n\t\t\t\"evalops.maestro.agent-trajectory.v1\",\n\t\t\t\"trajectory\",\n\t\t),\n\t\treplay: loadTypedJson<AgentTrajectoryReplayReport>(\n\t\t\tresolvePath(source.replayPath),\n\t\t\t\"evalops.maestro.agent-trajectory-replay.v1\",\n\t\t\t\"trajectory replay\",\n\t\t),\n\t\tscore: loadTypedJson<AgentTrajectoryScoreReport>(\n\t\t\tresolvePath(source.scorePath),\n\t\t\t\"evalops.maestro.agent-trajectory-score.v1\",\n\t\t\t\"trajectory score\",\n\t\t),\n\t};\n\tif (source.inspectionPath) {\n\t\tinputs.inspection = loadTypedJson<AgentTrajectoryInspectionReport>(\n\t\t\tresolvePath(source.inspectionPath),\n\t\t\t\"evalops.maestro.agent-trajectory-inspection.v1\",\n\t\t\t\"trajectory inspection\",\n\t\t);\n\t}\n\tif (source.workspaceManifestPath) {\n\t\tconst manifestPath = resolvePath(source.workspaceManifestPath);\n\t\tconst workspaceManifest = loadTypedJson<MaestroScenarioWorkspaceManifest>(\n\t\t\tmanifestPath,\n\t\t\tMAESTRO_SCENARIO_WORKSPACE_MANIFEST_SCHEMA,\n\t\t\t\"workspace manifest\",\n\t\t);\n\t\tvalidateWorkspaceManifest(\n\t\t\tworkspaceManifest,\n\t\t\t`workspace manifest at ${manifestPath}`,\n\t\t);\n\t\tinputs.workspaceManifest = workspaceManifest;\n\t}\n\tif (source.baselineTrajectoryPath) {\n\t\tinputs.baselineTrajectory = loadTypedJson<AgentTrajectoryReport>(\n\t\t\tresolvePath(source.baselineTrajectoryPath),\n\t\t\t\"evalops.maestro.agent-trajectory.v1\",\n\t\t\t\"baseline trajectory\",\n\t\t);\n\t}\n\tif (source.candidateTrajectoryPath) {\n\t\tinputs.candidateTrajectory = loadTypedJson<AgentTrajectoryReport>(\n\t\t\tresolvePath(source.candidateTrajectoryPath),\n\t\t\t\"evalops.maestro.agent-trajectory.v1\",\n\t\t\t\"candidate trajectory\",\n\t\t);\n\t}\n\tif (source.baselineScorePath) {\n\t\tinputs.baselineScore = loadTypedJson<AgentTrajectoryScoreReport>(\n\t\t\tresolvePath(source.baselineScorePath),\n\t\t\t\"evalops.maestro.agent-trajectory-score.v1\",\n\t\t\t\"baseline score\",\n\t\t);\n\t}\n\tif (source.candidateScorePath) {\n\t\tinputs.candidateScore = loadTypedJson<AgentTrajectoryScoreReport>(\n\t\t\tresolvePath(source.candidateScorePath),\n\t\t\t\"evalops.maestro.agent-trajectory-score.v1\",\n\t\t\t\"candidate score\",\n\t\t);\n\t}\n\treturn inputs;\n}\n\nexport function validateAgentTrajectoryScenario(\n\tscenario: MaestroScenario,\n\tlabel = scenario.id,\n): void {\n\trequireString(scenario.id, `${label}.id`);\n\trequireString(scenario.title, `${label}.title`);\n\trequireString(scenario.description, `${label}.description`);\n\tif (\n\t\tscenario.expectedOutcome !== undefined &&\n\t\tscenario.expectedOutcome !== \"pass\" &&\n\t\tscenario.expectedOutcome !== \"fail\"\n\t) {\n\t\tthrow new Error(`${label}.expectedOutcome must be pass or fail`);\n\t}\n\tif (!isObject(scenario.source)) {\n\t\tthrow new Error(`${label}.source must be an object`);\n\t}\n\trequireString(\n\t\tscenario.source.trajectoryPath,\n\t\t`${label}.source.trajectoryPath`,\n\t);\n\trequireString(scenario.source.replayPath, `${label}.source.replayPath`);\n\trequireString(scenario.source.scorePath, `${label}.source.scorePath`);\n\tif (scenario.source.workspaceManifestPath !== undefined) {\n\t\trequireString(\n\t\t\tscenario.source.workspaceManifestPath,\n\t\t\t`${label}.source.workspaceManifestPath`,\n\t\t);\n\t}\n\tif (\n\t\tBoolean(scenario.source.baselineTrajectoryPath) !==\n\t\tBoolean(scenario.source.candidateTrajectoryPath)\n\t) {\n\t\tthrow new Error(\n\t\t\t`${label}.source baselineTrajectoryPath and candidateTrajectoryPath must be provided together`,\n\t\t);\n\t}\n\tif (\n\t\tBoolean(scenario.source.baselineScorePath) !==\n\t\tBoolean(scenario.source.candidateScorePath)\n\t) {\n\t\tthrow new Error(\n\t\t\t`${label}.source baselineScorePath and candidateScorePath must be provided together`,\n\t\t);\n\t}\n\tif (!Array.isArray(scenario.assertions) || scenario.assertions.length === 0) {\n\t\tthrow new Error(`${label}.assertions must contain at least one assertion`);\n\t}\n\tif (!Array.isArray(scenario.reviewLabels)) {\n\t\tthrow new Error(`${label}.reviewLabels must be an array`);\n\t}\n\tif (scenario.releaseGate !== undefined) {\n\t\tif (!isObject(scenario.releaseGate)) {\n\t\t\tthrow new Error(`${label}.releaseGate must be an object`);\n\t\t}\n\t\tif (typeof scenario.releaseGate.releaseBlocking !== \"boolean\") {\n\t\t\tthrow new Error(`${label}.releaseGate.releaseBlocking must be a boolean`);\n\t\t}\n\t\tif (!RELEASE_GATE_TIERS.includes(scenario.releaseGate.tier)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate.tier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\t!Array.isArray(scenario.releaseGate.requiredArtifacts) ||\n\t\t\tscenario.releaseGate.requiredArtifacts.length === 0\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate.requiredArtifacts must not be empty`,\n\t\t\t);\n\t\t}\n\t\tconst unknownArtifacts = scenario.releaseGate.requiredArtifacts.filter(\n\t\t\t(artifact) => !REQUIRED_ARTIFACTS.includes(artifact),\n\t\t);\n\t\tif (unknownArtifacts.length > 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate.requiredArtifacts contains unknown artifact(s): ${unknownArtifacts.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tscenario.releaseGate.releaseBlocking &&\n\t\t\t!scenario.releaseGate.requiredArtifacts.includes(\"workspace_manifest\")\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate release-blocking scenarios must require workspace_manifest`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tscenario.releaseGate.requiredArtifacts.includes(\"inspection\") &&\n\t\t\t!scenario.source.inspectionPath\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate requires inspection but source.inspectionPath is missing`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tscenario.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t\t!scenario.source.workspaceManifestPath\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.releaseGate requires workspace_manifest but source.workspaceManifestPath is missing`,\n\t\t\t);\n\t\t}\n\t\trequireOptionalNonNegativeInteger(\n\t\t\tscenario.releaseGate.maxEvents,\n\t\t\t`${label}.releaseGate.maxEvents`,\n\t\t);\n\t\trequireOptionalNonNegativeInteger(\n\t\t\tscenario.releaseGate.maxToolCalls,\n\t\t\t`${label}.releaseGate.maxToolCalls`,\n\t\t);\n\t\trequireOptionalNonNegativeInteger(\n\t\t\tscenario.releaseGate.maxReplayDeltas,\n\t\t\t`${label}.releaseGate.maxReplayDeltas`,\n\t\t);\n\t\trequireOptionalNonNegativeInteger(\n\t\t\tscenario.releaseGate.maxScoreFailures,\n\t\t\t`${label}.releaseGate.maxScoreFailures`,\n\t\t);\n\t\trequireOptionalNonNegativeInteger(\n\t\t\tscenario.releaseGate.maxScoreWarnings,\n\t\t\t`${label}.releaseGate.maxScoreWarnings`,\n\t\t);\n\t}\n\tif (!isObject(scenario.platform)) {\n\t\tthrow new Error(`${label}.platform must be an object`);\n\t}\n\tif (\n\t\t!Array.isArray(scenario.platform.traceJoinKeys) ||\n\t\tscenario.platform.traceJoinKeys.length === 0\n\t) {\n\t\tthrow new Error(`${label}.platform.traceJoinKeys must not be empty`);\n\t}\n\tif (scenario.externalRefs !== undefined) {\n\t\tif (!isObject(scenario.externalRefs)) {\n\t\t\tthrow new Error(`${label}.externalRefs must be an object`);\n\t\t}\n\t\tlet refs = 0;\n\t\tfor (const field of EXTERNAL_REF_FIELDS) {\n\t\t\tconst values = scenario.externalRefs[field];\n\t\t\tif (values === undefined) continue;\n\t\t\tif (\n\t\t\t\t!Array.isArray(values) ||\n\t\t\t\tvalues.some((value) => typeof value !== \"string\" || value.length === 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.externalRefs.${field} must contain non-empty strings`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trefs += values.length;\n\t\t}\n\t\tif (refs === 0) {\n\t\t\tthrow new Error(`${label}.externalRefs must contain at least one ref`);\n\t\t}\n\t}\n\tif (!isObject(scenario.assumptions)) {\n\t\tthrow new Error(`${label}.assumptions must be an object`);\n\t}\n\trequireString(scenario.assumptions.workflow, `${label}.assumptions.workflow`);\n\trequireString(\n\t\tscenario.assumptions.correctnessModel,\n\t\t`${label}.assumptions.correctnessModel`,\n\t);\n\trequireString(\n\t\tscenario.assumptions.threatModel,\n\t\t`${label}.assumptions.threatModel`,\n\t);\n\tif (\n\t\t!Array.isArray(scenario.assumptions.researchBasis) ||\n\t\tscenario.assumptions.researchBasis.length === 0\n\t) {\n\t\tthrow new Error(`${label}.assumptions.researchBasis must not be empty`);\n\t}\n\tlet hasWorkspaceManifestAssertion = false;\n\tlet hasWarningWorkspaceManifestAssertion = false;\n\tfor (const assertion of scenario.assertions) {\n\t\trequireString(assertion.id, `${label}.assertions[].id`);\n\t\tconst kind = requireString(assertion.kind, `${label}.assertions[].kind`);\n\t\tif (\n\t\t\t!AGENT_TRAJECTORY_SCENARIO_ASSERTION_KINDS.has(\n\t\t\t\tkind as MaestroScenarioAssertion[\"kind\"],\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.assertions[].kind must be one of: ${Array.from(\n\t\t\t\t\tAGENT_TRAJECTORY_SCENARIO_ASSERTION_KINDS,\n\t\t\t\t).join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tkind === \"trajectory.diff\" &&\n\t\t\tassertion.maxAddedScoreFailures !== undefined &&\n\t\t\t(!scenario.source.baselineScorePath ||\n\t\t\t\t!scenario.source.candidateScorePath)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.assertions[].maxAddedScoreFailures requires baselineScorePath and candidateScorePath`,\n\t\t\t);\n\t\t}\n\t\tif (kind === \"workspace.manifest\") {\n\t\t\thasWorkspaceManifestAssertion = true;\n\t\t\thasWarningWorkspaceManifestAssertion =\n\t\t\t\thasWarningWorkspaceManifestAssertion ||\n\t\t\t\tassertion.severity === \"warning\";\n\t\t\tif (!scenario.source.workspaceManifestPath) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.assertions[].kind workspace.manifest requires source.workspaceManifestPath`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredWorkspaceFiles,\n\t\t\t\t`${label}.assertions[].requiredWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredToolAdapters,\n\t\t\t\t`${label}.assertions[].requiredToolAdapters`,\n\t\t\t);\n\t\t\tif (\n\t\t\t\tassertion.requiredHydrationModes !== undefined &&\n\t\t\t\t(!Array.isArray(assertion.requiredHydrationModes) ||\n\t\t\t\t\tassertion.requiredHydrationModes.some(\n\t\t\t\t\t\t(mode) => !HYDRATION_MODES.includes(mode),\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.assertions[].requiredHydrationModes must contain known hydration modes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tassertion.requiredReleaseGateTier !== undefined &&\n\t\t\t\t!RELEASE_GATE_TIERS.includes(assertion.requiredReleaseGateTier)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.assertions[].requiredReleaseGateTier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minWorkspaceFiles,\n\t\t\t\t`${label}.assertions[].minWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minToolAdapters,\n\t\t\t\t`${label}.assertions[].minToolAdapters`,\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tkind === \"external.refs\" &&\n\t\t\t(!Array.isArray(assertion.requiredExternalRefKinds) ||\n\t\t\t\tassertion.requiredExternalRefKinds.length === 0)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`${label}.assertions[].requiredExternalRefKinds must not be empty for external.refs`,\n\t\t\t);\n\t\t}\n\t\tif (kind === \"external.refs\") {\n\t\t\tconst unknownKinds = (assertion.requiredExternalRefKinds ?? []).filter(\n\t\t\t\t(refKind) => !EXTERNAL_REF_FIELDS.includes(refKind),\n\t\t\t);\n\t\t\tif (unknownKinds.length > 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.assertions[].requiredExternalRefKinds contains unknown external ref kind(s): ${unknownKinds.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tassertion.requiredExternalRefs !== undefined &&\n\t\t\t\t(!Array.isArray(assertion.requiredExternalRefs) ||\n\t\t\t\t\tassertion.requiredExternalRefs.some(\n\t\t\t\t\t\t(ref) => typeof ref !== \"string\" || ref.length === 0,\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${label}.assertions[].requiredExternalRefs must contain non-empty strings for external.refs`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\tif (\n\t\tscenario.releaseGate?.releaseBlocking === true &&\n\t\tscenario.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t!hasWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`${label}.releaseGate release-blocking workspace_manifest gates must include a workspace.manifest assertion`,\n\t\t);\n\t}\n\tif (\n\t\tscenario.releaseGate?.releaseBlocking === true &&\n\t\tscenario.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\thasWarningWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`${label}.releaseGate release-blocking workspace_manifest assertions must use error severity`,\n\t\t);\n\t}\n}\n\nfunction eventMatches(\n\tevent: AgentTrajectoryEvent,\n\tselector: NonNullable<MaestroScenarioAssertion[\"selector\"]>,\n): boolean {\n\treturn (\n\t\t(selector.kind === undefined || event.kind === selector.kind) &&\n\t\t(selector.phase === undefined || event.phase === selector.phase) &&\n\t\t(selector.type === undefined || event.type === selector.type) &&\n\t\t(selector.status === undefined || event.status === selector.status) &&\n\t\t(selector.toolName === undefined || event.toolName === selector.toolName) &&\n\t\t(selector.source === undefined || event.source === selector.source) &&\n\t\t(selector.actor === undefined || event.actor === selector.actor)\n\t);\n}\n\nfunction evidenceFromEvents(\n\tevents: AgentTrajectoryEvent[],\n): AgentTrajectoryScenarioEvidence[] {\n\tconst seen = new Set<string>();\n\tconst evidence: AgentTrajectoryScenarioEvidence[] = [];\n\tfor (const event of events) {\n\t\tconst eventKey = `trajectory:event:${event.id}`;\n\t\tif (!seen.has(eventKey)) {\n\t\t\tseen.add(eventKey);\n\t\t\tevidence.push({\n\t\t\t\tkind: \"trajectory_event\",\n\t\t\t\tid: event.id,\n\t\t\t\tsource: \"trajectory\",\n\t\t\t\tlabel: `${event.type}:${event.id}`,\n\t\t\t});\n\t\t}\n\t\tfor (const anchor of event.evidence) {\n\t\t\tconst key = `trajectory:${anchor.kind}:${anchor.id}`;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tevidence.push({\n\t\t\t\tkind: anchor.kind,\n\t\t\t\tid: anchor.id,\n\t\t\t\tsource: \"trajectory\",\n\t\t\t\tlabel: `${anchor.kind}:${anchor.id}`,\n\t\t\t});\n\t\t}\n\t}\n\treturn evidence.sort((left, right) => left.label.localeCompare(right.label));\n}\n\nfunction scenarioEvidence(\n\tid: string,\n\tlabel: string,\n): AgentTrajectoryScenarioEvidence[] {\n\treturn [\n\t\t{\n\t\t\tkind: \"scenario\",\n\t\t\tid,\n\t\t\tsource: \"scenario\",\n\t\t\tlabel,\n\t\t},\n\t];\n}\n\nfunction result(\n\tassertion: MaestroScenarioAssertion,\n\tstatus: AgentTrajectoryScenarioStatus,\n\tmessage: string,\n\tevidence: AgentTrajectoryScenarioEvidence[] = [],\n): AgentTrajectoryScenarioAssertionResult {\n\treturn {\n\t\tid: assertion.id,\n\t\tkind: assertion.kind,\n\t\tstatus,\n\t\tseverity: assertion.severity ?? \"error\",\n\t\tmessage,\n\t\tevidence,\n\t};\n}\n\nfunction fail(\n\tassertion: MaestroScenarioAssertion,\n\tmessage: string,\n\tevidence: AgentTrajectoryScenarioEvidence[] = [],\n): AgentTrajectoryScenarioAssertionResult {\n\tconst status = assertion.severity === \"warning\" ? \"warn\" : \"fail\";\n\treturn result(assertion, status, message, evidence);\n}\n\nfunction countToolCalls(report: AgentTrajectoryReport): number {\n\treturn report.events.filter((event) => event.type === \"tool.requested\")\n\t\t.length;\n}\n\nfunction scoreFailures(report: AgentTrajectoryScoreReport): number {\n\treturn report.findings.filter((finding) => finding.status === \"fail\").length;\n}\n\nfunction scoreWarnings(report: AgentTrajectoryScoreReport): number {\n\treturn report.findings.filter((finding) => finding.status === \"warn\").length;\n}\n\nfunction buildDiff(\n\tinputs: ScenarioInputs,\n): AgentTrajectoryScenarioDiff | undefined {\n\tif (!inputs.baselineTrajectory || !inputs.candidateTrajectory)\n\t\treturn undefined;\n\treturn {\n\t\tbaselineRunId: inputs.baselineTrajectory.run.id,\n\t\tcandidateRunId: inputs.candidateTrajectory.run.id,\n\t\teventsDelta:\n\t\t\tinputs.candidateTrajectory.counts.events -\n\t\t\tinputs.baselineTrajectory.counts.events,\n\t\ttoolCallsDelta:\n\t\t\tcountToolCalls(inputs.candidateTrajectory) -\n\t\t\tcountToolCalls(inputs.baselineTrajectory),\n\t\tscoreFailuresDelta:\n\t\t\tinputs.baselineScore && inputs.candidateScore\n\t\t\t\t? scoreFailures(inputs.candidateScore) -\n\t\t\t\t\tscoreFailures(inputs.baselineScore)\n\t\t\t\t: 0,\n\t};\n}\n\nfunction workspaceEvidence(\n\tmanifest: MaestroScenarioWorkspaceManifest,\n): AgentTrajectoryScenarioEvidence[] {\n\treturn [\n\t\t{\n\t\t\tkind: \"workspace_manifest\",\n\t\t\tid: manifest.id,\n\t\t\tsource: \"scenario\",\n\t\t\tlabel: `workspace_manifest:${manifest.id}`,\n\t\t},\n\t\t...manifest.toolAdapters.map((adapter) => ({\n\t\t\tkind: \"tool_adapter\",\n\t\t\tid: adapter.tool,\n\t\t\tsource: \"scenario\" as const,\n\t\t\tlabel: `tool_adapter:${adapter.tool}:${adapter.mode}`,\n\t\t})),\n\t];\n}\n\nfunction buildWorkspaceSummary(\n\tmanifest: MaestroScenarioWorkspaceManifest | undefined,\n): AgentTrajectoryScenarioWorkspaceSummary | undefined {\n\tif (!manifest) return undefined;\n\treturn {\n\t\tmanifestId: manifest.id,\n\t\tsource: manifest.source,\n\t\trecordedAt: manifest.recordedAt,\n\t\thydrationMode: manifest.hydration.mode,\n\t\tfiles: manifest.files.length,\n\t\ttoolAdapters: manifest.toolAdapters.length,\n\t};\n}\n\nfunction hasRequiredArtifact(\n\tartifact: MaestroScenarioRequiredArtifact,\n\tinputs: ScenarioInputs,\n): boolean {\n\tswitch (artifact) {\n\t\tcase \"trajectory\":\n\t\t\treturn true;\n\t\tcase \"replay\":\n\t\t\treturn true;\n\t\tcase \"score\":\n\t\t\treturn true;\n\t\tcase \"inspection\":\n\t\t\treturn inputs.inspection !== undefined;\n\t\tcase \"workspace_manifest\":\n\t\t\treturn inputs.workspaceManifest !== undefined;\n\t}\n}\n\nfunction workspaceReleasePolicyViolations(\n\tgate: MaestroScenarioReleaseGate,\n\tinputs: ScenarioInputs,\n): string[] {\n\tif (!gate.requiredArtifacts.includes(\"workspace_manifest\")) {\n\t\treturn [];\n\t}\n\tconst manifest = inputs.workspaceManifest;\n\tif (!manifest) {\n\t\treturn [];\n\t}\n\treturn [\n\t\tmanifest.redaction.secretsRemoved !== true\n\t\t\t? \"workspace manifest did not confirm secret redaction\"\n\t\t\t: undefined,\n\t\tmanifest.redaction.rawPromptsIncluded !== false\n\t\t\t? \"workspace manifest did not confirm raw prompts were excluded\"\n\t\t\t: undefined,\n\t].filter((value): value is string => value !== undefined);\n}\n\nfunction buildReleaseGateSummary(\n\tscenario: MaestroScenario,\n\tinputs: ScenarioInputs,\n): AgentTrajectoryScenarioReleaseGateSummary | undefined {\n\tconst gate = scenario.releaseGate;\n\tif (!gate) return undefined;\n\tconst observedToolCalls = countToolCalls(inputs.trajectory);\n\tconst observedFailures = scoreFailures(inputs.score);\n\tconst observedWarnings = scoreWarnings(inputs.score);\n\tconst missingArtifacts = gate.requiredArtifacts.filter(\n\t\t(artifact) => !hasRequiredArtifact(artifact, inputs),\n\t);\n\tconst budgetViolations = [\n\t\tgate.maxEvents !== undefined &&\n\t\tinputs.trajectory.counts.events > gate.maxEvents\n\t\t\t? `events ${inputs.trajectory.counts.events}/${gate.maxEvents}`\n\t\t\t: undefined,\n\t\tgate.maxToolCalls !== undefined && observedToolCalls > gate.maxToolCalls\n\t\t\t? `toolCalls ${observedToolCalls}/${gate.maxToolCalls}`\n\t\t\t: undefined,\n\t\tgate.maxReplayDeltas !== undefined &&\n\t\tinputs.replay.counts.deltas > gate.maxReplayDeltas\n\t\t\t? `replayDeltas ${inputs.replay.counts.deltas}/${gate.maxReplayDeltas}`\n\t\t\t: undefined,\n\t\tgate.maxScoreFailures !== undefined &&\n\t\tobservedFailures > gate.maxScoreFailures\n\t\t\t? `scoreFailures ${observedFailures}/${gate.maxScoreFailures}`\n\t\t\t: undefined,\n\t\tgate.maxScoreWarnings !== undefined &&\n\t\tobservedWarnings > gate.maxScoreWarnings\n\t\t\t? `scoreWarnings ${observedWarnings}/${gate.maxScoreWarnings}`\n\t\t\t: undefined,\n\t].filter((value): value is string => value !== undefined);\n\tconst policyViolations = workspaceReleasePolicyViolations(gate, inputs);\n\treturn {\n\t\t...gate,\n\t\tsatisfied:\n\t\t\tmissingArtifacts.length === 0 &&\n\t\t\tbudgetViolations.length === 0 &&\n\t\t\tpolicyViolations.length === 0,\n\t\tmissingArtifacts,\n\t\tbudgetViolations,\n\t\tpolicyViolations,\n\t};\n}\n\nfunction evaluateAssertion(\n\tassertion: MaestroScenarioAssertion,\n\tscenario: MaestroScenario,\n\tinputs: ScenarioInputs,\n\tdiff: AgentTrajectoryScenarioDiff | undefined,\n): AgentTrajectoryScenarioAssertionResult {\n\tswitch (assertion.kind) {\n\t\tcase \"event.exists\": {\n\t\t\tif (!assertion.selector) {\n\t\t\t\treturn fail(assertion, \"event.exists requires a selector.\");\n\t\t\t}\n\t\t\tconst matches = inputs.trajectory.events.filter((event) =>\n\t\t\t\teventMatches(event, assertion.selector ?? {}),\n\t\t\t);\n\t\t\treturn matches.length > 0\n\t\t\t\t? result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Matched ${matches.length} trajectory event(s).`,\n\t\t\t\t\t\tevidenceFromEvents(matches),\n\t\t\t\t\t)\n\t\t\t\t: fail(assertion, \"No trajectory event matched the selector.\");\n\t\t}\n\t\tcase \"event.forbidden\": {\n\t\t\tif (!assertion.selector) {\n\t\t\t\treturn fail(assertion, \"event.forbidden requires a selector.\");\n\t\t\t}\n\t\t\tconst matches = inputs.trajectory.events.filter((event) =>\n\t\t\t\teventMatches(event, assertion.selector ?? {}),\n\t\t\t);\n\t\t\treturn matches.length === 0\n\t\t\t\t? result(assertion, \"pass\", \"No forbidden trajectory event matched.\")\n\t\t\t\t: fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Forbidden selector matched ${matches.length} trajectory event(s).`,\n\t\t\t\t\t\tevidenceFromEvents(matches),\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"replay.deltas\": {\n\t\t\tconst maxDeltas = assertion.maxReplayDeltas ?? Number.POSITIVE_INFINITY;\n\t\t\tconst maxErrors = assertion.maxReplayErrors ?? Number.POSITIVE_INFINITY;\n\t\t\tconst failed =\n\t\t\t\tinputs.replay.counts.deltas > maxDeltas ||\n\t\t\t\tinputs.replay.counts.errors > maxErrors;\n\t\t\treturn failed\n\t\t\t\t? fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Replay deltas exceeded budget: ${inputs.replay.counts.deltas}/${maxDeltas}, errors ${inputs.replay.counts.errors}/${maxErrors}.`,\n\t\t\t\t\t\tinputs.replay.deltas.map((delta) => ({\n\t\t\t\t\t\t\tkind: \"replay_delta\",\n\t\t\t\t\t\t\tid: delta.id,\n\t\t\t\t\t\t\tsource: \"replay\",\n\t\t\t\t\t\t\tlabel: `${delta.ruleId}:${delta.id}`,\n\t\t\t\t\t\t})),\n\t\t\t\t\t)\n\t\t\t\t: result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Replay stayed within delta and error budgets (${inputs.replay.counts.deltas} deltas, ${inputs.replay.counts.errors} errors).`,\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"score.finding\": {\n\t\t\tif (!assertion.ruleId) {\n\t\t\t\treturn fail(assertion, \"score.finding requires ruleId.\");\n\t\t\t}\n\t\t\tconst finding = inputs.score.findings.find(\n\t\t\t\t(item) => item.ruleId === assertion.ruleId,\n\t\t\t);\n\t\t\tif (!finding) {\n\t\t\t\treturn fail(assertion, `Missing score finding ${assertion.ruleId}.`);\n\t\t\t}\n\t\t\tif (assertion.status && finding.status !== assertion.status) {\n\t\t\t\treturn fail(\n\t\t\t\t\tassertion,\n\t\t\t\t\t`Score finding ${assertion.ruleId} was ${finding.status}; expected ${assertion.status}.`,\n\t\t\t\t\tevidenceFromEvents(\n\t\t\t\t\t\tinputs.trajectory.events.filter((event) =>\n\t\t\t\t\t\t\tfinding.eventIds.includes(event.id),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn result(\n\t\t\t\tassertion,\n\t\t\t\t\"pass\",\n\t\t\t\t`Score finding ${assertion.ruleId} matched ${finding.status}.`,\n\t\t\t\tevidenceFromEvents(\n\t\t\t\t\tinputs.trajectory.events.filter((event) =>\n\t\t\t\t\t\tfinding.eventIds.includes(event.id),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\tcase \"inspection.redaction\": {\n\t\t\tif (!inputs.inspection) {\n\t\t\t\treturn fail(assertion, \"inspection.redaction requires inspectionPath.\");\n\t\t\t}\n\t\t\tconst inspectionJson = JSON.stringify(inputs.inspection);\n\t\t\tconst leaked = (assertion.forbiddenTerms ?? []).filter((term) =>\n\t\t\t\tinspectionJson.includes(term),\n\t\t\t);\n\t\t\tconst unredactedItem = inputs.inspection.timelineItems.find(\n\t\t\t\t(item) => item.redacted !== true,\n\t\t\t);\n\t\t\tif (leaked.length > 0 || unredactedItem) {\n\t\t\t\treturn fail(\n\t\t\t\t\tassertion,\n\t\t\t\t\t`Inspection output was not fail-closed: ${leaked.length} forbidden term(s), unredacted item ${unredactedItem?.id ?? \"none\"}.`,\n\t\t\t\t\tscenarioEvidence(inputs.inspection.run.id, \"inspection:redaction\"),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn result(\n\t\t\t\tassertion,\n\t\t\t\t\"pass\",\n\t\t\t\t\"Inspection artifact stayed redacted and omitted forbidden terms.\",\n\t\t\t\tscenarioEvidence(inputs.inspection.run.id, \"inspection:redaction\"),\n\t\t\t);\n\t\t}\n\t\tcase \"workspace.manifest\": {\n\t\t\tconst manifest = inputs.workspaceManifest;\n\t\t\tif (!manifest) {\n\t\t\t\treturn fail(\n\t\t\t\t\tassertion,\n\t\t\t\t\t\"workspace.manifest requires source.workspaceManifestPath.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst requiredFiles = assertion.requiredWorkspaceFiles ?? [];\n\t\t\tconst requiredAdapters = assertion.requiredToolAdapters ?? [];\n\t\t\tconst missingFiles = requiredFiles.filter(\n\t\t\t\t(path) => !manifest.files.some((file) => file.path === path),\n\t\t\t);\n\t\t\tconst missingAdapters = requiredAdapters.filter(\n\t\t\t\t(tool) =>\n\t\t\t\t\t!manifest.toolAdapters.some((adapter) => adapter.tool === tool),\n\t\t\t);\n\t\t\tconst allowedHydrationModes = assertion.requiredHydrationModes ?? [];\n\t\t\tconst hydrationRejected =\n\t\t\t\tallowedHydrationModes.length > 0 &&\n\t\t\t\t!allowedHydrationModes.includes(manifest.hydration.mode);\n\t\t\tconst releaseGateRejected =\n\t\t\t\tassertion.requiredReleaseGateTier !== undefined &&\n\t\t\t\tscenario.releaseGate?.tier !== assertion.requiredReleaseGateTier;\n\t\t\tconst fileFloor = assertion.minWorkspaceFiles ?? 0;\n\t\t\tconst adapterFloor = assertion.minToolAdapters ?? 0;\n\t\t\tconst floorFailures = [\n\t\t\t\tmanifest.files.length < fileFloor\n\t\t\t\t\t? `workspace files ${manifest.files.length}/${fileFloor}`\n\t\t\t\t\t: undefined,\n\t\t\t\tmanifest.toolAdapters.length < adapterFloor\n\t\t\t\t\t? `tool adapters ${manifest.toolAdapters.length}/${adapterFloor}`\n\t\t\t\t\t: undefined,\n\t\t\t].filter((value): value is string => value !== undefined);\n\t\t\tconst failures = [\n\t\t\t\t...missingFiles.map((path) => `missing file ${path}`),\n\t\t\t\t...missingAdapters.map((tool) => `missing tool adapter ${tool}`),\n\t\t\t\thydrationRejected\n\t\t\t\t\t? `hydration mode ${manifest.hydration.mode} not allowed`\n\t\t\t\t\t: undefined,\n\t\t\t\treleaseGateRejected\n\t\t\t\t\t? `release tier ${scenario.releaseGate?.tier ?? \"none\"} did not match ${assertion.requiredReleaseGateTier}`\n\t\t\t\t\t: undefined,\n\t\t\t\t...floorFailures,\n\t\t\t\tmanifest.redaction.secretsRemoved !== true\n\t\t\t\t\t? \"workspace manifest did not confirm secret redaction\"\n\t\t\t\t\t: undefined,\n\t\t\t\tmanifest.redaction.rawPromptsIncluded !== false\n\t\t\t\t\t? \"workspace manifest did not confirm raw prompts were excluded\"\n\t\t\t\t\t: undefined,\n\t\t\t].filter((value): value is string => value !== undefined);\n\t\t\treturn failures.length === 0\n\t\t\t\t? result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Workspace manifest ${manifest.id} is release-gate ready (${manifest.files.length} file(s), ${manifest.toolAdapters.length} tool adapter(s), ${manifest.hydration.mode}).`,\n\t\t\t\t\t\tworkspaceEvidence(manifest),\n\t\t\t\t\t)\n\t\t\t\t: fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Workspace manifest is not release-gate ready: ${failures.join(\"; \")}.`,\n\t\t\t\t\t\tworkspaceEvidence(manifest),\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"efficiency.budget\": {\n\t\t\tconst maxEvents = assertion.maxEvents ?? Number.POSITIVE_INFINITY;\n\t\t\tconst maxToolCalls = assertion.maxToolCalls ?? Number.POSITIVE_INFINITY;\n\t\t\tconst maxDeltas = assertion.maxReplayDeltas ?? Number.POSITIVE_INFINITY;\n\t\t\tconst maxFailures =\n\t\t\t\tassertion.maxScoreFailures ?? Number.POSITIVE_INFINITY;\n\t\t\tconst maxWarnings =\n\t\t\t\tassertion.maxScoreWarnings ?? Number.POSITIVE_INFINITY;\n\t\t\tconst observedToolCalls = countToolCalls(inputs.trajectory);\n\t\t\tconst observedFailures = scoreFailures(inputs.score);\n\t\t\tconst observedWarnings = scoreWarnings(inputs.score);\n\t\t\tconst exceeded =\n\t\t\t\tinputs.trajectory.counts.events > maxEvents ||\n\t\t\t\tobservedToolCalls > maxToolCalls ||\n\t\t\t\tinputs.replay.counts.deltas > maxDeltas ||\n\t\t\t\tobservedFailures > maxFailures ||\n\t\t\t\tobservedWarnings > maxWarnings;\n\t\t\tconst message = `Observed events=${inputs.trajectory.counts.events}, toolCalls=${observedToolCalls}, replayDeltas=${inputs.replay.counts.deltas}, scoreFailures=${observedFailures}, scoreWarnings=${observedWarnings}.`;\n\t\t\treturn exceeded\n\t\t\t\t? fail(assertion, `Efficiency budget exceeded. ${message}`)\n\t\t\t\t: result(assertion, \"pass\", `Efficiency budget satisfied. ${message}`);\n\t\t}\n\t\tcase \"provenance.chain\": {\n\t\t\tif (!assertion.eventId) {\n\t\t\t\treturn fail(assertion, \"provenance.chain requires eventId.\");\n\t\t\t}\n\t\t\tconst event = inputs.trajectory.events.find(\n\t\t\t\t(item) => item.id === assertion.eventId,\n\t\t\t);\n\t\t\tif (!event) {\n\t\t\t\treturn fail(\n\t\t\t\t\tassertion,\n\t\t\t\t\t`Missing provenance event ${assertion.eventId}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst kinds = new Set(event.evidence.map((anchor) => anchor.kind));\n\t\t\tconst missing = (assertion.requiredEvidenceKinds ?? []).filter(\n\t\t\t\t(kind) =>\n\t\t\t\t\t!kinds.has(kind as AgentTrajectoryEvent[\"evidence\"][number][\"kind\"]),\n\t\t\t);\n\t\t\treturn missing.length === 0\n\t\t\t\t? result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Event ${assertion.eventId} includes required provenance anchors.`,\n\t\t\t\t\t\tevidenceFromEvents([event]),\n\t\t\t\t\t)\n\t\t\t\t: fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Event ${assertion.eventId} is missing provenance anchors: ${missing.join(\", \")}.`,\n\t\t\t\t\t\tevidenceFromEvents([event]),\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"human.review\": {\n\t\t\tconst missing = (assertion.requiredLabels ?? []).filter(\n\t\t\t\t(label) => !scenario.reviewLabels.includes(label),\n\t\t\t);\n\t\t\treturn missing.length === 0\n\t\t\t\t? result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Human review labels present: ${(assertion.requiredLabels ?? []).join(\", \")}.`,\n\t\t\t\t\t\tscenarioEvidence(scenario.id, \"human-review:labels\"),\n\t\t\t\t\t)\n\t\t\t\t: fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Missing human review labels: ${missing.join(\", \")}.`,\n\t\t\t\t\t\tscenarioEvidence(scenario.id, \"human-review:labels\"),\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"external.refs\": {\n\t\t\tconst externalRefs = scenario.externalRefs;\n\t\t\tif (!externalRefs) {\n\t\t\t\treturn fail(assertion, \"external.refs requires scenario.externalRefs.\");\n\t\t\t}\n\t\t\tconst missingKinds = (assertion.requiredExternalRefKinds ?? []).filter(\n\t\t\t\t(kind) => {\n\t\t\t\t\tconst values = externalRefs[kind];\n\t\t\t\t\treturn !Array.isArray(values) || values.length === 0;\n\t\t\t\t},\n\t\t\t);\n\t\t\tconst flattenedRefs = new Set(\n\t\t\t\tEXTERNAL_REF_FIELDS.flatMap((field) => externalRefs[field] ?? []),\n\t\t\t);\n\t\t\tconst missingRefs = (assertion.requiredExternalRefs ?? []).filter(\n\t\t\t\t(ref) => !flattenedRefs.has(ref),\n\t\t\t);\n\t\t\tconst missing = [...missingKinds, ...missingRefs];\n\t\t\treturn missing.length === 0\n\t\t\t\t? result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`External refs present for ${(assertion.requiredExternalRefKinds ?? []).join(\", \")}.`,\n\t\t\t\t\t\tscenarioEvidence(scenario.id, \"external-refs\"),\n\t\t\t\t\t)\n\t\t\t\t: fail(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t`Missing external refs: ${missing.join(\", \")}.`,\n\t\t\t\t\t\tscenarioEvidence(scenario.id, \"external-refs\"),\n\t\t\t\t\t);\n\t\t}\n\t\tcase \"trajectory.diff\": {\n\t\t\tif (!diff) {\n\t\t\t\treturn fail(\n\t\t\t\t\tassertion,\n\t\t\t\t\t\"trajectory.diff requires baselineTrajectoryPath and candidateTrajectoryPath.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst exceeded =\n\t\t\t\tdiff.eventsDelta >\n\t\t\t\t\t(assertion.maxAddedEvents ?? Number.POSITIVE_INFINITY) ||\n\t\t\t\tdiff.toolCallsDelta >\n\t\t\t\t\t(assertion.maxAddedToolCalls ?? Number.POSITIVE_INFINITY) ||\n\t\t\t\tdiff.scoreFailuresDelta >\n\t\t\t\t\t(assertion.maxAddedScoreFailures ?? Number.POSITIVE_INFINITY);\n\t\t\tconst message = `Diff eventsDelta=${diff.eventsDelta}, toolCallsDelta=${diff.toolCallsDelta}, scoreFailuresDelta=${diff.scoreFailuresDelta}.`;\n\t\t\treturn exceeded\n\t\t\t\t? fail(assertion, `Trajectory diff budget exceeded. ${message}`)\n\t\t\t\t: result(\n\t\t\t\t\t\tassertion,\n\t\t\t\t\t\t\"pass\",\n\t\t\t\t\t\t`Trajectory diff budget satisfied. ${message}`,\n\t\t\t\t\t);\n\t\t}\n\t}\n\tconst _exhaustive: never = assertion.kind;\n\treturn fail(assertion, `Unsupported scenario assertion kind: ${_exhaustive}`);\n}\n\nfunction buildProvenance(\n\treport: AgentTrajectoryReport,\n): AgentTrajectoryScenarioProvenanceStep[] {\n\treturn report.events\n\t\t.filter((event) => event.evidence.length > 0)\n\t\t.map((event) => ({\n\t\t\teventId: event.id,\n\t\t\teventType: event.type,\n\t\t\tphase: event.phase,\n\t\t\tactor: event.actor,\n\t\t\tevidence: evidenceFromEvents([event]),\n\t\t}));\n}\n\nexport function evaluateAgentTrajectoryScenario(\n\tscenario: MaestroScenario,\n\tinputs: ScenarioInputs,\n): AgentTrajectoryScenarioResult {\n\tconst diff = buildDiff(inputs);\n\tconst releaseGate = buildReleaseGateSummary(scenario, inputs);\n\tconst workspace = buildWorkspaceSummary(inputs.workspaceManifest);\n\tconst assertions = scenario.assertions.map((assertion) =>\n\t\tevaluateAssertion(assertion, scenario, inputs, diff),\n\t);\n\tconst failed = assertions.filter((assertion) => assertion.status === \"fail\");\n\tconst warnings = assertions.filter(\n\t\t(assertion) => assertion.status === \"warn\",\n\t);\n\tconst observedOutcome: MaestroScenarioOutcome =\n\t\tfailed.length > 0 ? \"fail\" : \"pass\";\n\treturn {\n\t\tschemaVersion: AGENT_TRAJECTORY_SCENARIO_RESULT_SCHEMA,\n\t\tscenarioSchemaVersion: MAESTRO_SCENARIO_SCHEMA,\n\t\tscenario: {\n\t\t\tid: scenario.id,\n\t\t\ttitle: scenario.title,\n\t\t\texpectedOutcome: scenario.expectedOutcome ?? \"pass\",\n\t\t\tobservedOutcome,\n\t\t\treviewLabels: scenario.reviewLabels,\n\t\t},\n\t\t...(scenario.externalRefs ? { externalRefs: scenario.externalRefs } : {}),\n\t\trun: {\n\t\t\t...inputs.trajectory.run,\n\t\t\tscenarioId: scenario.id,\n\t\t\treplay: true,\n\t\t},\n\t\tcounts: {\n\t\t\tassertions: assertions.length,\n\t\t\tpassed: assertions.filter((assertion) => assertion.status === \"pass\")\n\t\t\t\t.length,\n\t\t\tfailed: failed.length,\n\t\t\twarnings: warnings.length,\n\t\t\tevents: inputs.trajectory.counts.events,\n\t\t\ttoolCalls: countToolCalls(inputs.trajectory),\n\t\t\treplayDeltas: inputs.replay.counts.deltas,\n\t\t\tscoreFailures: scoreFailures(inputs.score),\n\t\t\tscoreWarnings: scoreWarnings(inputs.score),\n\t\t\tworkspaceFiles: inputs.workspaceManifest?.files.length ?? 0,\n\t\t\ttoolAdapters: inputs.workspaceManifest?.toolAdapters.length ?? 0,\n\t\t},\n\t\tplatform: {\n\t\t\t...scenario.platform,\n\t\t\tevidenceEventType: \"maestro.events.eval.scored\",\n\t\t},\n\t\t...(releaseGate ? { releaseGate } : {}),\n\t\t...(workspace ? { workspace } : {}),\n\t\tassumptions: scenario.assumptions,\n\t\tassertions,\n\t\tprovenance: buildProvenance(inputs.trajectory),\n\t\t...(diff ? { diff } : {}),\n\t};\n}\n\nexport function scenarioResultToJunit(\n\tresult: AgentTrajectoryScenarioResult,\n): string {\n\tconst outcomeMatches =\n\t\tresult.scenario.observedOutcome === result.scenario.expectedOutcome;\n\tconst failures = result.assertions.filter(\n\t\t(assertion) => assertion.status === \"fail\",\n\t);\n\tconst testcases = result.assertions\n\t\t.map((assertion) => {\n\t\t\tconst failure =\n\t\t\t\t!outcomeMatches && assertion.status === \"fail\"\n\t\t\t\t\t? `\\n\\t\\t<failure message=\"${escapeXml(assertion.message)}\">${escapeXml(\n\t\t\t\t\t\t\tJSON.stringify(assertion.evidence),\n\t\t\t\t\t\t)}</failure>\\n\\t`\n\t\t\t\t\t: \"\";\n\t\t\tconst expectedFailureOutput =\n\t\t\t\toutcomeMatches && assertion.status === \"fail\"\n\t\t\t\t\t? `\\n\\t\\t<system-out>${escapeXml(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t`Expected failing assertion observed: ${assertion.message}`,\n\t\t\t\t\t\t\t\tJSON.stringify(assertion.evidence),\n\t\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t\t)}</system-out>\\n\\t`\n\t\t\t\t\t: \"\";\n\t\t\treturn `\\t<testcase classname=\"${escapeXml(result.scenario.id)}\" name=\"${escapeXml(assertion.id)}\">${failure}${expectedFailureOutput}</testcase>`;\n\t\t})\n\t\t.join(\"\\n\");\n\tconst outcomeFailure =\n\t\t!outcomeMatches && failures.length === 0\n\t\t\t? `\\t<testcase classname=\"${escapeXml(result.scenario.id)}\" name=\"scenario-outcome\">\\n\\t\\t<failure message=\"${escapeXml(\n\t\t\t\t\t`Observed outcome ${result.scenario.observedOutcome}; expected ${result.scenario.expectedOutcome}.`,\n\t\t\t\t)}\"></failure>\\n\\t</testcase>\\n`\n\t\t\t: \"\";\n\tconst failureCount = outcomeMatches ? 0 : Math.max(1, failures.length);\n\tconst testCount = result.counts.assertions + (outcomeFailure ? 1 : 0);\n\treturn `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<testsuite name=\"${escapeXml(\n\t\tresult.scenario.id,\n\t)}\" tests=\"${testCount}\" failures=\"${failureCount}\" warnings=\"${result.counts.warnings}\">\\n${outcomeFailure}${testcases}\\n</testsuite>\\n`;\n}\n\nexport function runAgentTrajectoryScenarioFile(\n\tpath: string,\n\toptions: { baseDir?: string } = {},\n): AgentTrajectoryScenarioResult {\n\tconst scenario = loadAgentTrajectoryScenario(path);\n\tconst inputs = loadAgentTrajectoryScenarioInputs(\n\t\tscenario,\n\t\toptions.baseDir ?? process.cwd(),\n\t);\n\treturn evaluateAgentTrajectoryScenario(scenario, inputs);\n}\n"]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AgentTrajectoryEvent, AgentTrajectoryEventKind, AgentTrajectoryPhase, AgentTrajectoryReport } from "./agent-trajectory.js";
|
|
2
|
+
export declare const AGENT_TRAJECTORY_SCORE_SCHEMA = "evalops.maestro.agent-trajectory-score.v1";
|
|
3
|
+
export type AgentTrajectoryScoreSeverity = "error" | "warning";
|
|
4
|
+
export type AgentTrajectoryScoreStatus = "pass" | "fail" | "warn";
|
|
5
|
+
export interface AgentTrajectoryScorerRule {
|
|
6
|
+
id: string;
|
|
7
|
+
severity: AgentTrajectoryScoreSeverity;
|
|
8
|
+
description: string;
|
|
9
|
+
anyEvent?: AgentTrajectoryEventSelector;
|
|
10
|
+
forbidEvent?: AgentTrajectoryEventSelector;
|
|
11
|
+
toolTerminalStatus?: {
|
|
12
|
+
toolCallId: string;
|
|
13
|
+
status: "completed" | "failed";
|
|
14
|
+
};
|
|
15
|
+
requireArtifact?: {
|
|
16
|
+
toolCallId: string;
|
|
17
|
+
artifactId: string;
|
|
18
|
+
};
|
|
19
|
+
approvalBeforeToolResult?: {
|
|
20
|
+
toolCallId: string;
|
|
21
|
+
};
|
|
22
|
+
recoveryAfterFailedTool?: {
|
|
23
|
+
toolCallId: string;
|
|
24
|
+
};
|
|
25
|
+
childRunCompleted?: {
|
|
26
|
+
parentAgentRunId: string;
|
|
27
|
+
childAgentRunId: string;
|
|
28
|
+
};
|
|
29
|
+
finalEvidenceCoverage?: true;
|
|
30
|
+
}
|
|
31
|
+
export interface AgentTrajectoryEventSelector {
|
|
32
|
+
kind?: AgentTrajectoryEventKind;
|
|
33
|
+
phase?: AgentTrajectoryPhase;
|
|
34
|
+
type?: string;
|
|
35
|
+
status?: AgentTrajectoryEvent["status"];
|
|
36
|
+
toolName?: string;
|
|
37
|
+
source?: AgentTrajectoryEvent["source"];
|
|
38
|
+
}
|
|
39
|
+
export interface AgentTrajectoryScoreFinding {
|
|
40
|
+
ruleId: string;
|
|
41
|
+
status: AgentTrajectoryScoreStatus;
|
|
42
|
+
severity: AgentTrajectoryScoreSeverity;
|
|
43
|
+
message: string;
|
|
44
|
+
eventIds: string[];
|
|
45
|
+
evidence: AgentTrajectoryEvent["evidence"];
|
|
46
|
+
remediation: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AgentTrajectoryScoreReport {
|
|
49
|
+
schemaVersion: typeof AGENT_TRAJECTORY_SCORE_SCHEMA;
|
|
50
|
+
trajectorySchemaVersion: AgentTrajectoryReport["schemaVersion"];
|
|
51
|
+
run: AgentTrajectoryReport["run"];
|
|
52
|
+
counts: {
|
|
53
|
+
rules: number;
|
|
54
|
+
passed: number;
|
|
55
|
+
failed: number;
|
|
56
|
+
warnings: number;
|
|
57
|
+
};
|
|
58
|
+
findings: AgentTrajectoryScoreFinding[];
|
|
59
|
+
}
|
|
60
|
+
export declare function scoreAgentTrajectoryReport(report: AgentTrajectoryReport, rules: AgentTrajectoryScorerRule[]): AgentTrajectoryScoreReport;
|
|
61
|
+
//# sourceMappingURL=agent-trajectory-scorers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-trajectory-scorers.d.ts","sourceRoot":"","sources":["../../src/server/agent-trajectory-scorers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,eAAO,MAAM,6BAA6B,8CACE,CAAC;AAE7C,MAAM,MAAM,4BAA4B,GAAG,OAAO,GAAG,SAAS,CAAC;AAC/D,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,yBAAyB;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,4BAA4B,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,4BAA4B,CAAC;IACxC,WAAW,CAAC,EAAE,4BAA4B,CAAC;IAC3C,kBAAkB,CAAC,EAAE;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;KAC/B,CAAC;IACF,eAAe,CAAC,EAAE;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,wBAAwB,CAAC,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,uBAAuB,CAAC,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,iBAAiB,CAAC,EAAE;QACnB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,qBAAqB,CAAC,EAAE,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,4BAA4B;IAC5C,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAChC,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,2BAA2B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,0BAA0B,CAAC;IACnC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IAC1C,aAAa,EAAE,OAAO,6BAA6B,CAAC;IACpD,uBAAuB,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAChE,GAAG,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,2BAA2B,EAAE,CAAC;CACxC;AAsTD,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,qBAAqB,EAC7B,KAAK,EAAE,yBAAyB,EAAE,GAChC,0BAA0B,CAkB5B"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export const AGENT_TRAJECTORY_SCORE_SCHEMA = "evalops.maestro.agent-trajectory-score.v1";
|
|
2
|
+
function eventMatches(event, selector) {
|
|
3
|
+
return ((selector.kind === undefined || event.kind === selector.kind) &&
|
|
4
|
+
(selector.phase === undefined || event.phase === selector.phase) &&
|
|
5
|
+
(selector.type === undefined || event.type === selector.type) &&
|
|
6
|
+
(selector.status === undefined || event.status === selector.status) &&
|
|
7
|
+
(selector.toolName === undefined || event.toolName === selector.toolName) &&
|
|
8
|
+
(selector.source === undefined || event.source === selector.source));
|
|
9
|
+
}
|
|
10
|
+
function evidenceIds(event, kind) {
|
|
11
|
+
return event.evidence
|
|
12
|
+
.filter((anchor) => anchor.kind === kind)
|
|
13
|
+
.map((anchor) => anchor.id);
|
|
14
|
+
}
|
|
15
|
+
function eventsForTool(report, toolCallId) {
|
|
16
|
+
return report.events.filter((event) => evidenceIds(event, "tool_call").includes(toolCallId));
|
|
17
|
+
}
|
|
18
|
+
function eventReferencesId(event, kind, id) {
|
|
19
|
+
return evidenceIds(event, kind).includes(id);
|
|
20
|
+
}
|
|
21
|
+
function eventIsCompatibleWithParentRun(event, parentAgentRunId) {
|
|
22
|
+
const parentIds = evidenceIds(event, "parent_agent_run");
|
|
23
|
+
return parentIds.length === 0 || parentIds.includes(parentAgentRunId);
|
|
24
|
+
}
|
|
25
|
+
function eventReferencesChildRun(event, childAgentRunId) {
|
|
26
|
+
return (eventReferencesId(event, "child_agent_run", childAgentRunId) ||
|
|
27
|
+
eventReferencesId(event, "agent_run", childAgentRunId));
|
|
28
|
+
}
|
|
29
|
+
function eventsForChildRun(report, parentAgentRunId, childAgentRunId) {
|
|
30
|
+
return report.events.filter((event) => eventReferencesChildRun(event, childAgentRunId) &&
|
|
31
|
+
eventIsCompatibleWithParentRun(event, parentAgentRunId));
|
|
32
|
+
}
|
|
33
|
+
function mergeEvidence(events) {
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const anchors = [];
|
|
36
|
+
for (const event of events) {
|
|
37
|
+
for (const anchor of event.evidence) {
|
|
38
|
+
const key = `${anchor.kind}:${anchor.id}`;
|
|
39
|
+
if (seen.has(key))
|
|
40
|
+
continue;
|
|
41
|
+
seen.add(key);
|
|
42
|
+
anchors.push(anchor);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return anchors.sort((a, b) => {
|
|
46
|
+
const kindDelta = a.kind.localeCompare(b.kind);
|
|
47
|
+
return kindDelta === 0 ? a.id.localeCompare(b.id) : kindDelta;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function passFinding(rule, message, events = []) {
|
|
51
|
+
return {
|
|
52
|
+
ruleId: rule.id,
|
|
53
|
+
status: "pass",
|
|
54
|
+
severity: rule.severity,
|
|
55
|
+
message,
|
|
56
|
+
eventIds: events.map((event) => event.id),
|
|
57
|
+
evidence: mergeEvidence(events),
|
|
58
|
+
remediation: "No action required.",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function failFinding(rule, message, remediation, events = []) {
|
|
62
|
+
return {
|
|
63
|
+
ruleId: rule.id,
|
|
64
|
+
status: rule.severity === "warning" ? "warn" : "fail",
|
|
65
|
+
severity: rule.severity,
|
|
66
|
+
message,
|
|
67
|
+
eventIds: events.map((event) => event.id),
|
|
68
|
+
evidence: mergeEvidence(events),
|
|
69
|
+
remediation,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function terminalStatusForTool(events) {
|
|
73
|
+
const terminal = [...events]
|
|
74
|
+
.reverse()
|
|
75
|
+
.find((event) => event.type === "tool.completed" || event.type === "tool.failed");
|
|
76
|
+
if (!terminal)
|
|
77
|
+
return undefined;
|
|
78
|
+
return terminal.type === "tool.completed" ? "completed" : "failed";
|
|
79
|
+
}
|
|
80
|
+
function scoreRule(report, rule) {
|
|
81
|
+
if (rule.anyEvent) {
|
|
82
|
+
const matches = report.events.filter((event) => eventMatches(event, rule.anyEvent));
|
|
83
|
+
return matches.length > 0
|
|
84
|
+
? passFinding(rule, `Matched required event selector ${rule.id}.`, matches)
|
|
85
|
+
: failFinding(rule, `No trajectory event matched required selector ${rule.id}.`, "Add or preserve a trajectory event matching this required behavior.");
|
|
86
|
+
}
|
|
87
|
+
if (rule.forbidEvent) {
|
|
88
|
+
const matches = report.events.filter((event) => eventMatches(event, rule.forbidEvent));
|
|
89
|
+
return matches.length === 0
|
|
90
|
+
? passFinding(rule, `No forbidden event matched selector ${rule.id}.`)
|
|
91
|
+
: failFinding(rule, `Found ${matches.length} forbidden trajectory event(s).`, "Remove the forbidden action or update the scenario policy if it is intentionally allowed.", matches);
|
|
92
|
+
}
|
|
93
|
+
if (rule.toolTerminalStatus) {
|
|
94
|
+
const events = eventsForTool(report, rule.toolTerminalStatus.toolCallId);
|
|
95
|
+
const observed = terminalStatusForTool(events);
|
|
96
|
+
return observed === rule.toolTerminalStatus.status
|
|
97
|
+
? passFinding(rule, `Tool ${rule.toolTerminalStatus.toolCallId} reached ${observed}.`, events)
|
|
98
|
+
: failFinding(rule, `Tool ${rule.toolTerminalStatus.toolCallId} reached ${observed ?? "no terminal status"}; expected ${rule.toolTerminalStatus.status}.`, "Preserve the expected terminal tool outcome or update the scenario expectation.", events);
|
|
99
|
+
}
|
|
100
|
+
if (rule.requireArtifact) {
|
|
101
|
+
const events = eventsForTool(report, rule.requireArtifact.toolCallId);
|
|
102
|
+
const matches = events.filter((event) => evidenceIds(event, "artifact").includes(rule.requireArtifact?.artifactId ?? ""));
|
|
103
|
+
return matches.length > 0
|
|
104
|
+
? passFinding(rule, `Tool ${rule.requireArtifact.toolCallId} produced required artifact ${rule.requireArtifact.artifactId}.`, matches)
|
|
105
|
+
: failFinding(rule, `Tool ${rule.requireArtifact.toolCallId} did not produce required artifact ${rule.requireArtifact.artifactId}.`, "Ensure the run links the required artifact before completion.", events);
|
|
106
|
+
}
|
|
107
|
+
if (rule.approvalBeforeToolResult) {
|
|
108
|
+
const events = eventsForTool(report, rule.approvalBeforeToolResult.toolCallId);
|
|
109
|
+
const approval = events.find((event) => event.type === "wait.pending" &&
|
|
110
|
+
evidenceIds(event, "approval_request").length > 0);
|
|
111
|
+
const result = events.find((event) => event.type === "tool.completed" || event.type === "tool.failed");
|
|
112
|
+
return approval && result && approval.sequence < result.sequence
|
|
113
|
+
? passFinding(rule, `Approval wait preceded tool result for ${rule.approvalBeforeToolResult.toolCallId}.`, [approval, result])
|
|
114
|
+
: failFinding(rule, `Tool ${rule.approvalBeforeToolResult.toolCallId} did not show approval evidence before terminal result.`, "Emit approval wait evidence before resuming or failing the governed tool call.", events);
|
|
115
|
+
}
|
|
116
|
+
if (rule.recoveryAfterFailedTool) {
|
|
117
|
+
const events = eventsForTool(report, rule.recoveryAfterFailedTool.toolCallId);
|
|
118
|
+
const failed = events.find((event) => event.type === "tool.failed");
|
|
119
|
+
const recovery = events.find((event) => event.phase === "recover" &&
|
|
120
|
+
failed !== undefined &&
|
|
121
|
+
event.sequence > failed.sequence);
|
|
122
|
+
return failed && recovery
|
|
123
|
+
? passFinding(rule, `Recovery followed failed tool ${rule.recoveryAfterFailedTool.toolCallId}.`, [failed, recovery])
|
|
124
|
+
: failFinding(rule, `No recovery event followed failed tool ${rule.recoveryAfterFailedTool.toolCallId}.`, "Emit a recovery-phase event after the failed tool result or mark the scenario as non-recoverable.", events);
|
|
125
|
+
}
|
|
126
|
+
if (rule.childRunCompleted) {
|
|
127
|
+
const events = eventsForChildRun(report, rule.childRunCompleted.parentAgentRunId, rule.childRunCompleted.childAgentRunId);
|
|
128
|
+
const started = events.find((event) => event.type === "agent.run.started");
|
|
129
|
+
const completed = events.find((event) => event.type === "agent.run.completed");
|
|
130
|
+
return started && completed && started.sequence < completed.sequence
|
|
131
|
+
? passFinding(rule, `Child agent run ${rule.childRunCompleted.childAgentRunId} completed under parent ${rule.childRunCompleted.parentAgentRunId}.`, [started, completed])
|
|
132
|
+
: failFinding(rule, `Child agent run ${rule.childRunCompleted.childAgentRunId} did not complete under parent ${rule.childRunCompleted.parentAgentRunId}.`, "Preserve child-run start and completion events with agent_run evidence, and include parent_agent_run/child_agent_run anchors when the timeline source provides them.", events);
|
|
133
|
+
}
|
|
134
|
+
if (rule.finalEvidenceCoverage) {
|
|
135
|
+
const finalEvent = report.events.at(-1);
|
|
136
|
+
if (finalEvent?.evidence.some(Boolean)) {
|
|
137
|
+
return passFinding(rule, "Final trajectory event has evidence anchors.", [
|
|
138
|
+
finalEvent,
|
|
139
|
+
]);
|
|
140
|
+
}
|
|
141
|
+
return failFinding(rule, "Final trajectory event is missing evidence anchors.", "Keep a timeline anchor on the final answer or terminal runtime event.", finalEvent ? [finalEvent] : []);
|
|
142
|
+
}
|
|
143
|
+
return failFinding(rule, `Rule ${rule.id} has no supported deterministic predicate.`, "Use one of the supported scorer predicates.");
|
|
144
|
+
}
|
|
145
|
+
export function scoreAgentTrajectoryReport(report, rules) {
|
|
146
|
+
const findings = rules.map((rule) => scoreRule(report, rule));
|
|
147
|
+
const failed = findings.filter((finding) => finding.status === "fail").length;
|
|
148
|
+
const warnings = findings.filter((finding) => finding.status === "warn").length;
|
|
149
|
+
return {
|
|
150
|
+
schemaVersion: AGENT_TRAJECTORY_SCORE_SCHEMA,
|
|
151
|
+
trajectorySchemaVersion: report.schemaVersion,
|
|
152
|
+
run: report.run,
|
|
153
|
+
counts: {
|
|
154
|
+
rules: rules.length,
|
|
155
|
+
passed: findings.filter((finding) => finding.status === "pass").length,
|
|
156
|
+
failed,
|
|
157
|
+
warnings,
|
|
158
|
+
},
|
|
159
|
+
findings,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=agent-trajectory-scorers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-trajectory-scorers.js","sourceRoot":"","sources":["../../src/server/agent-trajectory-scorers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAgentTrajectoryEvent,\n\tAgentTrajectoryEventKind,\n\tAgentTrajectoryPhase,\n\tAgentTrajectoryReport,\n} from \"./agent-trajectory.js\";\n\nexport const AGENT_TRAJECTORY_SCORE_SCHEMA =\n\t\"evalops.maestro.agent-trajectory-score.v1\";\n\nexport type AgentTrajectoryScoreSeverity = \"error\" | \"warning\";\nexport type AgentTrajectoryScoreStatus = \"pass\" | \"fail\" | \"warn\";\n\nexport interface AgentTrajectoryScorerRule {\n\tid: string;\n\tseverity: AgentTrajectoryScoreSeverity;\n\tdescription: string;\n\tanyEvent?: AgentTrajectoryEventSelector;\n\tforbidEvent?: AgentTrajectoryEventSelector;\n\ttoolTerminalStatus?: {\n\t\ttoolCallId: string;\n\t\tstatus: \"completed\" | \"failed\";\n\t};\n\trequireArtifact?: {\n\t\ttoolCallId: string;\n\t\tartifactId: string;\n\t};\n\tapprovalBeforeToolResult?: {\n\t\ttoolCallId: string;\n\t};\n\trecoveryAfterFailedTool?: {\n\t\ttoolCallId: string;\n\t};\n\tchildRunCompleted?: {\n\t\tparentAgentRunId: string;\n\t\tchildAgentRunId: string;\n\t};\n\tfinalEvidenceCoverage?: true;\n}\n\nexport interface AgentTrajectoryEventSelector {\n\tkind?: AgentTrajectoryEventKind;\n\tphase?: AgentTrajectoryPhase;\n\ttype?: string;\n\tstatus?: AgentTrajectoryEvent[\"status\"];\n\ttoolName?: string;\n\tsource?: AgentTrajectoryEvent[\"source\"];\n}\n\nexport interface AgentTrajectoryScoreFinding {\n\truleId: string;\n\tstatus: AgentTrajectoryScoreStatus;\n\tseverity: AgentTrajectoryScoreSeverity;\n\tmessage: string;\n\teventIds: string[];\n\tevidence: AgentTrajectoryEvent[\"evidence\"];\n\tremediation: string;\n}\n\nexport interface AgentTrajectoryScoreReport {\n\tschemaVersion: typeof AGENT_TRAJECTORY_SCORE_SCHEMA;\n\ttrajectorySchemaVersion: AgentTrajectoryReport[\"schemaVersion\"];\n\trun: AgentTrajectoryReport[\"run\"];\n\tcounts: {\n\t\trules: number;\n\t\tpassed: number;\n\t\tfailed: number;\n\t\twarnings: number;\n\t};\n\tfindings: AgentTrajectoryScoreFinding[];\n}\n\nfunction eventMatches(\n\tevent: AgentTrajectoryEvent,\n\tselector: AgentTrajectoryEventSelector,\n): boolean {\n\treturn (\n\t\t(selector.kind === undefined || event.kind === selector.kind) &&\n\t\t(selector.phase === undefined || event.phase === selector.phase) &&\n\t\t(selector.type === undefined || event.type === selector.type) &&\n\t\t(selector.status === undefined || event.status === selector.status) &&\n\t\t(selector.toolName === undefined || event.toolName === selector.toolName) &&\n\t\t(selector.source === undefined || event.source === selector.source)\n\t);\n}\n\nfunction evidenceIds(\n\tevent: AgentTrajectoryEvent,\n\tkind: AgentTrajectoryEvent[\"evidence\"][number][\"kind\"],\n): string[] {\n\treturn event.evidence\n\t\t.filter((anchor) => anchor.kind === kind)\n\t\t.map((anchor) => anchor.id);\n}\n\nfunction eventsForTool(\n\treport: AgentTrajectoryReport,\n\ttoolCallId: string,\n): AgentTrajectoryEvent[] {\n\treturn report.events.filter((event) =>\n\t\tevidenceIds(event, \"tool_call\").includes(toolCallId),\n\t);\n}\n\nfunction eventReferencesId(\n\tevent: AgentTrajectoryEvent,\n\tkind: AgentTrajectoryEvent[\"evidence\"][number][\"kind\"],\n\tid: string,\n): boolean {\n\treturn evidenceIds(event, kind).includes(id);\n}\n\nfunction eventIsCompatibleWithParentRun(\n\tevent: AgentTrajectoryEvent,\n\tparentAgentRunId: string,\n): boolean {\n\tconst parentIds = evidenceIds(event, \"parent_agent_run\");\n\treturn parentIds.length === 0 || parentIds.includes(parentAgentRunId);\n}\n\nfunction eventReferencesChildRun(\n\tevent: AgentTrajectoryEvent,\n\tchildAgentRunId: string,\n): boolean {\n\treturn (\n\t\teventReferencesId(event, \"child_agent_run\", childAgentRunId) ||\n\t\teventReferencesId(event, \"agent_run\", childAgentRunId)\n\t);\n}\n\nfunction eventsForChildRun(\n\treport: AgentTrajectoryReport,\n\tparentAgentRunId: string,\n\tchildAgentRunId: string,\n): AgentTrajectoryEvent[] {\n\treturn report.events.filter(\n\t\t(event) =>\n\t\t\teventReferencesChildRun(event, childAgentRunId) &&\n\t\t\teventIsCompatibleWithParentRun(event, parentAgentRunId),\n\t);\n}\n\nfunction mergeEvidence(\n\tevents: AgentTrajectoryEvent[],\n): AgentTrajectoryEvent[\"evidence\"] {\n\tconst seen = new Set<string>();\n\tconst anchors: AgentTrajectoryEvent[\"evidence\"] = [];\n\tfor (const event of events) {\n\t\tfor (const anchor of event.evidence) {\n\t\t\tconst key = `${anchor.kind}:${anchor.id}`;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tanchors.push(anchor);\n\t\t}\n\t}\n\treturn anchors.sort((a, b) => {\n\t\tconst kindDelta = a.kind.localeCompare(b.kind);\n\t\treturn kindDelta === 0 ? a.id.localeCompare(b.id) : kindDelta;\n\t});\n}\n\nfunction passFinding(\n\trule: AgentTrajectoryScorerRule,\n\tmessage: string,\n\tevents: AgentTrajectoryEvent[] = [],\n): AgentTrajectoryScoreFinding {\n\treturn {\n\t\truleId: rule.id,\n\t\tstatus: \"pass\",\n\t\tseverity: rule.severity,\n\t\tmessage,\n\t\teventIds: events.map((event) => event.id),\n\t\tevidence: mergeEvidence(events),\n\t\tremediation: \"No action required.\",\n\t};\n}\n\nfunction failFinding(\n\trule: AgentTrajectoryScorerRule,\n\tmessage: string,\n\tremediation: string,\n\tevents: AgentTrajectoryEvent[] = [],\n): AgentTrajectoryScoreFinding {\n\treturn {\n\t\truleId: rule.id,\n\t\tstatus: rule.severity === \"warning\" ? \"warn\" : \"fail\",\n\t\tseverity: rule.severity,\n\t\tmessage,\n\t\teventIds: events.map((event) => event.id),\n\t\tevidence: mergeEvidence(events),\n\t\tremediation,\n\t};\n}\n\nfunction terminalStatusForTool(\n\tevents: AgentTrajectoryEvent[],\n): \"completed\" | \"failed\" | undefined {\n\tconst terminal = [...events]\n\t\t.reverse()\n\t\t.find(\n\t\t\t(event) =>\n\t\t\t\tevent.type === \"tool.completed\" || event.type === \"tool.failed\",\n\t\t);\n\tif (!terminal) return undefined;\n\treturn terminal.type === \"tool.completed\" ? \"completed\" : \"failed\";\n}\n\nfunction scoreRule(\n\treport: AgentTrajectoryReport,\n\trule: AgentTrajectoryScorerRule,\n): AgentTrajectoryScoreFinding {\n\tif (rule.anyEvent) {\n\t\tconst matches = report.events.filter((event) =>\n\t\t\teventMatches(event, rule.anyEvent as AgentTrajectoryEventSelector),\n\t\t);\n\t\treturn matches.length > 0\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Matched required event selector ${rule.id}.`,\n\t\t\t\t\tmatches,\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`No trajectory event matched required selector ${rule.id}.`,\n\t\t\t\t\t\"Add or preserve a trajectory event matching this required behavior.\",\n\t\t\t\t);\n\t}\n\n\tif (rule.forbidEvent) {\n\t\tconst matches = report.events.filter((event) =>\n\t\t\teventMatches(event, rule.forbidEvent as AgentTrajectoryEventSelector),\n\t\t);\n\t\treturn matches.length === 0\n\t\t\t? passFinding(rule, `No forbidden event matched selector ${rule.id}.`)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Found ${matches.length} forbidden trajectory event(s).`,\n\t\t\t\t\t\"Remove the forbidden action or update the scenario policy if it is intentionally allowed.\",\n\t\t\t\t\tmatches,\n\t\t\t\t);\n\t}\n\n\tif (rule.toolTerminalStatus) {\n\t\tconst events = eventsForTool(report, rule.toolTerminalStatus.toolCallId);\n\t\tconst observed = terminalStatusForTool(events);\n\t\treturn observed === rule.toolTerminalStatus.status\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Tool ${rule.toolTerminalStatus.toolCallId} reached ${observed}.`,\n\t\t\t\t\tevents,\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Tool ${rule.toolTerminalStatus.toolCallId} reached ${observed ?? \"no terminal status\"}; expected ${rule.toolTerminalStatus.status}.`,\n\t\t\t\t\t\"Preserve the expected terminal tool outcome or update the scenario expectation.\",\n\t\t\t\t\tevents,\n\t\t\t\t);\n\t}\n\n\tif (rule.requireArtifact) {\n\t\tconst events = eventsForTool(report, rule.requireArtifact.toolCallId);\n\t\tconst matches = events.filter((event) =>\n\t\t\tevidenceIds(event, \"artifact\").includes(\n\t\t\t\trule.requireArtifact?.artifactId ?? \"\",\n\t\t\t),\n\t\t);\n\t\treturn matches.length > 0\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Tool ${rule.requireArtifact.toolCallId} produced required artifact ${rule.requireArtifact.artifactId}.`,\n\t\t\t\t\tmatches,\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Tool ${rule.requireArtifact.toolCallId} did not produce required artifact ${rule.requireArtifact.artifactId}.`,\n\t\t\t\t\t\"Ensure the run links the required artifact before completion.\",\n\t\t\t\t\tevents,\n\t\t\t\t);\n\t}\n\n\tif (rule.approvalBeforeToolResult) {\n\t\tconst events = eventsForTool(\n\t\t\treport,\n\t\t\trule.approvalBeforeToolResult.toolCallId,\n\t\t);\n\t\tconst approval = events.find(\n\t\t\t(event) =>\n\t\t\t\tevent.type === \"wait.pending\" &&\n\t\t\t\tevidenceIds(event, \"approval_request\").length > 0,\n\t\t);\n\t\tconst result = events.find(\n\t\t\t(event) =>\n\t\t\t\tevent.type === \"tool.completed\" || event.type === \"tool.failed\",\n\t\t);\n\t\treturn approval && result && approval.sequence < result.sequence\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Approval wait preceded tool result for ${rule.approvalBeforeToolResult.toolCallId}.`,\n\t\t\t\t\t[approval, result],\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Tool ${rule.approvalBeforeToolResult.toolCallId} did not show approval evidence before terminal result.`,\n\t\t\t\t\t\"Emit approval wait evidence before resuming or failing the governed tool call.\",\n\t\t\t\t\tevents,\n\t\t\t\t);\n\t}\n\n\tif (rule.recoveryAfterFailedTool) {\n\t\tconst events = eventsForTool(\n\t\t\treport,\n\t\t\trule.recoveryAfterFailedTool.toolCallId,\n\t\t);\n\t\tconst failed = events.find((event) => event.type === \"tool.failed\");\n\t\tconst recovery = events.find(\n\t\t\t(event) =>\n\t\t\t\tevent.phase === \"recover\" &&\n\t\t\t\tfailed !== undefined &&\n\t\t\t\tevent.sequence > failed.sequence,\n\t\t);\n\t\treturn failed && recovery\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Recovery followed failed tool ${rule.recoveryAfterFailedTool.toolCallId}.`,\n\t\t\t\t\t[failed, recovery],\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`No recovery event followed failed tool ${rule.recoveryAfterFailedTool.toolCallId}.`,\n\t\t\t\t\t\"Emit a recovery-phase event after the failed tool result or mark the scenario as non-recoverable.\",\n\t\t\t\t\tevents,\n\t\t\t\t);\n\t}\n\n\tif (rule.childRunCompleted) {\n\t\tconst events = eventsForChildRun(\n\t\t\treport,\n\t\t\trule.childRunCompleted.parentAgentRunId,\n\t\t\trule.childRunCompleted.childAgentRunId,\n\t\t);\n\t\tconst started = events.find((event) => event.type === \"agent.run.started\");\n\t\tconst completed = events.find(\n\t\t\t(event) => event.type === \"agent.run.completed\",\n\t\t);\n\t\treturn started && completed && started.sequence < completed.sequence\n\t\t\t? passFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Child agent run ${rule.childRunCompleted.childAgentRunId} completed under parent ${rule.childRunCompleted.parentAgentRunId}.`,\n\t\t\t\t\t[started, completed],\n\t\t\t\t)\n\t\t\t: failFinding(\n\t\t\t\t\trule,\n\t\t\t\t\t`Child agent run ${rule.childRunCompleted.childAgentRunId} did not complete under parent ${rule.childRunCompleted.parentAgentRunId}.`,\n\t\t\t\t\t\"Preserve child-run start and completion events with agent_run evidence, and include parent_agent_run/child_agent_run anchors when the timeline source provides them.\",\n\t\t\t\t\tevents,\n\t\t\t\t);\n\t}\n\n\tif (rule.finalEvidenceCoverage) {\n\t\tconst finalEvent = report.events.at(-1);\n\t\tif (finalEvent?.evidence.some(Boolean)) {\n\t\t\treturn passFinding(rule, \"Final trajectory event has evidence anchors.\", [\n\t\t\t\tfinalEvent,\n\t\t\t]);\n\t\t}\n\t\treturn failFinding(\n\t\t\trule,\n\t\t\t\"Final trajectory event is missing evidence anchors.\",\n\t\t\t\"Keep a timeline anchor on the final answer or terminal runtime event.\",\n\t\t\tfinalEvent ? [finalEvent] : [],\n\t\t);\n\t}\n\n\treturn failFinding(\n\t\trule,\n\t\t`Rule ${rule.id} has no supported deterministic predicate.`,\n\t\t\"Use one of the supported scorer predicates.\",\n\t);\n}\n\nexport function scoreAgentTrajectoryReport(\n\treport: AgentTrajectoryReport,\n\trules: AgentTrajectoryScorerRule[],\n): AgentTrajectoryScoreReport {\n\tconst findings = rules.map((rule) => scoreRule(report, rule));\n\tconst failed = findings.filter((finding) => finding.status === \"fail\").length;\n\tconst warnings = findings.filter(\n\t\t(finding) => finding.status === \"warn\",\n\t).length;\n\treturn {\n\t\tschemaVersion: AGENT_TRAJECTORY_SCORE_SCHEMA,\n\t\ttrajectorySchemaVersion: report.schemaVersion,\n\t\trun: report.run,\n\t\tcounts: {\n\t\t\trules: rules.length,\n\t\t\tpassed: findings.filter((finding) => finding.status === \"pass\").length,\n\t\t\tfailed,\n\t\t\twarnings,\n\t\t},\n\t\tfindings,\n\t};\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentTrajectoryReport } from "./agent-trajectory.js";
|
|
2
|
+
export interface AgentTrajectoryValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
failures: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function validateAgentTrajectoryReport(report: AgentTrajectoryReport): AgentTrajectoryValidationResult;
|
|
7
|
+
//# sourceMappingURL=agent-trajectory-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-trajectory-validation.d.ts","sourceRoot":"","sources":["../../src/server/agent-trajectory-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,qBAAqB,EACrB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,+BAA+B;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB;AAyID,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,qBAAqB,GAC3B,+BAA+B,CASjC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
function pushFailure(failures, message) {
|
|
2
|
+
failures.push(message);
|
|
3
|
+
}
|
|
4
|
+
function hasEvidenceKind(event, kind) {
|
|
5
|
+
return event.evidence.some((anchor) => anchor.kind === kind);
|
|
6
|
+
}
|
|
7
|
+
function evidenceIds(event, kind) {
|
|
8
|
+
return event.evidence
|
|
9
|
+
.filter((anchor) => anchor.kind === kind)
|
|
10
|
+
.map((anchor) => anchor.id);
|
|
11
|
+
}
|
|
12
|
+
function validateCounts(report, failures) {
|
|
13
|
+
if (report.counts.events !== report.events.length) {
|
|
14
|
+
pushFailure(failures, `counts.events=${report.counts.events} does not match events.length=${report.events.length}`);
|
|
15
|
+
}
|
|
16
|
+
let evidenceAnchors = 0;
|
|
17
|
+
const byKind = {};
|
|
18
|
+
const byPhase = {};
|
|
19
|
+
const byStatus = {};
|
|
20
|
+
for (const event of report.events) {
|
|
21
|
+
byKind[event.kind] = (byKind[event.kind] ?? 0) + 1;
|
|
22
|
+
byPhase[event.phase] = (byPhase[event.phase] ?? 0) + 1;
|
|
23
|
+
byStatus[event.status] = (byStatus[event.status] ?? 0) + 1;
|
|
24
|
+
evidenceAnchors += event.evidence.length;
|
|
25
|
+
}
|
|
26
|
+
if (report.counts.evidenceAnchors !== evidenceAnchors) {
|
|
27
|
+
pushFailure(failures, `counts.evidenceAnchors=${report.counts.evidenceAnchors} does not match evidence anchors=${evidenceAnchors}`);
|
|
28
|
+
}
|
|
29
|
+
for (const [label, expected] of [
|
|
30
|
+
["byKind", byKind],
|
|
31
|
+
["byPhase", byPhase],
|
|
32
|
+
["byStatus", byStatus],
|
|
33
|
+
]) {
|
|
34
|
+
const actual = report.counts[label];
|
|
35
|
+
for (const key of new Set([
|
|
36
|
+
...Object.keys(actual),
|
|
37
|
+
...Object.keys(expected),
|
|
38
|
+
])) {
|
|
39
|
+
if ((actual[key] ?? 0) !== (expected[key] ?? 0)) {
|
|
40
|
+
pushFailure(failures, `counts.${label}.${key}=${actual[key] ?? 0} does not match events=${expected[key] ?? 0}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function validateEventShape(report, failures) {
|
|
46
|
+
const ids = new Set();
|
|
47
|
+
for (const [index, event] of report.events.entries()) {
|
|
48
|
+
const expectedSequence = index + 1;
|
|
49
|
+
if (event.sequence !== expectedSequence) {
|
|
50
|
+
pushFailure(failures, `${event.id} has sequence=${event.sequence}; expected ${expectedSequence}`);
|
|
51
|
+
}
|
|
52
|
+
if (ids.has(event.id)) {
|
|
53
|
+
pushFailure(failures, `duplicate event id: ${event.id}`);
|
|
54
|
+
}
|
|
55
|
+
ids.add(event.id);
|
|
56
|
+
if (!hasEvidenceKind(event, "timeline_item")) {
|
|
57
|
+
pushFailure(failures, `${event.id} is missing timeline_item evidence`);
|
|
58
|
+
}
|
|
59
|
+
if ((event.type === "tool.completed" || event.type === "tool.failed") &&
|
|
60
|
+
!hasEvidenceKind(event, "tool_call")) {
|
|
61
|
+
pushFailure(failures, `${event.id} is missing tool_call evidence`);
|
|
62
|
+
}
|
|
63
|
+
if (event.summary &&
|
|
64
|
+
/sk-[A-Za-z0-9_-]{8,}|BEGIN [A-Z ]+PRIVATE KEY/u.test(event.summary)) {
|
|
65
|
+
pushFailure(failures, `${event.id} summary appears to contain a secret`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function validateToolOrdering(report, failures) {
|
|
70
|
+
const requested = new Set();
|
|
71
|
+
for (const event of report.events) {
|
|
72
|
+
if (event.type === "tool.requested") {
|
|
73
|
+
for (const id of evidenceIds(event, "tool_call")) {
|
|
74
|
+
requested.add(id);
|
|
75
|
+
}
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (event.type !== "tool.completed" &&
|
|
79
|
+
event.type !== "tool.failed" &&
|
|
80
|
+
event.type !== "file.changed" &&
|
|
81
|
+
event.type !== "diagnostic.delta") {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
for (const id of evidenceIds(event, "tool_call")) {
|
|
85
|
+
if (!requested.has(id)) {
|
|
86
|
+
pushFailure(failures, `${event.id} references tool_call ${id} before a matching tool.requested event`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function validateAgentTrajectoryReport(report) {
|
|
92
|
+
const failures = [];
|
|
93
|
+
validateCounts(report, failures);
|
|
94
|
+
validateEventShape(report, failures);
|
|
95
|
+
validateToolOrdering(report, failures);
|
|
96
|
+
return {
|
|
97
|
+
valid: failures.length === 0,
|
|
98
|
+
failures,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=agent-trajectory-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-trajectory-validation.js","sourceRoot":"","sources":["../../src/server/agent-trajectory-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tAgentTrajectoryEvent,\n\tAgentTrajectoryReport,\n} from \"./agent-trajectory.js\";\n\nexport interface AgentTrajectoryValidationResult {\n\tvalid: boolean;\n\tfailures: string[];\n}\n\nfunction pushFailure(failures: string[], message: string): void {\n\tfailures.push(message);\n}\n\nfunction hasEvidenceKind(\n\tevent: AgentTrajectoryEvent,\n\tkind: AgentTrajectoryEvent[\"evidence\"][number][\"kind\"],\n): boolean {\n\treturn event.evidence.some((anchor) => anchor.kind === kind);\n}\n\nfunction evidenceIds(\n\tevent: AgentTrajectoryEvent,\n\tkind: AgentTrajectoryEvent[\"evidence\"][number][\"kind\"],\n): string[] {\n\treturn event.evidence\n\t\t.filter((anchor) => anchor.kind === kind)\n\t\t.map((anchor) => anchor.id);\n}\n\nfunction validateCounts(\n\treport: AgentTrajectoryReport,\n\tfailures: string[],\n): void {\n\tif (report.counts.events !== report.events.length) {\n\t\tpushFailure(\n\t\t\tfailures,\n\t\t\t`counts.events=${report.counts.events} does not match events.length=${report.events.length}`,\n\t\t);\n\t}\n\n\tlet evidenceAnchors = 0;\n\tconst byKind: Record<string, number> = {};\n\tconst byPhase: Record<string, number> = {};\n\tconst byStatus: Record<string, number> = {};\n\tfor (const event of report.events) {\n\t\tbyKind[event.kind] = (byKind[event.kind] ?? 0) + 1;\n\t\tbyPhase[event.phase] = (byPhase[event.phase] ?? 0) + 1;\n\t\tbyStatus[event.status] = (byStatus[event.status] ?? 0) + 1;\n\t\tevidenceAnchors += event.evidence.length;\n\t}\n\n\tif (report.counts.evidenceAnchors !== evidenceAnchors) {\n\t\tpushFailure(\n\t\t\tfailures,\n\t\t\t`counts.evidenceAnchors=${report.counts.evidenceAnchors} does not match evidence anchors=${evidenceAnchors}`,\n\t\t);\n\t}\n\n\tfor (const [label, expected] of [\n\t\t[\"byKind\", byKind],\n\t\t[\"byPhase\", byPhase],\n\t\t[\"byStatus\", byStatus],\n\t] as const) {\n\t\tconst actual = report.counts[label];\n\t\tfor (const key of new Set([\n\t\t\t...Object.keys(actual),\n\t\t\t...Object.keys(expected),\n\t\t])) {\n\t\t\tif ((actual[key] ?? 0) !== (expected[key] ?? 0)) {\n\t\t\t\tpushFailure(\n\t\t\t\t\tfailures,\n\t\t\t\t\t`counts.${label}.${key}=${actual[key] ?? 0} does not match events=${expected[key] ?? 0}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction validateEventShape(\n\treport: AgentTrajectoryReport,\n\tfailures: string[],\n): void {\n\tconst ids = new Set<string>();\n\tfor (const [index, event] of report.events.entries()) {\n\t\tconst expectedSequence = index + 1;\n\t\tif (event.sequence !== expectedSequence) {\n\t\t\tpushFailure(\n\t\t\t\tfailures,\n\t\t\t\t`${event.id} has sequence=${event.sequence}; expected ${expectedSequence}`,\n\t\t\t);\n\t\t}\n\t\tif (ids.has(event.id)) {\n\t\t\tpushFailure(failures, `duplicate event id: ${event.id}`);\n\t\t}\n\t\tids.add(event.id);\n\t\tif (!hasEvidenceKind(event, \"timeline_item\")) {\n\t\t\tpushFailure(failures, `${event.id} is missing timeline_item evidence`);\n\t\t}\n\t\tif (\n\t\t\t(event.type === \"tool.completed\" || event.type === \"tool.failed\") &&\n\t\t\t!hasEvidenceKind(event, \"tool_call\")\n\t\t) {\n\t\t\tpushFailure(failures, `${event.id} is missing tool_call evidence`);\n\t\t}\n\t\tif (\n\t\t\tevent.summary &&\n\t\t\t/sk-[A-Za-z0-9_-]{8,}|BEGIN [A-Z ]+PRIVATE KEY/u.test(event.summary)\n\t\t) {\n\t\t\tpushFailure(failures, `${event.id} summary appears to contain a secret`);\n\t\t}\n\t}\n}\n\nfunction validateToolOrdering(\n\treport: AgentTrajectoryReport,\n\tfailures: string[],\n): void {\n\tconst requested = new Set<string>();\n\tfor (const event of report.events) {\n\t\tif (event.type === \"tool.requested\") {\n\t\t\tfor (const id of evidenceIds(event, \"tool_call\")) {\n\t\t\t\trequested.add(id);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\tevent.type !== \"tool.completed\" &&\n\t\t\tevent.type !== \"tool.failed\" &&\n\t\t\tevent.type !== \"file.changed\" &&\n\t\t\tevent.type !== \"diagnostic.delta\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const id of evidenceIds(event, \"tool_call\")) {\n\t\t\tif (!requested.has(id)) {\n\t\t\t\tpushFailure(\n\t\t\t\t\tfailures,\n\t\t\t\t\t`${event.id} references tool_call ${id} before a matching tool.requested event`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function validateAgentTrajectoryReport(\n\treport: AgentTrajectoryReport,\n): AgentTrajectoryValidationResult {\n\tconst failures: string[] = [];\n\tvalidateCounts(report, failures);\n\tvalidateEventShape(report, failures);\n\tvalidateToolOrdering(report, failures);\n\treturn {\n\t\tvalid: failures.length === 0,\n\t\tfailures,\n\t};\n}\n"]}
|