@adcp/sdk 14.0.0-rc.37 → 14.0.0-rc.39
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/bin/adcp-storyboard-summary.js +286 -0
- package/bin/adcp.js +221 -10
- package/dist/lib/conformance/schemaLoader.d.mts +1 -1
- package/dist/lib/conformance/schemaLoader.d.ts +1 -1
- package/dist/lib/core/AgentClient.d.mts +6 -1
- package/dist/lib/core/AgentClient.d.ts +6 -1
- package/dist/lib/core/AgentClient.js +9 -0
- package/dist/lib/core/AgentClient.mjs +9 -0
- package/dist/lib/core/ConversationTypes.d.mts +29 -0
- package/dist/lib/core/ConversationTypes.d.ts +29 -0
- package/dist/lib/core/SingleAgentClient.d.mts +3 -1
- package/dist/lib/core/SingleAgentClient.d.ts +3 -1
- package/dist/lib/core/SingleAgentClient.js +9 -1
- package/dist/lib/core/SingleAgentClient.mjs +9 -1
- package/dist/lib/core/TaskExecutor.d.mts +13 -1
- package/dist/lib/core/TaskExecutor.d.ts +13 -1
- package/dist/lib/core/TaskExecutor.js +216 -18
- package/dist/lib/core/TaskExecutor.mjs +216 -19
- package/dist/lib/index.d.mts +5 -2
- package/dist/lib/index.d.ts +5 -2
- package/dist/lib/index.js +10 -1
- package/dist/lib/index.mjs +10 -1
- package/dist/lib/media-buy/action-assessment.d.mts +77 -0
- package/dist/lib/media-buy/action-assessment.d.ts +77 -0
- package/dist/lib/media-buy/action-assessment.js +300 -0
- package/dist/lib/media-buy/action-assessment.mjs +284 -0
- package/dist/lib/media-buy/action-constraints.d.mts +9 -0
- package/dist/lib/media-buy/action-constraints.d.ts +9 -0
- package/dist/lib/media-buy/action-constraints.js +170 -0
- package/dist/lib/media-buy/action-constraints.mjs +146 -0
- package/dist/lib/media-buy/action-contracts.d.mts +40 -0
- package/dist/lib/media-buy/action-contracts.d.ts +40 -0
- package/dist/lib/media-buy/action-contracts.js +304 -0
- package/dist/lib/media-buy/action-contracts.mjs +267 -0
- package/dist/lib/media-buy/action-metadata.generated.d.mts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.d.ts +37 -0
- package/dist/lib/media-buy/action-metadata.generated.js +128 -0
- package/dist/lib/media-buy/action-metadata.generated.mjs +101 -0
- package/dist/lib/media-buy/action-types.d.mts +106 -0
- package/dist/lib/media-buy/action-types.d.ts +106 -0
- package/dist/lib/{types/v3-1-beta/tools.generated.js → media-buy/action-types.js} +2 -2
- package/dist/lib/media-buy/actions.d.mts +6 -0
- package/dist/lib/media-buy/actions.d.ts +6 -0
- package/dist/lib/media-buy/actions.js +38 -0
- package/dist/lib/media-buy/actions.mjs +9 -0
- package/dist/lib/media-buy/available-actions.d.mts +2 -1
- package/dist/lib/media-buy/available-actions.d.ts +2 -1
- package/dist/lib/media-buy/available-actions.js +4 -3
- package/dist/lib/media-buy/available-actions.mjs +4 -3
- package/dist/lib/media-buy/compatibility.js +3 -0
- package/dist/lib/media-buy/compatibility.mjs +3 -0
- package/dist/lib/media-buy/index.d.mts +4 -0
- package/dist/lib/media-buy/index.d.ts +4 -0
- package/dist/lib/media-buy/index.js +3 -1
- package/dist/lib/media-buy/index.mjs +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.mts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.d.ts +1 -0
- package/dist/lib/media-buy/legacy-action-ids.js +50 -0
- package/dist/lib/media-buy/legacy-action-ids.mjs +26 -0
- package/dist/lib/media-buy/mutations.d.mts +70 -0
- package/dist/lib/media-buy/mutations.d.ts +70 -0
- package/dist/lib/media-buy/mutations.js +525 -0
- package/dist/lib/media-buy/mutations.mjs +498 -0
- package/dist/lib/media-buy/preflight.d.mts +20 -69
- package/dist/lib/media-buy/preflight.d.ts +20 -69
- package/dist/lib/media-buy/preflight.js +100 -336
- package/dist/lib/media-buy/preflight.mjs +111 -333
- package/dist/lib/media-buy/targeting-input.d.mts +7 -4
- package/dist/lib/media-buy/targeting-input.d.ts +7 -4
- package/dist/lib/media-buy/types.d.mts +55 -7
- package/dist/lib/media-buy/types.d.ts +55 -7
- package/dist/lib/protocols/rawResponseCapture.d.mts +12 -0
- package/dist/lib/protocols/rawResponseCapture.d.ts +12 -0
- package/dist/lib/protocols/rawResponseCapture.js +33 -3
- package/dist/lib/protocols/rawResponseCapture.mjs +32 -3
- package/dist/lib/registry/types.generated.d.mts +377 -9
- package/dist/lib/registry/types.generated.d.ts +377 -9
- package/dist/lib/reporting/content-mismatch.d.mts +126 -0
- package/dist/lib/reporting/content-mismatch.d.ts +126 -0
- package/dist/lib/reporting/content-mismatch.js +90 -0
- package/dist/lib/reporting/content-mismatch.mjs +66 -0
- package/dist/lib/reporting/evidence.d.mts +1 -0
- package/dist/lib/reporting/evidence.d.ts +1 -0
- package/dist/lib/reporting/evidence.js +32 -3
- package/dist/lib/reporting/evidence.mjs +31 -3
- package/dist/lib/reporting/index.d.mts +3 -1
- package/dist/lib/reporting/index.d.ts +3 -1
- package/dist/lib/reporting/index.js +3 -0
- package/dist/lib/reporting/index.mjs +2 -0
- package/dist/lib/reporting/ledger/handler.d.mts +51 -1
- package/dist/lib/reporting/ledger/handler.d.ts +51 -1
- package/dist/lib/reporting/ledger/handler.js +306 -38
- package/dist/lib/reporting/ledger/handler.mjs +304 -37
- package/dist/lib/reporting/ledger/health.d.mts +12 -0
- package/dist/lib/reporting/ledger/health.d.ts +12 -0
- package/dist/lib/reporting/ledger/health.js +15 -2
- package/dist/lib/reporting/ledger/health.mjs +13 -1
- package/dist/lib/reporting/ledger/index.d.mts +3 -0
- package/dist/lib/reporting/ledger/index.d.ts +3 -0
- package/dist/lib/reporting/ledger/index.js +7 -1
- package/dist/lib/reporting/ledger/index.mjs +3 -0
- package/dist/lib/reporting/ledger/lifecycle.d.mts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.d.ts +31 -4
- package/dist/lib/reporting/ledger/lifecycle.js +244 -37
- package/dist/lib/reporting/ledger/lifecycle.mjs +244 -37
- package/dist/lib/reporting/ledger/managed-postgres.d.mts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.d.ts +231 -0
- package/dist/lib/reporting/ledger/managed-postgres.js +1797 -0
- package/dist/lib/reporting/ledger/managed-postgres.mjs +1776 -0
- package/dist/lib/reporting/ledger/managed.d.mts +355 -0
- package/dist/lib/reporting/ledger/managed.d.ts +355 -0
- package/dist/lib/reporting/ledger/managed.js +661 -0
- package/dist/lib/reporting/ledger/managed.mjs +633 -0
- package/dist/lib/reporting/ledger/notification-activity.d.mts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.d.ts +222 -0
- package/dist/lib/reporting/ledger/notification-activity.js +1139 -0
- package/dist/lib/reporting/ledger/notification-activity.mjs +1110 -0
- package/dist/lib/reporting/ledger/postgres.d.mts +161 -1
- package/dist/lib/reporting/ledger/postgres.d.ts +161 -1
- package/dist/lib/reporting/ledger/postgres.js +1153 -21
- package/dist/lib/reporting/ledger/postgres.mjs +1152 -21
- package/dist/lib/reporting/ledger/producer.d.mts +8 -0
- package/dist/lib/reporting/ledger/producer.d.ts +8 -0
- package/dist/lib/reporting/ledger/producer.js +146 -52
- package/dist/lib/reporting/ledger/producer.mjs +146 -51
- package/dist/lib/reporting/ledger/types.d.mts +358 -1
- package/dist/lib/reporting/ledger/types.d.ts +358 -1
- package/dist/lib/reporting/ledger/types.js +3 -0
- package/dist/lib/reporting/ledger/types.mjs +2 -0
- package/dist/lib/reporting/reconciliation.d.mts +362 -2
- package/dist/lib/reporting/reconciliation.d.ts +362 -2
- package/dist/lib/reporting/reconciliation.js +1051 -7
- package/dist/lib/reporting/reconciliation.mjs +1053 -7
- package/dist/lib/reporting/service/conformance.d.mts +35 -0
- package/dist/lib/reporting/service/conformance.d.ts +35 -0
- package/dist/lib/reporting/service/conformance.js +89 -0
- package/dist/lib/reporting/service/conformance.mjs +68 -0
- package/dist/lib/reporting/service/index.d.mts +182 -0
- package/dist/lib/reporting/service/index.d.ts +182 -0
- package/dist/lib/reporting/service/index.js +793 -0
- package/dist/lib/reporting/service/index.mjs +787 -0
- package/dist/lib/reporting/source/index.d.mts +2 -1
- package/dist/lib/reporting/source/index.d.ts +2 -1
- package/dist/lib/reporting/source/index.js +16 -3
- package/dist/lib/reporting/source/index.mjs +12 -1
- package/dist/lib/reporting/source/inline.d.mts +88 -1
- package/dist/lib/reporting/source/inline.d.ts +88 -1
- package/dist/lib/reporting/source/inline.js +1161 -163
- package/dist/lib/reporting/source/inline.mjs +1166 -163
- package/dist/lib/reporting/source/manifest.js +12 -7
- package/dist/lib/reporting/source/manifest.mjs +12 -7
- package/dist/lib/reporting/source/source.d.mts +26 -0
- package/dist/lib/reporting/source/source.d.ts +26 -0
- package/dist/lib/reporting/source/source.js +71 -2
- package/dist/lib/reporting/source/source.mjs +65 -1
- package/dist/lib/schemas/index.d.mts +22 -1
- package/dist/lib/schemas/index.d.ts +22 -1
- package/dist/lib/schemas/index.js +7 -0
- package/dist/lib/schemas/index.mjs +7 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +18 -0
- package/dist/lib/server/create-adcp-server.d.ts +18 -0
- package/dist/lib/server/create-adcp-server.js +52 -2
- package/dist/lib/server/create-adcp-server.mjs +52 -2
- package/dist/lib/server/decisioning/account.d.mts +1 -1
- package/dist/lib/server/decisioning/account.d.ts +1 -1
- package/dist/lib/server/decisioning/index.d.mts +1 -0
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/platform.d.mts +3 -0
- package/dist/lib/server/decisioning/platform.d.ts +3 -0
- package/dist/lib/server/decisioning/runtime/from-platform.js +88 -10
- package/dist/lib/server/decisioning/runtime/from-platform.mjs +88 -10
- package/dist/lib/server/decisioning/specialisms/reporting.d.mts +38 -0
- package/dist/lib/server/decisioning/specialisms/reporting.d.ts +38 -0
- package/dist/lib/{types/v3-1-beta/index.js → server/decisioning/specialisms/reporting.js} +2 -8
- package/dist/lib/server/decisioning/specialisms/reporting.mjs +0 -0
- package/dist/lib/server/index.d.mts +4 -2
- package/dist/lib/server/index.d.ts +4 -2
- package/dist/lib/server/index.js +5 -0
- package/dist/lib/server/index.mjs +4 -0
- package/dist/lib/server/media-buy-action-resolver.d.mts +63 -0
- package/dist/lib/server/media-buy-action-resolver.d.ts +63 -0
- package/dist/lib/server/media-buy-action-resolver.js +297 -0
- package/dist/lib/server/media-buy-action-resolver.mjs +285 -0
- package/dist/lib/server/media-buy-actions.d.mts +7 -8
- package/dist/lib/server/media-buy-actions.d.ts +7 -8
- package/dist/lib/server/media-buy-actions.js +57 -14
- package/dist/lib/server/media-buy-actions.mjs +63 -14
- package/dist/lib/server/notification-subscriptions/index.d.mts +2 -2
- package/dist/lib/server/notification-subscriptions/index.d.ts +2 -2
- package/dist/lib/server/notification-subscriptions/index.js +2 -0
- package/dist/lib/server/notification-subscriptions/index.mjs +2 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +3 -1
- package/dist/lib/server/notification-subscriptions/postgres-runtime.js +1 -0
- package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +1 -0
- package/dist/lib/server/notification-subscriptions/runtime.d.mts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.d.ts +12 -1
- package/dist/lib/server/notification-subscriptions/runtime.js +102 -16
- package/dist/lib/server/notification-subscriptions/runtime.mjs +101 -16
- package/dist/lib/server/notification-subscriptions/types.d.mts +104 -1
- package/dist/lib/server/notification-subscriptions/types.d.ts +104 -1
- package/dist/lib/server/webhook-emitter.d.mts +40 -5
- package/dist/lib/server/webhook-emitter.d.ts +40 -5
- package/dist/lib/server/webhook-emitter.js +23 -12
- package/dist/lib/server/webhook-emitter.mjs +23 -12
- package/dist/lib/storage/interfaces.d.mts +14 -2
- package/dist/lib/storage/interfaces.d.ts +14 -2
- package/dist/lib/testing/compliance/comply.d.mts +9 -3
- package/dist/lib/testing/compliance/comply.d.ts +9 -3
- package/dist/lib/testing/compliance/comply.js +158 -3
- package/dist/lib/testing/compliance/comply.mjs +159 -4
- package/dist/lib/testing/compliance/storyboard-tracks.js +7 -5
- package/dist/lib/testing/compliance/storyboard-tracks.mjs +7 -5
- package/dist/lib/testing/compliance/summary.js +10 -1
- package/dist/lib/testing/compliance/summary.mjs +10 -1
- package/dist/lib/testing/index.d.mts +1 -1
- package/dist/lib/testing/index.d.ts +1 -1
- package/dist/lib/testing/index.js +2 -0
- package/dist/lib/testing/index.mjs +3 -1
- package/dist/lib/testing/storyboard/agent-routing.d.mts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.d.ts +12 -43
- package/dist/lib/testing/storyboard/agent-routing.js +75 -13
- package/dist/lib/testing/storyboard/agent-routing.mjs +70 -12
- package/dist/lib/testing/storyboard/index.d.mts +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +1 -0
- package/dist/lib/testing/storyboard/index.js +3 -0
- package/dist/lib/testing/storyboard/index.mjs +2 -0
- package/dist/lib/testing/storyboard/junit.d.mts +1 -1
- package/dist/lib/testing/storyboard/junit.d.ts +1 -1
- package/dist/lib/testing/storyboard/junit.js +21 -2
- package/dist/lib/testing/storyboard/junit.mjs +21 -2
- package/dist/lib/testing/storyboard/probes.d.mts +130 -0
- package/dist/lib/testing/storyboard/probes.d.ts +130 -0
- package/dist/lib/testing/storyboard/probes.js +682 -10
- package/dist/lib/testing/storyboard/probes.mjs +683 -3
- package/dist/lib/testing/storyboard/request-signing/builder.d.mts +16 -5
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts +16 -5
- package/dist/lib/testing/storyboard/request-signing/grader.d.mts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts +44 -1
- package/dist/lib/testing/storyboard/request-signing/grader.js +46 -22
- package/dist/lib/testing/storyboard/request-signing/grader.mjs +43 -21
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +86 -11
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +119 -25
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +117 -26
- package/dist/lib/testing/storyboard/request-signing/synthesize.js +22 -2
- package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +22 -2
- package/dist/lib/testing/storyboard/runner.d.mts +103 -0
- package/dist/lib/testing/storyboard/runner.d.ts +103 -0
- package/dist/lib/testing/storyboard/runner.js +1090 -268
- package/dist/lib/testing/storyboard/runner.mjs +1096 -261
- package/dist/lib/testing/storyboard/seeding.d.mts +4 -1
- package/dist/lib/testing/storyboard/seeding.d.ts +4 -1
- package/dist/lib/testing/storyboard/seeding.js +55 -24
- package/dist/lib/testing/storyboard/seeding.mjs +55 -24
- package/dist/lib/testing/storyboard/test-kit.d.mts +37 -3
- package/dist/lib/testing/storyboard/test-kit.d.ts +37 -3
- package/dist/lib/testing/storyboard/test-kit.js +8 -2
- package/dist/lib/testing/storyboard/test-kit.mjs +7 -2
- package/dist/lib/testing/storyboard/types.d.mts +132 -10
- package/dist/lib/testing/storyboard/types.d.ts +132 -10
- package/dist/lib/testing/storyboard/types.js +17 -0
- package/dist/lib/testing/storyboard/types.mjs +16 -0
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/validations.js +16 -0
- package/dist/lib/testing/storyboard/validations.mjs +16 -0
- package/dist/lib/testing/test-controller.d.mts +1 -1
- package/dist/lib/testing/test-controller.d.ts +1 -1
- package/dist/lib/types/buy-products.d.ts +71 -6
- package/dist/lib/types/control-media-buy.d.ts +25 -11
- package/dist/lib/types/core.generated.d.mts +69 -10
- package/dist/lib/types/core.generated.d.ts +69 -10
- package/dist/lib/types/create-media-buy.d.ts +71 -6
- package/dist/lib/types/forward-compat-error-codes.d.mts +7 -6
- package/dist/lib/types/forward-compat-error-codes.d.ts +7 -6
- package/dist/lib/types/index.d.mts +2 -2
- package/dist/lib/types/index.d.ts +2 -2
- package/dist/lib/types/schemas.generated.d.ts +8040 -8116
- package/dist/lib/types/schemas.generated.js +1074 -309
- package/dist/lib/types/schemas.generated.mjs +1068 -309
- package/dist/lib/types/tools.generated.d.mts +65 -6
- package/dist/lib/types/tools.generated.d.ts +65 -6
- package/dist/lib/types/update-media-buy.d.ts +71 -6
- package/dist/lib/utils/redact-secrets.d.mts +1 -1
- package/dist/lib/utils/redact-secrets.d.ts +1 -1
- package/dist/lib/utils/redact-secrets.js +1 -1
- package/dist/lib/utils/redact-secrets.mjs +1 -1
- package/dist/lib/v2/projection/cache-versions.d.mts +0 -1
- package/dist/lib/v2/projection/cache-versions.d.ts +0 -1
- package/dist/lib/v2/projection/cache-versions.js +1 -15
- package/dist/lib/v2/projection/cache-versions.mjs +1 -14
- package/dist/lib/v2/projection/canonical-properties.js +2 -2
- package/dist/lib/v2/projection/canonical-properties.mjs +3 -3
- package/dist/lib/v2/projection/registry.d.mts +1 -1
- package/dist/lib/v2/projection/registry.d.ts +1 -1
- package/dist/lib/v2/projection/registry.js +2 -2
- package/dist/lib/v2/projection/registry.mjs +3 -3
- package/dist/lib/validation/schema-loader.d.mts +9 -1
- package/dist/lib/validation/schema-loader.d.ts +9 -1
- package/dist/lib/validation/schema-loader.js +65 -8
- package/dist/lib/validation/schema-loader.mjs +64 -8
- package/dist/lib/version.d.mts +5 -5
- package/dist/lib/version.d.ts +5 -5
- package/dist/lib/version.js +3 -8
- package/dist/lib/version.mjs +3 -8
- package/dist/lib/wholesale-feed-sync/index.d.mts +1 -0
- package/dist/lib/wholesale-feed-sync/index.d.ts +1 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.mts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.d.ts +42 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.js +16 -0
- package/dist/lib/wholesale-feed-sync/protocol-types.mjs +0 -0
- package/dist/lib/wholesale-feed-sync/sync.d.mts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.d.ts +6 -6
- package/dist/lib/wholesale-feed-sync/sync.js +3 -1
- package/dist/lib/wholesale-feed-sync/sync.mjs +3 -1
- package/dist/lib/wholesale-feed-sync/types.d.mts +15 -14
- package/dist/lib/wholesale-feed-sync/types.d.ts +15 -14
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.mts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.d.ts +7 -5
- package/dist/lib/wholesale-feed-sync/webhook-notification.js +45 -0
- package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +44 -0
- package/docs/CLI.md +1 -1
- package/docs/TYPE-SUMMARY.md +118 -4
- package/docs/guides/ASYNC-API-REFERENCE.md +62 -1
- package/docs/guides/ASYNC-DEVELOPER-GUIDE.md +25 -0
- package/docs/guides/ASYNC-DOCUMENTATION-INDEX.md +3 -0
- package/docs/guides/BUYER-QUICKSTART-3.2.md +5 -0
- package/docs/guides/DURABLE-BUYER-WRITES.md +337 -0
- package/docs/guides/EXISTING-PLATFORM.md +80 -1
- package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +57 -0
- package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
- package/docs/guides/REPORTING-LEDGER.md +654 -3
- package/docs/guides/REPORTING-RECONCILIATION.md +50 -0
- package/docs/guides/REPORTING-SOURCE-EXECUTOR.md +63 -1
- package/docs/guides/SELLER-QUICKSTART-3.2.md +2 -0
- package/docs/guides/VALIDATE-YOUR-AGENT.md +35 -0
- package/docs/guides/idempotency-crash-recovery.md +4 -0
- package/docs/llms.txt +4 -2
- package/docs/migration-14.x-rc-worksheet.md +60 -5
- package/docs/migration-7.9-to-7.10.md +7 -5
- package/examples/README.md +17 -0
- package/examples/durable-buyer-writes/caller.ts +745 -0
- package/examples/durable-buyer-writes/worker.ts +240 -0
- package/examples/reliable-reporting-service/README.md +100 -0
- package/examples/seller-3.2-starter.ts +7 -8
- package/examples/targeting-input-existing-platform.ts +153 -0
- package/package.json +41 -29
- package/skills/build-seller-agent/SKILL.md +2 -0
- package/skills/build-seller-agent/specialisms/signed-requests.md +11 -1
- package/skills/cross-cutting.md +28 -11
- package/compliance/cache/3.1.0-beta.7/domains/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/domains/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/domains/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/domains/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/domains/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/domains/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/index.json +0 -356
- package/compliance/cache/3.1.0-beta.7/protocols/brand/index.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -415
- package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -454
- package/compliance/cache/3.1.0-beta.7/protocols/creative/index.yaml +0 -339
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/billing_out_of_band.yaml +0 -153
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
- package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/native_in_feed.yaml +0 -543
- package/compliance/cache/3.1.0-beta.7/protocols/governance/index.yaml +0 -682
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/index.yaml +0 -781
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -380
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/available_actions.yaml +0 -565
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/canonical_formats.yaml +0 -711
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -234
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_reception.yaml +0 -247
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -357
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -633
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_approved.yaml +0 -214
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_conditions.yaml +0 -199
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied.yaml +0 -204
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -289
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -244
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -428
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -373
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -399
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -517
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -823
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_products.yaml +0 -148
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
- package/compliance/cache/3.1.0-beta.7/protocols/media-buy/state-machine.yaml +0 -442
- package/compliance/cache/3.1.0-beta.7/protocols/signals/index.yaml +0 -266
- package/compliance/cache/3.1.0-beta.7/protocols/sponsored-intelligence/index.yaml +0 -256
- package/compliance/cache/3.1.0-beta.7/specialisms/audience-sync/index.yaml +0 -313
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/index.yaml +0 -350
- package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -226
- package/compliance/cache/3.1.0-beta.7/specialisms/collection-lists/index.yaml +0 -359
- package/compliance/cache/3.1.0-beta.7/specialisms/content-standards/index.yaml +0 -572
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-ad-server/index.yaml +0 -409
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/generative-seller.yaml +0 -807
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/index.yaml +0 -758
- package/compliance/cache/3.1.0-beta.7/specialisms/creative-template/index.yaml +0 -510
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/index.yaml +0 -143
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-delivery-monitor/index.yaml +0 -441
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/denied.yaml +0 -221
- package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/index.yaml +0 -330
- package/compliance/cache/3.1.0-beta.7/specialisms/property-lists/index.yaml +0 -482
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-broadcast-tv/index.yaml +0 -738
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-catalog-driven/index.yaml +0 -840
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-guaranteed/index.yaml +0 -601
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-non-guaranteed/index.yaml +0 -546
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-proposal-mode/index.yaml +0 -586
- package/compliance/cache/3.1.0-beta.7/specialisms/sales-social/index.yaml +0 -919
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/index.yaml +0 -424
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/specialisms/signal-owned/index.yaml +0 -317
- package/compliance/cache/3.1.0-beta.7/specialisms/sponsored-intelligence/index.yaml +0 -59
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor-live.yaml +0 -78
- package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor.yaml +0 -223
- package/compliance/cache/3.1.0-beta.7/test-kits/billing-gate-runner.yaml +0 -115
- package/compliance/cache/3.1.0-beta.7/test-kits/bistro-oranje.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/distributed-brand-runner.yaml +0 -281
- package/compliance/cache/3.1.0-beta.7/test-kits/nova-motors.yaml +0 -262
- package/compliance/cache/3.1.0-beta.7/test-kits/osei-natural.yaml +0 -126
- package/compliance/cache/3.1.0-beta.7/test-kits/parallel-dispatch-runner.yaml +0 -196
- package/compliance/cache/3.1.0-beta.7/test-kits/rate-limit-trip-runner.yaml +0 -172
- package/compliance/cache/3.1.0-beta.7/test-kits/signed-requests-runner.yaml +0 -155
- package/compliance/cache/3.1.0-beta.7/test-kits/single-side-trust-runner.yaml +0 -294
- package/compliance/cache/3.1.0-beta.7/test-kits/substitution-observer-runner.yaml +0 -688
- package/compliance/cache/3.1.0-beta.7/test-kits/summit-foods.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/test-kits/webhook-receiver-runner.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/001-minimal-plan.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/002-full-plan.json +0 -217
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004a-human-review-omitted.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -57
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -49
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -53
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/007-unicode-objectives.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -65
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/README.md +0 -220
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/canonicalization.json +0 -241
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/keys.json +0 -60
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/001-no-signature-header.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/002-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/003-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/004-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/011-malformed-header.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/013-expires-le-created.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -27
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/015-signature-invalid.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -35
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/017-key-revoked.json +0 -38
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -28
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/020-rate-abuse.json +0 -34
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -43
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/001-basic-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -31
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/003-es256-post.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -30
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/README.md +0 -211
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/keys.json +0 -61
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -25
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -37
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -33
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -32
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -41
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -26
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/001-basic-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/002-es256-post.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -24
- package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -25
- package/compliance/cache/3.1.0-beta.7/universal/billing-gate-dispatch.yaml +0 -450
- package/compliance/cache/3.1.0-beta.7/universal/canonical-format-validate-input.yaml +0 -640
- package/compliance/cache/3.1.0-beta.7/universal/capability-discovery.yaml +0 -125
- package/compliance/cache/3.1.0-beta.7/universal/collection-lists-pagination-integrity.yaml +0 -306
- package/compliance/cache/3.1.0-beta.7/universal/comply-controller-mode-gate.yaml +0 -141
- package/compliance/cache/3.1.0-beta.7/universal/content-standards-pagination-integrity.yaml +0 -326
- package/compliance/cache/3.1.0-beta.7/universal/deterministic-testing.yaml +0 -1430
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance-signals.yaml +0 -377
- package/compliance/cache/3.1.0-beta.7/universal/error-compliance.yaml +0 -528
- package/compliance/cache/3.1.0-beta.7/universal/fictional-entities.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/get-media-buys-pagination-integrity.yaml +0 -160
- package/compliance/cache/3.1.0-beta.7/universal/get-signals-pagination-integrity.yaml +0 -211
- package/compliance/cache/3.1.0-beta.7/universal/idempotency.yaml +0 -861
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-event-scope.yaml +0 -119
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-lifecycle.yaml +0 -337
- package/compliance/cache/3.1.0-beta.7/universal/notification-config-rejections.yaml +0 -107
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-creative-formats.yaml +0 -265
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-list-accounts.yaml +0 -245
- package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity.yaml +0 -263
- package/compliance/cache/3.1.0-beta.7/universal/property-lists-pagination-integrity.yaml +0 -307
- package/compliance/cache/3.1.0-beta.7/universal/read-tool-idempotency.yaml +0 -405
- package/compliance/cache/3.1.0-beta.7/universal/runner-output-contract.yaml +0 -1266
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation-signals.yaml +0 -181
- package/compliance/cache/3.1.0-beta.7/universal/schema-validation.yaml +0 -548
- package/compliance/cache/3.1.0-beta.7/universal/security.yaml +0 -539
- package/compliance/cache/3.1.0-beta.7/universal/signed-requests.yaml +0 -217
- package/compliance/cache/3.1.0-beta.7/universal/stale-response-advisory.yaml +0 -295
- package/compliance/cache/3.1.0-beta.7/universal/storyboard-schema.yaml +0 -2136
- package/compliance/cache/3.1.0-beta.7/universal/v3-envelope-integrity.yaml +0 -117
- package/compliance/cache/3.1.0-beta.7/universal/version-negotiation.yaml +0 -130
- package/compliance/cache/3.1.0-beta.7/universal/webhook-emission.yaml +0 -411
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-bulk-webhooks.yaml +0 -82
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-product-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-products.yaml +0 -151
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signal-webhooks.yaml +0 -83
- package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signals.yaml +0 -149
- package/dist/lib/types/v3-1-beta/index.d.mts +0 -1
- package/dist/lib/types/v3-1-beta/index.d.ts +0 -1
- package/dist/lib/types/v3-1-beta/index.mjs +0 -1
- package/dist/lib/types/v3-1-beta/tools.generated.d.mts +0 -26788
- package/dist/lib/types/v3-1-beta/tools.generated.d.ts +0 -26788
- /package/dist/lib/{types/v3-1-beta/tools.generated.mjs → media-buy/action-types.mjs} +0 -0
|
@@ -26,6 +26,7 @@ __export(testing_exports, {
|
|
|
26
26
|
DISCOVERY_ARM_SCENARIOS: () => import_test_controller.DISCOVERY_ARM_SCENARIOS,
|
|
27
27
|
FixtureBindingRegistry: () => import_storyboard.FixtureBindingRegistry,
|
|
28
28
|
GovernanceAgentStub: () => import_stubs.GovernanceAgentStub,
|
|
29
|
+
MCP_SESSION_PROBE_TASK: () => import_storyboard.MCP_SESSION_PROBE_TASK,
|
|
29
30
|
RATE_LIMIT_TRIP_CONTRACT: () => import_storyboard.RATE_LIMIT_TRIP_CONTRACT,
|
|
30
31
|
RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS: () => import_storyboard.RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,
|
|
31
32
|
RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX: () => import_storyboard.RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,
|
|
@@ -215,6 +216,7 @@ var import_storyboard = require('./storyboard/index.js');
|
|
|
215
216
|
DISCOVERY_ARM_SCENARIOS,
|
|
216
217
|
FixtureBindingRegistry,
|
|
217
218
|
GovernanceAgentStub,
|
|
219
|
+
MCP_SESSION_PROBE_TASK,
|
|
218
220
|
RATE_LIMIT_TRIP_CONTRACT,
|
|
219
221
|
RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,
|
|
220
222
|
RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,
|
|
@@ -180,7 +180,8 @@ import {
|
|
|
180
180
|
normalizeOAuthResourceForComparison,
|
|
181
181
|
redactOAuthUrlForOutput,
|
|
182
182
|
BrandJsonSchema,
|
|
183
|
-
AdagentsJsonSchema
|
|
183
|
+
AdagentsJsonSchema,
|
|
184
|
+
MCP_SESSION_PROBE_TASK
|
|
184
185
|
} from "./storyboard/index.mjs";
|
|
185
186
|
export {
|
|
186
187
|
AdagentsJsonSchema,
|
|
@@ -191,6 +192,7 @@ export {
|
|
|
191
192
|
DISCOVERY_ARM_SCENARIOS,
|
|
192
193
|
FixtureBindingRegistry,
|
|
193
194
|
GovernanceAgentStub,
|
|
195
|
+
MCP_SESSION_PROBE_TASK,
|
|
194
196
|
RATE_LIMIT_TRIP_CONTRACT,
|
|
195
197
|
RATE_LIMIT_TRIP_DEFAULT_REPLAY_MAX_WAIT_SECONDS,
|
|
196
198
|
RATE_LIMIT_TRIP_MAX_ATTEMPTS_MAX,
|
|
@@ -1,49 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-specialism agent routing for the storyboard runner (#1066).
|
|
3
|
-
*
|
|
4
|
-
* Resolves each step's `task` to one of N agents in
|
|
5
|
-
* `StoryboardRunOptions.agents` so storyboards that span specialisms
|
|
6
|
-
* (e.g., a `signal_marketplace/governance_denied` flow that calls
|
|
7
|
-
* `sync_governance` then `activate_signal`) can hit the tenant that
|
|
8
|
-
* actually owns each tool.
|
|
9
|
-
*
|
|
10
|
-
* Resolution order per step:
|
|
11
|
-
* 1. Explicit `step.agent` (escape hatch for cross-domain tools)
|
|
12
|
-
* 2. `TASK_FEATURE_MAP` → first protocol → unique claimant in the agents map
|
|
13
|
-
* 3. `options.default_agent`
|
|
14
|
-
* 4. Throw `RoutingError`
|
|
15
|
-
*
|
|
16
|
-
* Multi-claim conflicts (two agents claim the same protocol AND a step
|
|
17
|
-
* relying on that protocol lacks an explicit `agent:` override) fail-fast
|
|
18
|
-
* at routing-context build time, BEFORE any non-discovery network calls.
|
|
19
|
-
*
|
|
20
|
-
* ## Webhook receiver topology in routed mode
|
|
21
|
-
*
|
|
22
|
-
* When `StoryboardRunOptions.webhook_receiver` is set alongside `agents`,
|
|
23
|
-
* the receiver is **shared** across all tenants — one HTTP server, one base
|
|
24
|
-
* URL. The runner does not create per-tenant receivers and does not need to:
|
|
25
|
-
* delivery correlation is by **step-keyed URL** (`/step/<step_id>/<op_id>`),
|
|
26
|
-
* not by source agent. If both a governance tenant and a signals tenant
|
|
27
|
-
* emit webhooks during the same run, the assertion harness matches each
|
|
28
|
-
* delivery to its `expect_webhook*` step by URL path, regardless of which
|
|
29
|
-
* tenant posted it. This means:
|
|
30
|
-
*
|
|
31
|
-
* - `{{runner.webhook_base}}` substitutes the same URL for every step
|
|
32
|
-
* across all agents — no per-agent variable needed.
|
|
33
|
-
* - `{{runner.webhook_url:<step_id>}}` is always sufficient to pin a
|
|
34
|
-
* delivery to the step that requested it, even when multiple tenants
|
|
35
|
-
* emit concurrently.
|
|
36
|
-
* - Per-tenant receivers are not supported; if a future storyboard needs
|
|
37
|
-
* delivery-source disambiguation, use distinct step IDs (they already
|
|
38
|
-
* produce distinct URL paths).
|
|
39
|
-
*
|
|
40
|
-
* See `StoryboardRunOptions.webhook_receiver` JSDoc and `webhook-receiver.ts`
|
|
41
|
-
* for implementation details.
|
|
42
|
-
*/
|
|
43
1
|
import type { TestClient } from '../client.mjs';
|
|
44
2
|
import type { AgentProfile } from '../types.mjs';
|
|
45
3
|
import { type AdcpProtocol } from '../../utils/capabilities.mjs';
|
|
46
|
-
import type { Storyboard, StoryboardRunOptions, StoryboardStep } from './types.mjs';
|
|
4
|
+
import type { AgentEntry, Storyboard, StoryboardRunOptions, StoryboardStep } from './types.mjs';
|
|
5
|
+
/** Storyboard applicability is any-of; it does not authorize individual steps. */
|
|
6
|
+
export declare function hasAnyRequiredTool(required: readonly string[] | undefined, tools: readonly string[]): boolean;
|
|
7
|
+
/** Normalize legacy discovery entries, retaining the single-agent empty-list fallback. */
|
|
8
|
+
export declare function normalizeAgentToolNames(tools: unknown): string[] | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a `$test_kit.<path>` task reference against the runtime options.
|
|
11
|
+
* Falls back to `step.task_default`. Returns undefined when neither yields a string.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveTaskName(step: StoryboardStep, options: StoryboardRunOptions): string | undefined;
|
|
14
|
+
/** Bind execution gates and transport observations to the same agent as dispatch. */
|
|
15
|
+
export declare function routedAgentOptions(entry: AgentEntry, options: StoryboardRunOptions, profile: AgentProfile): StoryboardRunOptions;
|
|
47
16
|
export interface AgentRoutingContext {
|
|
48
17
|
/** Per-agent transport client. Lifecycle owned by the runner. */
|
|
49
18
|
clients: Map<string, TestClient>;
|
|
@@ -1,49 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-specialism agent routing for the storyboard runner (#1066).
|
|
3
|
-
*
|
|
4
|
-
* Resolves each step's `task` to one of N agents in
|
|
5
|
-
* `StoryboardRunOptions.agents` so storyboards that span specialisms
|
|
6
|
-
* (e.g., a `signal_marketplace/governance_denied` flow that calls
|
|
7
|
-
* `sync_governance` then `activate_signal`) can hit the tenant that
|
|
8
|
-
* actually owns each tool.
|
|
9
|
-
*
|
|
10
|
-
* Resolution order per step:
|
|
11
|
-
* 1. Explicit `step.agent` (escape hatch for cross-domain tools)
|
|
12
|
-
* 2. `TASK_FEATURE_MAP` → first protocol → unique claimant in the agents map
|
|
13
|
-
* 3. `options.default_agent`
|
|
14
|
-
* 4. Throw `RoutingError`
|
|
15
|
-
*
|
|
16
|
-
* Multi-claim conflicts (two agents claim the same protocol AND a step
|
|
17
|
-
* relying on that protocol lacks an explicit `agent:` override) fail-fast
|
|
18
|
-
* at routing-context build time, BEFORE any non-discovery network calls.
|
|
19
|
-
*
|
|
20
|
-
* ## Webhook receiver topology in routed mode
|
|
21
|
-
*
|
|
22
|
-
* When `StoryboardRunOptions.webhook_receiver` is set alongside `agents`,
|
|
23
|
-
* the receiver is **shared** across all tenants — one HTTP server, one base
|
|
24
|
-
* URL. The runner does not create per-tenant receivers and does not need to:
|
|
25
|
-
* delivery correlation is by **step-keyed URL** (`/step/<step_id>/<op_id>`),
|
|
26
|
-
* not by source agent. If both a governance tenant and a signals tenant
|
|
27
|
-
* emit webhooks during the same run, the assertion harness matches each
|
|
28
|
-
* delivery to its `expect_webhook*` step by URL path, regardless of which
|
|
29
|
-
* tenant posted it. This means:
|
|
30
|
-
*
|
|
31
|
-
* - `{{runner.webhook_base}}` substitutes the same URL for every step
|
|
32
|
-
* across all agents — no per-agent variable needed.
|
|
33
|
-
* - `{{runner.webhook_url:<step_id>}}` is always sufficient to pin a
|
|
34
|
-
* delivery to the step that requested it, even when multiple tenants
|
|
35
|
-
* emit concurrently.
|
|
36
|
-
* - Per-tenant receivers are not supported; if a future storyboard needs
|
|
37
|
-
* delivery-source disambiguation, use distinct step IDs (they already
|
|
38
|
-
* produce distinct URL paths).
|
|
39
|
-
*
|
|
40
|
-
* See `StoryboardRunOptions.webhook_receiver` JSDoc and `webhook-receiver.ts`
|
|
41
|
-
* for implementation details.
|
|
42
|
-
*/
|
|
43
1
|
import type { TestClient } from '../client';
|
|
44
2
|
import type { AgentProfile } from '../types';
|
|
45
3
|
import { type AdcpProtocol } from '../../utils/capabilities';
|
|
46
|
-
import type { Storyboard, StoryboardRunOptions, StoryboardStep } from './types';
|
|
4
|
+
import type { AgentEntry, Storyboard, StoryboardRunOptions, StoryboardStep } from './types';
|
|
5
|
+
/** Storyboard applicability is any-of; it does not authorize individual steps. */
|
|
6
|
+
export declare function hasAnyRequiredTool(required: readonly string[] | undefined, tools: readonly string[]): boolean;
|
|
7
|
+
/** Normalize legacy discovery entries, retaining the single-agent empty-list fallback. */
|
|
8
|
+
export declare function normalizeAgentToolNames(tools: unknown): string[] | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a `$test_kit.<path>` task reference against the runtime options.
|
|
11
|
+
* Falls back to `step.task_default`. Returns undefined when neither yields a string.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveTaskName(step: StoryboardStep, options: StoryboardRunOptions): string | undefined;
|
|
14
|
+
/** Bind execution gates and transport observations to the same agent as dispatch. */
|
|
15
|
+
export declare function routedAgentOptions(entry: AgentEntry, options: StoryboardRunOptions, profile: AgentProfile): StoryboardRunOptions;
|
|
47
16
|
export interface AgentRoutingContext {
|
|
48
17
|
/** Per-agent transport client. Lifecycle owned by the runner. */
|
|
49
18
|
clients: Map<string, TestClient>;
|
|
@@ -22,11 +22,46 @@ __export(agent_routing_exports, {
|
|
|
22
22
|
RoutingError: () => RoutingError,
|
|
23
23
|
buildRoutingContext: () => buildRoutingContext,
|
|
24
24
|
buildRoutingContextFromProfiles: () => buildRoutingContextFromProfiles,
|
|
25
|
-
|
|
25
|
+
hasAnyRequiredTool: () => hasAnyRequiredTool,
|
|
26
|
+
normalizeAgentToolNames: () => normalizeAgentToolNames,
|
|
27
|
+
resolveAgentForStep: () => resolveAgentForStep,
|
|
28
|
+
resolveTaskName: () => resolveTaskName,
|
|
29
|
+
routedAgentOptions: () => routedAgentOptions
|
|
26
30
|
});
|
|
27
31
|
module.exports = __toCommonJS(agent_routing_exports);
|
|
32
|
+
var import_oauth_metadata_graph = require('./oauth-metadata-graph/index.js');
|
|
33
|
+
var import_test_kit = require('./test-kit.js');
|
|
28
34
|
var import_client = require('../client.js');
|
|
29
35
|
var import_capabilities = require('../../utils/capabilities.js');
|
|
36
|
+
function hasAnyRequiredTool(required, tools) {
|
|
37
|
+
return !required?.length || required.some((tool) => tools.includes(tool));
|
|
38
|
+
}
|
|
39
|
+
function normalizeAgentToolNames(tools) {
|
|
40
|
+
if (!Array.isArray(tools)) return void 0;
|
|
41
|
+
const names = tools.flatMap((tool) => {
|
|
42
|
+
if (typeof tool === "string") return [tool];
|
|
43
|
+
if (tool && typeof tool === "object" && typeof tool.name === "string") return [tool.name];
|
|
44
|
+
return [];
|
|
45
|
+
});
|
|
46
|
+
return names.length > 0 ? names : void 0;
|
|
47
|
+
}
|
|
48
|
+
function resolveTaskName(step, options) {
|
|
49
|
+
if (!step.task.startsWith("$test_kit.")) return step.task;
|
|
50
|
+
const path = step.task.slice("$test_kit.".length).split(".");
|
|
51
|
+
let value = options.test_kit;
|
|
52
|
+
for (const segment of path) {
|
|
53
|
+
if (value == null || typeof value !== "object") {
|
|
54
|
+
value = void 0;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
value = value[segment];
|
|
58
|
+
}
|
|
59
|
+
const configured = typeof value === "string" && value.length > 0 ? value : step.task_default;
|
|
60
|
+
if (step.task === "$test_kit.auth.probe_task") {
|
|
61
|
+
return (0, import_test_kit.selectProbeTask)(configured, options.agentTools, { protocol: options.protocol });
|
|
62
|
+
}
|
|
63
|
+
return configured;
|
|
64
|
+
}
|
|
30
65
|
const KNOWN_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
31
66
|
"media_buy",
|
|
32
67
|
"signals",
|
|
@@ -38,7 +73,7 @@ const KNOWN_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
|
38
73
|
"brand"
|
|
39
74
|
]);
|
|
40
75
|
function scrubAuthSecrets(text) {
|
|
41
|
-
return text.replace(/(authorization\s*:\s*bearer\s+)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]").replace(/\bbearer\s+[A-Za-z0-9._~+/=-]+/gi, "Bearer [REDACTED]").replace(/([?&]token=)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]");
|
|
76
|
+
return (0, import_oauth_metadata_graph.redactOAuthUrlsInText)(text).replace(/(authorization\s*:\s*bearer\s+)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]").replace(/\bbearer\s+[A-Za-z0-9._~+/=-]+/gi, "Bearer [REDACTED]").replace(/([?&]token=)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]");
|
|
42
77
|
}
|
|
43
78
|
function buildAgentOptions(entry, options) {
|
|
44
79
|
return {
|
|
@@ -55,10 +90,30 @@ function buildAgentOptions(entry, options) {
|
|
|
55
90
|
// depends on.
|
|
56
91
|
_client: void 0,
|
|
57
92
|
_profile: void 0,
|
|
93
|
+
profile: void 0,
|
|
94
|
+
_controllerCapabilities: void 0,
|
|
58
95
|
agents: void 0,
|
|
59
96
|
agentTools: void 0
|
|
60
97
|
};
|
|
61
98
|
}
|
|
99
|
+
function routedAgentOptions(entry, options, profile) {
|
|
100
|
+
const tools = normalizeAgentToolNames(profile.tools) ?? [];
|
|
101
|
+
const raw = profile.raw_capabilities;
|
|
102
|
+
const compliance = raw && typeof raw === "object" && "compliance_testing" in raw ? raw.compliance_testing : void 0;
|
|
103
|
+
const scenarios = compliance && typeof compliance === "object" && "scenarios" in compliance ? compliance.scenarios : void 0;
|
|
104
|
+
return {
|
|
105
|
+
...buildAgentOptions(entry, options),
|
|
106
|
+
// Scenario opt-in must be the selected agent's declaration too; a
|
|
107
|
+
// comply() caller's controller cache belongs to its single agent.
|
|
108
|
+
_controllerCapabilities: Array.isArray(scenarios) && scenarios.length > 0 && scenarios.every((s) => typeof s === "string") && tools.includes("comply_test_controller") ? {
|
|
109
|
+
detected: true,
|
|
110
|
+
scenarios
|
|
111
|
+
} : { detected: false },
|
|
112
|
+
profile,
|
|
113
|
+
_profile: profile,
|
|
114
|
+
agentTools: tools
|
|
115
|
+
};
|
|
116
|
+
}
|
|
62
117
|
class RoutingError extends Error {
|
|
63
118
|
constructor(message, task, hint) {
|
|
64
119
|
super(message);
|
|
@@ -117,7 +172,7 @@ async function buildRoutingContext(storyboard, options) {
|
|
|
117
172
|
if (!r.profile || r.step.passed === false) {
|
|
118
173
|
const rawDetail = scrubAuthSecrets(r.step.error ?? "Discovery returned no profile.");
|
|
119
174
|
const detail = rawDetail.length > 512 ? `${rawDetail.slice(0, 512)} \u2026(truncated)` : rawDetail;
|
|
120
|
-
const baseMessage = `Discovery failed for agent "${r.key}" (${agents[r.key].url}): ${detail}`;
|
|
175
|
+
const baseMessage = `Discovery failed for agent "${r.key}" (${(0, import_oauth_metadata_graph.redactOAuthUrlForOutput)(agents[r.key].url)}): ${detail}`;
|
|
121
176
|
const message = resilient ? baseMessage : `${baseMessage}
|
|
122
177
|
|
|
123
178
|
If this is hello-cluster / exploratory CI and you want unrelated storyboards to complete despite this failure, set \`StoryboardRunOptions.discovery_resilient: true\`. Do NOT set it in production \u2014 a topology with a broken tenant is a hard misconfiguration there.`;
|
|
@@ -129,7 +184,7 @@ If this is hello-cluster / exploratory CI and you want unrelated storyboards to
|
|
|
129
184
|
profiles.set(r.key, r.profile);
|
|
130
185
|
}
|
|
131
186
|
const protocolIndex = buildProtocolIndex(profiles);
|
|
132
|
-
detectMultiClaimConflicts(storyboard, protocolIndex);
|
|
187
|
+
detectMultiClaimConflicts(storyboard, protocolIndex, options);
|
|
133
188
|
return { clients, profiles, protocolIndex, agentMap, discoveryFailures };
|
|
134
189
|
}
|
|
135
190
|
function buildRoutingContextFromProfiles(storyboard, options, profiles) {
|
|
@@ -139,7 +194,7 @@ function buildRoutingContextFromProfiles(storyboard, options, profiles) {
|
|
|
139
194
|
agentMap[key] = entry.url;
|
|
140
195
|
}
|
|
141
196
|
const protocolIndex = buildProtocolIndex(profiles);
|
|
142
|
-
detectMultiClaimConflicts(storyboard, protocolIndex);
|
|
197
|
+
detectMultiClaimConflicts(storyboard, protocolIndex, options);
|
|
143
198
|
return { clients: /* @__PURE__ */ new Map(), profiles, protocolIndex, agentMap, discoveryFailures: [] };
|
|
144
199
|
}
|
|
145
200
|
function buildProtocolIndex(profiles) {
|
|
@@ -157,21 +212,22 @@ function buildProtocolIndex(profiles) {
|
|
|
157
212
|
for (const list of index.values()) list.sort();
|
|
158
213
|
return index;
|
|
159
214
|
}
|
|
160
|
-
function detectMultiClaimConflicts(storyboard, protocolIndex) {
|
|
215
|
+
function detectMultiClaimConflicts(storyboard, protocolIndex, options) {
|
|
161
216
|
const conflicts = [];
|
|
162
217
|
for (const phase of storyboard.phases ?? []) {
|
|
163
218
|
for (const step of phase.steps ?? []) {
|
|
164
219
|
if (step.agent !== void 0) continue;
|
|
165
|
-
const
|
|
220
|
+
const task = resolveTaskName(step, { ...options, agentTools: void 0 }) ?? step.task;
|
|
221
|
+
const protocol = primaryProtocolFor(task);
|
|
166
222
|
if (!protocol) continue;
|
|
167
223
|
const candidates = protocolIndex.get(protocol);
|
|
168
224
|
if (!candidates || candidates.length < 2) continue;
|
|
169
|
-
const existing = conflicts.find((c) => c.task ===
|
|
225
|
+
const existing = conflicts.find((c) => c.task === task && c.protocol === protocol);
|
|
170
226
|
if (existing) {
|
|
171
227
|
existing.stepIds.push(step.id);
|
|
172
228
|
} else {
|
|
173
229
|
conflicts.push({
|
|
174
|
-
task
|
|
230
|
+
task,
|
|
175
231
|
protocol,
|
|
176
232
|
agents: candidates,
|
|
177
233
|
stepIds: [step.id]
|
|
@@ -204,7 +260,7 @@ function resolveAgentForStep(step, options, ctx) {
|
|
|
204
260
|
const failed = ctx.discoveryFailures.find((f) => f.agentKey === step.agent);
|
|
205
261
|
if (failed) {
|
|
206
262
|
throw new RoutingError(
|
|
207
|
-
`Step "${step.id}" targets agent "${step.agent}" via \`step.agent\` override, but that agent's discovery failed: ${failed.underlying} (${failed.url}). Either remove the override, fix the agent, or route the step to a healthy agent.`,
|
|
263
|
+
`Step "${step.id}" targets agent "${step.agent}" via \`step.agent\` override, but that agent's discovery failed: ${failed.underlying} (${(0, import_oauth_metadata_graph.redactOAuthUrlForOutput)(failed.url)}). Either remove the override, fix the agent, or route the step to a healthy agent.`,
|
|
208
264
|
step.task,
|
|
209
265
|
`agent "${step.agent}" failed discovery`
|
|
210
266
|
);
|
|
@@ -223,9 +279,11 @@ function resolveAgentForStep(step, options, ctx) {
|
|
|
223
279
|
);
|
|
224
280
|
}
|
|
225
281
|
if (options.default_agent) return options.default_agent;
|
|
226
|
-
const failedHint = ctx.discoveryFailures.length > 0 ? ` Discovery failed for: ${ctx.discoveryFailures.map((f) => `${f.agentKey} (${f.url})`).join(", ")}.` : "";
|
|
282
|
+
const failedHint = ctx.discoveryFailures.length > 0 ? ` Discovery failed for: ${ctx.discoveryFailures.map((f) => `${f.agentKey} (${(0, import_oauth_metadata_graph.redactOAuthUrlForOutput)(f.url)})`).join(", ")}.` : "";
|
|
283
|
+
const toolAdvertisedBy = [...ctx.profiles].filter(([, profile]) => (normalizeAgentToolNames(profile.tools) ?? []).includes(step.task)).map(([key]) => key);
|
|
284
|
+
const advertisedHint = toolAdvertisedBy.length ? ` Agent(s) [${toolAdvertisedBy.join(", ")}] advertise "${step.task}" but do not declare "${protocol}" in supported_protocols \u2014 fix that declaration, or pin the step with \`agent:\`.` : "";
|
|
227
285
|
throw new RoutingError(
|
|
228
|
-
`No agent in the map claims protocol "${protocol}" required by tool "${step.task}" (step "${step.id}"). Available agents: ${[...ctx.profiles.keys()].join(", ") || "(none \u2014 every agent failed discovery)"}.${failedHint} Add an agent that supports ${protocol}, or set \`default_agent\` to fall back
|
|
286
|
+
`No agent in the map claims protocol "${protocol}" required by tool "${step.task}" (step "${step.id}"). Available agents: ${[...ctx.profiles.keys()].join(", ") || "(none \u2014 every agent failed discovery)"}.${failedHint} Add an agent that supports ${protocol}, or set \`default_agent\` to fall back.${advertisedHint}`,
|
|
229
287
|
step.task,
|
|
230
288
|
`protocol ${protocol} unclaimed`
|
|
231
289
|
);
|
|
@@ -243,5 +301,9 @@ function resolveAgentForStep(step, options, ctx) {
|
|
|
243
301
|
RoutingError,
|
|
244
302
|
buildRoutingContext,
|
|
245
303
|
buildRoutingContextFromProfiles,
|
|
246
|
-
|
|
304
|
+
hasAnyRequiredTool,
|
|
305
|
+
normalizeAgentToolNames,
|
|
306
|
+
resolveAgentForStep,
|
|
307
|
+
resolveTaskName,
|
|
308
|
+
routedAgentOptions
|
|
247
309
|
});
|
|
@@ -1,5 +1,36 @@
|
|
|
1
|
+
import { redactOAuthUrlForOutput, redactOAuthUrlsInText } from "./oauth-metadata-graph/index.mjs";
|
|
2
|
+
import { selectProbeTask } from "./test-kit.mjs";
|
|
1
3
|
import { getOrCreateClient, getOrDiscoverProfile } from "../client.mjs";
|
|
2
4
|
import { TASK_FEATURE_MAP } from "../../utils/capabilities.mjs";
|
|
5
|
+
function hasAnyRequiredTool(required, tools) {
|
|
6
|
+
return !required?.length || required.some((tool) => tools.includes(tool));
|
|
7
|
+
}
|
|
8
|
+
function normalizeAgentToolNames(tools) {
|
|
9
|
+
if (!Array.isArray(tools)) return void 0;
|
|
10
|
+
const names = tools.flatMap((tool) => {
|
|
11
|
+
if (typeof tool === "string") return [tool];
|
|
12
|
+
if (tool && typeof tool === "object" && typeof tool.name === "string") return [tool.name];
|
|
13
|
+
return [];
|
|
14
|
+
});
|
|
15
|
+
return names.length > 0 ? names : void 0;
|
|
16
|
+
}
|
|
17
|
+
function resolveTaskName(step, options) {
|
|
18
|
+
if (!step.task.startsWith("$test_kit.")) return step.task;
|
|
19
|
+
const path = step.task.slice("$test_kit.".length).split(".");
|
|
20
|
+
let value = options.test_kit;
|
|
21
|
+
for (const segment of path) {
|
|
22
|
+
if (value == null || typeof value !== "object") {
|
|
23
|
+
value = void 0;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
value = value[segment];
|
|
27
|
+
}
|
|
28
|
+
const configured = typeof value === "string" && value.length > 0 ? value : step.task_default;
|
|
29
|
+
if (step.task === "$test_kit.auth.probe_task") {
|
|
30
|
+
return selectProbeTask(configured, options.agentTools, { protocol: options.protocol });
|
|
31
|
+
}
|
|
32
|
+
return configured;
|
|
33
|
+
}
|
|
3
34
|
const KNOWN_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
4
35
|
"media_buy",
|
|
5
36
|
"signals",
|
|
@@ -11,7 +42,7 @@ const KNOWN_PROTOCOLS = /* @__PURE__ */ new Set([
|
|
|
11
42
|
"brand"
|
|
12
43
|
]);
|
|
13
44
|
function scrubAuthSecrets(text) {
|
|
14
|
-
return text.replace(/(authorization\s*:\s*bearer\s+)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]").replace(/\bbearer\s+[A-Za-z0-9._~+/=-]+/gi, "Bearer [REDACTED]").replace(/([?&]token=)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]");
|
|
45
|
+
return redactOAuthUrlsInText(text).replace(/(authorization\s*:\s*bearer\s+)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]").replace(/\bbearer\s+[A-Za-z0-9._~+/=-]+/gi, "Bearer [REDACTED]").replace(/([?&]token=)[A-Za-z0-9._~+/=-]+/gi, "$1[REDACTED]");
|
|
15
46
|
}
|
|
16
47
|
function buildAgentOptions(entry, options) {
|
|
17
48
|
return {
|
|
@@ -28,10 +59,30 @@ function buildAgentOptions(entry, options) {
|
|
|
28
59
|
// depends on.
|
|
29
60
|
_client: void 0,
|
|
30
61
|
_profile: void 0,
|
|
62
|
+
profile: void 0,
|
|
63
|
+
_controllerCapabilities: void 0,
|
|
31
64
|
agents: void 0,
|
|
32
65
|
agentTools: void 0
|
|
33
66
|
};
|
|
34
67
|
}
|
|
68
|
+
function routedAgentOptions(entry, options, profile) {
|
|
69
|
+
const tools = normalizeAgentToolNames(profile.tools) ?? [];
|
|
70
|
+
const raw = profile.raw_capabilities;
|
|
71
|
+
const compliance = raw && typeof raw === "object" && "compliance_testing" in raw ? raw.compliance_testing : void 0;
|
|
72
|
+
const scenarios = compliance && typeof compliance === "object" && "scenarios" in compliance ? compliance.scenarios : void 0;
|
|
73
|
+
return {
|
|
74
|
+
...buildAgentOptions(entry, options),
|
|
75
|
+
// Scenario opt-in must be the selected agent's declaration too; a
|
|
76
|
+
// comply() caller's controller cache belongs to its single agent.
|
|
77
|
+
_controllerCapabilities: Array.isArray(scenarios) && scenarios.length > 0 && scenarios.every((s) => typeof s === "string") && tools.includes("comply_test_controller") ? {
|
|
78
|
+
detected: true,
|
|
79
|
+
scenarios
|
|
80
|
+
} : { detected: false },
|
|
81
|
+
profile,
|
|
82
|
+
_profile: profile,
|
|
83
|
+
agentTools: tools
|
|
84
|
+
};
|
|
85
|
+
}
|
|
35
86
|
class RoutingError extends Error {
|
|
36
87
|
constructor(message, task, hint) {
|
|
37
88
|
super(message);
|
|
@@ -90,7 +141,7 @@ async function buildRoutingContext(storyboard, options) {
|
|
|
90
141
|
if (!r.profile || r.step.passed === false) {
|
|
91
142
|
const rawDetail = scrubAuthSecrets(r.step.error ?? "Discovery returned no profile.");
|
|
92
143
|
const detail = rawDetail.length > 512 ? `${rawDetail.slice(0, 512)} \u2026(truncated)` : rawDetail;
|
|
93
|
-
const baseMessage = `Discovery failed for agent "${r.key}" (${agents[r.key].url}): ${detail}`;
|
|
144
|
+
const baseMessage = `Discovery failed for agent "${r.key}" (${redactOAuthUrlForOutput(agents[r.key].url)}): ${detail}`;
|
|
94
145
|
const message = resilient ? baseMessage : `${baseMessage}
|
|
95
146
|
|
|
96
147
|
If this is hello-cluster / exploratory CI and you want unrelated storyboards to complete despite this failure, set \`StoryboardRunOptions.discovery_resilient: true\`. Do NOT set it in production \u2014 a topology with a broken tenant is a hard misconfiguration there.`;
|
|
@@ -102,7 +153,7 @@ If this is hello-cluster / exploratory CI and you want unrelated storyboards to
|
|
|
102
153
|
profiles.set(r.key, r.profile);
|
|
103
154
|
}
|
|
104
155
|
const protocolIndex = buildProtocolIndex(profiles);
|
|
105
|
-
detectMultiClaimConflicts(storyboard, protocolIndex);
|
|
156
|
+
detectMultiClaimConflicts(storyboard, protocolIndex, options);
|
|
106
157
|
return { clients, profiles, protocolIndex, agentMap, discoveryFailures };
|
|
107
158
|
}
|
|
108
159
|
function buildRoutingContextFromProfiles(storyboard, options, profiles) {
|
|
@@ -112,7 +163,7 @@ function buildRoutingContextFromProfiles(storyboard, options, profiles) {
|
|
|
112
163
|
agentMap[key] = entry.url;
|
|
113
164
|
}
|
|
114
165
|
const protocolIndex = buildProtocolIndex(profiles);
|
|
115
|
-
detectMultiClaimConflicts(storyboard, protocolIndex);
|
|
166
|
+
detectMultiClaimConflicts(storyboard, protocolIndex, options);
|
|
116
167
|
return { clients: /* @__PURE__ */ new Map(), profiles, protocolIndex, agentMap, discoveryFailures: [] };
|
|
117
168
|
}
|
|
118
169
|
function buildProtocolIndex(profiles) {
|
|
@@ -130,21 +181,22 @@ function buildProtocolIndex(profiles) {
|
|
|
130
181
|
for (const list of index.values()) list.sort();
|
|
131
182
|
return index;
|
|
132
183
|
}
|
|
133
|
-
function detectMultiClaimConflicts(storyboard, protocolIndex) {
|
|
184
|
+
function detectMultiClaimConflicts(storyboard, protocolIndex, options) {
|
|
134
185
|
const conflicts = [];
|
|
135
186
|
for (const phase of storyboard.phases ?? []) {
|
|
136
187
|
for (const step of phase.steps ?? []) {
|
|
137
188
|
if (step.agent !== void 0) continue;
|
|
138
|
-
const
|
|
189
|
+
const task = resolveTaskName(step, { ...options, agentTools: void 0 }) ?? step.task;
|
|
190
|
+
const protocol = primaryProtocolFor(task);
|
|
139
191
|
if (!protocol) continue;
|
|
140
192
|
const candidates = protocolIndex.get(protocol);
|
|
141
193
|
if (!candidates || candidates.length < 2) continue;
|
|
142
|
-
const existing = conflicts.find((c) => c.task ===
|
|
194
|
+
const existing = conflicts.find((c) => c.task === task && c.protocol === protocol);
|
|
143
195
|
if (existing) {
|
|
144
196
|
existing.stepIds.push(step.id);
|
|
145
197
|
} else {
|
|
146
198
|
conflicts.push({
|
|
147
|
-
task
|
|
199
|
+
task,
|
|
148
200
|
protocol,
|
|
149
201
|
agents: candidates,
|
|
150
202
|
stepIds: [step.id]
|
|
@@ -177,7 +229,7 @@ function resolveAgentForStep(step, options, ctx) {
|
|
|
177
229
|
const failed = ctx.discoveryFailures.find((f) => f.agentKey === step.agent);
|
|
178
230
|
if (failed) {
|
|
179
231
|
throw new RoutingError(
|
|
180
|
-
`Step "${step.id}" targets agent "${step.agent}" via \`step.agent\` override, but that agent's discovery failed: ${failed.underlying} (${failed.url}). Either remove the override, fix the agent, or route the step to a healthy agent.`,
|
|
232
|
+
`Step "${step.id}" targets agent "${step.agent}" via \`step.agent\` override, but that agent's discovery failed: ${failed.underlying} (${redactOAuthUrlForOutput(failed.url)}). Either remove the override, fix the agent, or route the step to a healthy agent.`,
|
|
181
233
|
step.task,
|
|
182
234
|
`agent "${step.agent}" failed discovery`
|
|
183
235
|
);
|
|
@@ -196,9 +248,11 @@ function resolveAgentForStep(step, options, ctx) {
|
|
|
196
248
|
);
|
|
197
249
|
}
|
|
198
250
|
if (options.default_agent) return options.default_agent;
|
|
199
|
-
const failedHint = ctx.discoveryFailures.length > 0 ? ` Discovery failed for: ${ctx.discoveryFailures.map((f) => `${f.agentKey} (${f.url})`).join(", ")}.` : "";
|
|
251
|
+
const failedHint = ctx.discoveryFailures.length > 0 ? ` Discovery failed for: ${ctx.discoveryFailures.map((f) => `${f.agentKey} (${redactOAuthUrlForOutput(f.url)})`).join(", ")}.` : "";
|
|
252
|
+
const toolAdvertisedBy = [...ctx.profiles].filter(([, profile]) => (normalizeAgentToolNames(profile.tools) ?? []).includes(step.task)).map(([key]) => key);
|
|
253
|
+
const advertisedHint = toolAdvertisedBy.length ? ` Agent(s) [${toolAdvertisedBy.join(", ")}] advertise "${step.task}" but do not declare "${protocol}" in supported_protocols \u2014 fix that declaration, or pin the step with \`agent:\`.` : "";
|
|
200
254
|
throw new RoutingError(
|
|
201
|
-
`No agent in the map claims protocol "${protocol}" required by tool "${step.task}" (step "${step.id}"). Available agents: ${[...ctx.profiles.keys()].join(", ") || "(none \u2014 every agent failed discovery)"}.${failedHint} Add an agent that supports ${protocol}, or set \`default_agent\` to fall back
|
|
255
|
+
`No agent in the map claims protocol "${protocol}" required by tool "${step.task}" (step "${step.id}"). Available agents: ${[...ctx.profiles.keys()].join(", ") || "(none \u2014 every agent failed discovery)"}.${failedHint} Add an agent that supports ${protocol}, or set \`default_agent\` to fall back.${advertisedHint}`,
|
|
202
256
|
step.task,
|
|
203
257
|
`protocol ${protocol} unclaimed`
|
|
204
258
|
);
|
|
@@ -215,5 +269,9 @@ export {
|
|
|
215
269
|
RoutingError,
|
|
216
270
|
buildRoutingContext,
|
|
217
271
|
buildRoutingContextFromProfiles,
|
|
218
|
-
|
|
272
|
+
hasAnyRequiredTool,
|
|
273
|
+
normalizeAgentToolNames,
|
|
274
|
+
resolveAgentForStep,
|
|
275
|
+
resolveTaskName,
|
|
276
|
+
routedAgentOptions
|
|
219
277
|
};
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export type { A2ATaskEnvelope, AgentEntry, Storyboard, StoryboardFixtureResolution, FixtureResolutionStrategy, FixtureMatchOperator, FixtureMatchClause, FixtureResolutionDeclaration, ProductFixtureResolutionDeclaration, PricingOptionFixtureResolutionDeclaration, FixtureResolutionStatus, FixtureResolutionRecord, FixtureResolutionAttempt, FixtureResolutionEvidence, FixtureResolutionCoverageGap, StoryboardInvariants, StoryboardInvariantsObject, StepInvariantsObject, StoryboardPhase, StoryboardStep, RateLimitTripSpec, StoryboardValidation, StoryboardValidationCheck, WebhookFilterSpec, WebhookRetryTriggerSpec, WebhookAssertionErrorCode, ContextOutput, ContextInput, ContextProvenanceEntry, ContextValueRejectedHint, ShapeDriftHint, MissingRequiredFieldHint, FormatMismatchHint, MonotonicViolationHint, ImpairmentCoherenceHint, ImpairmentCoherenceNotApplicableHint, StoryboardContext, StoryboardRunOptions, TrustedMatchContextProviderEndpoint, TrustedMatchContextRegistrationContext, TrustedMatchContextRouterRunnerOptions, TrustedMatchPublisherAuthOperation, TrustedMatchPublisherCredentialState, TrustedMatchPublisherAuthTls, TrustedMatchPublisherAuthProbeConfiguration, TrustedMatchPublisherAuthRunner, ValidationResult, StoryboardStepPreview, StoryboardStepResult, StoryboardStepHint, StoryboardStepHintBase, StoryboardPhaseResult, StoryboardResult, AssertionResult, StrictValidationSummary, StrictValidationVerdict, UpstreamTrafficPayloadMatch, RunnerNotice, NoticeCode, NoticeSeverity, } from './types.mjs';
|
|
10
10
|
export { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types.mjs';
|
|
11
|
+
export { MCP_SESSION_PROBE_TASK } from './types.mjs';
|
|
11
12
|
export { registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, } from './assertions.mjs';
|
|
12
13
|
export type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions.mjs';
|
|
13
14
|
export { createWebhookReceiver } from './webhook-receiver.mjs';
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export type { A2ATaskEnvelope, AgentEntry, Storyboard, StoryboardFixtureResolution, FixtureResolutionStrategy, FixtureMatchOperator, FixtureMatchClause, FixtureResolutionDeclaration, ProductFixtureResolutionDeclaration, PricingOptionFixtureResolutionDeclaration, FixtureResolutionStatus, FixtureResolutionRecord, FixtureResolutionAttempt, FixtureResolutionEvidence, FixtureResolutionCoverageGap, StoryboardInvariants, StoryboardInvariantsObject, StepInvariantsObject, StoryboardPhase, StoryboardStep, RateLimitTripSpec, StoryboardValidation, StoryboardValidationCheck, WebhookFilterSpec, WebhookRetryTriggerSpec, WebhookAssertionErrorCode, ContextOutput, ContextInput, ContextProvenanceEntry, ContextValueRejectedHint, ShapeDriftHint, MissingRequiredFieldHint, FormatMismatchHint, MonotonicViolationHint, ImpairmentCoherenceHint, ImpairmentCoherenceNotApplicableHint, StoryboardContext, StoryboardRunOptions, TrustedMatchContextProviderEndpoint, TrustedMatchContextRegistrationContext, TrustedMatchContextRouterRunnerOptions, TrustedMatchPublisherAuthOperation, TrustedMatchPublisherCredentialState, TrustedMatchPublisherAuthTls, TrustedMatchPublisherAuthProbeConfiguration, TrustedMatchPublisherAuthRunner, ValidationResult, StoryboardStepPreview, StoryboardStepResult, StoryboardStepHint, StoryboardStepHintBase, StoryboardPhaseResult, StoryboardResult, AssertionResult, StrictValidationSummary, StrictValidationVerdict, UpstreamTrafficPayloadMatch, RunnerNotice, NoticeCode, NoticeSeverity, } from './types';
|
|
10
10
|
export { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from './types';
|
|
11
|
+
export { MCP_SESSION_PROBE_TASK } from './types';
|
|
11
12
|
export { registerAssertion, getAssertion, listAssertions, listDefaultAssertions, clearAssertionRegistry, resolveAssertions, } from './assertions';
|
|
12
13
|
export type { AssertionSpec, AssertionContext, RegisterAssertionOptions } from './assertions';
|
|
13
14
|
export { createWebhookReceiver } from './webhook-receiver';
|
|
@@ -23,6 +23,7 @@ __export(storyboard_exports, {
|
|
|
23
23
|
CONTEXT_EXTRACTORS: () => import_context2.CONTEXT_EXTRACTORS,
|
|
24
24
|
CapabilityResolutionError: () => import_compliance.CapabilityResolutionError,
|
|
25
25
|
FixtureBindingRegistry: () => import_fixture_resolution.FixtureBindingRegistry,
|
|
26
|
+
MCP_SESSION_PROBE_TASK: () => import_types2.MCP_SESSION_PROBE_TASK,
|
|
26
27
|
PROBE_TASK_ALLOWLIST: () => import_test_kit.PROBE_TASK_ALLOWLIST,
|
|
27
28
|
PROTOCOL_TO_PATH: () => import_compliance.PROTOCOL_TO_PATH,
|
|
28
29
|
RATE_LIMIT_TRIP_CONTRACT: () => import_rate_limit_trip.RATE_LIMIT_TRIP_CONTRACT,
|
|
@@ -111,6 +112,7 @@ __export(storyboard_exports, {
|
|
|
111
112
|
module.exports = __toCommonJS(storyboard_exports);
|
|
112
113
|
var import_default_invariants = require('./default-invariants.js');
|
|
113
114
|
var import_types = require('./types.js');
|
|
115
|
+
var import_types2 = require('./types.js');
|
|
114
116
|
var import_assertions = require('./assertions.js');
|
|
115
117
|
var import_webhook_receiver = require('./webhook-receiver.js');
|
|
116
118
|
var import_context = require('./context.js');
|
|
@@ -139,6 +141,7 @@ var import_sandbox_entities = require('./sandbox-entities.js');
|
|
|
139
141
|
CONTEXT_EXTRACTORS,
|
|
140
142
|
CapabilityResolutionError,
|
|
141
143
|
FixtureBindingRegistry,
|
|
144
|
+
MCP_SESSION_PROBE_TASK,
|
|
142
145
|
PROBE_TASK_ALLOWLIST,
|
|
143
146
|
PROTOCOL_TO_PATH,
|
|
144
147
|
RATE_LIMIT_TRIP_CONTRACT,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { registerDefaultInvariants } from "./default-invariants.mjs";
|
|
2
2
|
registerDefaultInvariants();
|
|
3
3
|
import { WEBHOOK_IDEMPOTENCY_KEY_PATTERN } from "./types.mjs";
|
|
4
|
+
import { MCP_SESSION_PROBE_TASK } from "./types.mjs";
|
|
4
5
|
import {
|
|
5
6
|
registerAssertion,
|
|
6
7
|
getAssertion,
|
|
@@ -100,6 +101,7 @@ export {
|
|
|
100
101
|
CONTEXT_EXTRACTORS,
|
|
101
102
|
CapabilityResolutionError,
|
|
102
103
|
FixtureBindingRegistry,
|
|
104
|
+
MCP_SESSION_PROBE_TASK,
|
|
103
105
|
PROBE_TASK_ALLOWLIST,
|
|
104
106
|
PROTOCOL_TO_PATH,
|
|
105
107
|
RATE_LIMIT_TRIP_CONTRACT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare function formatStoryboardResultsAsJUnit(results: StoryboardResult[]): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare function formatStoryboardResultsAsJUnit(results: StoryboardResult[]): string;
|
|
@@ -24,8 +24,20 @@ module.exports = __toCommonJS(junit_exports);
|
|
|
24
24
|
var import_storyboard_tracks = require('../compliance/storyboard-tracks.js');
|
|
25
25
|
var import_node_crypto = require("node:crypto");
|
|
26
26
|
function xmlEscape(s) {
|
|
27
|
-
return String(s ?? "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
27
|
+
return xmlSafeText(String(s ?? "")).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
28
28
|
}
|
|
29
|
+
function xmlSafeText(value) {
|
|
30
|
+
return value.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g, escapeCodeUnit).replace(/[\uFDD0-\uFDEF\uFFFE\uFFFF]/g, escapeCodeUnit);
|
|
31
|
+
}
|
|
32
|
+
function escapeCodeUnit(char) {
|
|
33
|
+
return `\\u${char.charCodeAt(0).toString(16).padStart(4, "0")}`;
|
|
34
|
+
}
|
|
35
|
+
const RUNNER_AUTHORED_SKIP_REASONS = /* @__PURE__ */ new Set([
|
|
36
|
+
"capability_prerequisite_unavailable",
|
|
37
|
+
"session_probe_ungradable",
|
|
38
|
+
"fixture_unsatisfied"
|
|
39
|
+
]);
|
|
40
|
+
const MAX_SKIP_DETAIL_CHARS = 400;
|
|
29
41
|
function hintLines(hints) {
|
|
30
42
|
if (!hints || hints.length === 0) return [];
|
|
31
43
|
return hints.map((h) => `Hint (${h.kind}): ${h.message}`);
|
|
@@ -41,6 +53,13 @@ function fenceUntrustedText(value, max = 500) {
|
|
|
41
53
|
function formatAdvisoryFinding(validation) {
|
|
42
54
|
return `[ADVISORY] ${fenceUntrustedText(validation.description)}: ${fenceUntrustedText(validation.error || "failed")}`;
|
|
43
55
|
}
|
|
56
|
+
function stepSkipMessage(step) {
|
|
57
|
+
const reason = step.skip_reason || "skipped";
|
|
58
|
+
const raw = step.skip?.detail;
|
|
59
|
+
if (raw === void 0 || !RUNNER_AUTHORED_SKIP_REASONS.has(step.skip_reason ?? "")) return reason;
|
|
60
|
+
const clipped = raw.length > MAX_SKIP_DETAIL_CHARS ? `${raw.slice(0, MAX_SKIP_DETAIL_CHARS)}\u2026` : raw;
|
|
61
|
+
return `${reason}: ${clipped}`;
|
|
62
|
+
}
|
|
44
63
|
function formatStoryboardResultsAsJUnit(results) {
|
|
45
64
|
let totalTests = 0;
|
|
46
65
|
let totalFailures = 0;
|
|
@@ -63,7 +82,7 @@ function formatStoryboardResultsAsJUnit(results) {
|
|
|
63
82
|
totalSkipped += 1;
|
|
64
83
|
suiteCases.push(
|
|
65
84
|
` <testcase classname="${xmlEscape(sb.storyboard_id)}" name="${xmlEscape(name)}" time="${time}">
|
|
66
|
-
<skipped message="${xmlEscape(step
|
|
85
|
+
<skipped message="${xmlEscape(stepSkipMessage(step))}"/>
|
|
67
86
|
</testcase>`
|
|
68
87
|
);
|
|
69
88
|
continue;
|