@adcp/sdk 16.0.0 → 16.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +52 -0
  2. package/bin/adcp-identity.js +3 -2
  3. package/dist/lib/client/core.d.mts +1 -1
  4. package/dist/lib/client/core.d.ts +1 -1
  5. package/dist/lib/core/AgentClient.d.mts +8 -1
  6. package/dist/lib/core/AgentClient.d.ts +8 -1
  7. package/dist/lib/core/AgentClient.js +10 -0
  8. package/dist/lib/core/AgentClient.mjs +10 -0
  9. package/dist/lib/core/AsyncHandler.d.mts +2 -0
  10. package/dist/lib/core/AsyncHandler.d.ts +2 -0
  11. package/dist/lib/core/AsyncHandler.js +1 -1
  12. package/dist/lib/core/AsyncHandler.mjs +1 -1
  13. package/dist/lib/core/ConversationTypes.d.mts +32 -0
  14. package/dist/lib/core/ConversationTypes.d.ts +32 -0
  15. package/dist/lib/core/SingleAgentClient.d.mts +11 -1
  16. package/dist/lib/core/SingleAgentClient.d.ts +11 -1
  17. package/dist/lib/core/SingleAgentClient.js +25 -6
  18. package/dist/lib/core/SingleAgentClient.mjs +26 -7
  19. package/dist/lib/core/TaskExecutor.d.mts +3 -1
  20. package/dist/lib/core/TaskExecutor.d.ts +3 -1
  21. package/dist/lib/core/TaskExecutor.js +127 -34
  22. package/dist/lib/core/TaskExecutor.mjs +127 -34
  23. package/dist/lib/core/task-deadline.d.mts +2 -0
  24. package/dist/lib/core/task-deadline.d.ts +2 -0
  25. package/dist/lib/core/task-deadline.js +20 -2
  26. package/dist/lib/core/task-deadline.mjs +19 -2
  27. package/dist/lib/governance/authorization.d.mts +66 -0
  28. package/dist/lib/governance/authorization.d.ts +66 -0
  29. package/dist/lib/governance/authorization.js +181 -37
  30. package/dist/lib/governance/authorization.mjs +183 -36
  31. package/dist/lib/governance/index.d.mts +2 -2
  32. package/dist/lib/governance/index.d.ts +2 -2
  33. package/dist/lib/governance/index.js +4 -2
  34. package/dist/lib/governance/index.mjs +3 -1
  35. package/dist/lib/identity-3.3/index.d.mts +1 -0
  36. package/dist/lib/identity-3.3/index.d.ts +1 -0
  37. package/dist/lib/identity-3.3/index.js +3 -1
  38. package/dist/lib/identity-3.3/index.mjs +1 -0
  39. package/dist/lib/identity-3.3/jws-artifacts.d.mts +147 -0
  40. package/dist/lib/identity-3.3/jws-artifacts.d.ts +147 -0
  41. package/dist/lib/identity-3.3/jws-artifacts.js +258 -0
  42. package/dist/lib/identity-3.3/jws-artifacts.mjs +234 -0
  43. package/dist/lib/identity-3.3/revocation.d.mts +7 -0
  44. package/dist/lib/identity-3.3/revocation.d.ts +7 -0
  45. package/dist/lib/identity-3.3/revocation.js +13 -0
  46. package/dist/lib/identity-3.3/revocation.mjs +13 -0
  47. package/dist/lib/identity-3.3/schemas.draft.js +1 -1
  48. package/dist/lib/identity-3.3/schemas.draft.mjs +1 -1
  49. package/dist/lib/identity-3.3/trust.d.mts +8 -0
  50. package/dist/lib/identity-3.3/trust.d.ts +8 -0
  51. package/dist/lib/identity-3.3/trust.js +41 -12
  52. package/dist/lib/identity-3.3/trust.mjs +40 -12
  53. package/dist/lib/index.d.mts +3 -3
  54. package/dist/lib/index.d.ts +3 -3
  55. package/dist/lib/index.js +2 -0
  56. package/dist/lib/index.mjs +2 -0
  57. package/dist/lib/registry/types.generated.d.mts +24 -1
  58. package/dist/lib/registry/types.generated.d.ts +24 -1
  59. package/dist/lib/server/account-sync-contract.js +4 -1
  60. package/dist/lib/server/account-sync-contract.mjs +4 -1
  61. package/dist/lib/server/decisioning/runtime/from-platform.js +22 -17
  62. package/dist/lib/server/decisioning/runtime/from-platform.mjs +22 -17
  63. package/dist/lib/server/index.d.mts +2 -2
  64. package/dist/lib/server/index.d.ts +2 -2
  65. package/dist/lib/server/index.js +2 -0
  66. package/dist/lib/server/index.mjs +2 -0
  67. package/dist/lib/signing/web-bot-auth.js +25 -5
  68. package/dist/lib/signing/web-bot-auth.mjs +25 -6
  69. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  70. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  71. package/dist/lib/v2/projection/catalog.d.mts +6 -0
  72. package/dist/lib/v2/projection/catalog.d.ts +6 -0
  73. package/dist/lib/v2/projection/catalog.js +5 -0
  74. package/dist/lib/v2/projection/catalog.mjs +4 -0
  75. package/dist/lib/v2/projection/v1-to-v2.js +3 -2
  76. package/dist/lib/v2/projection/v1-to-v2.mjs +4 -3
  77. package/dist/lib/version.d.mts +3 -3
  78. package/dist/lib/version.d.ts +3 -3
  79. package/dist/lib/version.js +3 -3
  80. package/dist/lib/version.mjs +3 -3
  81. package/docs/TYPE-SUMMARY.md +12 -2
  82. package/docs/llms.txt +3 -3
  83. package/docs/migration-14.x-rc-worksheet.md +4 -4
  84. package/docs/migration-agent-identity-3.3.md +72 -19
  85. package/package.json +6 -4
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "16.0.0";
4
+ export declare const LIBRARY_VERSION = "16.2.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "16.0.0";
36
+ readonly library: "16.2.0";
37
37
  readonly adcp: "3.2.5";
