@evalops/maestro 0.10.50 → 0.10.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent-outcome.d.ts +54 -0
- package/dist/agent/agent-outcome.d.ts.map +1 -0
- package/dist/agent/agent-outcome.js +142 -0
- package/dist/agent/agent-outcome.js.map +1 -0
- package/dist/agent/agent-resume.d.ts.map +1 -1
- package/dist/agent/agent-resume.js +3 -3
- package/dist/agent/agent-resume.js.map +1 -1
- package/dist/agent/agent-run-summary.d.ts +37 -0
- package/dist/agent/agent-run-summary.d.ts.map +1 -0
- package/dist/agent/agent-run-summary.js +15 -0
- package/dist/agent/agent-run-summary.js.map +1 -0
- package/dist/agent/agent-work-board.d.ts +82 -0
- package/dist/agent/agent-work-board.d.ts.map +1 -0
- package/dist/agent/agent-work-board.js +312 -0
- package/dist/agent/agent-work-board.js.map +1 -0
- package/dist/agent/auto-compaction.d.ts +7 -2
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js +23 -10
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/mission-artifacts.d.ts +62 -0
- package/dist/agent/mission-artifacts.d.ts.map +1 -0
- package/dist/agent/mission-artifacts.js +438 -0
- package/dist/agent/mission-artifacts.js.map +1 -0
- package/dist/agent/mission-manifest.d.ts +139 -3
- package/dist/agent/mission-manifest.d.ts.map +1 -1
- package/dist/agent/mission-manifest.js +549 -3
- package/dist/agent/mission-manifest.js.map +1 -1
- package/dist/agent/mission-store.d.ts +80 -0
- package/dist/agent/mission-store.d.ts.map +1 -0
- package/dist/agent/mission-store.js +603 -0
- package/dist/agent/mission-store.js.map +1 -0
- package/dist/agent/modes.d.ts +2 -2
- package/dist/agent/modes.d.ts.map +1 -1
- package/dist/agent/modes.js +10 -3
- package/dist/agent/modes.js.map +1 -1
- package/dist/agent/providers/codex-app-server.d.ts.map +1 -1
- package/dist/agent/providers/codex-app-server.js +1 -3
- package/dist/agent/providers/codex-app-server.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +203 -107
- package/dist/agent/providers/google.js +100 -41
- package/dist/agent/providers/scripted.d.ts.map +1 -1
- package/dist/agent/providers/scripted.js +1 -3
- package/dist/agent/providers/scripted.js.map +1 -1
- package/dist/agent/providers/validation.d.ts.map +1 -1
- package/dist/agent/providers/validation.js +1 -3
- package/dist/agent/providers/validation.js.map +1 -1
- package/dist/agent/providers/vertex.js +203 -107
- package/dist/agent/snapshot-store.d.ts +32 -0
- package/dist/agent/snapshot-store.d.ts.map +1 -0
- package/dist/agent/snapshot-store.js +195 -0
- package/dist/agent/snapshot-store.js.map +1 -0
- package/dist/agent/specialist-profiles.d.ts +36 -0
- package/dist/agent/specialist-profiles.d.ts.map +1 -0
- package/dist/agent/specialist-profiles.js +159 -0
- package/dist/agent/specialist-profiles.js.map +1 -0
- package/dist/agent/subagent-specs.d.ts +4 -1
- package/dist/agent/subagent-specs.d.ts.map +1 -1
- package/dist/agent/subagent-specs.js +81 -8
- package/dist/agent/subagent-specs.js.map +1 -1
- package/dist/agent/swarm/coverage-gate.d.ts +37 -0
- package/dist/agent/swarm/coverage-gate.d.ts.map +1 -0
- package/dist/agent/swarm/coverage-gate.js +48 -0
- package/dist/agent/swarm/coverage-gate.js.map +1 -0
- package/dist/agent/swarm/executor.d.ts +1 -0
- package/dist/agent/swarm/executor.d.ts.map +1 -1
- package/dist/agent/swarm/executor.js +151 -15
- package/dist/agent/swarm/executor.js.map +1 -1
- package/dist/agent/swarm/orchestrator-prompt.d.ts +25 -0
- package/dist/agent/swarm/orchestrator-prompt.d.ts.map +1 -0
- package/dist/agent/swarm/orchestrator-prompt.js +48 -0
- package/dist/agent/swarm/orchestrator-prompt.js.map +1 -0
- package/dist/agent/swarm/plan-parser.d.ts.map +1 -1
- package/dist/agent/swarm/plan-parser.js +27 -2
- package/dist/agent/swarm/plan-parser.js.map +1 -1
- package/dist/agent/swarm/types.d.ts +17 -0
- package/dist/agent/swarm/types.d.ts.map +1 -1
- package/dist/agent/swarm/types.js.map +1 -1
- package/dist/agent/swarm/validation-directive.d.ts +21 -0
- package/dist/agent/swarm/validation-directive.d.ts.map +1 -0
- package/dist/agent/swarm/validation-directive.js +25 -0
- package/dist/agent/swarm/validation-directive.js.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.js +4 -1
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -1
- package/dist/api/enterprise-routes.d.ts.map +1 -1
- package/dist/api/enterprise-routes.js +87 -10
- package/dist/api/enterprise-routes.js.map +1 -1
- package/dist/api/org-settings-merge.d.ts +12 -0
- package/dist/api/org-settings-merge.d.ts.map +1 -0
- package/dist/api/org-settings-merge.js +38 -0
- package/dist/api/org-settings-merge.js.map +1 -0
- package/dist/api/user-settings-merge.d.ts +16 -0
- package/dist/api/user-settings-merge.d.ts.map +1 -0
- package/dist/api/user-settings-merge.js +37 -0
- package/dist/api/user-settings-merge.js.map +1 -0
- package/dist/app-server/daemon-lifecycle-api.d.ts.map +1 -1
- package/dist/app-server/daemon-lifecycle-api.js +1 -3
- package/dist/app-server/daemon-lifecycle-api.js.map +1 -1
- package/dist/app-server/external-agent-import-api.d.ts.map +1 -1
- package/dist/app-server/external-agent-import-api.js +1 -3
- package/dist/app-server/external-agent-import-api.js.map +1 -1
- package/dist/app-server/network-governance-api.d.ts.map +1 -1
- package/dist/app-server/network-governance-api.js +1 -3
- package/dist/app-server/network-governance-api.js.map +1 -1
- package/dist/app-server/plugin-bundle-api.d.ts.map +1 -1
- package/dist/app-server/plugin-bundle-api.js +1 -3
- package/dist/app-server/plugin-bundle-api.js.map +1 -1
- package/dist/app-server/policy-control-api.d.ts.map +1 -1
- package/dist/app-server/policy-control-api.js +1 -3
- package/dist/app-server/policy-control-api.js.map +1 -1
- package/dist/app-server/protocol-modes-api.d.ts.map +1 -1
- package/dist/app-server/protocol-modes-api.js +1 -3
- package/dist/app-server/protocol-modes-api.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +15 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/a2a.d.ts.map +1 -1
- package/dist/cli/commands/a2a.js +1 -3
- package/dist/cli/commands/a2a.js.map +1 -1
- package/dist/cli/commands/agents.d.ts +4 -0
- package/dist/cli/commands/agents.d.ts.map +1 -1
- package/dist/cli/commands/agents.js +149 -0
- package/dist/cli/commands/agents.js.map +1 -1
- package/dist/cli/commands/mission.d.ts +4 -0
- package/dist/cli/commands/mission.d.ts.map +1 -0
- package/dist/cli/commands/mission.js +196 -0
- package/dist/cli/commands/mission.js.map +1 -0
- package/dist/cli/commands/value.d.ts +10 -0
- package/dist/cli/commands/value.d.ts.map +1 -0
- package/dist/cli/commands/value.js +33 -0
- package/dist/cli/commands/value.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +1 -3
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +10 -0
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/system-prompt.d.ts.map +1 -1
- package/dist/cli/system-prompt.js +38 -7
- package/dist/cli/system-prompt.js.map +1 -1
- package/dist/cli-runtime.js +7756 -2800
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +1 -3
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.d.ts.map +1 -1
- package/dist/cli-tui/commands/undo-handlers.js +7 -2
- package/dist/cli-tui/commands/undo-handlers.js.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts +3 -0
- package/dist/cli-tui/tui-renderer/skills-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/skills-controller.js +77 -33
- package/dist/cli-tui/tui-renderer/skills-controller.js.map +1 -1
- package/dist/codex/app-server-client.d.ts.map +1 -1
- package/dist/codex/app-server-client.js +1 -3
- package/dist/codex/app-server-client.js.map +1 -1
- package/dist/codex/compatibility.d.ts.map +1 -1
- package/dist/codex/compatibility.js +1 -3
- package/dist/codex/compatibility.js.map +1 -1
- package/dist/codex/subagent-dispatch-table.d.ts +8 -0
- package/dist/codex/subagent-dispatch-table.d.ts.map +1 -1
- package/dist/codex/subagent-dispatch-table.js +23 -0
- package/dist/codex/subagent-dispatch-table.js.map +1 -1
- package/dist/context/manifest.d.ts.map +1 -1
- package/dist/context/manifest.js +1 -3
- package/dist/context/manifest.js.map +1 -1
- package/dist/conversation/render-model.d.ts +0 -36
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +1 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/customer-value/ambient-learning.d.ts +75 -0
- package/dist/customer-value/ambient-learning.d.ts.map +1 -0
- package/dist/customer-value/ambient-learning.js +472 -0
- package/dist/customer-value/ambient-learning.js.map +1 -0
- package/dist/customer-value/internal-helpers.d.ts +13 -0
- package/dist/customer-value/internal-helpers.d.ts.map +1 -0
- package/dist/customer-value/internal-helpers.js +70 -0
- package/dist/customer-value/internal-helpers.js.map +1 -0
- package/dist/customer-value/report.d.ts +282 -0
- package/dist/customer-value/report.d.ts.map +1 -0
- package/dist/customer-value/report.js +2085 -0
- package/dist/customer-value/report.js.map +1 -0
- package/dist/db/schema.d.ts +5 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -1
- package/dist/evalops/agent-bootstrap.js +1 -3
- package/dist/evalops/agent-bootstrap.js.map +1 -1
- package/dist/evalops/agent-mcp-metadata.d.ts.map +1 -1
- package/dist/evalops/agent-mcp-metadata.js +1 -3
- package/dist/evalops/agent-mcp-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installers/maestro-review-workflow.d.ts +38 -0
- package/dist/installers/maestro-review-workflow.d.ts.map +1 -0
- package/dist/installers/maestro-review-workflow.js +163 -0
- package/dist/installers/maestro-review-workflow.js.map +1 -0
- package/dist/load-env.d.ts.map +1 -1
- package/dist/load-env.js +2 -1
- package/dist/load-env.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +92 -3
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +1 -3
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/elicitation.d.ts.map +1 -1
- package/dist/mcp/elicitation.js +1 -3
- package/dist/mcp/elicitation.js.map +1 -1
- package/dist/mcp/official-registry.d.ts.map +1 -1
- package/dist/mcp/official-registry.js +1 -3
- package/dist/mcp/official-registry.js.map +1 -1
- package/dist/mcp/workspace-trust.d.ts.map +1 -1
- package/dist/mcp/workspace-trust.js +1 -3
- package/dist/mcp/workspace-trust.js.map +1 -1
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -3
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -3
- package/dist/models/config-loader.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/index.js +1 -0
- package/dist/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts +61 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.d.ts.map +1 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js +183 -0
- package/dist/node_modules/@evalops/contracts/dist/maestro-settings.js.map +1 -0
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/oauth/connectors.d.ts.map +1 -1
- package/dist/oauth/connectors.js +1 -3
- package/dist/oauth/connectors.js.map +1 -1
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +1 -3
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/platform/a2a-client.d.ts.map +1 -1
- package/dist/platform/a2a-client.js +1 -3
- package/dist/platform/a2a-client.js.map +1 -1
- package/dist/platform/a2a-cockpit.d.ts +1 -0
- package/dist/platform/a2a-cockpit.d.ts.map +1 -1
- package/dist/platform/a2a-cockpit.js +42 -11
- package/dist/platform/a2a-cockpit.js.map +1 -1
- package/dist/platform/a2a-completion-audit.d.ts +1 -1
- package/dist/platform/a2a-completion-audit.d.ts.map +1 -1
- package/dist/platform/a2a-completion-audit.js +7 -11
- package/dist/platform/a2a-completion-audit.js.map +1 -1
- package/dist/platform/a2a-maestro-peer.js +16 -0
- package/dist/platform/a2a-maestro-peer.js.map +1 -1
- package/dist/platform/a2a-peer-pairing.d.ts.map +1 -1
- package/dist/platform/a2a-peer-pairing.js +1 -3
- package/dist/platform/a2a-peer-pairing.js.map +1 -1
- package/dist/platform/a2a-peer-registry.d.ts.map +1 -1
- package/dist/platform/a2a-peer-registry.js +1 -3
- package/dist/platform/a2a-peer-registry.js.map +1 -1
- package/dist/platform/a2a-task-ledger.d.ts +20 -0
- package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
- package/dist/platform/a2a-task-ledger.js +207 -11
- package/dist/platform/a2a-task-ledger.js.map +1 -1
- package/dist/platform/a2a-work-graph.d.ts.map +1 -1
- package/dist/platform/a2a-work-graph.js +1 -3
- package/dist/platform/a2a-work-graph.js.map +1 -1
- package/dist/platform/operating-layer.d.ts.map +1 -1
- package/dist/platform/operating-layer.js +14 -8
- package/dist/platform/operating-layer.js.map +1 -1
- package/dist/platform/tool-execution-client.d.ts.map +1 -1
- package/dist/platform/tool-execution-client.js +19 -2
- package/dist/platform/tool-execution-client.js.map +1 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +1 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/runtime/env.d.ts +9 -1
- package/dist/runtime/env.d.ts.map +1 -1
- package/dist/runtime/env.js +63 -1
- package/dist/runtime/env.js.map +1 -1
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +1 -4
- package/dist/safety/policy.js.map +1 -1
- package/dist/sandbox/docker-sandbox.d.ts.map +1 -1
- package/dist/sandbox/docker-sandbox.js +6 -1
- package/dist/sandbox/docker-sandbox.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.js +1 -3
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -1
- package/dist/server/handlers/platform-a2a-push.d.ts.map +1 -1
- package/dist/server/handlers/platform-a2a-push.js +53 -2
- package/dist/server/handlers/platform-a2a-push.js.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -1
- package/dist/server/handlers/runtime-app-server-ws.js +1 -3
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +16 -0
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +232 -206
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
- package/dist/server/hosted-agent-runtime-progress.js +12 -3
- package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
- package/dist/server/pending-request-payload.d.ts.map +1 -1
- package/dist/server/pending-request-payload.js +1 -3
- package/dist/server/pending-request-payload.js.map +1 -1
- package/dist/server/route-auth.d.ts.map +1 -1
- package/dist/server/route-auth.js +2 -0
- package/dist/server/route-auth.js.map +1 -1
- package/dist/server/session-serialization.d.ts.map +1 -1
- package/dist/server/session-serialization.js +1 -3
- package/dist/server/session-serialization.js.map +1 -1
- package/dist/services/compliance/normalize.d.ts.map +1 -1
- package/dist/services/compliance/normalize.js +1 -3
- package/dist/services/compliance/normalize.js.map +1 -1
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
- package/dist/services/intelligent-router/normalize.js +1 -3
- package/dist/services/intelligent-router/normalize.js.map +1 -1
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -1
- package/dist/services/revenue-attribution/normalize.js +1 -3
- package/dist/services/revenue-attribution/normalize.js.map +1 -1
- package/dist/services/traces/normalize.d.ts.map +1 -1
- package/dist/services/traces/normalize.js +1 -3
- package/dist/services/traces/normalize.js.map +1 -1
- package/dist/services/workspace-config/normalize.d.ts.map +1 -1
- package/dist/services/workspace-config/normalize.js +1 -3
- package/dist/services/workspace-config/normalize.js.map +1 -1
- package/dist/skills/composer.d.ts.map +1 -1
- package/dist/skills/composer.js +13 -1
- package/dist/skills/composer.js.map +1 -1
- package/dist/skills/index.d.ts +1 -0
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -0
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/learned-guidelines.d.ts +33 -0
- package/dist/skills/learned-guidelines.d.ts.map +1 -0
- package/dist/skills/learned-guidelines.js +291 -0
- package/dist/skills/learned-guidelines.js.map +1 -0
- package/dist/skills/linter.d.ts.map +1 -1
- package/dist/skills/linter.js +1 -3
- package/dist/skills/linter.js.map +1 -1
- package/dist/skills/runtime-activation.d.ts +1 -0
- package/dist/skills/runtime-activation.d.ts.map +1 -1
- package/dist/skills/runtime-activation.js +2 -3
- package/dist/skills/runtime-activation.js.map +1 -1
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +26 -21
- package/dist/skills/tool.js.map +1 -1
- package/dist/skills/trust-cache.d.ts +7 -0
- package/dist/skills/trust-cache.d.ts.map +1 -1
- package/dist/skills/trust-cache.js +16 -0
- package/dist/skills/trust-cache.js.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.d.ts.map +1 -1
- package/dist/telemetry/agent-workforce-native-event.js +1 -3
- package/dist/telemetry/agent-workforce-native-event.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
- package/dist/telemetry/maestro-event-bus.js +42 -81
- package/dist/telemetry/maestro-event-bus.js.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -1
- package/dist/telemetry/maestro-platform-replay-fixture.js +1 -3
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +54 -43
- package/dist/telemetry.js.map +1 -1
- package/dist/theme/theme-loader.d.ts.map +1 -1
- package/dist/theme/theme-loader.js +1 -3
- package/dist/theme/theme-loader.js.map +1 -1
- package/dist/tools/apply-patch.d.ts.map +1 -1
- package/dist/tools/apply-patch.js +76 -8
- package/dist/tools/apply-patch.js.map +1 -1
- package/dist/tools/diff-preview.d.ts.map +1 -1
- package/dist/tools/diff-preview.js +10 -1
- package/dist/tools/diff-preview.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +17 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/undo/tracker.d.ts +5 -0
- package/dist/undo/tracker.d.ts.map +1 -1
- package/dist/undo/tracker.js +13 -0
- package/dist/undo/tracker.js.map +1 -1
- package/dist/utils/fs.d.ts +1 -1
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +29 -2
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/git-stash.d.ts.map +1 -1
- package/dist/utils/git-stash.js +15 -8
- package/dist/utils/git-stash.js.map +1 -1
- package/dist/utils/json.d.ts +11 -0
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/shell-env.d.ts.map +1 -1
- package/dist/utils/shell-env.js +2 -0
- package/dist/utils/shell-env.js.map +1 -1
- package/dist/utils/url-extractor-git.d.ts +26 -0
- package/dist/utils/url-extractor-git.d.ts.map +1 -0
- package/dist/utils/url-extractor-git.js +259 -0
- package/dist/utils/url-extractor-git.js.map +1 -0
- package/dist/utils/url-extractor.d.ts.map +1 -1
- package/dist/utils/url-extractor.js +23 -251
- package/dist/utils/url-extractor.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +310 -306
- package/skills/incident-triage/SKILL.md +19 -1
- package/skills/install-code-review/SKILL.md +69 -0
- package/skills/security-review/SKILL.md +68 -0
- package/skills/security-review/reference/rubric.md +85 -0
|
@@ -11158,12 +11158,12 @@ var require_logging_utils = __commonJS({
|
|
|
11158
11158
|
this.setFilters();
|
|
11159
11159
|
this.filtersSet = true;
|
|
11160
11160
|
}
|
|
11161
|
-
let
|
|
11162
|
-
if (!
|
|
11163
|
-
|
|
11164
|
-
this.cached.set(namespace,
|
|
11161
|
+
let logger9 = this.cached.get(namespace);
|
|
11162
|
+
if (!logger9) {
|
|
11163
|
+
logger9 = this.makeLogger(namespace);
|
|
11164
|
+
this.cached.set(namespace, logger9);
|
|
11165
11165
|
}
|
|
11166
|
-
|
|
11166
|
+
logger9(fields, ...args);
|
|
11167
11167
|
} catch (e2) {
|
|
11168
11168
|
console.error(e2);
|
|
11169
11169
|
}
|
|
@@ -11308,7 +11308,7 @@ var require_logging_utils = __commonJS({
|
|
|
11308
11308
|
} else if (cachedBackend === void 0) {
|
|
11309
11309
|
cachedBackend = getNodeBackend();
|
|
11310
11310
|
}
|
|
11311
|
-
const
|
|
11311
|
+
const logger9 = (() => {
|
|
11312
11312
|
let previousBackend = void 0;
|
|
11313
11313
|
const newLogger = new AdhocDebugLogger(namespace, (fields, ...args) => {
|
|
11314
11314
|
if (previousBackend !== cachedBackend) {
|
|
@@ -11323,8 +11323,8 @@ var require_logging_utils = __commonJS({
|
|
|
11323
11323
|
});
|
|
11324
11324
|
return newLogger;
|
|
11325
11325
|
})();
|
|
11326
|
-
loggerCache.set(namespace,
|
|
11327
|
-
return
|
|
11326
|
+
loggerCache.set(namespace, logger9);
|
|
11327
|
+
return logger9.func;
|
|
11328
11328
|
}
|
|
11329
11329
|
}
|
|
11330
11330
|
});
|
|
@@ -11412,14 +11412,14 @@ var require_src4 = __commonJS({
|
|
|
11412
11412
|
var gaxios_1 = require_src2();
|
|
11413
11413
|
var jsonBigint = require_json_bigint();
|
|
11414
11414
|
var gcp_residency_1 = require_gcp_residency();
|
|
11415
|
-
var
|
|
11415
|
+
var logger9 = __importStar(require_src3());
|
|
11416
11416
|
exports.BASE_PATH = "/computeMetadata/v1";
|
|
11417
11417
|
exports.HOST_ADDRESS = "http://169.254.169.254";
|
|
11418
11418
|
exports.SECONDARY_HOST_ADDRESS = "http://metadata.google.internal.";
|
|
11419
11419
|
exports.HEADER_NAME = "Metadata-Flavor";
|
|
11420
11420
|
exports.HEADER_VALUE = "Google";
|
|
11421
11421
|
exports.HEADERS = Object.freeze({ [exports.HEADER_NAME]: exports.HEADER_VALUE });
|
|
11422
|
-
var log =
|
|
11422
|
+
var log = logger9.log("gcp-metadata");
|
|
11423
11423
|
exports.METADATA_SERVER_DETECTION = Object.freeze({
|
|
11424
11424
|
"assume-present": "don't try to ping the metadata server, but assume it's present",
|
|
11425
11425
|
none: "don't try to ping the metadata server, but don't try to use it either",
|
|
@@ -18797,6 +18797,28 @@ function resolveHomePath(value, raw) {
|
|
|
18797
18797
|
const expanded = value === "~" ? home : value.startsWith("~/") || value.startsWith("~\\") ? join3(home, value.slice(2)) : value;
|
|
18798
18798
|
return resolve3(expanded);
|
|
18799
18799
|
}
|
|
18800
|
+
function homeFromEnv(raw) {
|
|
18801
|
+
return trim(raw.HOME) ?? trim(raw.USERPROFILE) ?? homedir2();
|
|
18802
|
+
}
|
|
18803
|
+
function resolveDataLocalDir(raw) {
|
|
18804
|
+
const home = homeFromEnv(raw);
|
|
18805
|
+
if (process.platform === "darwin") {
|
|
18806
|
+
return join3(home, "Library", "Application Support");
|
|
18807
|
+
}
|
|
18808
|
+
if (process.platform === "win32") {
|
|
18809
|
+
return resolveHomePath(trim(raw.LOCALAPPDATA), raw) ?? resolveHomePath(trim(raw.APPDATA), raw) ?? join3(home, "AppData", "Local");
|
|
18810
|
+
}
|
|
18811
|
+
return resolveHomePath(trim(raw.XDG_DATA_HOME), raw) ?? join3(home, ".local", "share");
|
|
18812
|
+
}
|
|
18813
|
+
function resolveRuntimeDir(raw) {
|
|
18814
|
+
if (process.platform === "darwin") {
|
|
18815
|
+
return resolveDataLocalDir(raw);
|
|
18816
|
+
}
|
|
18817
|
+
const xdgRuntimeDir = resolveHomePath(trim(raw.XDG_RUNTIME_DIR), raw);
|
|
18818
|
+
if (xdgRuntimeDir)
|
|
18819
|
+
return xdgRuntimeDir;
|
|
18820
|
+
return resolveDataLocalDir(raw);
|
|
18821
|
+
}
|
|
18800
18822
|
function createRuntimeEnv(raw) {
|
|
18801
18823
|
return Object.freeze({
|
|
18802
18824
|
logLevel: parseLogLevel2(trim(raw.MAESTRO_LOG_LEVEL)),
|
|
@@ -18807,6 +18829,9 @@ function createRuntimeEnv(raw) {
|
|
|
18807
18829
|
disableKeychain: parseBoolean(trim(raw.MAESTRO_DISABLE_KEYCHAIN)),
|
|
18808
18830
|
maestroHome: trim(raw.MAESTRO_HOME) ?? join3(homedir2(), ".maestro"),
|
|
18809
18831
|
maestroAgentDir: trim(raw.MAESTRO_AGENT_DIR),
|
|
18832
|
+
missionStoreDir: resolveHomePath(trim(raw.MAESTRO_MISSION_STORE_DIR), raw),
|
|
18833
|
+
snapshotBlobDir: resolveHomePath(trim(raw.MAESTRO_SNAPSHOT_BLOB_DIR), raw),
|
|
18834
|
+
skillTrustStrict: parseBoolean(trim(raw.MAESTRO_SKILL_TRUST_STRICT)),
|
|
18810
18835
|
telemetryEnabled: parseOptionalBoolean(trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY)),
|
|
18811
18836
|
telemetryFlag: trim(raw.MAESTRO_TELEMETRY) ?? trim(raw.PLAYWRIGHT_TELEMETRY),
|
|
18812
18837
|
beaconFile: resolveHomePath(trim(raw.MAESTRO_BEACON_FILE), raw),
|
|
@@ -18830,10 +18855,31 @@ function createRuntimeEnv(raw) {
|
|
|
18830
18855
|
]),
|
|
18831
18856
|
meterBaseUrl: firstNonEmpty(raw, METER_BASE_URL_VARS),
|
|
18832
18857
|
meterAccessToken: firstNonEmpty(raw, METER_ACCESS_TOKEN_VARS),
|
|
18833
|
-
meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS)
|
|
18858
|
+
meterOrganizationId: firstNonEmpty(raw, METER_ORG_ID_VARS),
|
|
18859
|
+
ambientLearnerFile: resolveHomePath(trim(raw.MAESTRO_AMBIENT_LEARNER_FILE), raw),
|
|
18860
|
+
ambientLearnerDefaultFile: join3(resolveDataLocalDir(raw), "ambient-agent", "learner.json"),
|
|
18861
|
+
ambientSocketFile: join3(resolveRuntimeDir(raw), "ambient-agent.sock")
|
|
18834
18862
|
});
|
|
18835
18863
|
}
|
|
18864
|
+
function isTestProcess() {
|
|
18865
|
+
return process.env.NODE_ENV === "test" || process.env.VITEST === "true";
|
|
18866
|
+
}
|
|
18867
|
+
function maybeReportEarlyRuntimeEnvAccess() {
|
|
18868
|
+
if (processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_FINALIZED__) {
|
|
18869
|
+
return;
|
|
18870
|
+
}
|
|
18871
|
+
const message = "defaultRuntimeEnv() was read before loadAndFinalizeEnv() completed. Bootstrap entry points must finish dotenv loading and security scrubbing before runtime env snapshots are created.";
|
|
18872
|
+
if (process.env.MAESTRO_RUNTIME_ENV_STRICT_BOOTSTRAP === "1") {
|
|
18873
|
+
throw new Error(message);
|
|
18874
|
+
}
|
|
18875
|
+
if (isTestProcess() || processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__) {
|
|
18876
|
+
return;
|
|
18877
|
+
}
|
|
18878
|
+
processWithRuntimeEnvCache.__MAESTRO_RUNTIME_ENV_EARLY_ACCESS_WARNED__ = true;
|
|
18879
|
+
console.warn(`[maestro] ${message}`);
|
|
18880
|
+
}
|
|
18836
18881
|
function defaultRuntimeEnv() {
|
|
18882
|
+
maybeReportEarlyRuntimeEnvAccess();
|
|
18837
18883
|
if (!processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__) {
|
|
18838
18884
|
processWithRuntimeEnvCache.__MAESTRO_DEFAULT_RUNTIME_ENV__ = createRuntimeEnv(process.env);
|
|
18839
18885
|
}
|
|
@@ -19041,6 +19087,16 @@ var init_logger = __esm({
|
|
|
19041
19087
|
}
|
|
19042
19088
|
});
|
|
19043
19089
|
|
|
19090
|
+
// dist/utils/json.js
|
|
19091
|
+
var logger2;
|
|
19092
|
+
var init_json = __esm({
|
|
19093
|
+
"dist/utils/json.js"() {
|
|
19094
|
+
"use strict";
|
|
19095
|
+
init_logger();
|
|
19096
|
+
logger2 = createLogger("json-utils");
|
|
19097
|
+
}
|
|
19098
|
+
});
|
|
19099
|
+
|
|
19044
19100
|
// dist/safety/credential-patterns.js
|
|
19045
19101
|
import { createHash, randomBytes } from "node:crypto";
|
|
19046
19102
|
function createGlobalPatternRegex(def) {
|
|
@@ -19400,12 +19456,12 @@ var init_secret_redactor = __esm({
|
|
|
19400
19456
|
});
|
|
19401
19457
|
|
|
19402
19458
|
// dist/utils/retry.js
|
|
19403
|
-
var
|
|
19459
|
+
var logger4;
|
|
19404
19460
|
var init_retry = __esm({
|
|
19405
19461
|
"dist/utils/retry.js"() {
|
|
19406
19462
|
"use strict";
|
|
19407
19463
|
init_logger();
|
|
19408
|
-
|
|
19464
|
+
logger4 = createLogger("retry");
|
|
19409
19465
|
}
|
|
19410
19466
|
});
|
|
19411
19467
|
|
|
@@ -34751,11 +34807,11 @@ var parseLogLevel = (maybeLevel, sourceName, client) => {
|
|
|
34751
34807
|
};
|
|
34752
34808
|
function noop2() {
|
|
34753
34809
|
}
|
|
34754
|
-
function makeLogFn(fnLevel,
|
|
34755
|
-
if (!
|
|
34810
|
+
function makeLogFn(fnLevel, logger9, logLevel) {
|
|
34811
|
+
if (!logger9 || levelNumbers[fnLevel] > levelNumbers[logLevel]) {
|
|
34756
34812
|
return noop2;
|
|
34757
34813
|
} else {
|
|
34758
|
-
return
|
|
34814
|
+
return logger9[fnLevel].bind(logger9);
|
|
34759
34815
|
}
|
|
34760
34816
|
}
|
|
34761
34817
|
var noopLogger = {
|
|
@@ -34767,22 +34823,22 @@ var noopLogger = {
|
|
|
34767
34823
|
var cachedLoggers = /* @__PURE__ */ new WeakMap();
|
|
34768
34824
|
function loggerFor(client) {
|
|
34769
34825
|
var _a2;
|
|
34770
|
-
const
|
|
34826
|
+
const logger9 = client.logger;
|
|
34771
34827
|
const logLevel = (_a2 = client.logLevel) !== null && _a2 !== void 0 ? _a2 : "off";
|
|
34772
|
-
if (!
|
|
34828
|
+
if (!logger9) {
|
|
34773
34829
|
return noopLogger;
|
|
34774
34830
|
}
|
|
34775
|
-
const cachedLogger = cachedLoggers.get(
|
|
34831
|
+
const cachedLogger = cachedLoggers.get(logger9);
|
|
34776
34832
|
if (cachedLogger && cachedLogger[0] === logLevel) {
|
|
34777
34833
|
return cachedLogger[1];
|
|
34778
34834
|
}
|
|
34779
34835
|
const levelLogger = {
|
|
34780
|
-
error: makeLogFn("error",
|
|
34781
|
-
warn: makeLogFn("warn",
|
|
34782
|
-
info: makeLogFn("info",
|
|
34783
|
-
debug: makeLogFn("debug",
|
|
34836
|
+
error: makeLogFn("error", logger9, logLevel),
|
|
34837
|
+
warn: makeLogFn("warn", logger9, logLevel),
|
|
34838
|
+
info: makeLogFn("info", logger9, logLevel),
|
|
34839
|
+
debug: makeLogFn("debug", logger9, logLevel)
|
|
34784
34840
|
};
|
|
34785
|
-
cachedLoggers.set(
|
|
34841
|
+
cachedLoggers.set(logger9, [logLevel, levelLogger]);
|
|
34786
34842
|
return levelLogger;
|
|
34787
34843
|
}
|
|
34788
34844
|
var formatRequestDetails = (details) => {
|
|
@@ -34812,7 +34868,7 @@ var Stream3 = class _Stream {
|
|
|
34812
34868
|
}
|
|
34813
34869
|
static fromSSEResponse(response, controller, client) {
|
|
34814
34870
|
let consumed = false;
|
|
34815
|
-
const
|
|
34871
|
+
const logger9 = client ? loggerFor(client) : console;
|
|
34816
34872
|
function iterator() {
|
|
34817
34873
|
return __asyncGenerator(this, arguments, function* iterator_1() {
|
|
34818
34874
|
var _a2, e_1, _b, _c;
|
|
@@ -34836,8 +34892,8 @@ var Stream3 = class _Stream {
|
|
|
34836
34892
|
try {
|
|
34837
34893
|
yield yield __await(JSON.parse(sse.data));
|
|
34838
34894
|
} catch (e2) {
|
|
34839
|
-
|
|
34840
|
-
|
|
34895
|
+
logger9.error(`Could not parse message into JSON:`, sse.data);
|
|
34896
|
+
logger9.error(`From chunk:`, sse.raw);
|
|
34841
34897
|
throw e2;
|
|
34842
34898
|
}
|
|
34843
34899
|
}
|
|
@@ -37405,6 +37461,9 @@ import { Type as Type3 } from "@sinclair/typebox";
|
|
|
37405
37461
|
// dist/utils/config-substitution.js
|
|
37406
37462
|
init_path_expansion();
|
|
37407
37463
|
|
|
37464
|
+
// dist/models/config-loader.js
|
|
37465
|
+
init_json();
|
|
37466
|
+
|
|
37408
37467
|
// dist/utils/jsonc-umd.js
|
|
37409
37468
|
import { parse as parseJsonc, printParseErrorCode } from "jsonc-parser";
|
|
37410
37469
|
|
|
@@ -37447,7 +37506,7 @@ function compileTypeboxSchema(schema) {
|
|
|
37447
37506
|
}
|
|
37448
37507
|
|
|
37449
37508
|
// dist/models/config-loader.js
|
|
37450
|
-
var
|
|
37509
|
+
var logger3 = createLogger("models:registry");
|
|
37451
37510
|
var headersSchema = Type3.Optional(Type3.Record(Type3.String(), Type3.String()));
|
|
37452
37511
|
var compatSchema = Type3.Optional(Type3.Object({
|
|
37453
37512
|
supportsStore: Type3.Optional(Type3.Boolean()),
|
|
@@ -37522,7 +37581,7 @@ init_retry();
|
|
|
37522
37581
|
// dist/providers/http-hooks.js
|
|
37523
37582
|
init_logger();
|
|
37524
37583
|
init_secret_redactor();
|
|
37525
|
-
var
|
|
37584
|
+
var logger5 = createLogger("providers:http-hooks");
|
|
37526
37585
|
var SENSITIVE_HEADERS_EXACT = /* @__PURE__ */ new Set([
|
|
37527
37586
|
"authorization",
|
|
37528
37587
|
"x-api-key",
|
|
@@ -37651,7 +37710,7 @@ var HttpHooksManager = class {
|
|
|
37651
37710
|
}
|
|
37652
37711
|
}
|
|
37653
37712
|
} catch (error) {
|
|
37654
|
-
|
|
37713
|
+
logger5.warn("Request hook handler error", {
|
|
37655
37714
|
error: sanitizeWithStaticMask(error instanceof Error ? error.message : String(error)),
|
|
37656
37715
|
requestId
|
|
37657
37716
|
});
|
|
@@ -37688,7 +37747,7 @@ var HttpHooksManager = class {
|
|
|
37688
37747
|
try {
|
|
37689
37748
|
await handler(event);
|
|
37690
37749
|
} catch (err) {
|
|
37691
|
-
|
|
37750
|
+
logger5.warn("Response hook handler error", {
|
|
37692
37751
|
error: err instanceof Error ? err.message : String(err),
|
|
37693
37752
|
requestId
|
|
37694
37753
|
});
|
|
@@ -37699,7 +37758,7 @@ var HttpHooksManager = class {
|
|
|
37699
37758
|
var httpHooks = new HttpHooksManager();
|
|
37700
37759
|
|
|
37701
37760
|
// dist/providers/network-config.js
|
|
37702
|
-
var
|
|
37761
|
+
var logger6 = createLogger("providers:network");
|
|
37703
37762
|
var DEFAULT_CONFIG = {
|
|
37704
37763
|
timeout: 12e4,
|
|
37705
37764
|
maxRetries: 3,
|
|
@@ -37778,7 +37837,7 @@ function loadProviderConfigs() {
|
|
|
37778
37837
|
}
|
|
37779
37838
|
}
|
|
37780
37839
|
} catch (error) {
|
|
37781
|
-
|
|
37840
|
+
logger6.warn("Failed to parse providers.json", { error });
|
|
37782
37841
|
}
|
|
37783
37842
|
return configs;
|
|
37784
37843
|
}
|
|
@@ -37803,7 +37862,7 @@ function getProviderNetworkConfig(provider) {
|
|
|
37803
37862
|
}
|
|
37804
37863
|
|
|
37805
37864
|
// dist/providers/stream-idle-timeout.js
|
|
37806
|
-
var
|
|
37865
|
+
var logger7 = createLogger("providers:stream-idle-timeout");
|
|
37807
37866
|
var StreamIdleTimeoutError = class extends Error {
|
|
37808
37867
|
constructor(idleMs, provider) {
|
|
37809
37868
|
super(`Stream idle timeout: no data received for ${Math.round(idleMs / 1e3)}s from ${provider}`);
|
|
@@ -37842,7 +37901,7 @@ async function* withAbortableIdleTimeout(iterable, options) {
|
|
|
37842
37901
|
const timeoutPromise = new Promise((_, reject) => {
|
|
37843
37902
|
timeoutId = setTimeout(() => {
|
|
37844
37903
|
const error = new StreamIdleTimeoutError(timeoutMs, options.provider);
|
|
37845
|
-
|
|
37904
|
+
logger7.warn("Stream idle timeout", {
|
|
37846
37905
|
provider: options.provider,
|
|
37847
37906
|
timeoutMs
|
|
37848
37907
|
});
|
|
@@ -37937,7 +37996,7 @@ function parseStreamingJson(partialJson) {
|
|
|
37937
37996
|
}
|
|
37938
37997
|
|
|
37939
37998
|
// dist/agent/providers/tool-arguments.js
|
|
37940
|
-
function
|
|
37999
|
+
function isRecord2(value) {
|
|
37941
38000
|
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
37942
38001
|
}
|
|
37943
38002
|
function describeValueType(value) {
|
|
@@ -37967,7 +38026,7 @@ function createToolArgumentNormalizer(options) {
|
|
|
37967
38026
|
}
|
|
37968
38027
|
function parseFromString(raw, context, parseOptions) {
|
|
37969
38028
|
const parsed = parseStreamingJson(raw);
|
|
37970
|
-
if (
|
|
38029
|
+
if (isRecord2(parsed)) {
|
|
37971
38030
|
return parsed;
|
|
37972
38031
|
}
|
|
37973
38032
|
if (parseOptions?.logInvalid ?? true) {
|
|
@@ -37982,7 +38041,7 @@ function createToolArgumentNormalizer(options) {
|
|
|
37982
38041
|
logInvalid: normalizeOptions?.logInvalid
|
|
37983
38042
|
});
|
|
37984
38043
|
}
|
|
37985
|
-
if (
|
|
38044
|
+
if (isRecord2(raw)) {
|
|
37986
38045
|
if (normalizeOptions?.expectString) {
|
|
37987
38046
|
warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
|
|
37988
38047
|
}
|
|
@@ -38005,7 +38064,7 @@ function createToolArgumentNormalizer(options) {
|
|
|
38005
38064
|
partialJson: raw
|
|
38006
38065
|
};
|
|
38007
38066
|
}
|
|
38008
|
-
if (
|
|
38067
|
+
if (isRecord2(raw)) {
|
|
38009
38068
|
if (normalizeOptions?.expectString) {
|
|
38010
38069
|
warnOnce("raw:object", `${options.providerLabel} tool call arguments were object, expected string`, buildWarningDetails(context));
|
|
38011
38070
|
}
|
|
@@ -38150,9 +38209,9 @@ ${block.thinking}
|
|
|
38150
38209
|
}
|
|
38151
38210
|
|
|
38152
38211
|
// dist/agent/providers/google.js
|
|
38153
|
-
var
|
|
38212
|
+
var logger8 = createLogger("agent:providers:google");
|
|
38154
38213
|
var toolArgumentNormalizer = createToolArgumentNormalizer({
|
|
38155
|
-
logger:
|
|
38214
|
+
logger: logger8,
|
|
38156
38215
|
providerLabel: "Google"
|
|
38157
38216
|
});
|
|
38158
38217
|
var toolCallCounter = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,uBAAuB,EAEvB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"scripted.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,uBAAuB,EAEvB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,KAAK,EACX,GAAG,EAEH,qBAAqB,EACrB,OAAO,EACP,KAAK,EACL,aAAa,EAGb,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAG5D,KAAK,gBAAgB,GAAG,uBAAuB,CAAC;AAoIhD,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACX,gBAAgB,CAyQlB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAEnE;AAED,wBAAsB,8BAA8B,CACnD,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAwJD,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,GACpB,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CAwJtD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from "@evalops/contracts";
|
|
2
|
+
import { isRecord } from "../../utils/json.js";
|
|
2
3
|
import { readScenarioJsonSource, readScenarioJsonSourceSync, scenarioSourceLabel, } from "../scenario-source.js";
|
|
3
4
|
export const SCRIPTED_REPLAY_PROVIDER = "scripted-replay";
|
|
4
5
|
export const SCRIPTED_REPLAY_MODEL_ID = "maestro-replay-v1";
|
|
@@ -24,9 +25,6 @@ const HYDRATION_MODES = [
|
|
|
24
25
|
"fixture_workspace",
|
|
25
26
|
"frozen_archive",
|
|
26
27
|
];
|
|
27
|
-
function isRecord(value) {
|
|
28
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29
|
-
}
|
|
30
28
|
function requireOptionalNonEmptyString(value, label) {
|
|
31
29
|
if (value !== undefined &&
|
|
32
30
|
(typeof value !== "string" || value.length === 0)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripted.js","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroScriptedScenario,\n\tMaestroScriptedStatement,\n} from \"@evalops/contracts\";\nimport { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from \"@evalops/contracts\";\nimport {\n\treadScenarioJsonSource,\n\treadScenarioJsonSourceSync,\n\tscenarioSourceLabel,\n} from \"../scenario-source.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tStreamOptions,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\n\nexport const SCRIPTED_REPLAY_PROVIDER = \"scripted-replay\";\nexport const SCRIPTED_REPLAY_MODEL_ID = \"maestro-replay-v1\";\n\ntype ScriptedStatement = MaestroScriptedStatement;\ntype ScriptedScenario = MaestroScriptedScenario;\n\nconst scriptedScenarioSourceCache = new Map<\n\tstring,\n\tPromise<ScriptedScenario>\n>();\nconst SCRIPTED_ASSERTION_KINDS = [\n\t\"tool_called\",\n\t\"tool_not_called\",\n\t\"file_exists\",\n\t\"file_contents\",\n\t\"workspace_manifest\",\n\t\"audit_event_emitted\",\n] as const;\nconst RELEASE_GATE_TIERS = [\"smoke\", \"regression\", \"gauntlet\"] as const;\nconst REQUIRED_ARTIFACTS = [\n\t\"trajectory\",\n\t\"replay\",\n\t\"score\",\n\t\"inspection\",\n\t\"workspace_manifest\",\n] as const;\nconst HYDRATION_MODES = [\n\t\"manifest_only\",\n\t\"fixture_workspace\",\n\t\"frozen_archive\",\n] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction requireOptionalNonEmptyString(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(typeof value !== \"string\" || value.length === 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n}\n\nfunction requireOptionalStringArray(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Array.isArray(value) ||\n\t\t\tvalue.some((item) => typeof item !== \"string\" || item.length === 0))\n\t) {\n\t\tthrow new Error(`${label} must contain non-empty strings`);\n\t}\n}\n\nfunction requireOptionalNonNegativeInteger(\n\tvalue: unknown,\n\tlabel: string,\n): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Number.isInteger(value) || (value as number) < 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-negative integer`);\n\t}\n}\n\nfunction validateScriptedReleaseGate(\n\tvalue: Record<string, unknown>,\n\tlabel: string,\n): void {\n\tconst releaseGate = value.releaseGate;\n\tif (releaseGate === undefined) return;\n\tif (!isRecord(releaseGate)) {\n\t\tthrow new Error(`Replay scenario ${label} releaseGate must be an object`);\n\t}\n\tif (typeof releaseGate.releaseBlocking !== \"boolean\") {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.releaseBlocking must be a boolean`,\n\t\t);\n\t}\n\tif (!RELEASE_GATE_TIERS.includes(releaseGate.tier as never)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.tier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\t!Array.isArray(releaseGate.requiredArtifacts) ||\n\t\treleaseGate.requiredArtifacts.length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts must not be empty`,\n\t\t);\n\t}\n\tconst unknownArtifacts = releaseGate.requiredArtifacts.filter(\n\t\t(artifact) => !REQUIRED_ARTIFACTS.includes(artifact as never),\n\t);\n\tif (unknownArtifacts.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts contains unknown artifact(s): ${unknownArtifacts.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.releaseBlocking === true &&\n\t\t!releaseGate.requiredArtifacts.includes(\"workspace_manifest\")\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking scripted scenarios must require workspace_manifest`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\ttypeof value.workspaceManifestPath !== \"string\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate requires workspace_manifest but workspaceManifestPath is missing`,\n\t\t);\n\t}\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxEvents,\n\t\t`Replay scenario ${label} releaseGate.maxEvents`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxToolCalls,\n\t\t`Replay scenario ${label} releaseGate.maxToolCalls`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxReplayDeltas,\n\t\t`Replay scenario ${label} releaseGate.maxReplayDeltas`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreFailures,\n\t\t`Replay scenario ${label} releaseGate.maxScoreFailures`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreWarnings,\n\t\t`Replay scenario ${label} releaseGate.maxScoreWarnings`,\n\t);\n}\n\nexport function parseScriptedScenario(\n\tvalue: unknown,\n\tlabel: string,\n): ScriptedScenario {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.schemaVersion !== MAESTRO_SCRIPTED_SCENARIO_SCHEMA\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must use schemaVersion ${MAESTRO_SCRIPTED_SCENARIO_SCHEMA}`,\n\t\t);\n\t}\n\tif (typeof value.id !== \"string\" || value.id.trim().length === 0) {\n\t\tthrow new Error(`Replay scenario ${label} must contain a non-empty id`);\n\t}\n\tif (\n\t\ttypeof value.description !== \"string\" ||\n\t\tvalue.description.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must contain a non-empty description`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.expectedOutcome !== undefined &&\n\t\tvalue.expectedOutcome !== \"pass\" &&\n\t\tvalue.expectedOutcome !== \"fail\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} expectedOutcome must be pass or fail`,\n\t\t);\n\t}\n\trequireOptionalNonEmptyString(\n\t\tvalue.workspaceManifestPath,\n\t\t`Replay scenario ${label} workspaceManifestPath`,\n\t);\n\tvalidateScriptedReleaseGate(value, label);\n\tif (!Array.isArray(value.frames)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain frames`);\n\t}\n\tif (!isRecord(value.metadata)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain metadata`);\n\t}\n\tif (\n\t\ttypeof value.metadata.recordedAt !== \"string\" ||\n\t\tvalue.metadata.recordedAt.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.recordedAt must be a non-empty string`,\n\t\t);\n\t}\n\tif (!Array.isArray(value.metadata.toolsExpected)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.toolsExpected must be an array`,\n\t\t);\n\t}\n\tfor (const [toolOffset, toolName] of value.metadata.toolsExpected.entries()) {\n\t\tif (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.toolsExpected[${toolOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.metadata.auditEvents !== undefined &&\n\t\t!Array.isArray(value.metadata.auditEvents)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.auditEvents must be an array`,\n\t\t);\n\t}\n\tfor (const [eventOffset, eventType] of (\n\t\tvalue.metadata.auditEvents ?? []\n\t).entries()) {\n\t\tif (typeof eventType !== \"string\" || eventType.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.auditEvents[${eventOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (value.assertions !== undefined && !Array.isArray(value.assertions)) {\n\t\tthrow new Error(`Replay scenario ${label} assertions must be an array`);\n\t}\n\tlet hasWorkspaceManifestAssertion = false;\n\tlet hasWarningWorkspaceManifestAssertion = false;\n\tfor (const [assertionOffset, assertion] of (\n\t\tvalue.assertions ?? []\n\t).entries()) {\n\t\tif (\n\t\t\t!isRecord(assertion) ||\n\t\t\ttypeof assertion.id !== \"string\" ||\n\t\t\ttypeof assertion.kind !== \"string\"\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertionOffset} must contain id and kind`,\n\t\t\t);\n\t\t}\n\t\tif (!SCRIPTED_ASSERTION_KINDS.includes(assertion.kind as never)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} has unknown kind ${assertion.kind}`,\n\t\t\t);\n\t\t}\n\t\tif (assertion.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 (typeof value.workspaceManifestPath !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} workspace_manifest requires 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`Replay scenario ${label} assertion ${assertion.id} requiredWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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 as never),\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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 as never)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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`Replay scenario ${label} assertion ${assertion.id} minWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minToolAdapters`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t!hasWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest gates must include a workspace_manifest assertion`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\thasWarningWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest assertions must use error severity`,\n\t\t);\n\t}\n\tfor (const [frameOffset, frame] of value.frames.entries()) {\n\t\tif (\n\t\t\t!isRecord(frame) ||\n\t\t\t!Number.isInteger(frame.index) ||\n\t\t\t!Array.isArray(frame.statements)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame ${frameOffset} must contain index and statements`,\n\t\t\t);\n\t\t}\n\t\tif (frame.index !== frameOffset) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame indexes must be contiguous, unique, and start at 0; frame ${frameOffset} has index ${frame.index}`,\n\t\t\t);\n\t\t}\n\t\tfor (const [statementOffset, statement] of frame.statements.entries()) {\n\t\t\tif (!isRecord(statement) || typeof statement.kind !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} must contain kind`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"text\" && typeof statement.text !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} text must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"delay\" &&\n\t\t\t\t(typeof statement.ms !== \"number\" ||\n\t\t\t\t\t!Number.isFinite(statement.ms) ||\n\t\t\t\t\tstatement.ms < 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} delay ms must be non-negative`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\t(typeof statement.tool !== \"string\" ||\n\t\t\t\t\tstatement.tool.trim().length === 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} tool_call tool must be a non-empty string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\tstatement.expectedResult !== undefined &&\n\t\t\t\tstatement.expectedResult !== \"success\" &&\n\t\t\t\tstatement.expectedResult !== \"error\" &&\n\t\t\t\tstatement.expectedResult !== \"any\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} expectedResult must be success, error, or any`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tif (statement.type !== \"transient\" && statement.type !== \"fatal\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error type must be transient or fatal`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (typeof statement.message !== \"string\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error message must be a string`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"end\" &&\n\t\t\t\tstatement.reason !== \"complete\" &&\n\t\t\t\tstatement.reason !== \"aborted\" &&\n\t\t\t\tstatement.reason !== \"limit_exceeded\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} end reason is invalid`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t![\n\t\t\t\t\t\"text\",\n\t\t\t\t\t\"delay\",\n\t\t\t\t\t\"tool_call\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t\"wait_for_user\",\n\t\t\t\t\t\"end\",\n\t\t\t\t].includes(statement.kind)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} has unknown kind ${statement.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn value as unknown as ScriptedScenario;\n}\n\nexport function loadScriptedScenario(path: string): ScriptedScenario {\n\treturn parseScriptedScenario(readScenarioJsonSourceSync(path), path);\n}\n\nexport async function loadScriptedScenarioFromSource(\n\tsource: string,\n): Promise<ScriptedScenario> {\n\tlet pending = scriptedScenarioSourceCache.get(source);\n\tif (!pending) {\n\t\tconst label = scenarioSourceLabel(source);\n\t\tpending = readScenarioJsonSource(source).then((value) =>\n\t\t\tparseScriptedScenario(value, label),\n\t\t);\n\t\tscriptedScenarioSourceCache.set(source, pending);\n\t}\n\ttry {\n\t\treturn await pending;\n\t} catch (error) {\n\t\tscriptedScenarioSourceCache.delete(source);\n\t\tthrow error;\n\t}\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\nfunction scriptedAssistantMessage(_model: Model<Api>): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: \"scripted-replay\",\n\t\tprovider: SCRIPTED_REPLAY_PROVIDER,\n\t\tmodel: SCRIPTED_REPLAY_MODEL_ID,\n\t\tusage: zeroUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction replayFrameIndex(context: Context): number {\n\treturn context.messages.filter(\n\t\t(message) =>\n\t\t\tmessage.role === \"assistant\" &&\n\t\t\tmessage.provider === SCRIPTED_REPLAY_PROVIDER,\n\t).length;\n}\n\nfunction isToolResultMessage(value: unknown): value is ToolResultMessage {\n\treturn isRecord(value) && value.role === \"toolResult\";\n}\n\nfunction expectedToolResultError(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tcontext: Context,\n): string | undefined {\n\tif (frameIndex <= 0) return undefined;\n\tconst previousFrame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex - 1,\n\t);\n\tif (!previousFrame) return undefined;\n\tfor (const [\n\t\tstatementIndex,\n\t\tstatement,\n\t] of previousFrame.statements.entries()) {\n\t\tif (\n\t\t\tstatement.kind !== \"tool_call\" ||\n\t\t\tstatement.expectedResult === undefined ||\n\t\t\tstatement.expectedResult === \"any\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst callId = toolCallId(\n\t\t\tscenario,\n\t\t\tpreviousFrame.index,\n\t\t\tstatementIndex,\n\t\t\tstatement,\n\t\t);\n\t\tlet toolResult: ToolResultMessage | undefined;\n\t\tfor (let offset = context.messages.length - 1; offset >= 0; offset -= 1) {\n\t\t\tconst message = context.messages[offset];\n\t\t\tif (\n\t\t\t\tisToolResultMessage(message) &&\n\t\t\t\tmessage.toolCallId === callId &&\n\t\t\t\tmessage.toolName === statement.tool\n\t\t\t) {\n\t\t\t\ttoolResult = message;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!toolResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but no matching tool result was present.`;\n\t\t}\n\t\tconst observed = toolResult.isError ? \"error\" : \"success\";\n\t\tif (observed !== statement.expectedResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but observed ${observed}.`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeToolInput(input: unknown): Record<string, unknown> {\n\treturn isRecord(input) ? input : {};\n}\n\nfunction toolCallId(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tstatementIndex: number,\n\tstatement: Extract<ScriptedStatement, { kind: \"tool_call\" }>,\n): string {\n\treturn (\n\t\tstatement.id ??\n\t\t`replay_${scenario.id}_${String(frameIndex).padStart(3, \"0\")}_${String(\n\t\t\tstatementIndex,\n\t\t).padStart(3, \"0\")}`\n\t);\n}\n\nfunction abortError(): Error {\n\tconst error = new Error(\"Scripted replay aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction checkAbort(\n\tsignal: AbortSignal | undefined,\n\tpartial: AssistantMessage,\n): void {\n\tif (!signal?.aborted) return;\n\tpartial.stopReason = \"aborted\";\n\tthrow abortError();\n}\n\nasync function sleep(\n\tms: number,\n\tsignal: AbortSignal | undefined,\n): Promise<void> {\n\tif (ms <= 0) return;\n\tawait new Promise<void>((resolveSleep, reject) => {\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolveSleep();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tcleanup();\n\t\t\treject(abortError());\n\t\t};\n\t\tif (signal?.aborted) {\n\t\t\tonAbort();\n\t\t\treturn;\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport async function* streamScriptedReplay(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst scenarioPath = process.env.MAESTRO_SCENARIO_PATH;\n\tif (!scenarioPath) {\n\t\tthrow new Error(\"MAESTRO_SCENARIO_PATH is required for scripted replay.\");\n\t}\n\n\tconst scenario = await loadScriptedScenarioFromSource(scenarioPath);\n\tconst frameIndex = replayFrameIndex(context);\n\tconst frame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex,\n\t);\n\tconst partial = scriptedAssistantMessage(model);\n\n\tyield { type: \"start\", partial };\n\n\tconst expectationError = expectedToolResultError(\n\t\tscenario,\n\t\tframeIndex,\n\t\tcontext,\n\t);\n\tif (expectationError) {\n\t\tpartial.stopReason = \"error\";\n\t\tpartial.errorMessage = expectationError;\n\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\treturn;\n\t}\n\n\tif (!frame) {\n\t\tconst contentIndex = partial.content.length;\n\t\tconst text = `Scripted scenario ${scenario.id} complete.`;\n\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\tconst block = partial.content[contentIndex];\n\t\tif (block?.type === \"text\") {\n\t\t\tblock.text = text;\n\t\t}\n\t\tyield { type: \"text_delta\", contentIndex, delta: text, partial };\n\t\tyield { type: \"text_end\", contentIndex, content: text, partial };\n\t\tyield { type: \"done\", reason: \"stop\", message: partial };\n\t\treturn;\n\t}\n\n\tlet emittedToolCall = false;\n\tlet endedByTerminalStatement = false;\n\ttry {\n\t\tfor (const [statementIndex, statement] of frame.statements.entries()) {\n\t\t\tcheckAbort(options.signal, partial);\n\t\t\tif (statement.kind === \"delay\") {\n\t\t\t\tawait sleep(statement.ms, options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"text\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\t\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\t\t\tconst block = partial.content[contentIndex];\n\t\t\t\tif (block?.type !== \"text\") continue;\n\t\t\t\tconst delayPerChar =\n\t\t\t\t\tstatement.streamMs && statement.text.length > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.floor(statement.streamMs / statement.text.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0;\n\t\t\t\tfor (const char of statement.text) {\n\t\t\t\t\tcheckAbort(options.signal, partial);\n\t\t\t\t\tif (delayPerChar > 0) {\n\t\t\t\t\t\tawait sleep(delayPerChar, options.signal);\n\t\t\t\t\t}\n\t\t\t\t\tblock.text += char;\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\tdelta: char,\n\t\t\t\t\t\tpartial,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.text,\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"tool_call\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tconst call: ToolCall = {\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: toolCallId(scenario, frame.index, statementIndex, statement),\n\t\t\t\t\tname: statement.tool,\n\t\t\t\t\targuments: normalizeToolInput(statement.input),\n\t\t\t\t};\n\t\t\t\tpartial.content.push(call);\n\t\t\t\tyield { type: \"toolcall_start\", contentIndex, partial };\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tdelta: JSON.stringify(call.arguments),\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tyield { type: \"toolcall_end\", contentIndex, toolCall: call, partial };\n\t\t\t\temittedToolCall = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tpartial.stopReason = \"error\";\n\t\t\t\tpartial.errorMessage = statement.message;\n\t\t\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (statement.kind === \"wait_for_user\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason = \"stop\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (statement.kind === \"end\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason =\n\t\t\t\t\tstatement.reason === \"limit_exceeded\"\n\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t: statement.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: \"stop\";\n\t\t\t\tif (partial.stopReason === \"aborted\") {\n\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (emittedToolCall && !endedByTerminalStatement) {\n\t\t\tpartial.stopReason = \"toolUse\";\n\t\t}\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\treason:\n\t\t\t\tpartial.stopReason === \"length\"\n\t\t\t\t\t? \"length\"\n\t\t\t\t\t: partial.stopReason === \"toolUse\"\n\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t: \"stop\",\n\t\t\tmessage: partial,\n\t\t};\n\t} catch (error) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scripted.js","sourceRoot":"","sources":["../../../src/agent/providers/scripted.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tMaestroScriptedScenario,\n\tMaestroScriptedStatement,\n} from \"@evalops/contracts\";\nimport { MAESTRO_SCRIPTED_SCENARIO_SCHEMA } from \"@evalops/contracts\";\nimport { isRecord } from \"../../utils/json.js\";\nimport {\n\treadScenarioJsonSource,\n\treadScenarioJsonSourceSync,\n\tscenarioSourceLabel,\n} from \"../scenario-source.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tModel,\n\tStreamOptions,\n\tToolCall,\n\tToolResultMessage,\n} from \"../types.js\";\n\nexport const SCRIPTED_REPLAY_PROVIDER = \"scripted-replay\";\nexport const SCRIPTED_REPLAY_MODEL_ID = \"maestro-replay-v1\";\n\ntype ScriptedStatement = MaestroScriptedStatement;\ntype ScriptedScenario = MaestroScriptedScenario;\n\nconst scriptedScenarioSourceCache = new Map<\n\tstring,\n\tPromise<ScriptedScenario>\n>();\nconst SCRIPTED_ASSERTION_KINDS = [\n\t\"tool_called\",\n\t\"tool_not_called\",\n\t\"file_exists\",\n\t\"file_contents\",\n\t\"workspace_manifest\",\n\t\"audit_event_emitted\",\n] as const;\nconst RELEASE_GATE_TIERS = [\"smoke\", \"regression\", \"gauntlet\"] as const;\nconst REQUIRED_ARTIFACTS = [\n\t\"trajectory\",\n\t\"replay\",\n\t\"score\",\n\t\"inspection\",\n\t\"workspace_manifest\",\n] as const;\nconst HYDRATION_MODES = [\n\t\"manifest_only\",\n\t\"fixture_workspace\",\n\t\"frozen_archive\",\n] as const;\n\nfunction requireOptionalNonEmptyString(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(typeof value !== \"string\" || value.length === 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-empty string`);\n\t}\n}\n\nfunction requireOptionalStringArray(value: unknown, label: string): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Array.isArray(value) ||\n\t\t\tvalue.some((item) => typeof item !== \"string\" || item.length === 0))\n\t) {\n\t\tthrow new Error(`${label} must contain non-empty strings`);\n\t}\n}\n\nfunction requireOptionalNonNegativeInteger(\n\tvalue: unknown,\n\tlabel: string,\n): void {\n\tif (\n\t\tvalue !== undefined &&\n\t\t(!Number.isInteger(value) || (value as number) < 0)\n\t) {\n\t\tthrow new Error(`${label} must be a non-negative integer`);\n\t}\n}\n\nfunction validateScriptedReleaseGate(\n\tvalue: Record<string, unknown>,\n\tlabel: string,\n): void {\n\tconst releaseGate = value.releaseGate;\n\tif (releaseGate === undefined) return;\n\tif (!isRecord(releaseGate)) {\n\t\tthrow new Error(`Replay scenario ${label} releaseGate must be an object`);\n\t}\n\tif (typeof releaseGate.releaseBlocking !== \"boolean\") {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.releaseBlocking must be a boolean`,\n\t\t);\n\t}\n\tif (!RELEASE_GATE_TIERS.includes(releaseGate.tier as never)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.tier must be one of: ${RELEASE_GATE_TIERS.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\t!Array.isArray(releaseGate.requiredArtifacts) ||\n\t\treleaseGate.requiredArtifacts.length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts must not be empty`,\n\t\t);\n\t}\n\tconst unknownArtifacts = releaseGate.requiredArtifacts.filter(\n\t\t(artifact) => !REQUIRED_ARTIFACTS.includes(artifact as never),\n\t);\n\tif (unknownArtifacts.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate.requiredArtifacts contains unknown artifact(s): ${unknownArtifacts.join(\", \")}`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.releaseBlocking === true &&\n\t\t!releaseGate.requiredArtifacts.includes(\"workspace_manifest\")\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking scripted scenarios must require workspace_manifest`,\n\t\t);\n\t}\n\tif (\n\t\treleaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\ttypeof value.workspaceManifestPath !== \"string\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate requires workspace_manifest but workspaceManifestPath is missing`,\n\t\t);\n\t}\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxEvents,\n\t\t`Replay scenario ${label} releaseGate.maxEvents`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxToolCalls,\n\t\t`Replay scenario ${label} releaseGate.maxToolCalls`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxReplayDeltas,\n\t\t`Replay scenario ${label} releaseGate.maxReplayDeltas`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreFailures,\n\t\t`Replay scenario ${label} releaseGate.maxScoreFailures`,\n\t);\n\trequireOptionalNonNegativeInteger(\n\t\treleaseGate.maxScoreWarnings,\n\t\t`Replay scenario ${label} releaseGate.maxScoreWarnings`,\n\t);\n}\n\nexport function parseScriptedScenario(\n\tvalue: unknown,\n\tlabel: string,\n): ScriptedScenario {\n\tif (\n\t\t!isRecord(value) ||\n\t\tvalue.schemaVersion !== MAESTRO_SCRIPTED_SCENARIO_SCHEMA\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must use schemaVersion ${MAESTRO_SCRIPTED_SCENARIO_SCHEMA}`,\n\t\t);\n\t}\n\tif (typeof value.id !== \"string\" || value.id.trim().length === 0) {\n\t\tthrow new Error(`Replay scenario ${label} must contain a non-empty id`);\n\t}\n\tif (\n\t\ttypeof value.description !== \"string\" ||\n\t\tvalue.description.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} must contain a non-empty description`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.expectedOutcome !== undefined &&\n\t\tvalue.expectedOutcome !== \"pass\" &&\n\t\tvalue.expectedOutcome !== \"fail\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} expectedOutcome must be pass or fail`,\n\t\t);\n\t}\n\trequireOptionalNonEmptyString(\n\t\tvalue.workspaceManifestPath,\n\t\t`Replay scenario ${label} workspaceManifestPath`,\n\t);\n\tvalidateScriptedReleaseGate(value, label);\n\tif (!Array.isArray(value.frames)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain frames`);\n\t}\n\tif (!isRecord(value.metadata)) {\n\t\tthrow new Error(`Replay scenario ${label} must contain metadata`);\n\t}\n\tif (\n\t\ttypeof value.metadata.recordedAt !== \"string\" ||\n\t\tvalue.metadata.recordedAt.trim().length === 0\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.recordedAt must be a non-empty string`,\n\t\t);\n\t}\n\tif (!Array.isArray(value.metadata.toolsExpected)) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.toolsExpected must be an array`,\n\t\t);\n\t}\n\tfor (const [toolOffset, toolName] of value.metadata.toolsExpected.entries()) {\n\t\tif (typeof toolName !== \"string\" || toolName.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.toolsExpected[${toolOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.metadata.auditEvents !== undefined &&\n\t\t!Array.isArray(value.metadata.auditEvents)\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} metadata.auditEvents must be an array`,\n\t\t);\n\t}\n\tfor (const [eventOffset, eventType] of (\n\t\tvalue.metadata.auditEvents ?? []\n\t).entries()) {\n\t\tif (typeof eventType !== \"string\" || eventType.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} metadata.auditEvents[${eventOffset}] must be a non-empty string`,\n\t\t\t);\n\t\t}\n\t}\n\tif (value.assertions !== undefined && !Array.isArray(value.assertions)) {\n\t\tthrow new Error(`Replay scenario ${label} assertions must be an array`);\n\t}\n\tlet hasWorkspaceManifestAssertion = false;\n\tlet hasWarningWorkspaceManifestAssertion = false;\n\tfor (const [assertionOffset, assertion] of (\n\t\tvalue.assertions ?? []\n\t).entries()) {\n\t\tif (\n\t\t\t!isRecord(assertion) ||\n\t\t\ttypeof assertion.id !== \"string\" ||\n\t\t\ttypeof assertion.kind !== \"string\"\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertionOffset} must contain id and kind`,\n\t\t\t);\n\t\t}\n\t\tif (!SCRIPTED_ASSERTION_KINDS.includes(assertion.kind as never)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} has unknown kind ${assertion.kind}`,\n\t\t\t);\n\t\t}\n\t\tif (assertion.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 (typeof value.workspaceManifestPath !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} workspace_manifest requires 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`Replay scenario ${label} assertion ${assertion.id} requiredWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalStringArray(\n\t\t\t\tassertion.requiredToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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 as never),\n\t\t\t\t\t))\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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 as never)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} 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`Replay scenario ${label} assertion ${assertion.id} minWorkspaceFiles`,\n\t\t\t);\n\t\t\trequireOptionalNonNegativeInteger(\n\t\t\t\tassertion.minToolAdapters,\n\t\t\t\t`Replay scenario ${label} assertion ${assertion.id} minToolAdapters`,\n\t\t\t);\n\t\t}\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\t!hasWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest gates must include a workspace_manifest assertion`,\n\t\t);\n\t}\n\tif (\n\t\tvalue.releaseGate !== undefined &&\n\t\tisRecord(value.releaseGate) &&\n\t\tvalue.releaseGate.releaseBlocking === true &&\n\t\tArray.isArray(value.releaseGate.requiredArtifacts) &&\n\t\tvalue.releaseGate.requiredArtifacts.includes(\"workspace_manifest\") &&\n\t\thasWarningWorkspaceManifestAssertion\n\t) {\n\t\tthrow new Error(\n\t\t\t`Replay scenario ${label} releaseGate release-blocking workspace_manifest assertions must use error severity`,\n\t\t);\n\t}\n\tfor (const [frameOffset, frame] of value.frames.entries()) {\n\t\tif (\n\t\t\t!isRecord(frame) ||\n\t\t\t!Number.isInteger(frame.index) ||\n\t\t\t!Array.isArray(frame.statements)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame ${frameOffset} must contain index and statements`,\n\t\t\t);\n\t\t}\n\t\tif (frame.index !== frameOffset) {\n\t\t\tthrow new Error(\n\t\t\t\t`Replay scenario ${label} frame indexes must be contiguous, unique, and start at 0; frame ${frameOffset} has index ${frame.index}`,\n\t\t\t);\n\t\t}\n\t\tfor (const [statementOffset, statement] of frame.statements.entries()) {\n\t\t\tif (!isRecord(statement) || typeof statement.kind !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} must contain kind`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"text\" && typeof statement.text !== \"string\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} text must be a string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"delay\" &&\n\t\t\t\t(typeof statement.ms !== \"number\" ||\n\t\t\t\t\t!Number.isFinite(statement.ms) ||\n\t\t\t\t\tstatement.ms < 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} delay ms must be non-negative`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\t(typeof statement.tool !== \"string\" ||\n\t\t\t\t\tstatement.tool.trim().length === 0)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} tool_call tool must be a non-empty string`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"tool_call\" &&\n\t\t\t\tstatement.expectedResult !== undefined &&\n\t\t\t\tstatement.expectedResult !== \"success\" &&\n\t\t\t\tstatement.expectedResult !== \"error\" &&\n\t\t\t\tstatement.expectedResult !== \"any\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} expectedResult must be success, error, or any`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tif (statement.type !== \"transient\" && statement.type !== \"fatal\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error type must be transient or fatal`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (typeof statement.message !== \"string\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} error message must be a string`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstatement.kind === \"end\" &&\n\t\t\t\tstatement.reason !== \"complete\" &&\n\t\t\t\tstatement.reason !== \"aborted\" &&\n\t\t\t\tstatement.reason !== \"limit_exceeded\"\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} end reason is invalid`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t![\n\t\t\t\t\t\"text\",\n\t\t\t\t\t\"delay\",\n\t\t\t\t\t\"tool_call\",\n\t\t\t\t\t\"error\",\n\t\t\t\t\t\"wait_for_user\",\n\t\t\t\t\t\"end\",\n\t\t\t\t].includes(statement.kind)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Replay scenario ${label} frame ${frame.index} statement ${statementOffset} has unknown kind ${statement.kind}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn value as unknown as ScriptedScenario;\n}\n\nexport function loadScriptedScenario(path: string): ScriptedScenario {\n\treturn parseScriptedScenario(readScenarioJsonSourceSync(path), path);\n}\n\nexport async function loadScriptedScenarioFromSource(\n\tsource: string,\n): Promise<ScriptedScenario> {\n\tlet pending = scriptedScenarioSourceCache.get(source);\n\tif (!pending) {\n\t\tconst label = scenarioSourceLabel(source);\n\t\tpending = readScenarioJsonSource(source).then((value) =>\n\t\t\tparseScriptedScenario(value, label),\n\t\t);\n\t\tscriptedScenarioSourceCache.set(source, pending);\n\t}\n\ttry {\n\t\treturn await pending;\n\t} catch (error) {\n\t\tscriptedScenarioSourceCache.delete(source);\n\t\tthrow error;\n\t}\n}\n\nfunction zeroUsage(): AssistantMessage[\"usage\"] {\n\treturn {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\tcost: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotal: 0,\n\t\t},\n\t};\n}\n\nfunction scriptedAssistantMessage(_model: Model<Api>): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: \"scripted-replay\",\n\t\tprovider: SCRIPTED_REPLAY_PROVIDER,\n\t\tmodel: SCRIPTED_REPLAY_MODEL_ID,\n\t\tusage: zeroUsage(),\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction replayFrameIndex(context: Context): number {\n\treturn context.messages.filter(\n\t\t(message) =>\n\t\t\tmessage.role === \"assistant\" &&\n\t\t\tmessage.provider === SCRIPTED_REPLAY_PROVIDER,\n\t).length;\n}\n\nfunction isToolResultMessage(value: unknown): value is ToolResultMessage {\n\treturn isRecord(value) && value.role === \"toolResult\";\n}\n\nfunction expectedToolResultError(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tcontext: Context,\n): string | undefined {\n\tif (frameIndex <= 0) return undefined;\n\tconst previousFrame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex - 1,\n\t);\n\tif (!previousFrame) return undefined;\n\tfor (const [\n\t\tstatementIndex,\n\t\tstatement,\n\t] of previousFrame.statements.entries()) {\n\t\tif (\n\t\t\tstatement.kind !== \"tool_call\" ||\n\t\t\tstatement.expectedResult === undefined ||\n\t\t\tstatement.expectedResult === \"any\"\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst callId = toolCallId(\n\t\t\tscenario,\n\t\t\tpreviousFrame.index,\n\t\t\tstatementIndex,\n\t\t\tstatement,\n\t\t);\n\t\tlet toolResult: ToolResultMessage | undefined;\n\t\tfor (let offset = context.messages.length - 1; offset >= 0; offset -= 1) {\n\t\t\tconst message = context.messages[offset];\n\t\t\tif (\n\t\t\t\tisToolResultMessage(message) &&\n\t\t\t\tmessage.toolCallId === callId &&\n\t\t\t\tmessage.toolName === statement.tool\n\t\t\t) {\n\t\t\t\ttoolResult = message;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!toolResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but no matching tool result was present.`;\n\t\t}\n\t\tconst observed = toolResult.isError ? \"error\" : \"success\";\n\t\tif (observed !== statement.expectedResult) {\n\t\t\treturn `Scripted replay expected ${statement.expectedResult} result for tool call ${callId}, but observed ${observed}.`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeToolInput(input: unknown): Record<string, unknown> {\n\treturn isRecord(input) ? input : {};\n}\n\nfunction toolCallId(\n\tscenario: ScriptedScenario,\n\tframeIndex: number,\n\tstatementIndex: number,\n\tstatement: Extract<ScriptedStatement, { kind: \"tool_call\" }>,\n): string {\n\treturn (\n\t\tstatement.id ??\n\t\t`replay_${scenario.id}_${String(frameIndex).padStart(3, \"0\")}_${String(\n\t\t\tstatementIndex,\n\t\t).padStart(3, \"0\")}`\n\t);\n}\n\nfunction abortError(): Error {\n\tconst error = new Error(\"Scripted replay aborted\");\n\terror.name = \"AbortError\";\n\treturn error;\n}\n\nfunction checkAbort(\n\tsignal: AbortSignal | undefined,\n\tpartial: AssistantMessage,\n): void {\n\tif (!signal?.aborted) return;\n\tpartial.stopReason = \"aborted\";\n\tthrow abortError();\n}\n\nasync function sleep(\n\tms: number,\n\tsignal: AbortSignal | undefined,\n): Promise<void> {\n\tif (ms <= 0) return;\n\tawait new Promise<void>((resolveSleep, reject) => {\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t};\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcleanup();\n\t\t\tresolveSleep();\n\t\t}, ms);\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timeout);\n\t\t\tcleanup();\n\t\t\treject(abortError());\n\t\t};\n\t\tif (signal?.aborted) {\n\t\t\tonAbort();\n\t\t\treturn;\n\t\t}\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport async function* streamScriptedReplay(\n\tmodel: Model<Api>,\n\tcontext: Context,\n\toptions: StreamOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst scenarioPath = process.env.MAESTRO_SCENARIO_PATH;\n\tif (!scenarioPath) {\n\t\tthrow new Error(\"MAESTRO_SCENARIO_PATH is required for scripted replay.\");\n\t}\n\n\tconst scenario = await loadScriptedScenarioFromSource(scenarioPath);\n\tconst frameIndex = replayFrameIndex(context);\n\tconst frame = scenario.frames.find(\n\t\t(candidate) => candidate.index === frameIndex,\n\t);\n\tconst partial = scriptedAssistantMessage(model);\n\n\tyield { type: \"start\", partial };\n\n\tconst expectationError = expectedToolResultError(\n\t\tscenario,\n\t\tframeIndex,\n\t\tcontext,\n\t);\n\tif (expectationError) {\n\t\tpartial.stopReason = \"error\";\n\t\tpartial.errorMessage = expectationError;\n\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\treturn;\n\t}\n\n\tif (!frame) {\n\t\tconst contentIndex = partial.content.length;\n\t\tconst text = `Scripted scenario ${scenario.id} complete.`;\n\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\tconst block = partial.content[contentIndex];\n\t\tif (block?.type === \"text\") {\n\t\t\tblock.text = text;\n\t\t}\n\t\tyield { type: \"text_delta\", contentIndex, delta: text, partial };\n\t\tyield { type: \"text_end\", contentIndex, content: text, partial };\n\t\tyield { type: \"done\", reason: \"stop\", message: partial };\n\t\treturn;\n\t}\n\n\tlet emittedToolCall = false;\n\tlet endedByTerminalStatement = false;\n\ttry {\n\t\tfor (const [statementIndex, statement] of frame.statements.entries()) {\n\t\t\tcheckAbort(options.signal, partial);\n\t\t\tif (statement.kind === \"delay\") {\n\t\t\t\tawait sleep(statement.ms, options.signal);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"text\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tpartial.content.push({ type: \"text\", text: \"\" });\n\t\t\t\tyield { type: \"text_start\", contentIndex, partial };\n\t\t\t\tconst block = partial.content[contentIndex];\n\t\t\t\tif (block?.type !== \"text\") continue;\n\t\t\t\tconst delayPerChar =\n\t\t\t\t\tstatement.streamMs && statement.text.length > 0\n\t\t\t\t\t\t? Math.max(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tMath.floor(statement.streamMs / statement.text.length),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: 0;\n\t\t\t\tfor (const char of statement.text) {\n\t\t\t\t\tcheckAbort(options.signal, partial);\n\t\t\t\t\tif (delayPerChar > 0) {\n\t\t\t\t\t\tawait sleep(delayPerChar, options.signal);\n\t\t\t\t\t}\n\t\t\t\t\tblock.text += char;\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\tcontentIndex,\n\t\t\t\t\t\tdelta: char,\n\t\t\t\t\t\tpartial,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tcontent: block.text,\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"tool_call\") {\n\t\t\t\tconst contentIndex = partial.content.length;\n\t\t\t\tconst call: ToolCall = {\n\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\tid: toolCallId(scenario, frame.index, statementIndex, statement),\n\t\t\t\t\tname: statement.tool,\n\t\t\t\t\targuments: normalizeToolInput(statement.input),\n\t\t\t\t};\n\t\t\t\tpartial.content.push(call);\n\t\t\t\tyield { type: \"toolcall_start\", contentIndex, partial };\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\tcontentIndex,\n\t\t\t\t\tdelta: JSON.stringify(call.arguments),\n\t\t\t\t\tpartial,\n\t\t\t\t};\n\t\t\t\tyield { type: \"toolcall_end\", contentIndex, toolCall: call, partial };\n\t\t\t\temittedToolCall = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (statement.kind === \"error\") {\n\t\t\t\tpartial.stopReason = \"error\";\n\t\t\t\tpartial.errorMessage = statement.message;\n\t\t\t\tyield { type: \"error\", reason: \"error\", error: partial };\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (statement.kind === \"wait_for_user\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason = \"stop\";\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (statement.kind === \"end\") {\n\t\t\t\tendedByTerminalStatement = true;\n\t\t\t\tpartial.stopReason =\n\t\t\t\t\tstatement.reason === \"limit_exceeded\"\n\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t: statement.reason === \"aborted\"\n\t\t\t\t\t\t\t? \"aborted\"\n\t\t\t\t\t\t\t: \"stop\";\n\t\t\t\tif (partial.stopReason === \"aborted\") {\n\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (emittedToolCall && !endedByTerminalStatement) {\n\t\t\tpartial.stopReason = \"toolUse\";\n\t\t}\n\t\tyield {\n\t\t\ttype: \"done\",\n\t\t\treason:\n\t\t\t\tpartial.stopReason === \"length\"\n\t\t\t\t\t? \"length\"\n\t\t\t\t\t: partial.stopReason === \"toolUse\"\n\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t: \"stop\",\n\t\t\tmessage: partial,\n\t\t};\n\t} catch (error) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/agent/providers/validation.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2CvD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,QAAQ,GAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8DzB"}
|
|
@@ -2,6 +2,7 @@ import { Value } from "@sinclair/typebox/value";
|
|
|
2
2
|
import { Ajv, } from "ajv";
|
|
3
3
|
import addFormatsModule from "ajv-formats";
|
|
4
4
|
import { sanitizePayload } from "../../safety/context-firewall.js";
|
|
5
|
+
import { isRecord } from "../../utils/json.js";
|
|
5
6
|
import { createLogger } from "../../utils/logger.js";
|
|
6
7
|
import { resolveDefaultExport } from "../../utils/module-interop.js";
|
|
7
8
|
import { sanitizeWithStaticMask } from "../../utils/secret-redactor.js";
|
|
@@ -92,7 +93,4 @@ export function validateToolArguments(tool, toolCall) {
|
|
|
92
93
|
const errorMessage = `Validation failed for tool "${toolCall.name}":\n${errors}\n\nReceived arguments (sanitized):\n${trimmedArgsJson}`;
|
|
93
94
|
throw new Error(errorMessage);
|
|
94
95
|
}
|
|
95
|
-
function isRecord(value) {
|
|
96
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
97
|
-
}
|
|
98
96
|
//# sourceMappingURL=validation.js.map
|