@evalops/maestro 0.10.47 → 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.
Files changed (72) hide show
  1. package/README.md +4 -0
  2. package/dist/audit/logger.d.ts +1 -1
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +2 -0
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/commands/update.d.ts +12 -0
  7. package/dist/cli/commands/update.d.ts.map +1 -0
  8. package/dist/cli/commands/update.js +148 -0
  9. package/dist/cli/commands/update.js.map +1 -0
  10. package/dist/cli/help.d.ts.map +1 -1
  11. package/dist/cli/help.js +4 -0
  12. package/dist/cli/help.js.map +1 -1
  13. package/dist/cli-tui/commands/command-catalog.js +2 -2
  14. package/dist/cli-tui/commands/command-catalog.js.map +1 -1
  15. package/dist/cli-tui/commands/subcommands/ui-commands.d.ts +1 -1
  16. package/dist/cli-tui/commands/subcommands/ui-commands.js +2 -2
  17. package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -1
  18. package/dist/cli-tui/footer.d.ts.map +1 -1
  19. package/dist/cli-tui/footer.js +1 -1
  20. package/dist/cli-tui/footer.js.map +1 -1
  21. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
  22. package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts.map +1 -1
  23. package/dist/cli-tui/tui-renderer/ui-state-controller.js +5 -11
  24. package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
  25. package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
  26. package/dist/cli-tui/tui-renderer.js +1 -1
  27. package/dist/cli-tui/tui-renderer.js.map +1 -1
  28. package/dist/cli-tui/ui-state.js +1 -1
  29. package/dist/cli-tui/ui-state.js.map +1 -1
  30. package/dist/cli-tui/utils/footer-utils.d.ts +1 -1
  31. package/dist/cli-tui/utils/footer-utils.d.ts.map +1 -1
  32. package/dist/cli-tui/utils/footer-utils.js.map +1 -1
  33. package/dist/cli.js +4072 -3450
  34. package/dist/cli.js.map +1 -1
  35. package/dist/codex/app-server-client.d.ts +8 -0
  36. package/dist/codex/app-server-client.d.ts.map +1 -1
  37. package/dist/codex/app-server-client.js +49 -3
  38. package/dist/codex/app-server-client.js.map +1 -1
  39. package/dist/main.d.ts.map +1 -1
  40. package/dist/main.js +5 -0
  41. package/dist/main.js.map +1 -1
  42. package/dist/models/config-loader.d.ts +13 -13
  43. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts +2 -0
  44. package/dist/node_modules/@evalops/contracts/dist/scenario.d.ts.map +1 -1
  45. package/dist/node_modules/@evalops/contracts/dist/scenario.js.map +1 -1
  46. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  47. package/dist/node_modules/@evalops/tui/package.json +1 -1
  48. package/dist/platform/operating-plane-client.d.ts +3 -3
  49. package/dist/platform/operating-plane-client.d.ts.map +1 -1
  50. package/dist/platform/operating-plane-client.js.map +1 -1
  51. package/dist/platform/operating-plane-summary.js +3 -6
  52. package/dist/platform/operating-plane-summary.js.map +1 -1
  53. package/dist/server/agent-trajectory-scenarios.d.ts.map +1 -1
  54. package/dist/server/agent-trajectory-scenarios.js +29 -6
  55. package/dist/server/agent-trajectory-scenarios.js.map +1 -1
  56. package/dist/server/handlers/ui.d.ts.map +1 -1
  57. package/dist/server/handlers/ui.js +5 -5
  58. package/dist/server/handlers/ui.js.map +1 -1
  59. package/dist/server/stores/ui-store.d.ts.map +1 -1
  60. package/dist/server/stores/ui-store.js +8 -1
  61. package/dist/server/stores/ui-store.js.map +1 -1
  62. package/dist/tools/background/task-types.d.ts +1 -1
  63. package/dist/update/check.d.ts +2 -0
  64. package/dist/update/check.d.ts.map +1 -1
  65. package/dist/update/check.js +100 -41
  66. package/dist/update/check.js.map +1 -1
  67. package/dist/update/startup-refresh.d.ts +56 -0
  68. package/dist/update/startup-refresh.d.ts.map +1 -0
  69. package/dist/update/startup-refresh.js +321 -0
  70. package/dist/update/startup-refresh.js.map +1 -0
  71. package/dist/version.json +2 -2
  72. package/package.json +297 -296