38
38
  readonly compatibleVersions: readonly ["v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.1.25", "3.1.26", "3.1.27", "3.1.28", "3.1.29", "3.2.1", "3.2", "3.2.2", "3.2.3", "3.2.4", "3.2.5"];
39
- readonly generatedAt: "2026-10-19T23:27:30.750Z";
39
+ readonly generatedAt: "2026-10-22T00:56:23.729Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "16.0.0";
4
+ export declare const LIBRARY_VERSION = "16.2.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "16.0.0";
36
+ readonly library: "16.2.0";
37
37
  readonly adcp: "3.2.5";
38
38
  readonly compatibleVersions: readonly ["v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.1.25", "3.1.26", "3.1.27", "3.1.28", "3.1.29", "3.2.1", "3.2", "3.2.2", "3.2.3", "3.2.4", "3.2.5"];
39
- readonly generatedAt: "2026-10-19T23:27:30.750Z";
39
+ readonly generatedAt: "2026-10-22T00:56:23.729Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -31,7 +31,7 @@ __export(version_exports, {
31
31
  toReleasePrecisionVersion: () => toReleasePrecisionVersion
32
32
  });
33
33
  module.exports = __toCommonJS(version_exports);
34
- const LIBRARY_VERSION = "16.0.0";
34
+ const LIBRARY_VERSION = "16.2.0";
35
35
  const ADCP_VERSION = "3.2.5";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -102,10 +102,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
102
102
  "3.2.5"
103
103
  ];
104
104
  const VERSION_INFO = {
105
- library: "16.0.0",
105
+ library: "16.2.0",
106
106
  adcp: "3.2.5",
107
107
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
108
- generatedAt: "2026-10-19T23:27:30.750Z"
108
+ generatedAt: "2026-10-22T00:56:23.729Z"
109
109
  };
