@adcp/sdk 15.9.4 → 15.9.6

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 (71) hide show
  1. package/dist/lib/core/AgentClient.d.mts +4 -2
  2. package/dist/lib/core/AgentClient.d.ts +4 -2
  3. package/dist/lib/core/AgentClient.js +4 -2
  4. package/dist/lib/core/AgentClient.mjs +4 -2
  5. package/dist/lib/core/SingleAgentClient.d.mts +7 -3
  6. package/dist/lib/core/SingleAgentClient.d.ts +7 -3
  7. package/dist/lib/core/SingleAgentClient.js +204 -13
  8. package/dist/lib/core/SingleAgentClient.mjs +209 -13
  9. package/dist/lib/core/TaskExecutor.d.mts +1 -0
  10. package/dist/lib/core/TaskExecutor.d.ts +1 -0
  11. package/dist/lib/core/TaskExecutor.js +48 -34
  12. package/dist/lib/core/TaskExecutor.mjs +49 -35
  13. package/dist/lib/core/product-cache.d.mts +3 -1
  14. package/dist/lib/core/product-cache.d.ts +3 -1
  15. package/dist/lib/core/product-cache.js +2 -1
  16. package/dist/lib/core/product-cache.mjs +2 -1
  17. package/dist/lib/registry/types.d.mts +3 -2
  18. package/dist/lib/registry/types.d.ts +3 -2
  19. package/dist/lib/registry/types.generated.d.mts +21 -9
  20. package/dist/lib/registry/types.generated.d.ts +21 -9
  21. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  22. package/dist/lib/server/decisioning/runtime/from-platform.js +6 -2
  23. package/dist/lib/server/decisioning/runtime/from-platform.mjs +6 -2
  24. package/dist/lib/testing/client.js +3 -5
  25. package/dist/lib/testing/client.mjs +4 -6
  26. package/dist/lib/testing/compliance/comply.js +7 -2
  27. package/dist/lib/testing/compliance/comply.mjs +8 -3
  28. package/dist/lib/testing/index.d.mts +1 -1
  29. package/dist/lib/testing/index.d.ts +1 -1
  30. package/dist/lib/testing/index.js +4 -2
  31. package/dist/lib/testing/index.mjs +8 -2
  32. package/dist/lib/testing/storyboard/runner.js +12 -12
  33. package/dist/lib/testing/storyboard/runner.mjs +14 -13
  34. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  35. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  36. package/dist/lib/testing/storyboard/validations.js +23 -1
  37. package/dist/lib/testing/storyboard/validations.mjs +28 -2
  38. package/dist/lib/testing/types.d.mts +39 -0
  39. package/dist/lib/testing/types.d.ts +39 -0
  40. package/dist/lib/v2/projection/augment-response.js +6 -3
  41. package/dist/lib/v2/projection/augment-response.mjs +8 -5
  42. package/dist/lib/v2/projection/creative-delivery.d.mts +2 -0
  43. package/dist/lib/v2/projection/creative-delivery.d.ts +2 -0
  44. package/dist/lib/v2/projection/creative-delivery.js +36 -17
  45. package/dist/lib/v2/projection/creative-delivery.mjs +37 -18
  46. package/dist/lib/v2/projection/legacy-metadata.d.mts +12 -0
  47. package/dist/lib/v2/projection/legacy-metadata.d.ts +12 -0
  48. package/dist/lib/v2/projection/legacy-metadata.js +41 -1
  49. package/dist/lib/v2/projection/legacy-metadata.mjs +37 -1
  50. package/dist/lib/v2/projection/v1-to-v2.d.mts +7 -0
  51. package/dist/lib/v2/projection/v1-to-v2.d.ts +7 -0
  52. package/dist/lib/v2/projection/v1-to-v2.js +83 -2
  53. package/dist/lib/v2/projection/v1-to-v2.mjs +86 -1
  54. package/dist/lib/validation/index.d.mts +1 -1
  55. package/dist/lib/validation/index.d.ts +1 -1
  56. package/dist/lib/validation/index.js +4 -2
  57. package/dist/lib/validation/index.mjs +4 -2
  58. package/dist/lib/validation/schema-loader.d.mts +26 -0
  59. package/dist/lib/validation/schema-loader.d.ts +26 -0
  60. package/dist/lib/validation/schema-loader.js +98 -14
  61. package/dist/lib/validation/schema-loader.mjs +95 -13
  62. package/dist/lib/version.d.mts +3 -3
  63. package/dist/lib/version.d.ts +3 -3
  64. package/dist/lib/version.js +3 -3
  65. package/dist/lib/version.mjs +3 -3
  66. package/docs/TYPE-SUMMARY.md +2 -2
  67. package/docs/guides/CREATIVE-DELIVERY.md +45 -6
  68. package/docs/guides/VALIDATE-YOUR-AGENT.md +34 -0
  69. package/docs/llms.txt +2 -2
  70. package/docs/migration-14.x-rc-worksheet.md +4 -4
  71. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "15.9.4";