@@ -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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkCjE,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAiLnC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkCjE,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAgLnC"}
@@ -14,10 +14,10 @@ function parseCleanMode(value) {
14
14
  }
15
15
  function parseFooterMode(value) {
16
16
  const normalized = value.toLowerCase();
17
- if (["ensemble", "rich", "classic", "full"].includes(normalized)) {
18
- return "ensemble";
17
+ if (normalized === "rich") {
18
+ return "rich";
19
19
  }
20
- if (["solo", "minimal", "lean", "lite"].includes(normalized)) {
20
+ if (normalized === "solo") {
21
21
  return "solo";
22
22
  }
23
23
  return null;
@@ -41,7 +41,7 @@ export async function handleUI(req, res, corsHeaders) {
41
41
  sendJson(res, 200, {
42
42
  zenMode: sessionState.zenMode ?? state.zenMode ?? false,
43
43
  cleanMode: sessionState.cleanMode ?? state.cleanMode ?? "off",
44
- footerMode: sessionState.footerMode ?? state.footerMode ?? "ensemble",
44
+ footerMode: sessionState.footerMode ?? state.footerMode ?? "rich",
45
45
  compactTools: sessionState.compactTools ?? state.compactTools ?? false,
46
46
  queueMode: sessionState.followUpMode ??
47
47
  sessionState.queueMode ??
@@ -102,7 +102,7 @@ export async function handleUI(req, res, corsHeaders) {
102
102
  else if (action === "footer" && data.footerMode) {
103
103
  const parsed = parseFooterMode(data.footerMode);
104
104
  if (!parsed) {
105
- sendJson(res, 400, { error: "Invalid footerMode. Use ensemble or solo." }, corsHeaders);
105
+ sendJson(res, 400, { error: "Invalid footerMode. Use rich or solo." }, corsHeaders);
106
106
  return;
107
107
  }
108
108
  sessionState.footerMode = parsed;
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/server/handlers/ui.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { loadUiState, saveUiState } from \"../../cli-tui/ui-state.js\";\nimport { requireApiAuth, requireCsrf } from \"../authz.js\";\nimport {\n\treadJsonBody,\n\trespondWithApiError,\n\tsendJson,\n} from \"../server-utils.js\";\nimport {\n\tgetSessionUiState,\n\tloadWebUiState,\n\tsaveWebUiState,\n} from \"../stores/ui-store.js\";\n\nfunction parseCleanMode(value: string): \"off\" | \"soft\" | \"aggressive\" | null {\n\tconst normalized = value.toLowerCase();\n\tif (normalized === \"off\" || normalized === \"none\") return \"off\";\n\tif (normalized === \"soft\" || normalized === \"light\") return \"soft\";\n\tif (normalized === \"aggressive\" || normalized === \"aggressive\")\n\t\treturn \"aggressive\";\n\treturn null;\n}\n\nfunction parseFooterMode(value: string): \"ensemble\" | \"solo\" | null {\n\tconst normalized = value.toLowerCase();\n\tif ([\"ensemble\", \"rich\", \"classic\", \"full\"].includes(normalized)) {\n\t\treturn \"ensemble\";\n\t}\n\tif ([\"solo\", \"minimal\", \"lean\", \"lite\"].includes(normalized)) {\n\t\treturn \"solo\";\n\t}\n\treturn null;\n}\n\nexport async function handleUI(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcorsHeaders: Record<string, string>,\n) {\n\tconst url = new URL(\n\t\treq.url || \"/api/ui\",\n\t\t`http://${req.headers.host || \"localhost\"}`,\n\t);\n\tconst sessionId = url.searchParams.get(\"sessionId\");\n\tif (!sessionId) {\n\t\tsendJson(\n\t\t\tres,\n\t\t\t400,\n\t\t\t{ error: \"sessionId query parameter is required\" },\n\t\t\tcorsHeaders,\n\t\t);\n\t\treturn;\n\t}\n\n\tif (req.method === \"GET\") {\n\t\tif (!(await requireApiAuth(req, res, corsHeaders))) return;\n\t\tconst action = url.searchParams.get(\"action\") || \"status\";\n\n\t\ttry {\n\t\t\tif (action === \"status\") {\n\t\t\t\tconst state = loadUiState();\n\t\t\t\tconst webState = loadWebUiState();\n\t\t\t\tconst sessionState = getSessionUiState(webState, sessionId);\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tzenMode: sessionState.zenMode ?? state.zenMode ?? false,\n\t\t\t\t\t\tcleanMode: sessionState.cleanMode ?? state.cleanMode ?? \"off\",\n\t\t\t\t\t\tfooterMode:\n\t\t\t\t\t\t\tsessionState.footerMode ?? state.footerMode ?? \"ensemble\",\n\t\t\t\t\t\tcompactTools:\n\t\t\t\t\t\t\tsessionState.compactTools ?? state.compactTools ?? false,\n\t\t\t\t\t\tqueueMode:\n\t\t\t\t\t\t\tsessionState.followUpMode ??\n\t\t\t\t\t\t\tsessionState.queueMode ??\n\t\t\t\t\t\t\tstate.followUpMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tsteeringMode:\n\t\t\t\t\t\t\tsessionState.steeringMode ??\n\t\t\t\t\t\t\tstate.steeringMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tfollowUpMode:\n\t\t\t\t\t\t\tsessionState.followUpMode ??\n\t\t\t\t\t\t\tstate.followUpMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (action === \"theme\") {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tavailable: true,\n\t\t\t\t\t\tmessage: \"Theme selection handled by frontend UI component\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t400,\n\t\t\t\t\t{ error: \"Invalid action. Use status or theme.\" },\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (req.method === \"POST\") {\n\t\tif (!(await requireApiAuth(req, res, corsHeaders))) return;\n\t\tif (!requireCsrf(req, res, corsHeaders)) return;\n\t\ttry {\n\t\t\tconst data = await readJsonBody<{\n\t\t\t\taction: string;\n\t\t\t\tcleanMode?: \"off\" | \"soft\" | \"aggressive\";\n\t\t\t\tfooterMode?: \"ensemble\" | \"solo\";\n\t\t\t\tcompactTools?: boolean;\n\t\t\t}>(req);\n\t\t\tconst { action } = data;\n\t\t\tconst baseState = loadUiState();\n\t\t\tconst webState = loadWebUiState();\n\t\t\tconst sessionState = getSessionUiState(webState, sessionId);\n\n\t\t\tif (action === \"clean\" && data.cleanMode) {\n\t\t\t\tconst parsed = parseCleanMode(data.cleanMode);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tsendJson(\n\t\t\t\t\t\tres,\n\t\t\t\t\t\t400,\n\t\t\t\t\t\t{ error: \"Invalid cleanMode. Use off, soft, or aggressive.\" },\n\t\t\t\t\t\tcorsHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsessionState.cleanMode = parsed;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ cleanMode: parsed });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tcleanMode: parsed,\n\t\t\t\t\t\tmessage: `Clean mode set to ${parsed}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (action === \"footer\" && data.footerMode) {\n\t\t\t\tconst parsed = parseFooterMode(data.footerMode);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tsendJson(\n\t\t\t\t\t\tres,\n\t\t\t\t\t\t400,\n\t\t\t\t\t\t{ error: \"Invalid footerMode. Use ensemble or solo.\" },\n\t\t\t\t\t\tcorsHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsessionState.footerMode = parsed;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ footerMode: parsed });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tfooterMode: parsed,\n\t\t\t\t\t\tmessage: `Footer mode set to ${parsed}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\taction === \"compact\" &&\n\t\t\t\ttypeof data.compactTools === \"boolean\"\n\t\t\t) {\n\t\t\t\tsessionState.compactTools = data.compactTools;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ compactTools: data.compactTools });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tcompactTools: data.compactTools,\n\t\t\t\t\t\tmessage: `Compact tools ${data.compactTools ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t400,\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"Invalid action. Use clean, footer, or compact with appropriate parameters.\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t}\n\t\treturn;\n\t}\n\n\tsendJson(res, 405, { error: \"Method not allowed\" }, corsHeaders);\n}\n"]}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/server/handlers/ui.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { loadUiState, saveUiState } from \"../../cli-tui/ui-state.js\";\nimport { requireApiAuth, requireCsrf } from \"../authz.js\";\nimport {\n\treadJsonBody,\n\trespondWithApiError,\n\tsendJson,\n} from \"../server-utils.js\";\nimport {\n\tgetSessionUiState,\n\tloadWebUiState,\n\tsaveWebUiState,\n} from \"../stores/ui-store.js\";\n\nfunction parseCleanMode(value: string): \"off\" | \"soft\" | \"aggressive\" | null {\n\tconst normalized = value.toLowerCase();\n\tif (normalized === \"off\" || normalized === \"none\") return \"off\";\n\tif (normalized === \"soft\" || normalized === \"light\") return \"soft\";\n\tif (normalized === \"aggressive\" || normalized === \"aggressive\")\n\t\treturn \"aggressive\";\n\treturn null;\n}\n\nfunction parseFooterMode(value: string): \"rich\" | \"solo\" | null {\n\tconst normalized = value.toLowerCase();\n\tif (normalized === \"rich\") {\n\t\treturn \"rich\";\n\t}\n\tif (normalized === \"solo\") {\n\t\treturn \"solo\";\n\t}\n\treturn null;\n}\n\nexport async function handleUI(\n\treq: IncomingMessage,\n\tres: ServerResponse,\n\tcorsHeaders: Record<string, string>,\n) {\n\tconst url = new URL(\n\t\treq.url || \"/api/ui\",\n\t\t`http://${req.headers.host || \"localhost\"}`,\n\t);\n\tconst sessionId = url.searchParams.get(\"sessionId\");\n\tif (!sessionId) {\n\t\tsendJson(\n\t\t\tres,\n\t\t\t400,\n\t\t\t{ error: \"sessionId query parameter is required\" },\n\t\t\tcorsHeaders,\n\t\t);\n\t\treturn;\n\t}\n\n\tif (req.method === \"GET\") {\n\t\tif (!(await requireApiAuth(req, res, corsHeaders))) return;\n\t\tconst action = url.searchParams.get(\"action\") || \"status\";\n\n\t\ttry {\n\t\t\tif (action === \"status\") {\n\t\t\t\tconst state = loadUiState();\n\t\t\t\tconst webState = loadWebUiState();\n\t\t\t\tconst sessionState = getSessionUiState(webState, sessionId);\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tzenMode: sessionState.zenMode ?? state.zenMode ?? false,\n\t\t\t\t\t\tcleanMode: sessionState.cleanMode ?? state.cleanMode ?? \"off\",\n\t\t\t\t\t\tfooterMode: sessionState.footerMode ?? state.footerMode ?? \"rich\",\n\t\t\t\t\t\tcompactTools:\n\t\t\t\t\t\t\tsessionState.compactTools ?? state.compactTools ?? false,\n\t\t\t\t\t\tqueueMode:\n\t\t\t\t\t\t\tsessionState.followUpMode ??\n\t\t\t\t\t\t\tsessionState.queueMode ??\n\t\t\t\t\t\t\tstate.followUpMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tsteeringMode:\n\t\t\t\t\t\t\tsessionState.steeringMode ??\n\t\t\t\t\t\t\tstate.steeringMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t\tfollowUpMode:\n\t\t\t\t\t\t\tsessionState.followUpMode ??\n\t\t\t\t\t\t\tstate.followUpMode ??\n\t\t\t\t\t\t\tstate.queueMode ??\n\t\t\t\t\t\t\t\"all\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (action === \"theme\") {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tavailable: true,\n\t\t\t\t\t\tmessage: \"Theme selection handled by frontend UI component\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t400,\n\t\t\t\t\t{ error: \"Invalid action. Use status or theme.\" },\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (req.method === \"POST\") {\n\t\tif (!(await requireApiAuth(req, res, corsHeaders))) return;\n\t\tif (!requireCsrf(req, res, corsHeaders)) return;\n\t\ttry {\n\t\t\tconst data = await readJsonBody<{\n\t\t\t\taction: string;\n\t\t\t\tcleanMode?: \"off\" | \"soft\" | \"aggressive\";\n\t\t\t\tfooterMode?: \"rich\" | \"solo\";\n\t\t\t\tcompactTools?: boolean;\n\t\t\t}>(req);\n\t\t\tconst { action } = data;\n\t\t\tconst baseState = loadUiState();\n\t\t\tconst webState = loadWebUiState();\n\t\t\tconst sessionState = getSessionUiState(webState, sessionId);\n\n\t\t\tif (action === \"clean\" && data.cleanMode) {\n\t\t\t\tconst parsed = parseCleanMode(data.cleanMode);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tsendJson(\n\t\t\t\t\t\tres,\n\t\t\t\t\t\t400,\n\t\t\t\t\t\t{ error: \"Invalid cleanMode. Use off, soft, or aggressive.\" },\n\t\t\t\t\t\tcorsHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsessionState.cleanMode = parsed;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ cleanMode: parsed });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tcleanMode: parsed,\n\t\t\t\t\t\tmessage: `Clean mode set to ${parsed}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (action === \"footer\" && data.footerMode) {\n\t\t\t\tconst parsed = parseFooterMode(data.footerMode);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tsendJson(\n\t\t\t\t\t\tres,\n\t\t\t\t\t\t400,\n\t\t\t\t\t\t{ error: \"Invalid footerMode. Use rich or solo.\" },\n\t\t\t\t\t\tcorsHeaders,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsessionState.footerMode = parsed;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ footerMode: parsed });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tfooterMode: parsed,\n\t\t\t\t\t\tmessage: `Footer mode set to ${parsed}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else if (\n\t\t\t\taction === \"compact\" &&\n\t\t\t\ttypeof data.compactTools === \"boolean\"\n\t\t\t) {\n\t\t\t\tsessionState.compactTools = data.compactTools;\n\t\t\t\tsaveWebUiState(webState);\n\t\t\t\tsaveUiState({ compactTools: data.compactTools });\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t200,\n\t\t\t\t\t{\n\t\t\t\t\t\tsuccess: true,\n\t\t\t\t\t\tcompactTools: data.compactTools,\n\t\t\t\t\t\tmessage: `Compact tools ${data.compactTools ? \"enabled\" : \"disabled\"}`,\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tsendJson(\n\t\t\t\t\tres,\n\t\t\t\t\t400,\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"Invalid action. Use clean, footer, or compact with appropriate parameters.\",\n\t\t\t\t\t},\n\t\t\t\t\tcorsHeaders,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\trespondWithApiError(res, error, 500, corsHeaders, req);\n\t\t}\n\t\treturn;\n\t}\n\n\tsendJson(res, 405, { error: \"Method not allowed\" }, corsHeaders);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-store.d.ts","sourceRoot":"","sources":["../../../src/server/stores/ui-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAWzD,UAAU,WAAW;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAmCD,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIvD;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GACf,OAAO,CAKT"}
1
+ {"version":3,"file":"ui-store.d.ts","sourceRoot":"","sources":["../../../src/server/stores/ui-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAWzD,UAAU,WAAW;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAyCD,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAIvD;AAED,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,MAAM,GACf,OAAO,CAKT"}
@@ -9,6 +9,13 @@ const KEY_REGEX = /^[A-Za-z0-9._-]+$/;
9
9
  function sanitizeKey(key) {
10
10
  return KEY_REGEX.test(key) ? key : null;
11
11
  }
12
+ function normalizeFooterMode(value) {
13
+ if (value === "rich" || value === "solo")
14
+ return value;
15
+ if (value === "ensemble")
16
+ return "rich";
17
+ return undefined;
18
+ }
12
19
  function normalize(raw) {
13
20
  if (!raw || typeof raw !== "object" || !("sessions" in raw)) {
14
21
  return { sessions: {} };
@@ -28,7 +35,7 @@ function normalize(raw) {
28
35
  steeringMode: state.steeringMode,
29
36
  followUpMode: state.followUpMode,
30
37
  compactTools: state.compactTools,
31
- footerMode: state.footerMode,
38
+ footerMode: normalizeFooterMode(state.footerMode),
32
39
  cleanMode: state.cleanMode,
33
40
  reducedMotion: state.reducedMotion,
34
41
  recentCommands: state.recentCommands,
@@ -1 +1 @@
1
- {"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../../src/server/stores/ui-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { UiState } from \"../../cli-tui/ui-state.js\";\nimport { getAgentDir } from \"../../config/constants.js\";\nimport { tryParseJson } from \"../../utils/json.js\";\nimport { resolveEnvPath } from \"../../utils/path-expansion.js\";\n\nconst UI_STATE_PATH =\n\tresolveEnvPath(process.env.MAESTRO_WEB_UI_STATE) ??\n\tresolve(getAgentDir(), \"web-ui-state.json\");\n\nconst KEY_REGEX = /^[A-Za-z0-9._-]+$/;\n\ninterface UiStateFile {\n\tsessions: Record<string, UiState>;\n}\n\nfunction sanitizeKey(key: string): string | null {\n\treturn KEY_REGEX.test(key) ? key : null;\n}\n\nfunction normalize(raw: unknown): UiStateFile {\n\tif (!raw || typeof raw !== \"object\" || !(\"sessions\" in raw)) {\n\t\treturn { sessions: {} };\n\t}\n\tconst sessions = (raw as { sessions?: unknown }).sessions;\n\tif (!sessions || typeof sessions !== \"object\") return { sessions: {} };\n\tconst result: Record<string, UiState> = {};\n\tfor (const [k, v] of Object.entries(sessions as Record<string, unknown>)) {\n\t\tconst key = sanitizeKey(k);\n\t\tif (!key) continue;\n\t\tif (v && typeof v === \"object\") {\n\t\t\tconst state = v as UiState;\n\t\t\tresult[key] = {\n\t\t\t\tqueueMode: state.queueMode,\n\t\t\t\tsteeringMode: state.steeringMode,\n\t\t\t\tfollowUpMode: state.followUpMode,\n\t\t\t\tcompactTools: state.compactTools,\n\t\t\t\tfooterMode: state.footerMode,\n\t\t\t\tcleanMode: state.cleanMode,\n\t\t\t\treducedMotion: state.reducedMotion,\n\t\t\t\trecentCommands: state.recentCommands,\n\t\t\t\tfavoriteCommands: state.favoriteCommands,\n\t\t\t\tzenMode: state.zenMode,\n\t\t\t};\n\t\t}\n\t}\n\treturn { sessions: result };\n}\n\nexport function loadWebUiState(): UiStateFile {\n\tif (!existsSync(UI_STATE_PATH)) return { sessions: {} };\n\tconst raw = tryParseJson(readFileSync(UI_STATE_PATH, \"utf-8\"));\n\treturn normalize(raw);\n}\n\nexport function saveWebUiState(state: UiStateFile): void {\n\tconst normalized = normalize(state);\n\tmkdirSync(dirname(UI_STATE_PATH), { recursive: true });\n\twriteFileSync(UI_STATE_PATH, JSON.stringify(normalized, null, 2), \"utf-8\");\n}\n\nexport function getSessionUiState(\n\tstate: UiStateFile,\n\tsessionId: string,\n): UiState {\n\tconst key = sanitizeKey(sessionId);\n\tif (!key) throw new Error(\"Invalid sessionId format\");\n\tif (!state.sessions[key]) state.sessions[key] = {};\n\treturn state.sessions[key];\n}\n"]}
1
+ {"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../../src/server/stores/ui-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { UiState } from \"../../cli-tui/ui-state.js\";\nimport { getAgentDir } from \"../../config/constants.js\";\nimport { tryParseJson } from \"../../utils/json.js\";\nimport { resolveEnvPath } from \"../../utils/path-expansion.js\";\n\nconst UI_STATE_PATH =\n\tresolveEnvPath(process.env.MAESTRO_WEB_UI_STATE) ??\n\tresolve(getAgentDir(), \"web-ui-state.json\");\n\nconst KEY_REGEX = /^[A-Za-z0-9._-]+$/;\n\ninterface UiStateFile {\n\tsessions: Record<string, UiState>;\n}\n\nfunction sanitizeKey(key: string): string | null {\n\treturn KEY_REGEX.test(key) ? key : null;\n}\n\nfunction normalizeFooterMode(value: unknown): UiState[\"footerMode\"] {\n\tif (value === \"rich\" || value === \"solo\") return value;\n\tif (value === \"ensemble\") return \"rich\";\n\treturn undefined;\n}\n\nfunction normalize(raw: unknown): UiStateFile {\n\tif (!raw || typeof raw !== \"object\" || !(\"sessions\" in raw)) {\n\t\treturn { sessions: {} };\n\t}\n\tconst sessions = (raw as { sessions?: unknown }).sessions;\n\tif (!sessions || typeof sessions !== \"object\") return { sessions: {} };\n\tconst result: Record<string, UiState> = {};\n\tfor (const [k, v] of Object.entries(sessions as Record<string, unknown>)) {\n\t\tconst key = sanitizeKey(k);\n\t\tif (!key) continue;\n\t\tif (v && typeof v === \"object\") {\n\t\t\tconst state = v as UiState;\n\t\t\tresult[key] = {\n\t\t\t\tqueueMode: state.queueMode,\n\t\t\t\tsteeringMode: state.steeringMode,\n\t\t\t\tfollowUpMode: state.followUpMode,\n\t\t\t\tcompactTools: state.compactTools,\n\t\t\t\tfooterMode: normalizeFooterMode(state.footerMode),\n\t\t\t\tcleanMode: state.cleanMode,\n\t\t\t\treducedMotion: state.reducedMotion,\n\t\t\t\trecentCommands: state.recentCommands,\n\t\t\t\tfavoriteCommands: state.favoriteCommands,\n\t\t\t\tzenMode: state.zenMode,\n\t\t\t};\n\t\t}\n\t}\n\treturn { sessions: result };\n}\n\nexport function loadWebUiState(): UiStateFile {\n\tif (!existsSync(UI_STATE_PATH)) return { sessions: {} };\n\tconst raw = tryParseJson(readFileSync(UI_STATE_PATH, \"utf-8\"));\n\treturn normalize(raw);\n}\n\nexport function saveWebUiState(state: UiStateFile): void {\n\tconst normalized = normalize(state);\n\tmkdirSync(dirname(UI_STATE_PATH), { recursive: true });\n\twriteFileSync(UI_STATE_PATH, JSON.stringify(normalized, null, 2), \"utf-8\");\n}\n\nexport function getSessionUiState(\n\tstate: UiStateFile,\n\tsessionId: string,\n): UiState {\n\tconst key = sanitizeKey(sessionId);\n\tif (!key) throw new Error(\"Invalid sessionId format\");\n\tif (!state.sessions[key]) state.sessions[key] = {};\n\treturn state.sessions[key];\n}\n"]}
@@ -121,7 +121,7 @@ export declare function buildTaskDetail(task: BackgroundTask): {
121
121
  status: BackgroundTaskStatus;
122
122
  command: string;
123
123
  logPath: string;
124
- shellMode: "shell" | "exec";
124
+ shellMode: "exec" | "shell";
125
125
  logTruncated: boolean;
126
126
  restartAttempts: number;
127
127
  restartMaxAttempts: number;
@@ -10,7 +10,9 @@ interface CheckForUpdateOptions {
10
10
  fetch?: typeof fetch;
11
11
  timeoutMs?: number;
12
12
  url?: string;
13
+ urls?: string[];
13
14
  }
15
+ export declare const resolveUpdateUrls: (options?: Pick<CheckForUpdateOptions, "url" | "urls">, env?: NodeJS.ProcessEnv) => string[];
14
16
  export declare function compareVersions(current: string, latest: string): number;
15
17
  export declare function checkForUpdate(currentVersion: string, options?: CheckForUpdateOptions): Promise<UpdateCheckResult>;
16
18
  export {};