@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
|
@@ -20,15 +20,26 @@ export interface BuildOptions {
|
|
|
20
20
|
*/
|
|
21
21
|
baseUrl?: string;
|
|
22
22
|
/**
|
|
23
|
-
* Transport-layer framing. `'raw'`
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* Transport-layer framing. `'raw'` sends the vector body to the retargeted
|
|
24
|
+
* vector URL verbatim — matches the conformance vectors' intent of testing
|
|
25
|
+
* a per-operation HTTP endpoint. `'mcp'` wraps the vector body in a
|
|
26
|
+
* JSON-RPC `tools/call` envelope and posts to `baseUrl` as-is (no path
|
|
27
|
+
* join); operation name comes from the vector URL's last segment.
|
|
28
28
|
*
|
|
29
29
|
* MCP mode trades the canonicalization-edge coverage for reach: vectors
|
|
30
30
|
* 005–008 fold into plain POSTs against the MCP endpoint, but the grader
|
|
31
31
|
* works against any MCP agent that wires a verifier at the HTTP layer.
|
|
32
|
+
*
|
|
33
|
+
* **Defaults differ by layer, deliberately.** Omitting the field here
|
|
34
|
+
* builds a raw request: this is the low-level primitive, and a caller
|
|
35
|
+
* holding a vector and a REST target shouldn't have its body silently
|
|
36
|
+
* re-framed. Every grader entry point above it (`gradeRequestSigning`,
|
|
37
|
+
* `gradeOneVector`, the storyboard `request_signing_probe` dispatch)
|
|
38
|
+
* resolves the default to `'mcp'` instead, because the runner reaches
|
|
39
|
+
* agents through `tools/call` and raw replay 404s on an MCP mount before
|
|
40
|
+
* the verifier runs (adcontextprotocol/adcp#6548). REST-binding agents
|
|
41
|
+
* pass `'raw'` explicitly — `adcp storyboard run --signing-transport raw`
|
|
42
|
+
* or `adcp grade request-signing --transport raw`.
|
|
32
43
|
*/
|
|
33
44
|
transport?: 'raw' | 'mcp';
|
|
34
45
|
/**
|
|
@@ -20,15 +20,26 @@ export interface BuildOptions {
|
|
|
20
20
|
*/
|
|
21
21
|
baseUrl?: string;
|
|
22
22
|
/**
|
|
23
|
-
* Transport-layer framing. `'raw'`
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* Transport-layer framing. `'raw'` sends the vector body to the retargeted
|
|
24
|
+
* vector URL verbatim — matches the conformance vectors' intent of testing
|
|
25
|
+
* a per-operation HTTP endpoint. `'mcp'` wraps the vector body in a
|
|
26
|
+
* JSON-RPC `tools/call` envelope and posts to `baseUrl` as-is (no path
|
|
27
|
+
* join); operation name comes from the vector URL's last segment.
|
|
28
28
|
*
|
|
29
29
|
* MCP mode trades the canonicalization-edge coverage for reach: vectors
|
|
30
30
|
* 005–008 fold into plain POSTs against the MCP endpoint, but the grader
|
|
31
31
|
* works against any MCP agent that wires a verifier at the HTTP layer.
|
|
32
|
+
*
|
|
33
|
+
* **Defaults differ by layer, deliberately.** Omitting the field here
|
|
34
|
+
* builds a raw request: this is the low-level primitive, and a caller
|
|
35
|
+
* holding a vector and a REST target shouldn't have its body silently
|
|
36
|
+
* re-framed. Every grader entry point above it (`gradeRequestSigning`,
|
|
37
|
+
* `gradeOneVector`, the storyboard `request_signing_probe` dispatch)
|
|
38
|
+
* resolves the default to `'mcp'` instead, because the runner reaches
|
|
39
|
+
* agents through `tools/call` and raw replay 404s on an MCP mount before
|
|
40
|
+
* the verifier runs (adcontextprotocol/adcp#6548). REST-binding agents
|
|
41
|
+
* pass `'raw'` explicitly — `adcp storyboard run --signing-transport raw`
|
|
42
|
+
* or `adcp grade request-signing --transport raw`.
|
|
32
43
|
*/
|
|
33
44
|
transport?: 'raw' | 'mcp';
|
|
34
45
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type LoadVectorsOptions } from './vector-loader.mjs';
|
|
2
|
-
import type { VerifierCapabilityFixture } from './types.mjs';
|
|
2
|
+
import type { NegativeVector, PositiveVector, VerifierCapabilityFixture } from './types.mjs';
|
|
3
3
|
export interface GradeOptions extends LoadVectorsOptions {
|
|
4
4
|
/** Allow http:// and private-IP destinations. Off by default (match fetchProbe). */
|
|
5
5
|
allowPrivateIp?: boolean;
|
|
@@ -155,6 +155,15 @@ export interface VectorGradeResult {
|
|
|
155
155
|
expected_error_code?: string;
|
|
156
156
|
http_status: number;
|
|
157
157
|
diagnostic?: string;
|
|
158
|
+
/**
|
|
159
|
+
* The request never completed: `ProbeResult.error` was set (DNS, connect,
|
|
160
|
+
* TLS, SSRF guard). Structured rather than left to the `probe error:`
|
|
161
|
+
* prefix on `diagnostic`, because callers have to tell a transport fault
|
|
162
|
+
* from a verdict — both report `http_status: 0` with text attached, and
|
|
163
|
+
* the storyboard's coverage classifier would otherwise report an
|
|
164
|
+
* unreachable agent as "only the SDK self-check ran".
|
|
165
|
+
*/
|
|
166
|
+
transport_error?: boolean;
|
|
158
167
|
probe_duration_ms: number;
|
|
159
168
|
/**
|
|
160
169
|
* For neg/016 (replayed-nonce) only: total number of (probe1, probe2)
|
|
@@ -201,9 +210,43 @@ export interface GradeReport {
|
|
|
201
210
|
* copy fires.
|
|
202
211
|
*/
|
|
203
212
|
export declare function gradeRequestSigning(agentUrl: string, options?: GradeOptions): Promise<GradeReport>;
|
|
213
|
+
/** A vector excluded on its own terms, independent of the run's transport. */
|
|
214
|
+
export interface SemanticVectorExclusion {
|
|
215
|
+
skip_reason: 'capability_profile_mismatch' | 'transport_ungradable';
|
|
216
|
+
diagnostic: string;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Exclusions that depend on the vector and the agent's declared profile, not
|
|
220
|
+
* on how this run reaches the agent: a capability-profile mismatch, and the
|
|
221
|
+
* `TRANSPORT_UNGRADABLE` carve-outs above (which no HTTP binding can grade on
|
|
222
|
+
* any protocol). Returns `undefined` when the vector is gradable in principle.
|
|
223
|
+
*
|
|
224
|
+
* Shared with the storyboard probe so both entry points apply the same rules
|
|
225
|
+
* in the same order, and so the probe can apply them *before* its own
|
|
226
|
+
* protocol-transport gate. Gating on protocol first would relabel a vector the
|
|
227
|
+
* agent's profile never opted into — or one no transport can carry — as this
|
|
228
|
+
* protocol's missing coverage (adcp-client#2954).
|
|
229
|
+
*/
|
|
230
|
+
export declare function semanticVectorExclusion(vector: PositiveVector | NegativeVector, declaredCapability?: Pick<VerifierCapabilityFixture, 'protocol_methods_required_for'>): SemanticVectorExclusion | undefined;
|
|
204
231
|
/**
|
|
205
232
|
* Grade a single vector. Loads the vectors+keys+contract on every call; for
|
|
206
233
|
* the storyboard-runner dispatch path where the caller runs many vectors in
|
|
207
234
|
* sequence, prefer `gradeRequestSigning` which loads once.
|
|
208
235
|
*/
|
|
209
236
|
export declare function gradeOneVector(vectorId: string, kind: 'positive' | 'negative', agentUrl: string, options?: GradeOptions): Promise<VectorGradeResult>;
|
|
237
|
+
/**
|
|
238
|
+
* The `protocol_methods_required_for` slice of `capabilityMismatch`
|
|
239
|
+
* (adcp#4326 namespace): negative vectors that grade a JSON-RPC protocol
|
|
240
|
+
* method (only `028-unsigned-protocol-method-required` today) don't apply to
|
|
241
|
+
* an agent that never claimed to require a signature on that method, exactly
|
|
242
|
+
* as `required_for` works for AdCP-tool vectors.
|
|
243
|
+
*
|
|
244
|
+
* Split out and exported because it is the one dimension safe to decide from
|
|
245
|
+
* an agent's *advertised* `request_signing` block. The others describe the
|
|
246
|
+
* profile a vector was authored against — an operator selects a matching one
|
|
247
|
+
* with `--covers-content-digest` / `agentCapability`, and reading them off a
|
|
248
|
+
* live advertisement instead would exclude most of the vector set (a
|
|
249
|
+
* `covers_content_digest: 'either', required_for: []` advertisement mismatches
|
|
250
|
+
* 39 of 40 vectors), quietly gutting the storyboard it was meant to sharpen.
|
|
251
|
+
*/
|
|
252
|
+
export declare function protocolMethodCoverageMismatch(vector: PositiveVector | NegativeVector, agentCap: Pick<VerifierCapabilityFixture, 'protocol_methods_required_for'>): string | undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type LoadVectorsOptions } from './vector-loader';
|
|
2
|
-
import type { VerifierCapabilityFixture } from './types';
|
|
2
|
+
import type { NegativeVector, PositiveVector, VerifierCapabilityFixture } from './types';
|
|
3
3
|
export interface GradeOptions extends LoadVectorsOptions {
|
|
4
4
|
/** Allow http:// and private-IP destinations. Off by default (match fetchProbe). */
|
|
5
5
|
allowPrivateIp?: boolean;
|
|
@@ -155,6 +155,15 @@ export interface VectorGradeResult {
|
|
|
155
155
|
expected_error_code?: string;
|
|
156
156
|
http_status: number;
|
|
157
157
|
diagnostic?: string;
|
|
158
|
+
/**
|
|
159
|
+
* The request never completed: `ProbeResult.error` was set (DNS, connect,
|
|
160
|
+
* TLS, SSRF guard). Structured rather than left to the `probe error:`
|
|
161
|
+
* prefix on `diagnostic`, because callers have to tell a transport fault
|
|
162
|
+
* from a verdict — both report `http_status: 0` with text attached, and
|
|
163
|
+
* the storyboard's coverage classifier would otherwise report an
|
|
164
|
+
* unreachable agent as "only the SDK self-check ran".
|
|
165
|
+
*/
|
|
166
|
+
transport_error?: boolean;
|
|
158
167
|
probe_duration_ms: number;
|
|
159
168
|
/**
|
|
160
169
|
* For neg/016 (replayed-nonce) only: total number of (probe1, probe2)
|
|
@@ -201,9 +210,43 @@ export interface GradeReport {
|
|
|
201
210
|
* copy fires.
|
|
202
211
|
*/
|
|
203
212
|
export declare function gradeRequestSigning(agentUrl: string, options?: GradeOptions): Promise<GradeReport>;
|
|
213
|
+
/** A vector excluded on its own terms, independent of the run's transport. */
|
|
214
|
+
export interface SemanticVectorExclusion {
|
|
215
|
+
skip_reason: 'capability_profile_mismatch' | 'transport_ungradable';
|
|
216
|
+
diagnostic: string;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Exclusions that depend on the vector and the agent's declared profile, not
|
|
220
|
+
* on how this run reaches the agent: a capability-profile mismatch, and the
|
|
221
|
+
* `TRANSPORT_UNGRADABLE` carve-outs above (which no HTTP binding can grade on
|
|
222
|
+
* any protocol). Returns `undefined` when the vector is gradable in principle.
|
|
223
|
+
*
|
|
224
|
+
* Shared with the storyboard probe so both entry points apply the same rules
|
|
225
|
+
* in the same order, and so the probe can apply them *before* its own
|
|
226
|
+
* protocol-transport gate. Gating on protocol first would relabel a vector the
|
|
227
|
+
* agent's profile never opted into — or one no transport can carry — as this
|
|
228
|
+
* protocol's missing coverage (adcp-client#2954).
|
|
229
|
+
*/
|
|
230
|
+
export declare function semanticVectorExclusion(vector: PositiveVector | NegativeVector, declaredCapability?: Pick<VerifierCapabilityFixture, 'protocol_methods_required_for'>): SemanticVectorExclusion | undefined;
|
|
204
231
|
/**
|
|
205
232
|
* Grade a single vector. Loads the vectors+keys+contract on every call; for
|
|
206
233
|
* the storyboard-runner dispatch path where the caller runs many vectors in
|
|
207
234
|
* sequence, prefer `gradeRequestSigning` which loads once.
|
|
208
235
|
*/
|
|
209
236
|
export declare function gradeOneVector(vectorId: string, kind: 'positive' | 'negative', agentUrl: string, options?: GradeOptions): Promise<VectorGradeResult>;
|
|
237
|
+
/**
|
|
238
|
+
* The `protocol_methods_required_for` slice of `capabilityMismatch`
|
|
239
|
+
* (adcp#4326 namespace): negative vectors that grade a JSON-RPC protocol
|
|
240
|
+
* method (only `028-unsigned-protocol-method-required` today) don't apply to
|
|
241
|
+
* an agent that never claimed to require a signature on that method, exactly
|
|
242
|
+
* as `required_for` works for AdCP-tool vectors.
|
|
243
|
+
*
|
|
244
|
+
* Split out and exported because it is the one dimension safe to decide from
|
|
245
|
+
* an agent's *advertised* `request_signing` block. The others describe the
|
|
246
|
+
* profile a vector was authored against — an operator selects a matching one
|
|
247
|
+
* with `--covers-content-digest` / `agentCapability`, and reading them off a
|
|
248
|
+
* live advertisement instead would exclude most of the vector set (a
|
|
249
|
+
* `covers_content_digest: 'either', required_for: []` advertisement mismatches
|
|
250
|
+
* 39 of 40 vectors), quietly gutting the storyboard it was meant to sharpen.
|
|
251
|
+
*/
|
|
252
|
+
export declare function protocolMethodCoverageMismatch(vector: PositiveVector | NegativeVector, agentCap: Pick<VerifierCapabilityFixture, 'protocol_methods_required_for'>): string | undefined;
|
|
@@ -19,7 +19,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var grader_exports = {};
|
|
20
20
|
__export(grader_exports, {
|
|
21
21
|
gradeOneVector: () => gradeOneVector,
|
|
22
|
-
gradeRequestSigning: () => gradeRequestSigning
|
|
22
|
+
gradeRequestSigning: () => gradeRequestSigning,
|
|
23
|
+
protocolMethodCoverageMismatch: () => protocolMethodCoverageMismatch,
|
|
24
|
+
semanticVectorExclusion: () => semanticVectorExclusion
|
|
23
25
|
});
|
|
24
26
|
module.exports = __toCommonJS(grader_exports);
|
|
25
27
|
var import_crypto = require("crypto");
|
|
@@ -119,6 +121,15 @@ const TRANSPORT_UNGRADABLE = {
|
|
|
119
121
|
"026-non-ascii-host": "HTTP transport punycodes U-labels before the request leaves the client; verified at the library level.",
|
|
120
122
|
"profile-3.2/negative/002-multiple-trailing-dots": "HTTP transport cannot route to an intentionally malformed DNS authority; verified at the library level."
|
|
121
123
|
};
|
|
124
|
+
function semanticVectorExclusion(vector, declaredCapability) {
|
|
125
|
+
if (declaredCapability) {
|
|
126
|
+
const mismatch = protocolMethodCoverageMismatch(vector, declaredCapability);
|
|
127
|
+
if (mismatch) return { skip_reason: "capability_profile_mismatch", diagnostic: mismatch };
|
|
128
|
+
}
|
|
129
|
+
const transportReason = TRANSPORT_UNGRADABLE[vector.id];
|
|
130
|
+
if (transportReason) return { skip_reason: "transport_ungradable", diagnostic: transportReason };
|
|
131
|
+
return void 0;
|
|
132
|
+
}
|
|
122
133
|
function preflightSkip(vector, kind, contract, options) {
|
|
123
134
|
const expected_error_code = kind === "negative" ? vector.expected_error_code : void 0;
|
|
124
135
|
const base = {
|
|
@@ -139,12 +150,7 @@ function preflightSkip(vector, kind, contract, options) {
|
|
|
139
150
|
if (options.agentCapability) {
|
|
140
151
|
const mismatch = capabilityMismatch(vector, options.agentCapability);
|
|
141
152
|
if (mismatch) {
|
|
142
|
-
return {
|
|
143
|
-
...base,
|
|
144
|
-
skipped: true,
|
|
145
|
-
skip_reason: "capability_profile_mismatch",
|
|
146
|
-
diagnostic: mismatch
|
|
147
|
-
};
|
|
153
|
+
return { ...base, skipped: true, skip_reason: "capability_profile_mismatch", diagnostic: mismatch };
|
|
148
154
|
}
|
|
149
155
|
}
|
|
150
156
|
if (!options.agentCapability && options.agentContentDigestPolicy) {
|
|
@@ -158,9 +164,9 @@ function preflightSkip(vector, kind, contract, options) {
|
|
|
158
164
|
};
|
|
159
165
|
}
|
|
160
166
|
}
|
|
161
|
-
const
|
|
162
|
-
if (
|
|
163
|
-
return { ...base, skipped: true, skip_reason:
|
|
167
|
+
const semantic = semanticVectorExclusion(vector);
|
|
168
|
+
if (semantic) {
|
|
169
|
+
return { ...base, skipped: true, skip_reason: semantic.skip_reason, diagnostic: semantic.diagnostic };
|
|
164
170
|
}
|
|
165
171
|
if (kind === "positive" && (options.transport ?? "mcp") === "mcp" && MCP_FLATTENED_VECTORS.has(vector.id)) {
|
|
166
172
|
return {
|
|
@@ -242,6 +248,7 @@ function gradePositive(vector, probe) {
|
|
|
242
248
|
passed: accepted && !probe.error,
|
|
243
249
|
http_status: probe.status,
|
|
244
250
|
diagnostic: accepted ? void 0 : buildPositiveDiagnostic(vector, probe),
|
|
251
|
+
...probe.error !== void 0 && { transport_error: true },
|
|
245
252
|
probe_duration_ms: probe.duration_ms
|
|
246
253
|
};
|
|
247
254
|
}
|
|
@@ -321,6 +328,7 @@ function gradeStaticNegative(vector, loaded, probeOpts, buildOpts) {
|
|
|
321
328
|
expected_error_code: vector.expected_error_code,
|
|
322
329
|
actual_error_code: probe.wwwAuthenticateErrorCode,
|
|
323
330
|
diagnostic: buildNegativeDiagnostic(vector, probe),
|
|
331
|
+
...probe.error !== void 0 && { transport_error: true },
|
|
324
332
|
probe_duration_ms: probe.duration_ms
|
|
325
333
|
}));
|
|
326
334
|
}
|
|
@@ -329,6 +337,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
329
337
|
let rejectedCount = 0;
|
|
330
338
|
let lastSecondStatus = 0;
|
|
331
339
|
let lastSecondErrorCode;
|
|
340
|
+
let sawSecondTransportError = false;
|
|
332
341
|
for (let i = 0; i < pairCount; i++) {
|
|
333
342
|
const nonce = (0, import_crypto.randomBytes)(16).toString("base64url");
|
|
334
343
|
const signed = buildPositiveRequestFromNegative(vector, loaded, { ...buildOpts, nonce });
|
|
@@ -343,6 +352,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
343
352
|
expected_error_code: vector.expected_error_code,
|
|
344
353
|
actual_error_code: first.wwwAuthenticateErrorCode,
|
|
345
354
|
diagnostic: `replay_window contract: first submission MUST be accepted but agent returned ${first.status}` + (first.wwwAuthenticateErrorCode ? ` (error="${first.wwwAuthenticateErrorCode}")` : "") + ". Check runner JWKS registration with the agent.",
|
|
355
|
+
...first.error !== void 0 && { transport_error: true },
|
|
346
356
|
probe_duration_ms: totalDurationMs,
|
|
347
357
|
replay_pairs_tried: i + 1,
|
|
348
358
|
replay_pairs_rejected: rejectedCount
|
|
@@ -352,6 +362,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
352
362
|
totalDurationMs += second.duration_ms;
|
|
353
363
|
lastSecondStatus = second.status;
|
|
354
364
|
lastSecondErrorCode = second.wwwAuthenticateErrorCode;
|
|
365
|
+
if (second.error !== void 0) sawSecondTransportError = true;
|
|
355
366
|
if (negativeAcceptedErrorCode(vector, second)) {
|
|
356
367
|
rejectedCount++;
|
|
357
368
|
}
|
|
@@ -364,6 +375,11 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
364
375
|
http_status: lastSecondStatus,
|
|
365
376
|
expected_error_code: vector.expected_error_code,
|
|
366
377
|
actual_error_code: lastSecondErrorCode,
|
|
378
|
+
// Unreachable today — an errored probe cannot satisfy
|
|
379
|
+
// `negativeAcceptedErrorCode`, so every pair rejecting implies none
|
|
380
|
+
// faulted — but carried on both terminal paths so the provenance
|
|
381
|
+
// cannot be lost if that counting changes.
|
|
382
|
+
...sawSecondTransportError && { transport_error: true },
|
|
367
383
|
probe_duration_ms: totalDurationMs,
|
|
368
384
|
replay_pairs_tried: pairCount,
|
|
369
385
|
replay_pairs_rejected: pairCount
|
|
@@ -377,6 +393,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
377
393
|
expected_error_code: vector.expected_error_code,
|
|
378
394
|
actual_error_code: lastSecondErrorCode,
|
|
379
395
|
diagnostic: buildReplayWindowFailDiagnostic(vector, rejectedCount, pairCount),
|
|
396
|
+
...sawSecondTransportError && { transport_error: true },
|
|
380
397
|
probe_duration_ms: totalDurationMs,
|
|
381
398
|
replay_pairs_tried: pairCount,
|
|
382
399
|
replay_pairs_rejected: rejectedCount
|
|
@@ -391,24 +408,30 @@ function buildReplayWindowFailDiagnostic(vector, rejectedCount, pairCount) {
|
|
|
391
408
|
async function gradeRateAbuse(vector, loaded, contract, probeOpts, buildOpts, options) {
|
|
392
409
|
const cap = options.rateAbuseCap ?? contract.stateful_vector_contract.rate_abuse.grading_target_per_keyid_cap_requests;
|
|
393
410
|
let durationMs = 0;
|
|
411
|
+
let fillTransportError;
|
|
394
412
|
for (let i = 0; i < cap; i++) {
|
|
395
413
|
const nonce = (0, import_crypto.randomBytes)(16).toString("base64url");
|
|
396
414
|
const signed = (0, import_builder.buildNegativeRequest)(vector, loaded.keys, { nonce, ...buildOpts });
|
|
397
415
|
const probe2 = await (0, import_probe.probeSignedRequest)(signed, probeOpts);
|
|
398
416
|
durationMs += probe2.duration_ms;
|
|
417
|
+
if (probe2.error !== void 0 && fillTransportError === void 0) {
|
|
418
|
+
fillTransportError = `cap-fill request ${i + 1} of ${cap} never completed: ${probe2.error}`;
|
|
419
|
+
}
|
|
399
420
|
}
|
|
400
421
|
const finalNonce = (0, import_crypto.randomBytes)(16).toString("base64url");
|
|
401
422
|
const capPlusOne = (0, import_builder.buildNegativeRequest)(vector, loaded.keys, { nonce: finalNonce, ...buildOpts });
|
|
402
423
|
const probe = await (0, import_probe.probeSignedRequest)(capPlusOne, probeOpts);
|
|
403
424
|
durationMs += probe.duration_ms;
|
|
425
|
+
const capEstablished = fillTransportError === void 0;
|
|
404
426
|
return {
|
|
405
427
|
vector_id: vector.id,
|
|
406
428
|
kind: "negative",
|
|
407
|
-
passed: negativeAcceptedErrorCode(vector, probe),
|
|
429
|
+
passed: capEstablished && negativeAcceptedErrorCode(vector, probe),
|
|
408
430
|
http_status: probe.status,
|
|
409
431
|
expected_error_code: vector.expected_error_code,
|
|
410
432
|
actual_error_code: probe.wwwAuthenticateErrorCode,
|
|
411
|
-
diagnostic: buildNegativeDiagnostic(vector, probe),
|
|
433
|
+
diagnostic: capEstablished ? buildNegativeDiagnostic(vector, probe) : `rate_abuse contract: the per-keyid cap was never established \u2014 ${fillTransportError}. The (cap+1) response (status ${probe.status}` + (probe.wwwAuthenticateErrorCode ? `, error="${probe.wwwAuthenticateErrorCode}"` : "") + ") says nothing about the limiter, so this vector is ungraded rather than passing.",
|
|
434
|
+
...(probe.error !== void 0 || !capEstablished) && { transport_error: true },
|
|
412
435
|
probe_duration_ms: durationMs
|
|
413
436
|
};
|
|
414
437
|
}
|
|
@@ -476,15 +499,14 @@ function capabilityMismatch(vector, agentCap) {
|
|
|
476
499
|
if (missingRequiredFor.length > 0) {
|
|
477
500
|
return `Vector asserts required_for includes [${missingRequiredFor.join(", ")}] but agent's required_for does not. Either add the operation to the agent's request_signing.required_for, or accept the skip.`;
|
|
478
501
|
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
);
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
}
|
|
487
|
-
return void 0;
|
|
502
|
+
return protocolMethodCoverageMismatch(vector, agentCap);
|
|
503
|
+
}
|
|
504
|
+
function protocolMethodCoverageMismatch(vector, agentCap) {
|
|
505
|
+
const required = vector.verifier_capability.protocol_methods_required_for ?? [];
|
|
506
|
+
const declared = new Set(agentCap.protocol_methods_required_for ?? []);
|
|
507
|
+
const missing = required.filter((method) => !declared.has(method));
|
|
508
|
+
if (missing.length === 0) return void 0;
|
|
509
|
+
return `Vector asserts protocol_methods_required_for includes [${missing.join(", ")}] but agent's protocol_methods_required_for does not. Either add the method to the agent's request_signing.protocol_methods_required_for, or accept the skip.`;
|
|
488
510
|
}
|
|
489
511
|
function buildNegativeDiagnostic(vector, probe) {
|
|
490
512
|
if (probe.error) return `probe error: ${probe.error}`;
|
|
@@ -500,5 +522,7 @@ function buildNegativeDiagnostic(vector, probe) {
|
|
|
500
522
|
// Annotate the CommonJS export names for ESM import in node:
|
|
501
523
|
0 && (module.exports = {
|
|
502
524
|
gradeOneVector,
|
|
503
|
-
gradeRequestSigning
|
|
525
|
+
gradeRequestSigning,
|
|
526
|
+
protocolMethodCoverageMismatch,
|
|
527
|
+
semanticVectorExclusion
|
|
504
528
|
});
|
|
@@ -101,6 +101,15 @@ const TRANSPORT_UNGRADABLE = {
|
|
|
101
101
|
"026-non-ascii-host": "HTTP transport punycodes U-labels before the request leaves the client; verified at the library level.",
|
|
102
102
|
"profile-3.2/negative/002-multiple-trailing-dots": "HTTP transport cannot route to an intentionally malformed DNS authority; verified at the library level."
|
|
103
103
|
};
|
|
104
|
+
function semanticVectorExclusion(vector, declaredCapability) {
|
|
105
|
+
if (declaredCapability) {
|
|
106
|
+
const mismatch = protocolMethodCoverageMismatch(vector, declaredCapability);
|
|
107
|
+
if (mismatch) return { skip_reason: "capability_profile_mismatch", diagnostic: mismatch };
|
|
108
|
+
}
|
|
109
|
+
const transportReason = TRANSPORT_UNGRADABLE[vector.id];
|
|
110
|
+
if (transportReason) return { skip_reason: "transport_ungradable", diagnostic: transportReason };
|
|
111
|
+
return void 0;
|
|
112
|
+
}
|
|
104
113
|
function preflightSkip(vector, kind, contract, options) {
|
|
105
114
|
const expected_error_code = kind === "negative" ? vector.expected_error_code : void 0;
|
|
106
115
|
const base = {
|
|
@@ -121,12 +130,7 @@ function preflightSkip(vector, kind, contract, options) {
|
|
|
121
130
|
if (options.agentCapability) {
|
|
122
131
|
const mismatch = capabilityMismatch(vector, options.agentCapability);
|
|
123
132
|
if (mismatch) {
|
|
124
|
-
return {
|
|
125
|
-
...base,
|
|
126
|
-
skipped: true,
|
|
127
|
-
skip_reason: "capability_profile_mismatch",
|
|
128
|
-
diagnostic: mismatch
|
|
129
|
-
};
|
|
133
|
+
return { ...base, skipped: true, skip_reason: "capability_profile_mismatch", diagnostic: mismatch };
|
|
130
134
|
}
|
|
131
135
|
}
|
|
132
136
|
if (!options.agentCapability && options.agentContentDigestPolicy) {
|
|
@@ -140,9 +144,9 @@ function preflightSkip(vector, kind, contract, options) {
|
|
|
140
144
|
};
|
|
141
145
|
}
|
|
142
146
|
}
|
|
143
|
-
const
|
|
144
|
-
if (
|
|
145
|
-
return { ...base, skipped: true, skip_reason:
|
|
147
|
+
const semantic = semanticVectorExclusion(vector);
|
|
148
|
+
if (semantic) {
|
|
149
|
+
return { ...base, skipped: true, skip_reason: semantic.skip_reason, diagnostic: semantic.diagnostic };
|
|
146
150
|
}
|
|
147
151
|
if (kind === "positive" && (options.transport ?? "mcp") === "mcp" && MCP_FLATTENED_VECTORS.has(vector.id)) {
|
|
148
152
|
return {
|
|
@@ -224,6 +228,7 @@ function gradePositive(vector, probe) {
|
|
|
224
228
|
passed: accepted && !probe.error,
|
|
225
229
|
http_status: probe.status,
|
|
226
230
|
diagnostic: accepted ? void 0 : buildPositiveDiagnostic(vector, probe),
|
|
231
|
+
...probe.error !== void 0 && { transport_error: true },
|
|
227
232
|
probe_duration_ms: probe.duration_ms
|
|
228
233
|
};
|
|
229
234
|
}
|
|
@@ -303,6 +308,7 @@ function gradeStaticNegative(vector, loaded, probeOpts, buildOpts) {
|
|
|
303
308
|
expected_error_code: vector.expected_error_code,
|
|
304
309
|
actual_error_code: probe.wwwAuthenticateErrorCode,
|
|
305
310
|
diagnostic: buildNegativeDiagnostic(vector, probe),
|
|
311
|
+
...probe.error !== void 0 && { transport_error: true },
|
|
306
312
|
probe_duration_ms: probe.duration_ms
|
|
307
313
|
}));
|
|
308
314
|
}
|
|
@@ -311,6 +317,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
311
317
|
let rejectedCount = 0;
|
|
312
318
|
let lastSecondStatus = 0;
|
|
313
319
|
let lastSecondErrorCode;
|
|
320
|
+
let sawSecondTransportError = false;
|
|
314
321
|
for (let i = 0; i < pairCount; i++) {
|
|
315
322
|
const nonce = randomBytes(16).toString("base64url");
|
|
316
323
|
const signed = buildPositiveRequestFromNegative(vector, loaded, { ...buildOpts, nonce });
|
|
@@ -325,6 +332,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
325
332
|
expected_error_code: vector.expected_error_code,
|
|
326
333
|
actual_error_code: first.wwwAuthenticateErrorCode,
|
|
327
334
|
diagnostic: `replay_window contract: first submission MUST be accepted but agent returned ${first.status}` + (first.wwwAuthenticateErrorCode ? ` (error="${first.wwwAuthenticateErrorCode}")` : "") + ". Check runner JWKS registration with the agent.",
|
|
335
|
+
...first.error !== void 0 && { transport_error: true },
|
|
328
336
|
probe_duration_ms: totalDurationMs,
|
|
329
337
|
replay_pairs_tried: i + 1,
|
|
330
338
|
replay_pairs_rejected: rejectedCount
|
|
@@ -334,6 +342,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
334
342
|
totalDurationMs += second.duration_ms;
|
|
335
343
|
lastSecondStatus = second.status;
|
|
336
344
|
lastSecondErrorCode = second.wwwAuthenticateErrorCode;
|
|
345
|
+
if (second.error !== void 0) sawSecondTransportError = true;
|
|
337
346
|
if (negativeAcceptedErrorCode(vector, second)) {
|
|
338
347
|
rejectedCount++;
|
|
339
348
|
}
|
|
@@ -346,6 +355,11 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
346
355
|
http_status: lastSecondStatus,
|
|
347
356
|
expected_error_code: vector.expected_error_code,
|
|
348
357
|
actual_error_code: lastSecondErrorCode,
|
|
358
|
+
// Unreachable today — an errored probe cannot satisfy
|
|
359
|
+
// `negativeAcceptedErrorCode`, so every pair rejecting implies none
|
|
360
|
+
// faulted — but carried on both terminal paths so the provenance
|
|
361
|
+
// cannot be lost if that counting changes.
|
|
362
|
+
...sawSecondTransportError && { transport_error: true },
|
|
349
363
|
probe_duration_ms: totalDurationMs,
|
|
350
364
|
replay_pairs_tried: pairCount,
|
|
351
365
|
replay_pairs_rejected: pairCount
|
|
@@ -359,6 +373,7 @@ async function gradeReplayWindow(vector, loaded, probeOpts, buildOpts, pairCount
|
|
|
359
373
|
expected_error_code: vector.expected_error_code,
|
|
360
374
|
actual_error_code: lastSecondErrorCode,
|
|
361
375
|
diagnostic: buildReplayWindowFailDiagnostic(vector, rejectedCount, pairCount),
|
|
376
|
+
...sawSecondTransportError && { transport_error: true },
|
|
362
377
|
probe_duration_ms: totalDurationMs,
|
|
363
378
|
replay_pairs_tried: pairCount,
|
|
364
379
|
replay_pairs_rejected: rejectedCount
|
|
@@ -373,24 +388,30 @@ function buildReplayWindowFailDiagnostic(vector, rejectedCount, pairCount) {
|
|
|
373
388
|
async function gradeRateAbuse(vector, loaded, contract, probeOpts, buildOpts, options) {
|
|
374
389
|
const cap = options.rateAbuseCap ?? contract.stateful_vector_contract.rate_abuse.grading_target_per_keyid_cap_requests;
|
|
375
390
|
let durationMs = 0;
|
|
391
|
+
let fillTransportError;
|
|
376
392
|
for (let i = 0; i < cap; i++) {
|
|
377
393
|
const nonce = randomBytes(16).toString("base64url");
|
|
378
394
|
const signed = buildNegativeRequest(vector, loaded.keys, { nonce, ...buildOpts });
|
|
379
395
|
const probe2 = await probeSignedRequest(signed, probeOpts);
|
|
380
396
|
durationMs += probe2.duration_ms;
|
|
397
|
+
if (probe2.error !== void 0 && fillTransportError === void 0) {
|
|
398
|
+
fillTransportError = `cap-fill request ${i + 1} of ${cap} never completed: ${probe2.error}`;
|
|
399
|
+
}
|
|
381
400
|
}
|
|
382
401
|
const finalNonce = randomBytes(16).toString("base64url");
|
|
383
402
|
const capPlusOne = buildNegativeRequest(vector, loaded.keys, { nonce: finalNonce, ...buildOpts });
|
|
384
403
|
const probe = await probeSignedRequest(capPlusOne, probeOpts);
|
|
385
404
|
durationMs += probe.duration_ms;
|
|
405
|
+
const capEstablished = fillTransportError === void 0;
|
|
386
406
|
return {
|
|
387
407
|
vector_id: vector.id,
|
|
388
408
|
kind: "negative",
|
|
389
|
-
passed: negativeAcceptedErrorCode(vector, probe),
|
|
409
|
+
passed: capEstablished && negativeAcceptedErrorCode(vector, probe),
|
|
390
410
|
http_status: probe.status,
|
|
391
411
|
expected_error_code: vector.expected_error_code,
|
|
392
412
|
actual_error_code: probe.wwwAuthenticateErrorCode,
|
|
393
|
-
diagnostic: buildNegativeDiagnostic(vector, probe),
|
|
413
|
+
diagnostic: capEstablished ? buildNegativeDiagnostic(vector, probe) : `rate_abuse contract: the per-keyid cap was never established \u2014 ${fillTransportError}. The (cap+1) response (status ${probe.status}` + (probe.wwwAuthenticateErrorCode ? `, error="${probe.wwwAuthenticateErrorCode}"` : "") + ") says nothing about the limiter, so this vector is ungraded rather than passing.",
|
|
414
|
+
...(probe.error !== void 0 || !capEstablished) && { transport_error: true },
|
|
394
415
|
probe_duration_ms: durationMs
|
|
395
416
|
};
|
|
396
417
|
}
|
|
@@ -458,15 +479,14 @@ function capabilityMismatch(vector, agentCap) {
|
|
|
458
479
|
if (missingRequiredFor.length > 0) {
|
|
459
480
|
return `Vector asserts required_for includes [${missingRequiredFor.join(", ")}] but agent's required_for does not. Either add the operation to the agent's request_signing.required_for, or accept the skip.`;
|
|
460
481
|
}
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
);
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
}
|
|
469
|
-
return void 0;
|
|
482
|
+
return protocolMethodCoverageMismatch(vector, agentCap);
|
|
483
|
+
}
|
|
484
|
+
function protocolMethodCoverageMismatch(vector, agentCap) {
|
|
485
|
+
const required = vector.verifier_capability.protocol_methods_required_for ?? [];
|
|
486
|
+
const declared = new Set(agentCap.protocol_methods_required_for ?? []);
|
|
487
|
+
const missing = required.filter((method) => !declared.has(method));
|
|
488
|
+
if (missing.length === 0) return void 0;
|
|
489
|
+
return `Vector asserts protocol_methods_required_for includes [${missing.join(", ")}] but agent's protocol_methods_required_for does not. Either add the method to the agent's request_signing.protocol_methods_required_for, or accept the skip.`;
|
|
470
490
|
}
|
|
471
491
|
function buildNegativeDiagnostic(vector, probe) {
|
|
472
492
|
if (probe.error) return `probe error: ${probe.error}`;
|
|
@@ -481,5 +501,7 @@ function buildNegativeDiagnostic(vector, probe) {
|
|
|
481
501
|
}
|
|
482
502
|
export {
|
|
483
503
|
gradeOneVector,
|
|
484
|
-
gradeRequestSigning
|
|
504
|
+
gradeRequestSigning,
|
|
505
|
+
protocolMethodCoverageMismatch,
|
|
506
|
+
semanticVectorExclusion
|
|
485
507
|
};
|
|
@@ -1,22 +1,97 @@
|
|
|
1
1
|
import type { HttpProbeResult, StoryboardRunOptions } from '../types.mjs';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
3
|
+
* Detail surfaced on each vector step an A2A run cannot frame. Written for
|
|
4
|
+
* the operator reading a conformance report: it has to say what coverage is
|
|
5
|
+
* missing and what would restore it.
|
|
6
|
+
*
|
|
7
|
+
* Reported as detailed reason `signing_transport_unavailable`, canonical
|
|
8
|
+
* `not_applicable` with the sub-reason token as `skip.detail` — the output
|
|
9
|
+
* contract's registered shape. What keeps the gap from reading as a pass is
|
|
10
|
+
* `signingCoverage` in the runner, not the reason: no vector reached the
|
|
11
|
+
* agent, so the storyboard cannot pass and the track grades `partial`
|
|
12
|
+
* instead of letting a sibling storyboard's passes roll it up green.
|
|
13
|
+
*/
|
|
14
|
+
export declare const SIGNING_VECTORS_UNAVAILABLE_DETAIL: string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the vector transport for a graded agent.
|
|
17
|
+
*
|
|
18
|
+
* Defaults to `'mcp'`: the storyboard runner reaches MCP agents through
|
|
19
|
+
* `tools/call` — never through per-task HTTP paths — so replaying the
|
|
20
|
+
* vectors' recorded REST targets (`/adcp/create_media_buy`, raw task body)
|
|
21
|
+
* verbatim guarantees a routing 404 on every MCP-transport agent before its
|
|
22
|
+
* verifier can run (adcontextprotocol/adcp#6548). Operators grading a
|
|
23
|
+
* REST-binding agent opt back in with `request_signing.transport: 'raw'`.
|
|
24
|
+
*
|
|
25
|
+
* Returns `undefined` on an A2A run that didn't pick a transport explicitly:
|
|
26
|
+
* neither dispatch shape this runner implements is an A2A request, so the
|
|
27
|
+
* caller skips those vectors as `signing_transport_unavailable` instead of
|
|
28
|
+
* POSTing an MCP envelope at an A2A
|
|
29
|
+
* endpoint and grading the resulting 405 as a signature failure
|
|
30
|
+
* (adcp-client#2954). An explicit `transport` still wins — that's the escape
|
|
31
|
+
* hatch for an agent whose MCP or REST binding answers on the same URL as its
|
|
32
|
+
* A2A card.
|
|
33
|
+
*
|
|
34
|
+
* There is no `'a2a'` member yet because the path isn't wired here, not
|
|
35
|
+
* because the official client is incapable: `@a2a-js/sdk` issues the JSON-RPC
|
|
36
|
+
* methods these vectors target, `tasks/cancel` included. Wiring it means
|
|
37
|
+
* signing a request the official client issues — applying each vector's RFC
|
|
38
|
+
* 9421 headers to that client's own request — plus an upstream answer for how
|
|
39
|
+
* a verifier scopes `required_for` over A2A methods. RFC 9421 conformance
|
|
40
|
+
* needs byte-level control of the request, which `builder.ts` has for the two
|
|
41
|
+
* bindings AdCP defines for these fixtures; there is no third binding to
|
|
42
|
+
* write bytes against, and picking one here would be the SDK inventing it.
|
|
43
|
+
* The only vectors that still grade are the ones needing no wire exchange at
|
|
44
|
+
* all — see `gradableWithoutVectorTransport`.
|
|
11
45
|
*/
|
|
12
46
|
export declare function resolveVectorTransport(rsOpts: {
|
|
13
47
|
transport?: 'raw' | 'mcp';
|
|
14
|
-
}): 'raw' | 'mcp';
|
|
48
|
+
}, protocol?: 'mcp' | 'a2a'): 'raw' | 'mcp' | undefined;
|
|
15
49
|
/**
|
|
16
50
|
* Dispatch a synthesized request-signing step. The step ID encodes the vector
|
|
17
51
|
* (`positive-<id>` / `negative-<id>`); this helper decodes it, runs the
|
|
18
52
|
* grader's per-vector logic, and maps the `VectorGradeResult` to an
|
|
19
|
-
* `HttpProbeResult`-shaped return so the
|
|
20
|
-
* (`http_status`, `http_status_in`) works unchanged.
|
|
53
|
+
* `HttpProbeResult`-shaped return so the HTTP validation pipeline
|
|
54
|
+
* (`http_status`, `http_status_in`) works unchanged for probed vectors.
|
|
55
|
+
*
|
|
56
|
+
* Vectors the grader decides in-library rather than over HTTP (the
|
|
57
|
+
* `jwks_override` negatives) carry `http_status: 0` by contract — there is no
|
|
58
|
+
* wire exchange to report. Their verdict travels on `error`: unset when the
|
|
59
|
+
* library verifier produced the expected rejection, set to the grader's
|
|
60
|
+
* diagnostic otherwise. `synthesizeNegativeStep` pairs those vectors with a
|
|
61
|
+
* `probe_passed` validation that reads exactly that field; asserting an HTTP
|
|
62
|
+
* status against them would compare a grade to a status code that no
|
|
63
|
+
* implementation can move (adcp-client#2955).
|
|
21
64
|
*/
|
|
22
65
|
export declare function probeRequestSigningVector(stepId: string, agentUrl: string, options: StoryboardRunOptions): Promise<HttpProbeResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Wire-name grammar for `request_signing.protocol_methods_*`, mirroring the
|
|
68
|
+
* `items` constraint the capabilities schema ships for each AdCP line:
|
|
69
|
+
*
|
|
70
|
+
* - 3.2+ — slash paths of one or more segments (`tasks/cancel`,
|
|
71
|
+
* `tasks/pushNotificationConfig/set`) or A2A 1.0 PascalCase names
|
|
72
|
+
* (`CancelTask`), 256 characters max, and never `tools/call`.
|
|
73
|
+
* - pre-3.2 — a single lowercase slash pair (`tasks/cancel`), with no
|
|
74
|
+
* length cap, because that line's schema declares none.
|
|
75
|
+
*
|
|
76
|
+
* Keyed by line rather than taking the union of both, because the union is
|
|
77
|
+
* unsafe in one direction: honouring a 3.2-only name on a 3.1 run accepts a
|
|
78
|
+
* declaration that line's schema rejects, and any accepted declaration
|
|
79
|
+
* omitting the vector's method suppresses that vector.
|
|
80
|
+
*
|
|
81
|
+
* Pinned against both shipped schemas by test — a grammar that drifts wider
|
|
82
|
+
* than the schema re-opens exactly that hole.
|
|
83
|
+
*/
|
|
84
|
+
export declare const PROTOCOL_METHOD_GRAMMARS: {
|
|
85
|
+
readonly since_3_2: {
|
|
86
|
+
readonly pattern: RegExp;
|
|
87
|
+
readonly maxLength: number | undefined;
|
|
88
|
+
readonly forbidden: readonly string[];
|
|
89
|
+
};
|
|
90
|
+
readonly pre_3_2: {
|
|
91
|
+
readonly pattern: RegExp;
|
|
92
|
+
readonly maxLength: number | undefined;
|
|
93
|
+
readonly forbidden: readonly string[];
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
/** Token validator for an AdCP version string, per `PROTOCOL_METHOD_GRAMMARS`. */
|
|
97
|
+
export declare function protocolMethodGrammarFor(version: string): (token: string) => boolean;
|