4
+ export declare const LIBRARY_VERSION = "15.9.6";
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: "15.9.4";
36
+ readonly library: "15.9.6";
37
37
  readonly adcp: "3.2.5";
38
38
  readonly compatibleVersions: readonly ["v2.5", "v2.6", "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-16T23:12:08.652Z";
39
+ readonly generatedAt: "2026-10-19T00:18:00.760Z";
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 = "15.9.4";
34
+ const LIBRARY_VERSION = "15.9.6";
35
35
  const ADCP_VERSION = "3.2.5";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -104,10 +104,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
104
104
  "3.2.5"
105
105
  ];
106
106
  const VERSION_INFO = {
107
- library: "15.9.4",
107
+ library: "15.9.6",
108
108
  adcp: "3.2.5",
109
109
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
110
- generatedAt: "2026-10-16T23:12:08.652Z"
110
+ generatedAt: "2026-10-19T00:18:00.760Z"
111
111
  };
112
112
  function getAdcpVersion() {
113
113
  return ADCP_VERSION;
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = "15.9.4";
1
+ const LIBRARY_VERSION = "15.9.6";
2
2
  const ADCP_VERSION = "3.2.5";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -71,10 +71,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
71
71
  "3.2.5"
72
72
  ];
73
73
  const VERSION_INFO = {
74
- library: "15.9.4",
74
+ library: "15.9.6",
75
75
  adcp: "3.2.5",
76
76
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
77
- generatedAt: "2026-10-16T23:12:08.652Z"
77
+ generatedAt: "2026-10-19T00:18:00.760Z"
78
78
  };