110
110
  function getAdcpVersion() {
111
111
  return ADCP_VERSION;
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = "16.0.0";
1
+ const LIBRARY_VERSION = "16.2.0";
2
2
  const ADCP_VERSION = "3.2.5";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -69,10 +69,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
69
69
  "3.2.5"
70
70
  ];
71
71
  const VERSION_INFO = {
72
- library: "16.0.0",
72
+ library: "16.2.0",
73
73
  adcp: "3.2.5",
74
74
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
75
- generatedAt: "2026-10-19T23:27:30.750Z"
75
+ generatedAt: "2026-10-22T00:56:23.729Z"
76
76
  };
77
77
  function getAdcpVersion() {
78
78
  return ADCP_VERSION;
@@ -1,7 +1,7 @@
1
1
  # AdCP Type Summary
2
2
 
3
- > Generated at: 2026-10-19
4
- > @adcp/sdk v16.0.0
3
+ > Generated at: 2026-10-22
4
+ > @adcp/sdk v16.2.0
5
5
 
6
6
  Curated reference of the types that matter for using the AdCP client. For full generated types see `src/lib/types/tools.generated.ts` and `src/lib/types/core.generated.ts`.
7
7
 
@@ -95,6 +95,7 @@ interface AgentDiscoverySeed {
95
95
  // client.invalidateDiscoveryCache(): Promise<void>; refresh after a seller change.
96
96
 
97
97
  interface TaskOptions {
98
+ operationId?: string; // Stable caller correlation id (otherwise a UUID); not an idempotency key
98
99
  skipStatusHandlers?: boolean; // Skip inline completion handlers, including continuations
99
100
  timeout?: number; // Absolute whole-task deadline
100
101
  signal?: AbortSignal; // Caller cancellation
@@ -106,6 +107,15 @@ interface TaskOptions {
106
107
  // ...deadline, cancellation, transport, and conversation options...
107
108
  }
108
109
 
110
+ // Resume observation of persisted seller work (SingleAgentClient or AgentClient).
111
+ // Save metadata.serverTaskId, metadata.taskName as taskType, and metadata.taskId as operationId.
112
+ const tracked = await agent.trackTask({ taskId: saved.serverTaskId, taskType: saved.taskType, operationId: saved.operationId });
113
+ await tracked.track(); // One status read; TaskInfo includes operationId and serverTaskId
114
+ await tracked.waitForCompletion(1000, signal); // Same polling path as submitted continuations
115
+ // No per-poll protocol activity. Terminal status_change carries operation_id and server_task_id.
116
+ // Local observation errors do not terminalize seller work. Matching identities can reattach on the same client.
117
+ // Results retain seller tool response shapes; tracking does not restore prior request context or handlers.
118
+
109
119
  interface DeferredContinuation<T> {
110
120
  token: string;
111
121
  question?: string;
package/docs/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ad Context Protocol (AdCP)
2
2
 
3
- > Generated at: 2026-10-19
4
- > Library: @adcp/sdk v16.0.0
3
+ > Generated at: 2026-10-22
4
+ > Library: @adcp/sdk v16.2.0
5
5
  > AdCP major version: 3
6
6
  > Canonical URL: https://adcontextprotocol.github.io/adcp-client/llms.txt
7
7
  > Note: the `Library` stamp reflects the package.json version at doc-generation time. The narrative below describes the surface that lands on the next-published minor — including any 6.7 helpers documented here ahead of the release tag.
@@ -13,7 +13,7 @@ AdCP is an open protocol for AI agents to buy, manage, and optimize advertising
13
13
 
14
14
  ## Start here: AdCP 3.2
15
15
 
16
- The SDK requires Node.js `^20.19.0 || >=22.12.0`. Install this reference's release train with `npm install @adcp/sdk@16.0`; use the documentation from the exact published SDK version you install. For reproducible CLI runs, pin that exact SDK version. After installation, `node -p "require('@adcp/sdk').ADCP_VERSION"` reports its protocol pin; `ls node_modules/@adcp/sdk/compliance/cache` lists its packaged compliance versions. The legacy `adcp-3.2` npm tag selects SDK 14 and does not receive the refreshed compliance caches.
16
+ The SDK requires Node.js `^20.19.0 || >=22.12.0`. Install this reference's release train with `npm install @adcp/sdk@16.2`; use the documentation from the exact published SDK version you install. For reproducible CLI runs, pin that exact SDK version. After installation, `node -p "require('@adcp/sdk').ADCP_VERSION"` reports its protocol pin; `ls node_modules/@adcp/sdk/compliance/cache` lists its packaged compliance versions. The legacy `adcp-3.2` npm tag selects SDK 14 and does not receive the refreshed compliance caches.
17
17
 
18
18
  The SDK is compact-lifecycle first: `list_products → buy_products → control_media_buy`, with `request_proposals → refine_proposals → accept_proposal` when terms need negotiation.
19
19
 
@@ -16,8 +16,8 @@ pin using `ADCP_VERSION` inside that tarball.
16
16
 
17
17
  | Fact | Value |
18
18
  | --- | --- |
19
- | Checkout `package.json` version | `@adcp/sdk@16.0.0` |
20
- | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.0.0 dist.integrity` |
19
+ | Checkout `package.json` version | `@adcp/sdk@16.2.0` |
20
+ | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.2.0 dist.integrity` |
21
21
  | Node.js runtime | `^20.19.0 || >=22.12.0` |
22
22
  | Default AdCP wire release | `3.2.5` |
23
23
  | Maintained wire releases | `v3`, `3.0.0`, `3.0`, `3.0.1`, `3.0.2`, `3.0.3`, `3.0.4`, `3.0.5`, `3.0.6`, `3.0.7`, `3.0.8`, `3.0.9`, `3.0.10`, `3.0.11`, `3.0.12`, `3.0.13`, `3.0.14`, `3.0.15`, `3.0.16`, `3.0.17`, `3.0.18`, `3.0.19`, `3.0.20`, `3.0.21`, `3.0.22`, `3.0.23`, `3.0.24`, `3.0.25`, `3.1.0`, `3.1`, `3.1.1`, `3.1.2`, `3.1.3`, `3.1.4`, `3.1.5`, `3.1.6`, `3.1.7`, `3.1.8`, `3.1.9`, `3.1.10`, `3.1.11`, `3.1.12`, `3.1.13`, `3.1.14`, `3.1.15`, `3.1.16`, `3.1.17`, `3.1.18`, `3.1.19`, `3.1.20`, `3.1.21`, `3.1.22`, `3.1.23`, `3.1.24`, `3.1.25`, `3.1.26`, `3.1.27`, `3.1.28`, `3.1.29`, `3.2.1`, `3.2`, `3.2.2`, `3.2.3`, `3.2.4`, `3.2.5` |
@@ -26,8 +26,8 @@ pin using `ADCP_VERSION` inside that tarball.
26
26
  For a checkout at the published release commit, install the exact package version:
27
27
 
28
28
  ```bash
29
- npm install --save-exact '@adcp/sdk@16.0.0'
30
- npm view '@adcp/sdk@16.0.0' dist.integrity
29
+ npm install --save-exact '@adcp/sdk@16.2.0'
30
+ npm view '@adcp/sdk@16.2.0' dist.integrity
31
31
  ```
32
32
 
33
33
  ### Required and optional peers
@@ -155,12 +155,14 @@ parameter is a Token (WBA section 5.2.1), and the verifier accepts
155
155
  type, which leaves no member to resolve (403).
156
156
 
157
157
  `SignatureDirectoryResolver` derives the directory from the covered canonical
158
- origin. Directories must be signed (WBA Appendix B.1): it validates a
159
- possession signature for every key the profile can use, covering
160
- `"@authority";req` and `content-digest`, and the exact body digest before
161
- caching keys. It ignores keys the profile cannot use, such as a P-256 key, and
162
- any signature they made (RFC 7517 section 5). An unsigned directory, one
163
- with no usable key, or one that publishes private key material for any key,
158
+ origin. Directories must be signed (WBA Appendix B.1): it uses each Ed25519
159
+ key that has a valid possession signature, covering `"@authority";req` and
160
+ `content-digest`, and validates the exact body digest before caching keys. It
161
+ ignores every other key and any signature it made: a key the profile cannot
162
+ use, such as a P-256 key, a key it cannot import, such as an Ed25519 key with
163
+ no `x` (RFC 7517 section 5), and a key without a valid signature (WBA Appendix
164
+ B.1; directory draft section 5). An unsigned directory, one with no validly
165
+ signed Ed25519 key, or one that publishes private key material for any key,
164
166
  usable or not, is a discovery failure. Its audit proof retains the signed body and
165
167
  headers. Verification requires this resolver so context-free JWKS adapters cannot
166
168
  attribute a key to an arbitrary origin. Discovery uses HTTPS, DNS pinning, no redirects, a 256 KiB cap, a
@@ -359,7 +361,12 @@ operator) to the signer's operator, or a two-link chain through the account
359
361
  operator, is accepted. The
360
362
  intersection must cover the actual brand IDs, countries, scope, signer-origin
361
363
  narrowing and temporal window. A restrictive published grant cannot be
362
- superseded by seller fallback. A trust 200 disables brand.json authority;
364
+ superseded by seller fallback. A grant's `grantee` must be a registrable domain
365
+ under the pinned PSL snapshot (`alice.github.io` is one; `github.io` and
366
+ `media.agency.com` are not). A grant whose `grantee` is not one covers no claim
367
+ and does not block seller fallback, but its scopes still count for
368
+ `exclusive_grants`. `createTrustRecord` and `adcp identity trust-validate` refuse
369
+ such grantees. A trust 200 disables brand.json authority;
363
370
  authoritative absence alone permits explicit legacy policy. An established
364
371
  identity lacking a grant gets `PERMISSION_DENIED` with
365
372
  `{ scope: 'agent', reason: 'grant_absent' }`. No account or live buy is changed.
@@ -368,12 +375,57 @@ included) never falls back to brand.json `authorized_operators[]`, and it is
368
375
  not a grant removal: spend gets a retryable `SERVICE_UNAVAILABLE`.
369
376
 
370
377
  Origin key revocations use `/.well-known/governance-revocations.json`, signed
371
- with `typ: adcp-gov-revocation+jws`, as ratified R3 specifies. This origin key
372
- list does not migrate governance-context, designated-task response or rights
373
- JWS discovery: those retain the RFC chain in 3.3. Polling fails closed, revoked
378
+ with `typ: adcp-gov-revocation+jws`, as ratified R3 specifies. The same list
379
+ revokes the keys a WBA identity signs its JWS artifacts with (see
380
+ [JWS artifacts](#jws-artifacts)). Polling fails closed, revoked
374
381
  keys remain revoked forever, `keyCompromise` cannot be weakened, and the earliest
375
382
  `invalidity_date` is retained. Revocation never pauses or cancels committed buys.
376
383
 
384
+ ### JWS artifacts
385
+
386
+ Governance contexts, designated-task responses and rights attestations from a
387
+ WBA identity are signed with keys from that identity's key directory (R4 as
388
+ amended by adcontextprotocol/adcp#8299). `O` is the canonical origin of the
389
+ signing agent's URL: `iss` for a governance context, `agent_url` for a
390
+ designated-task response, `rights_agent.url` for a rights attestation. Pass it
391
+ from your own context, never from the unverified token.
392
+
393
+ - `selectJwsArtifactProfile(agentUrl, trust)` derives the trust record from
394
+ `O`. When it lists `O`, the artifact is verified on the WBA path; when the
395
+ operator has not published a record, or the record does not list `O`, it
396
+ stays on the 3.2 profile. A trust-record fetch failure throws
397
+ `JwsArtifactError` (`jws_key_unavailable`): it is never absence and never
398
+ selects 3.2. A 404/410 from an operator that once served a record is an
399
+ outage too, but the evaluator remembers that 200 only in process unless you
400
+ give it durable `authorityHistory` (`createIdentity33StateStores`). Public,
401
+ multi-replica and serverless verifiers must, as for grants.
402
+ - `verifyWebBotAuthJwsArtifact(token, origin, { typ, directory, revocation })`
403
+ requires the `typ` the surface accepts, `alg` `EdDSA` and a `kid` equal to the
404
+ key's JWK thumbprint, applies no `use`/`key_ops`/`adcp_use` check, and checks
405
+ `O`'s revocation list. Purpose separation is by origin, so one key at `O` may
406
+ sign every artifact `O` issues and `typ` tells them apart. `revocation` is
407
+ required; pass `false` only if you check the returned `kid` yourself. It
408
+ verifies key and signature only; the surface keeps its own claim checks.
409
+ - `verifyGovernanceAuthorization({ ..., webBotAuth: { trust, directory,
410
+ revocation } })` applies the rule to governance contexts. Every other check is
411
+ unchanged, including the `buyerIdentity` cross-check that `iss` is the buyer's
412
+ governance agent; only the key source moves. `revocation` is required, and an
413
+ origin that serves no list fails closed, since a governance context
414
+ authorizes spend. Outages (trust record, directory, revocation list) set
415
+ `retryable: true` on the failure. Without `webBotAuth` the verifier is 3.2
416
+ only, as before.
417
+ - `verifyHistoricalGovernanceContext({ token, expectedIssuer, webBotAuth: {
418
+ ..., archive } })` verifies a retained governance context for audit. A key
419
+ rotated out of the directory is read from the governance key archive at `O`
420
+ (`/.well-known/jwks-archive.json`, `GovernanceKeyArchiveResolver`), on the
421
+ same `EdDSA` and thumbprint rules. A revoked key still verifies here: the
422
+ result reports `revocation: 'revoked'` and the stored R9 detail (`reason`,
423
+ `invalidity_date`) for the audit to weigh. Expiry, audience, replay and the
424
+ request binding are not checked.
425
+
426
+ The SDK has no designated-task response or rights-attestation verifier of its
427
+ own; a verifier for either uses the two primitives above.
428
+
377
429
  Permanent revocation storage reserves separate bounded capacity for audited bound
378
430
  origins and anonymous/self-service origins, so first-contact traffic cannot exhaust the bound
379
431
  pool. Storage failures deny reads and mutations without outage grace; inspect the
@@ -402,18 +454,19 @@ released schemas:
402
454
 
403
455
  | PR | Pinned head | Surface |
404
456
  | --- | --- | --- |
405
- | [7894](https://github.com/adcontextprotocol/adcp/pull/7894) | `e59294701d733b0ea2a004a2f0c091c8eccdcaae` | WBA wire profile (`wba-profile.mdx`), profile selectors, directory and request vectors |
457
+ | [7894](https://github.com/adcontextprotocol/adcp/pull/7894) | `9f472d63900b99efcd9ed05b5d0bb75552c3b9d6` | WBA wire profile (`wba-profile.mdx`), profile selectors |
406
458
  | [8121](https://github.com/adcontextprotocol/adcp/pull/8121) | `f5973ac0267b1b94d714c55fc4e3ad8fc2511350` | Origin identity and key-free trust v1 |
407
459
  | [8162](https://github.com/adcontextprotocol/adcp/pull/8162) | `5c9914c5c382cc32f3d2ad7842942e548c414705` | Ratified identity, coexistence, revocation |
408
460
  | [8168](https://github.com/adcontextprotocol/adcp/pull/8168) | `45540941dfd61e80ab8a463f780cb147c82a32f0` | Relationship and principal response arms |
409
- | [8169](https://github.com/adcontextprotocol/adcp/pull/8169) | `3ce6a14d7afaa71fa78ddf2223ed0421e01205ae` | Grants, trust schema, grant_absent |
461
+ | [8169](https://github.com/adcontextprotocol/adcp/pull/8169) | `3ce6a14d7afaa71fa78ddf2223ed0421e01205ae` | Grants, trust schema, grant_absent; the registrable-domain `grantee` rule and its schema description from `eabe46048530c08a34e6eee6e4d15d7848e01c57` |
410
462
  | [8170](https://github.com/adcontextprotocol/adcp/pull/8170) | `8d3591e70e9a717c7fdfb513360a796fba24ca9a` | Onboarding additions only; its old trust key fields are excluded |
411
463
  | [8177](https://github.com/adcontextprotocol/adcp/pull/8177) | `b663f8e4235fe4276c73fb9bac6db491b2252bbf` | Reporting authentication omission |
464
+ | [8298](https://github.com/adcontextprotocol/adcp/pull/8298) | `f44785a5b65db93988f30ad3d23ba5849f1a1d5e` | WBA interop harness, directory and request vectors |
412
465
 
413
- The vectors in `test/fixtures/wba-profile/` are byte-identical to #7894 at that
414
- head (see `PINNED.json`). Every vendored request and directory vector is
415
- graded, and the interop harness (adcontextprotocol/adcp#8298) grades
416
- `scenarios.json`.
466
+ The vectors in `test/fixtures/wba-profile/` are byte-identical to #8298 at that
467
+ head (see `PINNED.json`), which carries the #7894 profile and vectors. Every
468
+ vendored request and directory vector is graded, and the interop harness
469
+ (adcontextprotocol/adcp#8298) grades `scenarios.json`.
417
470
 
418
471
  Verification runs in Cloudflare's `http-message-sig` (signature base, coverage,
419
472
  window, algorithm and cryptographic checks); the SDK adds the profile rules in
@@ -484,9 +537,9 @@ so verification can run in a CDN or middleware in front of the AdCP server.
484
537
  Cloudflare's `web-bot-auth`; they already used signed directories and are
485
538
  unchanged.
486
539
  #7894 drops the governance-token checks and the `governance/` vectors from the
487
- WBA profile. Governance moves to the AdCP layer under a separate R4 erratum,
488
- which moves JWS artifacts, governance included, to the identity's WBA key
489
- directory in 3.3. This change leaves the SDK's governance code as it is.
540
+ WBA profile. Governance moves to the AdCP layer under a separate R4 erratum
541
+ (adcontextprotocol/adcp#8299), which moves JWS artifacts, governance included,
542
+ to the identity's WBA key directory in 3.3; see [JWS artifacts](#jws-artifacts).
490
543
  The buyer default onboarding field is `profiles.adcp.onboarding`, matching the
491
544
  schema; the design's `record_profiles` wording names the schema definition.
492
545
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "16.0.0",
3
+ "version": "16.2.0",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",
@@ -729,10 +729,10 @@
729
729
  "email": "bugs@adcontextprotocol.org"
730
730
  },
731
731
  "dependencies": {
732
- "@modelcontextprotocol/client": "2.2.0",
732
+ "@modelcontextprotocol/client": "2.3.1",
733
733
  "@modelcontextprotocol/ext-apps": "2.0.0",
734
734
  "@modelcontextprotocol/node": "2.0.0",
735
- "@modelcontextprotocol/server": "2.2.0",
735
+ "@modelcontextprotocol/server": "2.3.1",
736
736
  "@types/ws": "^8.18.1",
737
737
  "ajv": "^8.20.0",
738
738
  "ajv-formats": "^3.0.1",
@@ -814,7 +814,9 @@
814
814
  "@changesets/parse": {
815
815
  "js-yaml": "^3.15.2"
816
816
  },
817
- "minimatch": "^10.2.1"
817
+ "minimatch": "^10.2.1",
818
+ "launch-editor": "^2.14.2",
819
+ "markdown-it": "^14.3.3"
818
820
  },
819
821
  "adcp_version": "3.2.5",
820
822
  "sideEffects": [