@evalops/maestro 0.10.46 → 0.10.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/agent/providers/openai-codex-session.js +1 -1
- package/dist/agent/providers/openai-codex-session.js.map +1 -1
- package/dist/app-server/in-process-client.d.ts +2 -2
- package/dist/app-server/in-process-client.js.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -1
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/app-server/sandbox-check-api.d.ts +21 -0
- package/dist/app-server/{sandbox-proof-api.d.ts.map → sandbox-check-api.d.ts.map} +1 -1
- package/dist/app-server/{sandbox-proof-api.js → sandbox-check-api.js} +18 -18
- package/dist/app-server/{sandbox-proof-api.js.map → sandbox-check-api.js.map} +1 -1
- package/dist/app-server/session-api.d.ts +5 -5
- package/dist/app-server/session-api.js +18 -18
- package/dist/app-server/session-api.js.map +1 -1
- package/dist/audit/logger.d.ts +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/codex.js +30 -3
- package/dist/cli/commands/codex.js.map +1 -1
- package/dist/cli/commands/update.d.ts +12 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +148 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +4 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli-tui/auth-state.d.ts +7 -0
- package/dist/cli-tui/auth-state.d.ts.map +1 -0
- package/dist/cli-tui/auth-state.js +46 -0
- package/dist/cli-tui/auth-state.js.map +1 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-catalog.js +8 -3
- package/dist/cli-tui/commands/command-catalog.js.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.d.ts +2 -5
- package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts +6 -5
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -1
- package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +1 -1
- package/dist/cli-tui/commands/subcommands/ui-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -1
- package/dist/cli-tui/footer.d.ts.map +1 -1
- package/dist/cli-tui/footer.js +1 -1
- package/dist/cli-tui/footer.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +24 -11
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts +1 -0
- package/dist/cli-tui/selectors/oauth-selector-view.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js +1 -1
- package/dist/cli-tui/selectors/oauth-selector-view.js.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts +2 -1
- package/dist/cli-tui/selectors/oauth-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/oauth-selector.js +25 -2
- package/dist/cli-tui/selectors/oauth-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +2 -5
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.js +5 -11
- package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
- package/dist/cli-tui/tui-renderer.d.ts +0 -4
- package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer.js +4 -29
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/ui-state.js +1 -1
- package/dist/cli-tui/ui-state.js.map +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
- package/dist/cli-tui/utils/footer-utils.d.ts.map +1 -1
- package/dist/cli-tui/utils/footer-utils.js.map +1 -1
- package/dist/cli.js +4800 -3779
- package/dist/cli.js.map +1 -1
- package/dist/codex/app-server-client.d.ts +16 -2
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +67 -7
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/auth.d.ts +4 -0
- package/dist/codex/auth.d.ts.map +1 -0
- package/dist/codex/auth.js +103 -0
- package/dist/codex/auth.js.map +1 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/evalops/agent-bootstrap.js +2 -2
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +10 -1
- package/dist/main.js.map +1 -1
- package/dist/models/config-loader.d.ts +12 -12
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts +19 -19
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js +12 -13
- package/dist/node_modules/@evalops/contracts/dist/maestro-app-server.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts +2 -0
- package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/scenario.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/index.d.ts +1 -0
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +42 -2
- package/dist/oauth/index.js.map +1 -1
- package/dist/platform/operating-plane-client.d.ts +3 -3
- package/dist/platform/operating-plane-client.d.ts.map +1 -1
- package/dist/platform/operating-plane-client.js.map +1 -1
- package/dist/platform/operating-plane-summary.js +3 -6
- package/dist/platform/operating-plane-summary.js.map +1 -1
- package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -1
- package/dist/server/agent-trajectory-scenarios.js +29 -6
- package/dist/server/agent-trajectory-scenarios.js.map +1 -1
- package/dist/server/app-context.d.ts +2 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +44 -10
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.d.ts +2 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-identity.js +2 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +113 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/ui.d.ts.map +1 -1
- package/dist/server/handlers/ui.js +5 -5
- package/dist/server/handlers/ui.js.map +1 -1
- package/dist/server/headless-in-process-host.d.ts.map +1 -1
- package/dist/server/headless-in-process-host.js +1 -1
- package/dist/server/headless-in-process-host.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 +54 -15
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/stores/ui-store.d.ts.map +1 -1
- package/dist/server/stores/ui-store.js +8 -1
- package/dist/server/stores/ui-store.js.map +1 -1
- package/dist/tools/background/task-runtime.js +1 -1
- package/dist/tools/background/task-runtime.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/update/check.d.ts +2 -0
- package/dist/update/check.d.ts.map +1 -1
- package/dist/update/check.js +100 -41
- package/dist/update/check.js.map +1 -1
- package/dist/update/startup-refresh.d.ts +56 -0
- package/dist/update/startup-refresh.d.ts.map +1 -0
- package/dist/update/startup-refresh.js +321 -0
- package/dist/update/startup-refresh.js.map +1 -0
- package/dist/version.json +2 -2
- package/package.json +297 -296
- package/dist/app-server/sandbox-proof-api.d.ts +0 -21
|
@@ -1 +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"]}
|
|
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\"platformSlackEventIds\",\n\t\"platformTraceIds\",\n\t\"platformWorkEnvelopeIds\",\n\t\"slackThreadRefs\",\n\t\"evidenceArtifactIds\",\n] as const satisfies readonly (keyof MaestroScenarioExternalRefs)[];\n\nconst LEGACY_EXTERNAL_REF_FIELDS = [\n\t\"ensembleTranscriptIds\",\n] as const satisfies readonly string[];\n\ntype LegacyExternalRefField = (typeof LEGACY_EXTERNAL_REF_FIELDS)[number];\ntype ExternalRefField = (typeof EXTERNAL_REF_FIELDS)[number];\ntype ScenarioExternalRefsWithLegacy = MaestroScenarioExternalRefs &\n\tPartial<Record<LegacyExternalRefField, string[]>>;\n\nfunction isExternalRefField(value: string): value is ExternalRefField {\n\treturn EXTERNAL_REF_FIELDS.includes(value as ExternalRefField);\n}\n\nfunction isLegacyExternalRefField(\n\tvalue: string,\n): value is LegacyExternalRefField {\n\treturn LEGACY_EXTERNAL_REF_FIELDS.includes(value as LegacyExternalRefField);\n}\n\nfunction externalRefValues(\n\texternalRefs: ScenarioExternalRefsWithLegacy,\n\tfield: string,\n): string[] | undefined {\n\tif (isExternalRefField(field) || isLegacyExternalRefField(field)) {\n\t\treturn externalRefs[field];\n\t}\n\treturn undefined;\n}\n\nfunction allExternalRefValues(\n\texternalRefs: ScenarioExternalRefsWithLegacy,\n): string[] {\n\treturn [...EXTERNAL_REF_FIELDS, ...LEGACY_EXTERNAL_REF_FIELDS].flatMap(\n\t\t(field) => externalRefs[field] ?? [],\n\t);\n}\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\tconst externalRefs =\n\t\t\tscenario.externalRefs as ScenarioExternalRefsWithLegacy;\n\t\tlet refs = 0;\n\t\tfor (const field of [\n\t\t\t...EXTERNAL_REF_FIELDS,\n\t\t\t...LEGACY_EXTERNAL_REF_FIELDS,\n\t\t]) {\n\t\t\tconst values = 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) =>\n\t\t\t\t\ttypeof refKind !== \"string\" ||\n\t\t\t\t\t(!isExternalRefField(refKind) && !isLegacyExternalRefField(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 as\n\t\t\t\t| ScenarioExternalRefsWithLegacy\n\t\t\t\t| undefined;\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 = externalRefValues(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(allExternalRefValues(externalRefs));\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"]}
|
|
@@ -34,6 +34,8 @@ export interface HostedRunnerContext {
|
|
|
34
34
|
lastPlatformA2APush?: {
|
|
35
35
|
kind: "statusUpdate" | "artifactUpdate" | "task" | "message";
|
|
36
36
|
taskId?: string;
|
|
37
|
+
messageId?: string;
|
|
38
|
+
messageIds?: string[];
|
|
37
39
|
contextId?: string;
|
|
38
40
|
workspaceId?: string;
|
|
39
41
|
organizationId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-context.d.ts","sourceRoot":"","sources":["../../src/server/app-context.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-context.d.ts","sourceRoot":"","sources":["../../src/server/app-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-context.js","sourceRoot":"","sources":["../../src/server/app-context.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type {\n\tActionApprovalService,\n\tApprovalMode,\n} from \"../agent/action-approval.js\";\nimport type { Agent } from \"../agent/index.js\";\nimport type { ToolRetryService } from \"../agent/tool-retry.js\";\nimport type { ClientToolExecutionService } from \"../agent/transport.js\";\nimport type { PlatformToolExecutionBridge } from \"../agent/transport/tool-execution-bridge.js\";\nimport type { ThinkingLevel } from \"../agent/types.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\nimport type { AuthCredential } from \"../providers/auth.js\";\nimport type { HeadlessRuntimeService } from \"./headless-runtime-service.js\";\nimport type { HostedRunnerLeaseSnapshot } from \"./hosted-runner-lease.js\";\n\nexport interface WebServerConfig {\n\tcorsHeaders: Record<string, string>;\n\tstaticMaxAge: number;\n\tdefaultApprovalMode: ApprovalMode;\n\tdefaultProvider: string;\n\tdefaultModelId: string;\n\thostedRunner?: HostedRunnerContext;\n}\n\nexport interface HostedRunnerContext {\n\tenabled: true;\n\trunnerSessionId: string;\n\townerInstanceId?: string;\n\tworkspaceRoot: string;\n\tsnapshotRoot?: string;\n\trestoreManifestPath?: string;\n\tlistenHost?: string;\n\tlistenPort?: number;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tagentRunId?: string;\n\tagentRuntimeLeaseToken?: string;\n\ta2aMessageId?: string;\n\ta2aTaskId?: string;\n\tlastPlatformA2APush?: {\n\t\tkind: \"statusUpdate\" | \"artifactUpdate\" | \"task\" | \"message\";\n\t\ttaskId?: string;\n\t\tcontextId?: string;\n\t\tworkspaceId?: string;\n\t\torganizationId?: string;\n\t\ttenantId?: string;\n\t\tstate?: string;\n\t\tfinal?: boolean;\n\t\treceivedAt: string;\n\t\truntimeEventId?: string;\n\t\truntimeEventType?: string;\n\t\ttraceparent?: string;\n\t\ttracestate?: string;\n\t\tagentId?: string;\n\t\tactorId?: string;\n\t};\n\tagentRuntimeWorkerQueue?: string;\n\tagentRuntimeCorrelationPath?: string;\n\tattachAudience?: string;\n\tconfiguredMaestroSessionId?: string;\n\tactiveMaestroSessionId?: string;\n\truntimeLease?: HostedRunnerLeaseSnapshot;\n\tdraining?: boolean;\n\tlastDrain?: {\n\t\tstatus: string;\n\t\tmanifestPath: string;\n\t\tdrainedAt: string;\n\t\treason?: string;\n\t\trequestedBy?: string;\n\t};\n}\n\nexport interface WebServerServices {\n\tcreateAgent: (\n\t\tmodel: RegisteredModel,\n\t\tthinking: ThinkingLevel,\n\t\tapproval: ApprovalMode,\n\t\toptions?: {\n\t\t\tcwd?: string;\n\t\t\tenableClientTools?: boolean;\n\t\t\tuseClientAskUser?: boolean;\n\t\t\tincludeVscodeTools?: boolean;\n\t\t\tincludeJetBrainsTools?: boolean;\n\t\t\tincludeConductorTools?: boolean;\n\t\t\tapprovalService?: ActionApprovalService;\n\t\t\tclientToolService?: ClientToolExecutionService;\n\t\t\ttoolRetryService?: ToolRetryService;\n\t\t\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n\t\t},\n\t) => Promise<Agent>;\n\tcreateBackgroundAgent: (\n\t\tmodel: RegisteredModel,\n\t\toptions?: {\n\t\t\tcwd?: string;\n\t\t\tsystemPrompt?: string;\n\t\t},\n\t) => Promise<Agent>;\n\tgetRegisteredModel: (\n\t\tinput: string | null | undefined,\n\t) => Promise<RegisteredModel>;\n\tgetCurrentSelection: () => { provider: string; modelId: string };\n\tensureCredential: (provider: string) => Promise<AuthCredential>;\n\tsetModelSelection: (model: RegisteredModel) => void;\n\tacquireSse: () => symbol | null;\n\treleaseSse: (token: symbol | null) => void;\n\theadlessRuntimeService: HeadlessRuntimeService;\n}\n\nexport type WebServerContext = WebServerConfig & WebServerServices;\n"]}
|
|
1
|
+
{"version":3,"file":"app-context.js","sourceRoot":"","sources":["../../src/server/app-context.ts"],"names":[],"mappings":"","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type {\n\tActionApprovalService,\n\tApprovalMode,\n} from \"../agent/action-approval.js\";\nimport type { Agent } from \"../agent/index.js\";\nimport type { ToolRetryService } from \"../agent/tool-retry.js\";\nimport type { ClientToolExecutionService } from \"../agent/transport.js\";\nimport type { PlatformToolExecutionBridge } from \"../agent/transport/tool-execution-bridge.js\";\nimport type { ThinkingLevel } from \"../agent/types.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\nimport type { AuthCredential } from \"../providers/auth.js\";\nimport type { HeadlessRuntimeService } from \"./headless-runtime-service.js\";\nimport type { HostedRunnerLeaseSnapshot } from \"./hosted-runner-lease.js\";\n\nexport interface WebServerConfig {\n\tcorsHeaders: Record<string, string>;\n\tstaticMaxAge: number;\n\tdefaultApprovalMode: ApprovalMode;\n\tdefaultProvider: string;\n\tdefaultModelId: string;\n\thostedRunner?: HostedRunnerContext;\n}\n\nexport interface HostedRunnerContext {\n\tenabled: true;\n\trunnerSessionId: string;\n\townerInstanceId?: string;\n\tworkspaceRoot: string;\n\tsnapshotRoot?: string;\n\trestoreManifestPath?: string;\n\tlistenHost?: string;\n\tlistenPort?: number;\n\tworkspaceId?: string;\n\tagentId?: string;\n\tagentRunId?: string;\n\tagentRuntimeLeaseToken?: string;\n\ta2aMessageId?: string;\n\ta2aTaskId?: string;\n\tlastPlatformA2APush?: {\n\t\tkind: \"statusUpdate\" | \"artifactUpdate\" | \"task\" | \"message\";\n\t\ttaskId?: string;\n\t\tmessageId?: string;\n\t\tmessageIds?: string[];\n\t\tcontextId?: string;\n\t\tworkspaceId?: string;\n\t\torganizationId?: string;\n\t\ttenantId?: string;\n\t\tstate?: string;\n\t\tfinal?: boolean;\n\t\treceivedAt: string;\n\t\truntimeEventId?: string;\n\t\truntimeEventType?: string;\n\t\ttraceparent?: string;\n\t\ttracestate?: string;\n\t\tagentId?: string;\n\t\tactorId?: string;\n\t};\n\tagentRuntimeWorkerQueue?: string;\n\tagentRuntimeCorrelationPath?: string;\n\tattachAudience?: string;\n\tconfiguredMaestroSessionId?: string;\n\tactiveMaestroSessionId?: string;\n\truntimeLease?: HostedRunnerLeaseSnapshot;\n\tdraining?: boolean;\n\tlastDrain?: {\n\t\tstatus: string;\n\t\tmanifestPath: string;\n\t\tdrainedAt: string;\n\t\treason?: string;\n\t\trequestedBy?: string;\n\t};\n}\n\nexport interface WebServerServices {\n\tcreateAgent: (\n\t\tmodel: RegisteredModel,\n\t\tthinking: ThinkingLevel,\n\t\tapproval: ApprovalMode,\n\t\toptions?: {\n\t\t\tcwd?: string;\n\t\t\tenableClientTools?: boolean;\n\t\t\tuseClientAskUser?: boolean;\n\t\t\tincludeVscodeTools?: boolean;\n\t\t\tincludeJetBrainsTools?: boolean;\n\t\t\tincludeConductorTools?: boolean;\n\t\t\tapprovalService?: ActionApprovalService;\n\t\t\tclientToolService?: ClientToolExecutionService;\n\t\t\ttoolRetryService?: ToolRetryService;\n\t\t\tplatformToolExecutionBridge?: PlatformToolExecutionBridge | false;\n\t\t},\n\t) => Promise<Agent>;\n\tcreateBackgroundAgent: (\n\t\tmodel: RegisteredModel,\n\t\toptions?: {\n\t\t\tcwd?: string;\n\t\t\tsystemPrompt?: string;\n\t\t},\n\t) => Promise<Agent>;\n\tgetRegisteredModel: (\n\t\tinput: string | null | undefined,\n\t) => Promise<RegisteredModel>;\n\tgetCurrentSelection: () => { provider: string; modelId: string };\n\tensureCredential: (provider: string) => Promise<AuthCredential>;\n\tsetModelSelection: (model: RegisteredModel) => void;\n\tacquireSse: () => symbol | null;\n\treleaseSse: (token: symbol | null) => void;\n\theadlessRuntimeService: HeadlessRuntimeService;\n}\n\nexport type WebServerContext = WebServerConfig & WebServerServices;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless-sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/headless-sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAmBjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"headless-sessions.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/headless-sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAmBjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAgC1D,oBAAY,qBAAqB;IAChC,eAAe,sBAAsB;IACrC,qBAAqB,4BAA4B;CACjD;AAytBD,wBAAsB,2BAA2B,CAChD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,iBAgBzB;AAED,wBAAsB,8BAA8B,CACnD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,iBAazB;AAED,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAI/B;AAED,wBAAsB,8BAA8B,CACnD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBA4D/B;AAED,wBAAsB,gCAAgC,CACrD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAW/B;AAED,wBAAsB,8BAA8B,CACnD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAiB/B;AAED,wBAAsB,+BAA+B,CACpD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAqB/B;AAED,wBAAgB,2BAA2B,CAC1C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QA2E/B;AAED,wBAAsB,4BAA4B,CACjD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAuB/B"}
|
|
@@ -5,7 +5,7 @@ import { resolveExistingWorkspaceRoot } from "../../headless/workspace-root.js";
|
|
|
5
5
|
import { recordMaestroSessionRuntimeTrigger } from "../../platform/agent-runtime-client.js";
|
|
6
6
|
import { normalizeApprovalMode, resolveApprovalModeForRequest, } from "../approval-mode-store.js";
|
|
7
7
|
import { getAuthScopeKey, getAuthSubject } from "../authz.js";
|
|
8
|
-
import { loadHostedRunnerRestoreManifest } from "../headless-runtime-service.js";
|
|
8
|
+
import { HeadlessRuntimeNotReadyError, loadHostedRunnerRestoreManifest, } from "../headless-runtime-service.js";
|
|
9
9
|
import { bindHostedRunnerPlatformLease, claimHostedRunnerLease, evaluateHostedRunnerLeaseUse, } from "../hosted-runner-lease.js";
|
|
10
10
|
import { getTraceParentHeader } from "../request-context.js";
|
|
11
11
|
import { ApiError, getRequestHeader, readRequestBody, sendJson, } from "../server-utils.js";
|
|
@@ -262,6 +262,14 @@ function rethrowHeadlessMessageError(error) {
|
|
|
262
262
|
if (!(error instanceof Error)) {
|
|
263
263
|
throw error;
|
|
264
264
|
}
|
|
265
|
+
if (error instanceof HeadlessRuntimeNotReadyError) {
|
|
266
|
+
throw new ApiError(503, error.message, [
|
|
267
|
+
{
|
|
268
|
+
reason: HostedRunnerErrorType.RuntimeNotReady,
|
|
269
|
+
domain: HOSTED_RUNNER_ERROR_DOMAIN,
|
|
270
|
+
},
|
|
271
|
+
], HostedRunnerErrorType.RuntimeNotReady);
|
|
272
|
+
}
|
|
265
273
|
if (error.message === "Viewer headless connections cannot send messages") {
|
|
266
274
|
throw new ApiError(403, error.message);
|
|
267
275
|
}
|
|
@@ -282,6 +290,14 @@ function rethrowHeadlessConnectionLifecycleError(error) {
|
|
|
282
290
|
if (!(error instanceof Error)) {
|
|
283
291
|
throw error;
|
|
284
292
|
}
|
|
293
|
+
if (error instanceof HeadlessRuntimeNotReadyError) {
|
|
294
|
+
throw new ApiError(503, error.message, [
|
|
295
|
+
{
|
|
296
|
+
reason: HostedRunnerErrorType.RuntimeNotReady,
|
|
297
|
+
domain: HOSTED_RUNNER_ERROR_DOMAIN,
|
|
298
|
+
},
|
|
299
|
+
], HostedRunnerErrorType.RuntimeNotReady);
|
|
300
|
+
}
|
|
285
301
|
if (error.message === "Headless connection not found") {
|
|
286
302
|
throw new ApiError(404, error.message);
|
|
287
303
|
}
|
|
@@ -487,7 +503,16 @@ function getRuntime(req, context, sessionId) {
|
|
|
487
503
|
}
|
|
488
504
|
export async function handleHeadlessSessionCreate(req, res, context) {
|
|
489
505
|
const input = await parseAndValidateJson(req, HeadlessSessionCreateSchema);
|
|
490
|
-
|
|
506
|
+
let runtime;
|
|
507
|
+
try {
|
|
508
|
+
runtime = await ensureRuntime(req, context, input);
|
|
509
|
+
}
|
|
510
|
+
catch (error) {
|
|
511
|
+
if (error instanceof HeadlessRuntimeNotReadyError) {
|
|
512
|
+
rethrowHeadlessConnectionLifecycleError(error);
|
|
513
|
+
}
|
|
514
|
+
throw error;
|
|
515
|
+
}
|
|
491
516
|
sendJson(res, 200, runtime.getSnapshot(), context.corsHeaders, req);
|
|
492
517
|
}
|
|
493
518
|
export async function handleHeadlessConnectionCreate(req, res, context) {
|
|
@@ -532,6 +557,9 @@ export async function handleHeadlessSessionSubscribe(req, res, context, params)
|
|
|
532
557
|
}), context.corsHeaders, req);
|
|
533
558
|
}
|
|
534
559
|
catch (error) {
|
|
560
|
+
if (error instanceof HeadlessRuntimeNotReadyError) {
|
|
561
|
+
rethrowHeadlessConnectionLifecycleError(error);
|
|
562
|
+
}
|
|
535
563
|
if (error instanceof Error &&
|
|
536
564
|
error.message === "Controller lease is already held by another connection") {
|
|
537
565
|
throw new ApiError(409, error.message);
|
|
@@ -587,13 +615,19 @@ export function handleHeadlessSessionEvents(req, res, context, params) {
|
|
|
587
615
|
const cursorParam = url.searchParams.get("cursor");
|
|
588
616
|
const cursor = cursorParam ? Number.parseInt(cursorParam, 10) : null;
|
|
589
617
|
const subscriptionId = url.searchParams.get("subscriptionId") || getHeadlessSubscriberId(req);
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
618
|
+
let stream;
|
|
619
|
+
try {
|
|
620
|
+
stream = subscriptionId
|
|
621
|
+
? runtime.attachSubscription(subscriptionId)
|
|
622
|
+
: runtime.createImplicitStream({
|
|
623
|
+
cursor,
|
|
624
|
+
role: getHeadlessRole(req),
|
|
625
|
+
optOutNotifications: parseOptOutNotifications(req),
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
catch (error) {
|
|
629
|
+
rethrowHeadlessConnectionLifecycleError(error);
|
|
630
|
+
}
|
|
597
631
|
if (!stream) {
|
|
598
632
|
throw new ApiError(404, "Headless subscriber not found");
|
|
599
633
|
}
|
|
@@ -647,7 +681,7 @@ export async function handleHeadlessSessionMessage(req, res, context, params) {
|
|
|
647
681
|
const runtime = getRuntime(req, context, params?.id);
|
|
648
682
|
const input = await parseHeadlessMessage(req);
|
|
649
683
|
try {
|
|
650
|
-
runtime.assertCanSend(getHeadlessRole(req), getHeadlessSubscriberId(req), getHeadlessConnectionId(req));
|
|
684
|
+
runtime.assertCanSend(getHeadlessRole(req), getHeadlessSubscriberId(req), getHeadlessConnectionId(req), { allowNotReady: input.type === "shutdown" });
|
|
651
685
|
}
|
|
652
686
|
catch (error) {
|
|
653
687
|
rethrowHeadlessMessageError(error);
|