79
79
  function getAdcpVersion() {
80
80
  return ADCP_VERSION;
@@ -1,7 +1,7 @@
1
1
  # AdCP Type Summary
2
2
 
3
- > Generated at: 2026-10-16
4
- > @adcp/sdk v15.9.4
3
+ > Generated at: 2026-10-19
4
+ > @adcp/sdk v15.9.6
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
 
@@ -131,9 +131,45 @@ checks the explicit `media_buy.features.canonical_creatives` declaration. A
131
131
  `unknown` because a 3.1 version claim does not prove the runtime accepts
132
132
  canonical creatives. For MCP peers the client then inspects the advertised
133
133
  input schema for the current tool only; support advertised by another creative
134
- tool is never reused. Unknown peers receive a legacy projection only when the
135
- selected product provides one unambiguous ref. Ambiguous or unavailable mappings throw
136
- `CreativeFormatProjectionError` before transport.
134
+ tool is never reused.
135
+
136
+ For a seller proven to serve AdCP 3.1, an otherwise unknown write uses canonical
137
+ delivery when every selected option and creative is covered by the seller's own
138
+ `format_options`. This follows the 3.1 buyer rule to prefer advertised format
139
+ options over dual-emitted legacy IDs. Creative option references and kinds must
140
+ match, including declared slots and dimensions. Sync assignments must all have
141
+ matching selector containers. Explicit legacy capabilities or tool schemas take
142
+ precedence; experimental declarations and options synthesized by the SDK from
143
+ legacy IDs do not establish canonical support. This also works when a 3.2 buyer
144
+ negotiates down to a 3.1 seller.
145
+
146
+ Supply the selected product or the result of `packageRefsForFormatOptions()` in
147
+ `creativeFormatProjection.selectorContainers`. Include `package_id` when using
148
+ assignments. After serializing a selection, include `product_id` so the same
149
+ client can recover the seller declaration from account-scoped product discovery,
150
+ including product-cache hits. Product evidence applies to that request only.
151
+ The seller remains responsible for full manifest validation.
152
+
153
+ Canonical fallback requires affirmative evidence from this client's product
154
+ discovery and an advertised `supported_versions` entry proving the seller serves
155
+ 3.1. The fallback uses synchronous discovery and successful conditional catalog
156
+ revalidation. A saved product on a fresh client, including one synthesized from
157
+ legacy IDs, cannot establish support by its shape alone. Rediscover the product
158
+ in the current account and authorization scope first. Evidence expires after
159
+ the discovery TTL (five minutes by default); product-cache hits do not extend
160
+ it. Authorization changes and discovery invalidation invalidate the evidence.
161
+ Request-scoped custom transports require explicit capability or tool-schema
162
+ support and do not reuse this inferred product evidence.
163
+
164
+ Assignment-only sync and updates containing only an existing `package_id` keep
165
+ their existing wire behavior. Pass the matching selectors for this request to
166
+ use the product-based fallback; package IDs alone do not establish support.
167
+ Without assignments, each creative must match every supplied container; use
168
+ assignments or split mixed-format batches when the products accept different kinds.
169
+
170
+ Without matching product evidence, unknown peers receive a legacy projection
171
+ only when the selected product provides one unambiguous ref. Ambiguous or
172
+ unavailable mappings throw `CreativeFormatProjectionError` before transport.
137
173
 
138
174
  Schema inspection follows local JSON Pointer `$ref` targets, including `$defs`,
139
175
  and retains the complete listed document through shared discovery-cache reuse.
@@ -141,7 +177,7 @@ Unused definitions and annotations do not establish support. External references
141
177
  named anchors, and dynamic references are not resolved; inspection never fetches
142
178
  schema URLs. Cycles and traversal limits cannot force a guessed wire mode.
143
179
 
144
- Before building creatives, ask the client which mode that write will use:
180
+ Before building creatives, inspect the tool's wire evidence:
145
181
 
146
182
  ```ts
147
183
  const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
@@ -150,13 +186,16 @@ const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
150
186
  This method is available on `AgentClient` and `SingleAgentClient`, accepts
151
187
  `sync_creatives`, `create_media_buy`, or `update_media_buy`, and shares the
152
188
  write path's capability discovery, tool-schema fallback, and buyer wire pin.
189
+ This context-free check does not inspect a write's product options, so an
190
+ `unknown` result can still become canonical for a matching 3.1 write as described
191
+ above.
153
192
  It reuses fresh cached or primed evidence; cold discovery may make read calls,
154
193
  but it sends no mutation. Pass `{ signal, transport }` as the optional second
155
194
  argument to use the same cancellation and transport scope as the write.
156
195
 
157
196
  The result is `canonical`, `legacy`, or `unknown` (`CreativeFormatWireMode`).
158
- For older peers with insufficient evidence, `unknown` means projection still
159
- requires one unambiguous legacy reference. It does not promise canonical
197
+ For older peers without matching product evidence, `unknown` means projection
198
+ still requires one unambiguous legacy reference. It does not promise canonical
160
199
  support. Conflicting capability/schema evidence or missing release proof with
161
200
  a 3.2+ buyer pin throws `CreativeFormatCapabilityError`, as during a write.
162
201
  The standalone `resolveCreativeFormatWireMode(capabilities, version)` helper
@@ -187,6 +187,40 @@ await comply(agentUrl, {
187
187
  });
188
188
  ```
189
189
 
190
+ **Capabilities served at a newer release.** A 3.0 pin sends only
191
+ `adcp_major_version: 3`, so a conformant agent may serve and echo its highest
192
+ 3.x release in `get_adcp_capabilities` (versioning spec, "Server echoes"). The
193
+ runner validates that one response against the echoed release when the echo is
194
+ the pin's major, is listed in the response's own `adcp.supported_versions`, and
195
+ has a schema root. That covers discovery's `capabilities_response_schema_invalid`
196
+ notices, `getAdcpCapabilities()` and every storyboard `response_schema` check on
197
+ `get_adcp_capabilities`, even with `schemaRoot` set for the pin. Otherwise it
198
+ validates strictly against the pin. Every other task's response, storyboard
199
+ selection, the run's `adcp_version` and grading stay on the pin.
200
+
201
+ The echoed release's schemas come from the SDK's bundle by default. A grader
202
+ that ships its own roots per release can supply them with
203
+ `servedReleaseSchemaRoots` (on `comply()`, `runStoryboard()` and
204
+ `runStoryboardStep()`), keyed by AdCP version:
205
+
206
+ ```ts
207
+ await comply(agentUrl, {
208
+ version: '3.0.27',
209
+ complianceDir: '/app/dist/compliance/3.0.27',
210
+ schemaRoot: '/app/dist/schemas/3.0.27',
211
+ servedReleaseSchemaRoots: {
212
+ '3.1.29': '/app/dist/schemas/3.1.29',
213
+ '3.2.5': '/app/dist/schemas/3.2.5',
214
+ },
215
+ });
216
+ ```
217
+
218
+ Those roots are used only for that capabilities validation. Each one is checked
219
+ against its key once per process, and a mismatched or missing root throws
220
+ before the run starts. Callers that validate outside `comply()` and the runner
221
+ can scope the same map with `withServedReleaseSchemaRoots(roots, fn)` from
222
+ `@adcp/sdk/testing`.
223
+
190
224
  **Multi-agent storyboards under `comply()`.** `comply()` grades one agent, so
191
225
  storyboards that declare `requires: [multi_agent]` (for example the
192
226
  governance-aware seller scenarios) skip with `requirement_unmet` and cap their
package/docs/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ad Context Protocol (AdCP)
2
2
 
3
- > Generated at: 2026-10-16
4
- > Library: @adcp/sdk v15.9.4
3
+ > Generated at: 2026-10-19
4
+ > Library: @adcp/sdk v15.9.6
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.
@@ -11,8 +11,8 @@ below as the publication/deployment gate.
11
11
 
12
12
  | Fact | Value |
13
13
  | --- | --- |
14
- | Exact npm package | `@adcp/sdk@15.9.4` |
15
- | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.9.4 dist.integrity` |
14
+ | Exact npm package | `@adcp/sdk@15.9.6` |
15
+ | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@15.9.6 dist.integrity` |
16
16
  | Node.js runtime | `^20.19.0 || >=22.12.0` |
17
17
  | Default AdCP wire release | `3.2.5` |
18
18
  | Maintained wire releases | `v2.5`, `v2.6`, `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` |
@@ -21,8 +21,8 @@ below as the publication/deployment gate.
21
21
  Install exact production inputs rather than a moving range or dist-tag:
22
22
 
23
23
  ```bash
24
- npm install --save-exact '@adcp/sdk@15.9.4'
25
- npm view '@adcp/sdk@15.9.4' dist.integrity
24
+ npm install --save-exact '@adcp/sdk@15.9.6'
25
+ npm view '@adcp/sdk@15.9.6' dist.integrity
26
26
  ```
27
27
 
28
28
  ### Required and optional peers
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "15.9.4",
3
+ "version": "15.9.6",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",