@adcp/sdk 16.0.0-beta.8 → 16.0.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 (371) hide show
  1. package/AGENTS.md +3 -3
  2. package/README.md +5 -2
  3. package/bin/adcp.js +10 -13
  4. package/dist/lib/core/AgentClient.d.mts +8 -5
  5. package/dist/lib/core/AgentClient.d.ts +8 -5
  6. package/dist/lib/core/AgentClient.js +9 -4
  7. package/dist/lib/core/AgentClient.mjs +9 -4
  8. package/dist/lib/core/SingleAgentClient.d.mts +19 -112
  9. package/dist/lib/core/SingleAgentClient.d.ts +19 -112
  10. package/dist/lib/core/SingleAgentClient.js +270 -252
  11. package/dist/lib/core/SingleAgentClient.mjs +275 -253
  12. package/dist/lib/core/TaskExecutor.d.mts +1 -16
  13. package/dist/lib/core/TaskExecutor.d.ts +1 -16
  14. package/dist/lib/core/TaskExecutor.js +34 -51
  15. package/dist/lib/core/TaskExecutor.mjs +12 -29
  16. package/dist/lib/core/product-cache.d.mts +3 -1
  17. package/dist/lib/core/product-cache.d.ts +3 -1
  18. package/dist/lib/core/product-cache.js +2 -1
  19. package/dist/lib/core/product-cache.mjs +2 -1
  20. package/dist/lib/errors/index.d.mts +2 -8
  21. package/dist/lib/errors/index.d.ts +2 -8
  22. package/dist/lib/errors/index.js +4 -4
  23. package/dist/lib/errors/index.mjs +4 -4
  24. package/dist/lib/identity-3.3/revocation.js +6 -7
  25. package/dist/lib/identity-3.3/revocation.mjs +6 -7
  26. package/dist/lib/index.d.mts +4 -4
  27. package/dist/lib/index.d.ts +4 -4
  28. package/dist/lib/index.js +0 -14
  29. package/dist/lib/index.mjs +0 -14
  30. package/dist/lib/media-buy/compatibility.d.mts +1 -1
  31. package/dist/lib/media-buy/compatibility.d.ts +1 -1
  32. package/dist/lib/media-buy/compatibility.js +26 -45
  33. package/dist/lib/media-buy/compatibility.mjs +26 -45
  34. package/dist/lib/media-buy/legacy-purchase-continuation.d.mts +2 -2
  35. package/dist/lib/media-buy/legacy-purchase-continuation.d.ts +2 -2
  36. package/dist/lib/protocols/index.js +14 -22
  37. package/dist/lib/protocols/index.mjs +5 -13
  38. package/dist/lib/registry/types.d.mts +3 -2
  39. package/dist/lib/registry/types.d.ts +3 -2
  40. package/dist/lib/registry/types.generated.d.mts +51 -11
  41. package/dist/lib/registry/types.generated.d.ts +51 -11
  42. package/dist/lib/reporting/source/conformance.d.mts +8 -8
  43. package/dist/lib/reporting/source/conformance.d.ts +8 -8
  44. package/dist/lib/reporting/source/manifest.d.mts +27 -27
  45. package/dist/lib/reporting/source/manifest.d.ts +27 -27
  46. package/dist/lib/server/create-adcp-server.js +7 -1
  47. package/dist/lib/server/create-adcp-server.mjs +7 -1
  48. package/dist/lib/signing/crypto.d.mts +1 -1
  49. package/dist/lib/signing/crypto.d.ts +1 -1
  50. package/dist/lib/signing/crypto.js +2 -45
  51. package/dist/lib/signing/crypto.mjs +2 -46
  52. package/dist/lib/signing/web-bot-auth.d.mts +18 -10
  53. package/dist/lib/signing/web-bot-auth.d.ts +18 -10
  54. package/dist/lib/signing/web-bot-auth.js +29 -24
  55. package/dist/lib/signing/web-bot-auth.mjs +29 -24
  56. package/dist/lib/testing/compliance/comply.js +0 -8
  57. package/dist/lib/testing/compliance/comply.mjs +0 -8
  58. package/dist/lib/testing/compliance/storyboard-tracks.js +11 -0
  59. package/dist/lib/testing/compliance/storyboard-tracks.mjs +11 -0
  60. package/dist/lib/testing/index.d.mts +2 -0
  61. package/dist/lib/testing/index.d.ts +2 -0
  62. package/dist/lib/testing/index.js +5 -0
  63. package/dist/lib/testing/index.mjs +3 -0
  64. package/dist/lib/testing/scenarios/capabilities.d.mts +2 -2
  65. package/dist/lib/testing/scenarios/capabilities.d.ts +2 -2
  66. package/dist/lib/testing/scenarios/capabilities.js +8 -41
  67. package/dist/lib/testing/scenarios/capabilities.mjs +9 -42
  68. package/dist/lib/testing/storyboard/creative-build-probe.d.mts +34 -0
  69. package/dist/lib/testing/storyboard/creative-build-probe.d.ts +34 -0
  70. package/dist/lib/testing/storyboard/creative-build-probe.js +395 -0
  71. package/dist/lib/testing/storyboard/creative-build-probe.mjs +373 -0
  72. package/dist/lib/testing/storyboard/index.d.mts +2 -0
  73. package/dist/lib/testing/storyboard/index.d.ts +2 -0
  74. package/dist/lib/testing/storyboard/index.js +5 -0
  75. package/dist/lib/testing/storyboard/index.mjs +3 -0
  76. package/dist/lib/testing/storyboard/loader.js +12 -0
  77. package/dist/lib/testing/storyboard/loader.mjs +12 -0
  78. package/dist/lib/testing/storyboard/property-list-reference.d.mts +15 -0
  79. package/dist/lib/testing/storyboard/property-list-reference.d.ts +15 -0
  80. package/dist/lib/testing/storyboard/property-list-reference.js +514 -0
  81. package/dist/lib/testing/storyboard/property-list-reference.mjs +487 -0
  82. package/dist/lib/testing/storyboard/runner.js +318 -58
  83. package/dist/lib/testing/storyboard/runner.mjs +322 -58
  84. package/dist/lib/testing/storyboard/types.d.mts +38 -16
  85. package/dist/lib/testing/storyboard/types.d.ts +38 -16
  86. package/dist/lib/testing/storyboard/types.js +1 -0
  87. package/dist/lib/testing/storyboard/types.mjs +1 -0
  88. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  89. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  90. package/dist/lib/testing/storyboard/validations.js +64 -0
  91. package/dist/lib/testing/storyboard/validations.mjs +67 -1
  92. package/dist/lib/testing/types.d.mts +15 -1
  93. package/dist/lib/testing/types.d.ts +15 -1
  94. package/dist/lib/types/schemas.generated.d.ts +65 -65
  95. package/dist/lib/types/wellknown-schemas.generated.d.mts +21 -21
  96. package/dist/lib/types/wellknown-schemas.generated.d.ts +21 -21
  97. package/dist/lib/utils/adcp-version-config.js +6 -0
  98. package/dist/lib/utils/adcp-version-config.mjs +6 -0
  99. package/dist/lib/utils/capabilities.d.mts +7 -9
  100. package/dist/lib/utils/capabilities.d.ts +7 -9
  101. package/dist/lib/utils/capabilities.js +14 -28
  102. package/dist/lib/utils/capabilities.mjs +14 -27
  103. package/dist/lib/utils/creative-adapter.d.mts +15 -113
  104. package/dist/lib/utils/creative-adapter.d.ts +15 -113
  105. package/dist/lib/utils/creative-adapter.js +7 -106
  106. package/dist/lib/utils/creative-adapter.mjs +7 -102
  107. package/dist/lib/utils/format-renders.d.mts +20 -80
  108. package/dist/lib/utils/format-renders.d.ts +20 -80
  109. package/dist/lib/utils/format-renders.js +7 -67
  110. package/dist/lib/utils/format-renders.mjs +7 -66
  111. package/dist/lib/utils/index.d.mts +1 -2
  112. package/dist/lib/utils/index.d.ts +1 -2
  113. package/dist/lib/utils/index.js +0 -7
  114. package/dist/lib/utils/index.mjs +0 -6
  115. package/dist/lib/utils/preview-normalizer.d.mts +31 -80
  116. package/dist/lib/utils/preview-normalizer.d.ts +31 -80
  117. package/dist/lib/utils/preview-normalizer.js +5 -50
  118. package/dist/lib/utils/preview-normalizer.mjs +5 -49
  119. package/dist/lib/utils/pricing-adapter.d.mts +2 -36
  120. package/dist/lib/utils/pricing-adapter.d.ts +2 -36
  121. package/dist/lib/utils/pricing-adapter.js +0 -105
  122. package/dist/lib/utils/pricing-adapter.mjs +0 -100
  123. package/dist/lib/utils/request-normalizer.d.mts +1 -2
  124. package/dist/lib/utils/request-normalizer.d.ts +1 -2
  125. package/dist/lib/v2/projection/catalog.d.mts +4 -0
  126. package/dist/lib/v2/projection/catalog.d.ts +4 -0
  127. package/dist/lib/v2/projection/creative-delivery.d.mts +17 -9
  128. package/dist/lib/v2/projection/creative-delivery.d.ts +17 -9
  129. package/dist/lib/v2/projection/creative-delivery.js +78 -10
  130. package/dist/lib/v2/projection/creative-delivery.mjs +77 -10
  131. package/dist/lib/v2/projection/legacy-metadata.d.mts +12 -0
  132. package/dist/lib/v2/projection/legacy-metadata.d.ts +12 -0
  133. package/dist/lib/v2/projection/legacy-metadata.js +41 -1
  134. package/dist/lib/v2/projection/legacy-metadata.mjs +37 -1
  135. package/dist/lib/v2/projection/legacy-normalization.d.mts +1 -1
  136. package/dist/lib/v2/projection/legacy-normalization.d.ts +1 -1
  137. package/dist/lib/v2/projection/v1-to-v2.js +13 -0
  138. package/dist/lib/v2/projection/v1-to-v2.mjs +14 -0
  139. package/dist/lib/validation/client-hooks.d.mts +1 -4
  140. package/dist/lib/validation/client-hooks.d.ts +1 -4
  141. package/dist/lib/validation/get-products-request.d.mts +1 -1
  142. package/dist/lib/validation/get-products-request.d.ts +1 -1
  143. package/dist/lib/validation/schema-loader.js +6 -0
  144. package/dist/lib/validation/schema-loader.mjs +6 -0
  145. package/dist/lib/validation/schema-validator.js +1 -26
  146. package/dist/lib/validation/schema-validator.mjs +1 -26
  147. package/dist/lib/version.d.mts +5 -5
  148. package/dist/lib/version.d.ts +5 -5
  149. package/dist/lib/version.js +3 -5
  150. package/dist/lib/version.mjs +3 -5
  151. package/docs/TYPE-SUMMARY.md +2 -2
  152. package/docs/development/PROTOCOL_DIFFERENCES.md +1 -1
  153. package/docs/guides/CONFORMANCE.md +25 -0
  154. package/docs/guides/CREATIVE-BUILD-PROBE.md +156 -0
  155. package/docs/guides/CREATIVE-DELIVERY.md +63 -7
  156. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +15 -18
  157. package/docs/guides/REPORTING-STABILITY.md +7 -7
  158. package/docs/guides/VALIDATE-YOUR-AGENT.md +5 -0
  159. package/docs/llms.txt +3 -3
  160. package/docs/migration-13-to-14.md +20 -16
  161. package/docs/migration-14.x-rc-worksheet.md +5 -5
  162. package/docs/migration-4.x-to-5.x.md +12 -7
  163. package/docs/migration-agent-identity-3.3.md +44 -19
  164. package/docs/migration-drop-adcp-2.md +25 -0
  165. package/docs/migration-reporting-storage-package.md +3 -3
  166. package/docs/releases/16.0.0.md +20 -0
  167. package/package.json +3 -18
  168. package/skills/call-adcp-agent/SKILL.md +23 -25
  169. package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.mts +0 -3
  170. package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.ts +0 -3
  171. package/dist/lib/adapters/legacy/v2-5/create_media_buy.js +0 -33
  172. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -9
  173. package/dist/lib/adapters/legacy/v2-5/get_products.d.mts +0 -8
  174. package/dist/lib/adapters/legacy/v2-5/get_products.d.ts +0 -8
  175. package/dist/lib/adapters/legacy/v2-5/get_products.js +0 -33
  176. package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -9
  177. package/dist/lib/adapters/legacy/v2-5/index.d.mts +0 -34
  178. package/dist/lib/adapters/legacy/v2-5/index.d.ts +0 -34
  179. package/dist/lib/adapters/legacy/v2-5/index.js +0 -50
  180. package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -25
  181. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.mts +0 -8
  182. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.ts +0 -8
  183. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.js +0 -33
  184. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -9
  185. package/dist/lib/adapters/legacy/v2-5/preview_creative.d.mts +0 -3
  186. package/dist/lib/adapters/legacy/v2-5/preview_creative.d.ts +0 -3
  187. package/dist/lib/adapters/legacy/v2-5/preview_creative.js +0 -33
  188. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -9
  189. package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.mts +0 -11
  190. package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.ts +0 -11
  191. package/dist/lib/adapters/legacy/v2-5/sync_creatives.js +0 -32
  192. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -8
  193. package/dist/lib/adapters/legacy/v2-5/types.d.mts +0 -39
  194. package/dist/lib/adapters/legacy/v2-5/types.d.ts +0 -39
  195. package/dist/lib/adapters/legacy/v2-5/types.js +0 -16
  196. package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -0
  197. package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.mts +0 -3
  198. package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.ts +0 -3
  199. package/dist/lib/adapters/legacy/v2-5/update_media_buy.js +0 -35
  200. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -11
  201. package/dist/lib/schemas-data/v2.5/_provenance.json +0 -8
  202. package/dist/lib/schemas-data/v2.5/adagents.json +0 -494
  203. package/dist/lib/schemas-data/v2.5/core/activation-key.json +0 -50
  204. package/dist/lib/schemas-data/v2.5/core/assets/audio-asset.json +0 -32
  205. package/dist/lib/schemas-data/v2.5/core/assets/css-asset.json +0 -21
  206. package/dist/lib/schemas-data/v2.5/core/assets/daast-asset.json +0 -87
  207. package/dist/lib/schemas-data/v2.5/core/assets/html-asset.json +0 -21
  208. package/dist/lib/schemas-data/v2.5/core/assets/image-asset.json +0 -38
  209. package/dist/lib/schemas-data/v2.5/core/assets/javascript-asset.json +0 -21
  210. package/dist/lib/schemas-data/v2.5/core/assets/markdown-asset.json +0 -31
  211. package/dist/lib/schemas-data/v2.5/core/assets/text-asset.json +0 -21
  212. package/dist/lib/schemas-data/v2.5/core/assets/url-asset.json +0 -26
  213. package/dist/lib/schemas-data/v2.5/core/assets/vast-asset.json +0 -87
  214. package/dist/lib/schemas-data/v2.5/core/assets/video-asset.json +0 -44
  215. package/dist/lib/schemas-data/v2.5/core/assets/webhook-asset.json +0 -71
  216. package/dist/lib/schemas-data/v2.5/core/async-response-data.json +0 -88
  217. package/dist/lib/schemas-data/v2.5/core/brand-manifest-ref.json +0 -33
  218. package/dist/lib/schemas-data/v2.5/core/brand-manifest.json +0 -409
  219. package/dist/lib/schemas-data/v2.5/core/context.json +0 -8
  220. package/dist/lib/schemas-data/v2.5/core/creative-asset.json +0 -125
  221. package/dist/lib/schemas-data/v2.5/core/creative-assignment.json +0 -31
  222. package/dist/lib/schemas-data/v2.5/core/creative-filters.json +0 -111
  223. package/dist/lib/schemas-data/v2.5/core/creative-manifest.json +0 -72
  224. package/dist/lib/schemas-data/v2.5/core/creative-policy.json +0 -27
  225. package/dist/lib/schemas-data/v2.5/core/delivery-metrics.json +0 -171
  226. package/dist/lib/schemas-data/v2.5/core/deployment.json +0 -93
  227. package/dist/lib/schemas-data/v2.5/core/destination.json +0 -53
  228. package/dist/lib/schemas-data/v2.5/core/error.json +0 -40
  229. package/dist/lib/schemas-data/v2.5/core/ext.json +0 -8
  230. package/dist/lib/schemas-data/v2.5/core/format-id.json +0 -47
  231. package/dist/lib/schemas-data/v2.5/core/format.json +0 -324
  232. package/dist/lib/schemas-data/v2.5/core/frequency-cap.json +0 -18
  233. package/dist/lib/schemas-data/v2.5/core/mcp-webhook-payload.json +0 -152
  234. package/dist/lib/schemas-data/v2.5/core/measurement.json +0 -48
  235. package/dist/lib/schemas-data/v2.5/core/media-buy.json +0 -62
  236. package/dist/lib/schemas-data/v2.5/core/package.json +0 -72
  237. package/dist/lib/schemas-data/v2.5/core/performance-feedback.json +0 -90
  238. package/dist/lib/schemas-data/v2.5/core/placement.json +0 -34
  239. package/dist/lib/schemas-data/v2.5/core/pricing-option.json +0 -35
  240. package/dist/lib/schemas-data/v2.5/core/product-filters.json +0 -102
  241. package/dist/lib/schemas-data/v2.5/core/product.json +0 -153
  242. package/dist/lib/schemas-data/v2.5/core/promoted-offerings.json +0 -115
  243. package/dist/lib/schemas-data/v2.5/core/promoted-products.json +0 -67
  244. package/dist/lib/schemas-data/v2.5/core/property-id.json +0 -14
  245. package/dist/lib/schemas-data/v2.5/core/property-tag.json +0 -16
  246. package/dist/lib/schemas-data/v2.5/core/property.json +0 -62
  247. package/dist/lib/schemas-data/v2.5/core/protocol-envelope.json +0 -146
  248. package/dist/lib/schemas-data/v2.5/core/publisher-property-selector.json +0 -92
  249. package/dist/lib/schemas-data/v2.5/core/push-notification-config.json +0 -48
  250. package/dist/lib/schemas-data/v2.5/core/reporting-capabilities.json +0 -71
  251. package/dist/lib/schemas-data/v2.5/core/response.json +0 -24
  252. package/dist/lib/schemas-data/v2.5/core/signal-filters.json +0 -35
  253. package/dist/lib/schemas-data/v2.5/core/start-timing.json +0 -18
  254. package/dist/lib/schemas-data/v2.5/core/sub-asset.json +0 -79
  255. package/dist/lib/schemas-data/v2.5/core/targeting.json +0 -50
  256. package/dist/lib/schemas-data/v2.5/core/tasks-get-request.json +0 -43
  257. package/dist/lib/schemas-data/v2.5/core/tasks-get-response.json +0 -166
  258. package/dist/lib/schemas-data/v2.5/core/tasks-list-request.json +0 -192
  259. package/dist/lib/schemas-data/v2.5/core/tasks-list-response.json +0 -183
  260. package/dist/lib/schemas-data/v2.5/creative/asset-types/index.json +0 -101
  261. package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-request.json +0 -73
  262. package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-response.json +0 -61
  263. package/dist/lib/schemas-data/v2.5/creative/preview-creative-request.json +0 -164
  264. package/dist/lib/schemas-data/v2.5/creative/preview-creative-response.json +0 -245
  265. package/dist/lib/schemas-data/v2.5/creative/preview-render.json +0 -225
  266. package/dist/lib/schemas-data/v2.5/enums/adcp-domain.json +0 -11
  267. package/dist/lib/schemas-data/v2.5/enums/asset-content-type.json +0 -22
  268. package/dist/lib/schemas-data/v2.5/enums/auth-scheme.json +0 -11
  269. package/dist/lib/schemas-data/v2.5/enums/available-metric.json +0 -18
  270. package/dist/lib/schemas-data/v2.5/enums/channels.json +0 -18
  271. package/dist/lib/schemas-data/v2.5/enums/co-branding-requirement.json +0 -12
  272. package/dist/lib/schemas-data/v2.5/enums/creative-action.json +0 -14
  273. package/dist/lib/schemas-data/v2.5/enums/creative-agent-capability.json +0 -13
  274. package/dist/lib/schemas-data/v2.5/enums/creative-sort-field.json +0 -15
  275. package/dist/lib/schemas-data/v2.5/enums/creative-status.json +0 -19
  276. package/dist/lib/schemas-data/v2.5/enums/daast-tracking-event.json +0 -20
  277. package/dist/lib/schemas-data/v2.5/enums/daast-version.json +0 -11
  278. package/dist/lib/schemas-data/v2.5/enums/delivery-type.json +0 -15
  279. package/dist/lib/schemas-data/v2.5/enums/dimension-unit.json +0 -13
  280. package/dist/lib/schemas-data/v2.5/enums/feed-format.json +0 -12
  281. package/dist/lib/schemas-data/v2.5/enums/feedback-source.json +0 -13
  282. package/dist/lib/schemas-data/v2.5/enums/format-category.json +0 -16
  283. package/dist/lib/schemas-data/v2.5/enums/format-id-parameter.json +0 -11
  284. package/dist/lib/schemas-data/v2.5/enums/frequency-cap-scope.json +0 -13
  285. package/dist/lib/schemas-data/v2.5/enums/history-entry-type.json +0 -11
  286. package/dist/lib/schemas-data/v2.5/enums/http-method.json +0 -11
  287. package/dist/lib/schemas-data/v2.5/enums/identifier-types.json +0 -34
  288. package/dist/lib/schemas-data/v2.5/enums/javascript-module-type.json +0 -12
  289. package/dist/lib/schemas-data/v2.5/enums/landing-page-requirement.json +0 -12
  290. package/dist/lib/schemas-data/v2.5/enums/markdown-flavor.json +0 -11
  291. package/dist/lib/schemas-data/v2.5/enums/media-buy-status.json +0 -19
  292. package/dist/lib/schemas-data/v2.5/enums/metric-type.json +0 -17
  293. package/dist/lib/schemas-data/v2.5/enums/notification-type.json +0 -13
  294. package/dist/lib/schemas-data/v2.5/enums/pacing.json +0 -17
  295. package/dist/lib/schemas-data/v2.5/enums/preview-output-format.json +0 -11
  296. package/dist/lib/schemas-data/v2.5/enums/pricing-model.json +0 -25
  297. package/dist/lib/schemas-data/v2.5/enums/property-type.json +0 -16
  298. package/dist/lib/schemas-data/v2.5/enums/publisher-identifier-types.json +0 -19
  299. package/dist/lib/schemas-data/v2.5/enums/reporting-frequency.json +0 -12
  300. package/dist/lib/schemas-data/v2.5/enums/signal-catalog-type.json +0 -12
  301. package/dist/lib/schemas-data/v2.5/enums/sort-direction.json +0 -11
  302. package/dist/lib/schemas-data/v2.5/enums/standard-format-ids.json +0 -103
  303. package/dist/lib/schemas-data/v2.5/enums/task-status.json +0 -29
  304. package/dist/lib/schemas-data/v2.5/enums/task-type.json +0 -27
  305. package/dist/lib/schemas-data/v2.5/enums/update-frequency.json +0 -13
  306. package/dist/lib/schemas-data/v2.5/enums/url-asset-type.json +0 -12
  307. package/dist/lib/schemas-data/v2.5/enums/validation-mode.json +0 -11
  308. package/dist/lib/schemas-data/v2.5/enums/vast-tracking-event.json +0 -25
  309. package/dist/lib/schemas-data/v2.5/enums/vast-version.json +0 -14
  310. package/dist/lib/schemas-data/v2.5/enums/webhook-response-type.json +0 -13
  311. package/dist/lib/schemas-data/v2.5/enums/webhook-security-method.json +0 -12
  312. package/dist/lib/schemas-data/v2.5/index.json +0 -604
  313. package/dist/lib/schemas-data/v2.5/media-buy/build-creative-request.json +0 -31
  314. package/dist/lib/schemas-data/v2.5/media-buy/build-creative-response.json +0 -65
  315. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-input-required.json +0 -31
  316. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-submitted.json +0 -16
  317. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-working.json +0 -36
  318. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-request.json +0 -126
  319. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-response.json +0 -97
  320. package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-request.json +0 -54
  321. package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-response.json +0 -285
  322. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-input-required.json +0 -38
  323. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-submitted.json +0 -21
  324. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-working.json +0 -34
  325. package/dist/lib/schemas-data/v2.5/media-buy/get-products-request.json +0 -28
  326. package/dist/lib/schemas-data/v2.5/media-buy/get-products-response.json +0 -33
  327. package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-request.json +0 -26
  328. package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-response.json +0 -70
  329. package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-request.json +0 -58
  330. package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-response.json +0 -61
  331. package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-request.json +0 -137
  332. package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-response.json +0 -437
  333. package/dist/lib/schemas-data/v2.5/media-buy/package-request.json +0 -80
  334. package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-request.json +0 -88
  335. package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-response.json +0 -66
  336. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-input-required.json +0 -25
  337. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-submitted.json +0 -16
  338. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-working.json +0 -46
  339. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-request.json +0 -178
  340. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-response.json +0 -149
  341. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-input-required.json +0 -24
  342. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-submitted.json +0 -16
  343. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-working.json +0 -36
  344. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-request.json +0 -129
  345. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-response.json +0 -99
  346. package/dist/lib/schemas-data/v2.5/pricing-options/cpc-option.json +0 -52
  347. package/dist/lib/schemas-data/v2.5/pricing-options/cpcv-option.json +0 -52
  348. package/dist/lib/schemas-data/v2.5/pricing-options/cpm-auction-option.json +0 -81
  349. package/dist/lib/schemas-data/v2.5/pricing-options/cpm-fixed-option.json +0 -52
  350. package/dist/lib/schemas-data/v2.5/pricing-options/cpp-option.json +0 -73
  351. package/dist/lib/schemas-data/v2.5/pricing-options/cpv-option.json +0 -88
  352. package/dist/lib/schemas-data/v2.5/pricing-options/flat-rate-option.json +0 -93
  353. package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-auction-option.json +0 -81
  354. package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-fixed-option.json +0 -52
  355. package/dist/lib/schemas-data/v2.5/protocols/adcp-extension.json +0 -33
  356. package/dist/lib/schemas-data/v2.5/signals/activate-signal-request.json +0 -32
  357. package/dist/lib/schemas-data/v2.5/signals/activate-signal-response.json +0 -68
  358. package/dist/lib/schemas-data/v2.5/signals/get-signals-request.json +0 -59
  359. package/dist/lib/schemas-data/v2.5/signals/get-signals-response.json +0 -100
  360. package/dist/lib/types/v2-5/index.d.mts +0 -1
  361. package/dist/lib/types/v2-5/index.d.ts +0 -1
  362. package/dist/lib/types/v2-5/index.js +0 -22
  363. package/dist/lib/types/v2-5/index.mjs +0 -1
  364. package/dist/lib/types/v2-5/tools.generated.d.mts +0 -3568
  365. package/dist/lib/types/v2-5/tools.generated.d.ts +0 -3568
  366. package/dist/lib/types/v2-5/tools.generated.js +0 -16
  367. package/dist/lib/types/v2-5/tools.generated.mjs +0 -0
  368. package/dist/lib/utils/sync-creatives-adapter.d.mts +0 -33
  369. package/dist/lib/utils/sync-creatives-adapter.d.ts +0 -33
  370. package/dist/lib/utils/sync-creatives-adapter.js +0 -83
  371. package/dist/lib/utils/sync-creatives-adapter.mjs +0 -59
@@ -31,12 +31,10 @@ __export(version_exports, {
31
31
  toReleasePrecisionVersion: () => toReleasePrecisionVersion
32
32
  });
33
33
  module.exports = __toCommonJS(version_exports);
34
- const LIBRARY_VERSION = "16.0.0-beta.8";
34
+ const LIBRARY_VERSION = "16.0.0";
35
35
  const ADCP_VERSION = "3.2.5";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
38
- "v2.5",
39
- "v2.6",
40
38
  "v3",
41
39
  "3.0.0",
42
40
  "3.0",
@@ -104,10 +102,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
104
102
  "3.2.5"
105
103
  ];
106
104
  const VERSION_INFO = {
107
- library: "16.0.0-beta.8",
105
+ library: "16.0.0",
108
106
  adcp: "3.2.5",
109
107
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
110
- generatedAt: "2026-10-18T01:21:23.594Z"
108
+ generatedAt: "2026-10-19T23:27:30.750Z"
111
109
  };
112
110
  function getAdcpVersion() {
113
111
  return ADCP_VERSION;
@@ -1,9 +1,7 @@
1
- const LIBRARY_VERSION = "16.0.0-beta.8";
1
+ const LIBRARY_VERSION = "16.0.0";
2
2
  const ADCP_VERSION = "3.2.5";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
5
- "v2.5",
6
- "v2.6",
7
5
  "v3",
8
6
  "3.0.0",
9
7
  "3.0",
@@ -71,10 +69,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
71
69
  "3.2.5"
72
70
  ];
73
71
  const VERSION_INFO = {
74
- library: "16.0.0-beta.8",
72
+ library: "16.0.0",
75
73
  adcp: "3.2.5",
76
74
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
77
- generatedAt: "2026-10-18T01:21:23.594Z"
75
+ generatedAt: "2026-10-19T23:27:30.750Z"
78
76
  };
79
77
  function getAdcpVersion() {
80
78
  return ADCP_VERSION;
@@ -1,7 +1,7 @@
1
1
  # AdCP Type Summary
2
2
 
3
- > Generated at: 2026-10-18
4
- > @adcp/sdk v16.0.0-beta.8
3
+ > Generated at: 2026-10-19
4
+ > @adcp/sdk v16.0.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
 
@@ -333,4 +333,4 @@ Look for messages like:
333
333
  - [MCP Specification](https://spec.modelcontextprotocol.io)
334
334
  - [A2A Protocol Documentation](https://github.com/AgentProtocol/A2A)
335
335
  - [AdCP Specification](https://github.com/adcontextprotocol/adcp)
336
- - [Wire-version compat playbook](https://adcontextprotocol.github.io/adcp-client/development/WIRE-VERSION-COMPAT.md) — orthogonal but commonly conflated with transport differences. Read this if you're touching how the SDK adapts requests/responses across AdCP major versions (v3 ↔ v2.5), not just MCP vs A2A.
336
+ - [Wire-version compat playbook](https://adcontextprotocol.github.io/adcp-client/development/WIRE-VERSION-COMPAT.md) — orthogonal but commonly conflated with transport differences. Read this when adapting requests/responses across maintained AdCP 3 releases. AdCP 2 wire translation was [removed in SDK 16](../migration-drop-adcp-2.md); transport differences remain independent of the selected AdCP release.
@@ -282,6 +282,31 @@ provenance manifest first. Resolve the release tag to its full commit, then use
282
282
  file and verify the release bundle's `.tgz.sha256` sidecar before updating the
283
283
  manifest. The command never accepts moving branches or unverified content.
284
284
 
285
+ ## Property-list reference credential isolation
286
+
287
+ The storyboard runner implements `check: property_list_reference` and the
288
+ `property_list_reference_runner` requirement for MCP. The protocol-authored
289
+ `universal/property-list-reference-resolution` storyboard creates a shared list
290
+ and a control list under the owner identity. Its probe then starts a fresh MCP
291
+ session with only the issued reference Bearer token, follows every page, checks
292
+ the exact identifier set, and requires authorization denials for a cross-list
293
+ read and a name-changing update. Owner credentials, accounts, cookies, and
294
+ signing keys are never forwarded into that session. The check needs no extra
295
+ runner configuration beyond the storyboard's sandbox/controller setup.
296
+ It uses the MCP endpoint already discovered by the owner client, with a fresh
297
+ transport that does not inherit the owner's `transport.trustedFetchFn`.
298
+
299
+ Evidence includes initialization, each page, and both denial probes; issued
300
+ tokens are redacted from creation responses and diagnostic strings. Explicit
301
+ A2A runs report `requirement_unmet` before fixture setup or task calls because
302
+ the credential-isolated probe currently implements the MCP baseline.
303
+
304
+ The storyboard is authored for the next AdCP minor release and is not in the
305
+ bundled 3.2.5 compliance cache. Until that release, load its YAML from a local
306
+ copy of spec PR #8289 and use `runStoryboard` with that checkout's schema root.
307
+
308
+ Upstream contract: [adcp#8289](https://github.com/adcontextprotocol/adcp/pull/8289).
309
+
285
310
  ## Trusted Match Context router replay
286
311
 
287
312
  Context Match routers expose raw `POST /context`, not an MCP or A2A tool. A
@@ -0,0 +1,156 @@
1
+ # Creative evaluator build probes
2
+
3
+ A storyboard may opt into `creative_build_probe: {context_prefix: build,
4
+ message: "Create one sandbox creative"}`. The full runner and standalone step
5
+ runner prepare one route/input binding before controller seeding or dispatch,
6
+ and then enable `creative_build_probe_runner`. Author the gated steps with
7
+ `requires_contract: creative_build_probe_runner` so older engines give no
8
+ executed security credit.
9
+
10
+ Provision the sandbox account, build entitlement, task authorization, and
11
+ accepted evaluator endpoint separately. Complete format metadata does not prove
12
+ these account/task prerequisites. The resolver does not issue a hidden build.
13
+
14
+ `test_kit.creative_build_probes` accepts recipes `{match: [...], input: {...}}`.
15
+ Match clauses use the existing fixture-resolution DSL against the catalog entry.
16
+ The operator asserts that the input is valid for **every** matched route for this
17
+ account. Input can contain message, creative_manifest, creative_id, transformer_id,
18
+ config and legacy target_format_id; it cannot replace evaluator, account, auth or trust material. Use a
19
+ specific capability-ID predicate when a kind-only predicate is insufficient.
20
+ Full manifest schema validation runs before dispatch. Config requires a transformer;
21
+ provision its live parameter values and an appropriate output route. Library IDs,
22
+ transformers, source asset URLs, and account authorization are operator fixtures.
23
+
24
+ The automatic generation path requires a unique advertised build route,
25
+ supports_generation, technical_requirements_complete, a known non-custom kind,
26
+ empty params, and no unhandled declaration metadata (descriptive identity/preference/channel metadata is inert).
27
+ It supplies the brief and `{format_kind: selectedKind, assets: {}}`. Otherwise a
28
+ matched recipe is required; omitted catalog operations still mean build and
29
+ missing catalog IDs remain discoverable but unaddressable through capability-ID routing. Non-build entries and
30
+ unsatisfiable routes do not prevent selecting a later satisfiable route.
31
+
32
+ Resolved records use fixture_type `creative_format`, the prefix as handle, exact
33
+ matched requirements, and seller_ids.capability_id or seller_ids.format_id. Unsatisfied whole runs have a
34
+ fixture_unsatisfied coverage gap and zero executed security validations; standalone
35
+ steps use skip_reason fixture_unsatisfied and canonical not_applicable, with detail
36
+ naming creative_format:<prefix>. This does not establish producer nonconformance
37
+ or passing security coverage. Malformed catalogs produce a structured failed validation; malformed operator recipes throw authoring errors during applicable preparation
38
+ with the required schemas available. Unavailable catalog/schema prerequisites
39
+ can return a zero-credit fixture gap before exhaustive recipe diagnostics. Routed and
40
+ replicated runs currently report an explicit gap before seeding; run each agent
41
+ independently. Unopted storyboards retain their existing behavior and counters.
42
+
43
+ The protocol-side harness contract and consuming fixture are tracked in
44
+ [adcp#8240](https://github.com/adcontextprotocol/adcp/issues/8240).
45
+
46
+ ## Payload-bound authorization limitation
47
+
48
+ Current probe preparation requires a sandbox build fixture that does not need
49
+ a per-request signed governance_context. The runner detects an advertised
50
+ build_creative signed_context enforcement claim and reports fixture_unsatisfied
51
+ with zero security credit; static recipes cannot pre-sign the fresh request.
52
+ Other governed tasks do not disable this build probe. Preparing fresh governed
53
+ probe authorizations is a separate runner integration, not a protocol decision.
54
+
55
+ Recipe fields stay exactly as provisioned: omitting message does not add the
56
+ storyboard's generation brief. The automatic source manifest is validated too.
57
+ Descriptive metadata (display_name, seller_preference, experimental,
58
+ sample_render_url, format_option_id, publisher_domain, applies_to_channels,
59
+ canonical_formats_only) does not remove security coverage. Unknown metadata and
60
+ constraint-bearing extensions require an operator recipe. The probe-local
61
+ unambiguous-source/config rules do not add restrictions to build_creative wire
62
+ requests in other modes, including refinement.
63
+
64
+ Operator recipe authoring is bounded to 100,000 traversed nodes, 4 MiB of UTF-8
65
+ string/key bytes, and the existing JSON depth bound per recipe. Repeated aliases
66
+ count on every visit, before match normalization. These are harness configuration
67
+ limits, not producer catalog requirements. Missing required selected-version
68
+ validators yield a zero-credit harness gap; they never authorize a dispatch.
69
+
70
+
71
+ ## Selected-version routing
72
+
73
+ The runner uses the existing guarded capabilities-echo authority for catalog
74
+ interpretation. A same-major release-precision echo must be listed in the
75
+ response's supported_versions and have an available bundled or supplied schema
76
+ root. Invalid, missing, unlisted or unavailable echoes retain the pin. Supplied
77
+ servedReleaseSchemaRoots apply to the catalog only. The runner captures build
78
+ request, source-manifest and target-FormatID validators from the pin before
79
+ activating any served catalog root, including overlapping version aliases.
80
+ The public five-argument resolveCreativeBuildProbe works on an already selected
81
+ creative catalog and uses its supplied pin only; it has no full capabilities
82
+ response from which to select an echo. Full and standalone runners use the
83
+ internal preparation path for guarded served-release selection.
84
+
85
+ Catalog kind, parameter, ID and operation semantics follow that served release;
86
+ build selectors and source inputs retain the request pin. Canonical route IDs
87
+ and automatic generation require canonical routing in both releases. Otherwise
88
+ use a provisioned legacy selector and pinned-valid input; do not synthesize a
89
+ named format or upgrade the request. An advertised 3.2 legacy reference's density
90
+ constraints still apply when a 3.1 request treats pixel_ratio as an opaque
91
+ extension: the old request cannot establish a 2x parameterized binding by adding
92
+ that field. An incompatible binding is a fixture gap, not producer failure.
93
+
94
+ The reverse direction retains the older catalog's parameter rules. A 3.1
95
+ reference cannot establish density through an omitted or opaque pixel_ratio
96
+ field. Actual named-format requirements still apply: the published 3.1 narrowing
97
+ rule uses an any-value baseline only where the projected legacy requirements
98
+ impose no constraint. A provisioned, live-valid 3.2 target at 2x can
99
+ therefore match a 3.1 reference with no ratio, even if the old payload carries
100
+ an opaque ratio extension. The resolver does not union property sets or invent
101
+ a 1x default for that older catalog. The operator must still provision a valid
102
+ named-format mapping and input for the selected account.
103
+
104
+ Local schema diagnostics display at most eight AJV error entries and 2048
105
+ escaped characters. Control characters are escaped for display; producer
106
+ catalogs and failed validation outcomes remain unchanged.
107
+
108
+ Read the selected capabilities schema's format reference and selected build request
109
+ selector. A 3.2 recipe normally binds the advertised capability ID; a provisioned legacy selector remains supported when the selected request declares it. A 3.1 recipe must supply
110
+ an existing schema-valid `target_format_id` and assert that its discovered or
111
+ provisioned named format maps to every matched catalog route. The resolver never
112
+ constructs a named format from a capability ID. Missing legacy capability IDs are
113
+ legal. Without a provisioned legacy selector there is a coverage gap; an unknown
114
+ extra `target_capability_id` is not a valid 3.1 routing contract. Automatic generation
115
+ is restricted to capability-ID routing. Unknown 3.1 canonical kinds remain intact
116
+ as unsupported routes while resolution continues to understood routes. Older
117
+ catalogs do not acquire 3.2 ID-pattern or operations-field producer requirements.
118
+
119
+ Transformer-only recipes need no dummy brief/source manifest. Provision valid live
120
+ configuration and matching transformer output_capability_ids (3.2) or
121
+ output_format_ids (legacy). Recipe messages are trusted operator-authored input and
122
+ remain exactly as supplied; banning a brief would not prevent a dishonest fixture
123
+ author from biasing other input content. Credential-key and URL checks reject known
124
+ aliases but cannot prove opaque values or custom encodings secret-free. Operators
125
+ must provision non-secret fixture content. A malformed recipe throws an authoring
126
+ error after the runner closes any receiver/connections it owns.
127
+
128
+
129
+ An explicit legacy selector recipe is also supported on newer versions that retain
130
+ `target_format_id`; bind exactly one selector. Recipes cannot override
131
+ `canonical_formats_only: true` or contradict an advertised `v1_format_ref` pairing.
132
+ Reference agent URLs use existing canonicalization, and declared dimensions/duration
133
+ must agree. Incompatible pairs are unavailable; continue to another usable route.
134
+
135
+
136
+ Resolution certifies preparation of the selected route/input, not complete catalog
137
+ conformance. Unknown legacy kinds remain unvalidated local unsupported routes;
138
+ the consuming storyboard must retain its required whole-response discovery schema
139
+ validation. A standalone boundary step grades its selected probe, not unrelated
140
+ catalog metadata. The evaluator storyboard keeps that independent required check.
141
+
142
+
143
+ The provisioned brief is sent as `build_creative.message` to the agent under test,
144
+ where its model may read it as instructions. Author ordinary creative direction;
145
+ do not include instructions about evaluator behavior or expected test verdicts.
146
+ An explicit runner `test_kit` overrides the storyboard's declared kit as a whole:
147
+ include recipes in that override when also supplying auth. Hosted auth defaults
148
+ preserve recipes explicitly supplied by the operator; they do not merge missing
149
+ recipes from a separately declared brand kit.
150
+
151
+ The normal hosted HTTP/UI flow does not expose arbitrary recipe uploads. Use trusted
152
+ programmatic runner options or the local CLI for operator-provisioned recipes.
153
+
154
+ The preparer checks the selected route/input binding. It does not certify all
155
+ unselected recipe matches or remote account entitlements; narrow the operator
156
+ match predicates when an input is valid for only one route.
@@ -124,16 +124,69 @@ await agent.syncCreatives(
124
124
  The same pure functions are available from the explicit
125
125
  `@adcp/sdk/v2/projection` migration subpath for composition outside a client call:
126
126
  `projectCreativeForDelivery()`, `projectMediaBuyCreativesForDelivery()`, and
127
- `projectSyncCreativesForDelivery()`. Capability resolution uses the client's
127
+ `projectSyncCreativesForDelivery()`.
128
+
129
+ When these helpers emit a legacy `format_id`, they also map assets to the
130
+ definition's `asset_id` keys. Definitions come from the bundled reference
131
+ catalog, or from an optional final `legacyFormatDefinitions` array supplied to
132
+ any of the three helpers. Caller definitions take precedence and must match
133
+ both the format agent URL and ID. No network lookup occurs during projection.
134
+
135
+ Existing declared asset keys keep their values. Other assets move only to one
136
+ unoccupied slot with the same `asset_type`; URL assets must also match
137
+ `requirements.url_type`, and pixel trackers must match the slot's `event`.
138
+ Custom tracker events also match `custom_event_name`. Definitions containing
139
+ repeatable groups retain all asset keys; projection does not infer group membership.
140
+ Unmatched assets, ambiguous matches, and assets competing for the same slot
141
+ keep their original keys. Unknown definitions leave assets unchanged. Canonical
142
+ delivery retains its asset keys, and projection never mutates the caller's data.
143
+
144
+ Capability resolution uses the client's
128
145
  emitted wire release pin: AdCP 3.2+ is canonical by contract, 3.0 is legacy, and 3.1
129
146
  checks the explicit `media_buy.features.canonical_creatives` declaration. A
130
147
  3.1 peer without the feature is deliberately
131
148
  `unknown` because a 3.1 version claim does not prove the runtime accepts
132
149
  canonical creatives. For MCP peers the client then inspects the advertised
133
150
  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.
151
+ tool is never reused.
152
+
153
+ For a seller proven to serve AdCP 3.1, an otherwise unknown write uses canonical
154
+ delivery when every selected option and creative is covered by the seller's own
155
+ `format_options`. This follows the 3.1 buyer rule to prefer advertised format
156
+ options over dual-emitted legacy IDs. Creative option references and kinds must
157
+ match, including declared slots and dimensions. Sync assignments must all have
158
+ matching selector containers. Explicit legacy capabilities or tool schemas take
159
+ precedence; experimental declarations and options synthesized by the SDK from
160
+ legacy IDs do not establish canonical support. This also works when a 3.2 buyer
161
+ negotiates down to a 3.1 seller.
162
+
163
+ Supply the selected product or the result of `packageRefsForFormatOptions()` in
164
+ `creativeFormatProjection.selectorContainers`. Include `package_id` when using
165
+ assignments. After serializing a selection, include `product_id` so the same
166
+ client can recover the seller declaration from account-scoped product discovery,
167
+ including product-cache hits. Product evidence applies to that request only.
168
+ The seller remains responsible for full manifest validation.
169
+
170
+ Canonical fallback requires affirmative evidence from this client's product
171
+ discovery and an advertised `supported_versions` entry proving the seller serves
172
+ 3.1. The fallback uses synchronous discovery and successful conditional catalog
173
+ revalidation. A saved product on a fresh client, including one synthesized from
174
+ legacy IDs, cannot establish support by its shape alone. Rediscover the product
175
+ in the current account and authorization scope first. Evidence expires after
176
+ the discovery TTL (five minutes by default); product-cache hits do not extend
177
+ it. Authorization changes and discovery invalidation invalidate the evidence.
178
+ Request-scoped custom transports require explicit capability or tool-schema
179
+ support and do not reuse this inferred product evidence.
180
+
181
+ Assignment-only sync and updates containing only an existing `package_id` keep
182
+ their existing wire behavior. Pass the matching selectors for this request to
183
+ use the product-based fallback; package IDs alone do not establish support.
184
+ Without assignments, each creative must match every supplied container; use
185
+ assignments or split mixed-format batches when the products accept different kinds.
186
+
187
+ Without matching product evidence, unknown peers receive a legacy projection
188
+ only when the selected product provides one unambiguous ref. Ambiguous or
189
+ unavailable mappings throw `CreativeFormatProjectionError` before transport.
137
190
 
138
191
  Schema inspection follows local JSON Pointer `$ref` targets, including `$defs`,
139
192
  and retains the complete listed document through shared discovery-cache reuse.
@@ -141,7 +194,7 @@ Unused definitions and annotations do not establish support. External references
141
194
  named anchors, and dynamic references are not resolved; inspection never fetches
142
195
  schema URLs. Cycles and traversal limits cannot force a guessed wire mode.
143
196
 
144
- Before building creatives, ask the client which mode that write will use:
197
+ Before building creatives, inspect the tool's wire evidence:
145
198
 
146
199
  ```ts
147
200
  const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
@@ -150,13 +203,16 @@ const mode = await agent.resolveCreativeFormatWireMode('sync_creatives');
150
203
  This method is available on `AgentClient` and `SingleAgentClient`, accepts
151
204
  `sync_creatives`, `create_media_buy`, or `update_media_buy`, and shares the
152
205
  write path's capability discovery, tool-schema fallback, and buyer wire pin.
206
+ This context-free check does not inspect a write's product options, so an
207
+ `unknown` result can still become canonical for a matching 3.1 write as described
208
+ above.
153
209
  It reuses fresh cached or primed evidence; cold discovery may make read calls,
154
210
  but it sends no mutation. Pass `{ signal, transport }` as the optional second
155
211
  argument to use the same cancellation and transport scope as the write.
156
212
 
157
213
  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
214
+ For older peers without matching product evidence, `unknown` means projection
215
+ still requires one unambiguous legacy reference. It does not promise canonical
160
216
  support. Conflicting capability/schema evidence or missing release proof with
161
217
  a 3.2+ buyer pin throws `CreativeFormatCapabilityError`, as during a write.
162
218
  The standalone `resolveCreativeFormatWireMode(capabilities, version)` helper
@@ -280,7 +280,7 @@ authoritative completion reconciliation after restart.
280
280
 
281
281
  ### Tokenless catalog and products-only legacy continuations
282
282
 
283
- An established 2.5, 3.0, or 3.1 seller may return purchasable catalog products
283
+ An established 3.0 or 3.1 seller may return purchasable catalog products
284
284
  without a wholesale feed token, or answer a brief with products but no
285
285
  proposal. The SDK never invents a proposal, terms digest, or feed fence. When
286
286
  `principalScope`, an account, and stable seller-session binding are available,
@@ -301,7 +301,7 @@ invocation receives a fresh continuation even when the catalog is unchanged:
301
301
  const continuations = createInMemoryLegacyPurchaseContinuationStore();
302
302
  const lifecycle = await agent.negotiateMediaBuyLifecycle({
303
303
  principalScope: authenticatedPrincipalId,
304
- // Required for established 2.5, 3.0, and 3.1 sellers that provide no server
304
+ // Required for established 3.0 and 3.1 sellers that provide no server
305
305
  // context ID. Persist this non-secret authenticated session ID across rehydration.
306
306
  legacyPurchaseSellerSessionScope: authenticatedSellerSessionId,
307
307
  legacyPurchaseContinuationStore: continuations,
@@ -331,9 +331,9 @@ after accepting the exact returned loss set. If the application requires an
331
331
  enforceable observed catalog/pricing fence, do not accept the continuation;
332
332
  the tokenless catalog is read-only for that policy.
333
333
 
334
- On 2.5 the loss set also includes `mutation_idempotency_not_guaranteed`. On 3.0
335
- and 3.1 it includes that loss whenever the seller does not advertise a usable
336
- replay TTL. All tokenless catalog continuations include
334
+ On 3.0 and 3.1 the loss set includes `mutation_idempotency_not_guaranteed`
335
+ whenever the seller does not advertise a usable replay TTL. All tokenless
336
+ catalog continuations include
337
337
  `feed_version_not_atomic` and `pricing_version_not_atomic`.
338
338
 
339
339
  The in-memory store is a single-process reference implementation. Production
@@ -462,13 +462,12 @@ issued. It must be a stable, non-secret ID derived by the application from the
462
462
  authenticated seller/account session—not a bearer token. Persist and reuse it
463
463
  with the continuation store so a restarted coordinator can redeem or replay
464
464
  the same operation without making the token portable to another credentialed
465
- session. This applies to 2.5, 3.0, and 3.1; endpoint identity is not an
465
+ session. This applies to 3.0 and 3.1; endpoint identity is not an
466
466
  authenticated session identity. URL userinfo and presigned URLs are rejected
467
467
  before the discovered payload can enter durable storage.
468
468
 
469
- Every 2.5 continuation declares `mutation_idempotency_not_guaranteed`.
470
- 3.0/3.1 continuations declare the same loss whenever the seller does not
471
- advertise a usable replay TTL; accepting an idempotency key alone is not treated
469
+ 3.0/3.1 continuations declare `mutation_idempotency_not_guaranteed` whenever
470
+ the seller does not advertise a usable replay TTL; accepting an idempotency key alone is not treated
472
471
  as evidence that a mutation can be replayed safely. Submitted completions are
473
472
  accepted only for the exact seller task ID recorded at dispatch. Unstructured
474
473
  or SDK-synthetic terminal errors remain ambiguous and retain the durable fence.
@@ -584,15 +583,17 @@ mutating prior state.
584
583
 
585
584
  ## Buyer projection policy
586
585
 
586
+ All compatibility lanes require AdCP 3. AdCP 2 agents are rejected during discovery before a coordinator operation can dispatch; see the [AdCP 2 retirement guide](../migration-drop-adcp-2.md).
587
+
587
588
  | Coordinator operation | Compact tool | Established projection | Boundary |
588
589
  |---|---|---|---|
589
- | `listProducts` | `list_products` | `get_products(buying_mode='wholesale')` | Representable `criteria.offer_filters` map field-by-field through the negotiated legacy offer-filter schema; country remains `filters.countries` and is never recast as delivery targeting. Other structured criteria report their exact unsupported field before dispatch. Actual `wholesale_feed_version` is renamed to `feed_version`; no value is invented. An eligible tokenless catalog may expose the SDK-local `purchase_continuation` described above while `raw` remains the canonical SDK source object. The stable response exposes `next_cursor` and `unchanged` in both lanes. The established request includes `pagination` only when the caller supplies a cursor or `max_results`; the SDK does not fabricate a page-size default. v2.5 pagination/field selection, pre-3.1 conditional feed/pricing reads, and response-field names absent from the negotiated enum are typed unsupported. |
590
+ | `listProducts` | `list_products` | `get_products(buying_mode='wholesale')` | Representable `criteria.offer_filters` map field-by-field through the negotiated legacy offer-filter schema; country remains `filters.countries` and is never recast as delivery targeting. Other structured criteria report their exact unsupported field before dispatch. Actual `wholesale_feed_version` is renamed to `feed_version`; no value is invented. An eligible tokenless catalog may expose the SDK-local `purchase_continuation` described above while `raw` remains the canonical SDK source object. The stable response exposes `next_cursor` and `unchanged` in both lanes. The established request includes `pagination` only when the caller supplies a cursor or `max_results`; the SDK does not fabricate a page-size default. Pre-3.1 conditional feed/pricing reads and response-field names absent from the negotiated enum are typed unsupported. |
590
591
  | `requestProposals` | `request_proposals` | `get_products(buying_mode='brief')` | Only offer-filter fields and metric values defined by the negotiated release map field-by-field, plus policy IDs. Compact catalog selection lacks the complete legacy catalog metadata and fails closed. Targeting-overlay requirements are forwarded only to a 3.2 established surface; 3.0/3.1 cannot represent them. Product-ID filters, compact-only offer prerequisites, `ext`, opportunity, and governance context fail preflight. |
591
592
  | `refineProposals` | `refine_proposals` | `get_products(buying_mode='refine')` | Ask and product include/omit map for revisions. Finalize maps only when it contains no additional refinement fields. Hard constraints, alternatives, criteria, amendment kinds, and finalize extras fail before dispatch. |
592
593
  | `declineProposals` | `decline_proposals` | proposal-scoped legacy omit | Rejected by default because omit is not a terminal decline and cannot carry the required compact reason/detail. Explicit opt-in reports `proposal_decline_not_terminal` and `proposal_decline_reason_not_forwarded`. |
593
- | `buyProducts` | `buy_products` | `create_media_buy` | Feed/pricing fencing is not atomic. Rejected by default; explicit opt-in names `feed_version_not_atomic` and, when present, `pricing_version_not_atomic`. A missing `feed_version` remains unsupported here; tokenless catalogs use the separate SDK-local `continueLegacyPurchase()` handoff. Shared package fields and nested targeting/reporting enums map against the negotiated schema, including 3.1+ `format_option_refs`; newer targeting, metric, and postal shapes fail closed. v2.5 also rejects non-empty compact targeting and push notification configuration. A direct compact `total_budget` and fields introduced on the 3.2 established surface—including allocation, budget-cap, bidding, governance, opportunity, and newer package controls—map only on a negotiated 3.2 established lane. Compact `catalog_ids` and resolved `pricing` remain typed unsupported. |
594
+ | `buyProducts` | `buy_products` | `create_media_buy` | Feed/pricing fencing is not atomic. Rejected by default; explicit opt-in names `feed_version_not_atomic` and, when present, `pricing_version_not_atomic`. A missing `feed_version` remains unsupported here; tokenless catalogs use the separate SDK-local `continueLegacyPurchase()` handoff. Shared package fields and nested targeting/reporting enums map against the negotiated schema, including 3.1+ `format_option_refs`; newer targeting, metric, and postal shapes fail closed. A direct compact `total_budget` and fields introduced on the 3.2 established surface—including allocation, budget-cap, bidding, governance, opportunity, and newer package controls—map only on a negotiated 3.2 established lane. Compact `catalog_ids` and resolved `pricing` remain typed unsupported. |
594
595
  | `acceptProposal` | `accept_proposal` | `create_media_buy(proposal_id=...)` | A compact-shaped proposal retains strict digest, immutable-snapshot, account-scope, kind/status, and expiry checks. Caller values cannot override digest-bound budget, budget-cap, timezone, or purchase-order terms. An honest 3.0/3.1 proposal remains executable with its ordinary `proposal_id` semantics only after explicit opt-in to `proposal_terms_digest_not_enforced`, `proposal_terms_digest_unavailable`, and `proposal_snapshot_not_immutable` (plus `proposal_hold_not_verifiable` when it has no expiry). The caller supplies the original brand/flight as `established_fallback`; the SDK does not claim those values came from the seller or synthesize a digest. |
595
- | `controlMediaBuy` | `control_media_buy` | `update_media_buy` | Account, media-buy ID, and a positive revision are required. Revision and identically shaped fields present in the negotiated established schema map directly; `name` maps on the 3.2 established surface and fails closed on 3.0/3.1, whose update schemas do not define it. v2.5 requires explicit `revision_not_atomic` opt-in and rejects cancellation plus v3-only package controls. Pre-3.2 lanes reject the broader compact optimization-goal union and nested targeting/keyword shapes they cannot represent. Compact `catalog_ids` cannot be cast to established `catalogs` objects, so it fails closed in every established lane. |
596
+ | `controlMediaBuy` | `control_media_buy` | `update_media_buy` | Account, media-buy ID, and a positive revision are required. Revision and identically shaped fields present in the negotiated established schema map directly; `name` maps on the 3.2 established surface and fails closed on 3.0/3.1, whose update schemas do not define it. Pre-3.2 lanes reject the broader compact optimization-goal union and nested targeting/keyword shapes they cannot represent. Compact `catalog_ids` cannot be cast to established `catalogs` objects, so it fails closed in every established lane. |
596
597
  | Readback | shared tools | `get_media_buys`, `get_media_buy_delivery` | Same public calls and canonical creative projection in every lane. Versioned request additions fail closed: webhook-activity and delivery-window/granularity options require 3.1+, while `indicator_types`, demographic breakdowns, and spot breakdowns require 3.2. Native postal reporting shapes require 3.1+. |
597
598
 
598
599
  Lossy mutations are fail-closed. An adopter may opt into only the exact named
@@ -735,8 +736,7 @@ trusted namespaces, never a buyer-supplied proposal ID alone.
735
736
 
736
737
  | Buyer surface | Seller surface | Expected path | Guarantee |
737
738
  |---|---|---|---|
738
- | Established `getProducts` / `createMediaBuy` / `updateMediaBuy` | AdCP 2.5–3.1 or a dual-surface 3.2 seller | Established tools are called directly | Existing application behavior remains unchanged; the compact coordinator is not involved. |
739
- | Compact-first coordinator | AdCP 2.5 | `list_products` → `get_products`; purchase → `create_media_buy`; supported control → `update_media_buy` | The direct common subset remains usable. Proposal objects/binding, media-buy readback, pagination, cancellation, v3-only top-level/package fields, and update reporting-webhook changes are typed unsupported rather than sent into v2.5's permissive additional-properties boundary. Feed fencing and optimistic revision enforcement require their named loss opt-ins. |
739
+ | Established `getProducts` / `createMediaBuy` / `updateMediaBuy` | AdCP 3.0/3.1 or a dual-surface 3.2 seller | Established tools are called directly | Existing application behavior remains unchanged; the compact coordinator is not involved. |
740
740
  | Compact-first coordinator | AdCP 3.0, 3.1, or 3.2 legacy-only | `list_products` → `get_products`; proposal discovery/refinement → `get_products`; control → `update_media_buy`; purchase → `create_media_buy` only when its named loss policy permits it | Common-subset reads and control are lossless. Atomic feed/pricing fencing, digest enforcement, and terminal decline are not representable and fail before mutation by default. |
741
741
  | Compact-first coordinator | AdCP 3.2 dual-surface | Compact tools are preferred; `preferredLifecycle: 'established'` exercises the compatibility facade | Native by default; the forced established lane has the same explicit boundaries as older sellers. |
742
742
  | Compact-first coordinator | AdCP 3.2 compact-only | Compact lifecycle tools | Native compact guarantees. |
@@ -749,7 +749,7 @@ that a 3.0 seller can enforce a 3.2-only atomicity or digest guarantee. The SDK
749
749
  must reject that case or report the exact explicitly accepted loss; it must
750
750
  never label the weaker mutation as equivalent.
751
751
 
752
- The coordinator test matrix covers SDK 14 compact-first callers against v2.5,
752
+ The coordinator test matrix covers compact-first callers against
753
753
  3.0, 3.1, 3.2 legacy-only, 3.2 dual-surface (compact preferred and established
754
754
  forced), and 3.2 compact-only discovery. The dual-surface MCP lane also holds
755
755
  the maximum at 3.2 while defaulting unversioned discovery and dispatch to 3.1,
@@ -761,9 +761,6 @@ validating every request and response against the corresponding cached wire
761
761
  bundle. Those lanes assert canonical format projection, pagination,
762
762
  feed/pricing provenance, account/brand/context/currency continuity, exact
763
763
  replay, changed-payload conflict, no duplicate mutation, control, and shared
764
- readback. The honest v2.5 fixture executes its complete representable direct
765
- subset, validates exact legacy wire, and asserts typed failures for pagination,
766
- proposals, cancellation, unsupported create/update fields, and media-buy
767
764
  readback. Versioned MCP fixtures also preserve submitted and input-required
768
765
  proposal states without inventing completed outcomes. A normal 3.2 server
769
766
  profile is exercised by 3.0 and 3.1 buyers through hidden established routes,
@@ -44,7 +44,7 @@ If you are unsure about a symbol, read its TSDoc. An `@experimental` tag means i
44
44
 
45
45
  ## How the two packages line up
46
46
 
47
- `@adcp/reporting-storage` declares `@adcp/sdk` as a **peer dependency** (`^16.0.0-beta.0` while SDK 16 is in beta), not a dependency. The store, its errors and the handlers share types and symbol-keyed guards, so the host must hold one copy of `@adcp/sdk`. A change to a storage interface in the SDK ships with a matching storage release; the changeset for each says which pair to install. The cloud SDKs (`@aws-sdk/client-s3`, `@azure/storage-blob`, `@google-cloud/storage`) are optional peers of the storage package. `@adcp/sdk` does not import `@adcp/reporting-storage`, and a test and a lint rule keep it that way.
47
+ `@adcp/reporting-storage` declares `@adcp/sdk` as a **peer dependency** (`^16.0.0` for SDK 16), not a dependency. The store, its errors and the handlers share types and symbol-keyed guards, so the host must hold one copy of `@adcp/sdk`. A change to a storage interface in the SDK ships with a matching storage release; the changeset for each says which pair to install. The cloud SDKs (`@aws-sdk/client-s3`, `@azure/storage-blob`, `@google-cloud/storage`) are optional peers of the storage package. `@adcp/sdk` does not import `@adcp/reporting-storage`, and a test and a lint rule keep it that way.
48
48
 
49
49
  ## How to pin
50
50
 
@@ -53,19 +53,19 @@ Pin the storage package with a tilde range. A caret range on a `0.x` version alr
53
53
  ```json
54
54
  {
55
55
  "dependencies": {
56
- "@adcp/sdk": "^16.0.0-beta.0",
57
- "@adcp/reporting-storage": "~0.1.0-beta.0"
56
+ "@adcp/sdk": "^16.0.0",
57
+ "@adcp/reporting-storage": "~0.1.0"
58
58
  }
59
59
  }
60
60
  ```
61
61
 
62
- Those are the beta pins. A prerelease range such as `~0.1.0` does not match `0.1.0-beta.0`, so use the `-beta.0` form until stable releases exist, then move to `^16.0.0` and `~0.1.0`.
62
+ These pins select SDK 16 and storage 0.1 stable versions. A stable range such as `~0.1.0` does not match `0.1.0-beta.0`; migrate both packages from their beta pins together.
63
63
 
64
- - `~0.1.0` (after the first stable release) takes patches only (recommended).
65
- - An exact version (`"0.1.0-beta.0"`) is stricter still.
64
+ - `~0.1.0` takes patches only (recommended).
65
+ - An exact version (`"0.1.0"`) is stricter still.
66
66
  - Read the changelog before widening to a new minor, and apply any migration it names.
67
67
 
68
- `@adcp/sdk` itself can use a caret range as usual, because the SDK's own surface follows semver. While SDK 16 is in beta, install both packages with the `beta` dist-tag (`npm install @adcp/sdk@beta @adcp/reporting-storage@beta`) until stable releases exist.
68
+ `@adcp/sdk` itself can use a caret range as usual, because the SDK's own surface follows semver. Install the stable pair with `npm install @adcp/sdk@^16.0.0 @adcp/reporting-storage@~0.1.0`. The storage API remains experimental under the policy above.
69
69
 
70
70
  ## Migrations
71
71
 
@@ -835,3 +835,8 @@ Random seed on nightly broadens the surface; fixed seed on per-PR keeps reproduc
835
835
  - [`MULTI-INSTANCE-TESTING.md`](./MULTI-INSTANCE-TESTING.md) — horizontal scaling bug hunt
836
836
  - [`BUILD-AN-AGENT.md`](./BUILD-AN-AGENT.md) — server-side implementation
837
837
  - `skills/build-*-agent/SKILL.md` — per-specialism obligations and storyboard IDs
838
+
839
+
840
+ For creative evaluator security fixtures, see
841
+ [Creative evaluator build probes](CREATIVE-BUILD-PROBE.md) for valid route/input
842
+ preparation, provisioned legacy selectors and explicit coverage gaps.
package/docs/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ad Context Protocol (AdCP)
2
2
 
3
- > Generated at: 2026-10-18
4
- > Library: @adcp/sdk v16.0.0-beta.8
3
+ > Generated at: 2026-10-19
4
+ > Library: @adcp/sdk v16.0.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@beta`; 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.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.
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
 
@@ -929,10 +929,12 @@ acceptance, caller-supplied budget,
929
929
  budget-cap, timezone, or purchase-order values must match any digest-bound
930
930
  seller terms; a conflict fails before `create_media_buy`.
931
931
 
932
- For v2.5 specifically, proposal operations, `get_media_buys`, pagination,
933
- cancellation, and v3-only package controls return typed unsupported errors.
934
- Supported pause/resume updates require explicit `revision_not_atomic` opt-in
935
- because v2.5 has no optimistic revision token.
932
+ Historically, the SDK 14 v2.5 lane rejected proposal operations,
933
+ `get_media_buys`, pagination, cancellation, and v3-only package controls with
934
+ typed unsupported errors. Pause/resume updates required explicit
935
+ `revision_not_atomic` opt-in because v2.5 has no optimistic revision token.
936
+ SDK 16 removes that lane and rejects AdCP 2 agents before dispatch; see the
937
+ [AdCP 2 retirement guide](./migration-drop-adcp-2.md).
936
938
 
937
939
  Run the same compact CLI storyboards against established sellers with
938
940
  `--media-buy-lifecycle-compat`. Use `--media-buy-compat-losses` only for the
@@ -1171,18 +1173,20 @@ configuration error; a tool or response variant absent from an installed
1171
1173
  bundle returns `undefined`. Neither case silently falls back to the current
1172
1174
  schema.
1173
1175
 
1174
- Every `TaskResult.metadata` now exposes the selected seller wire generation as
1175
- `serverVersion: 'v2' | 'v3'`. `serverVersionSynthetic` distinguishes an
1176
- authoritative capability declaration (`false`) from the SDK's compatibility
1177
- fallback (`true`). Both fields survive submitted/deferred continuations and
1178
- durable restart recovery. `adcpVersion` remains the distinct, release-precision
1179
- value echoed by a seller response.
1180
-
1181
- The v2.5 `get_products` response adapter also accepts explicitly zoned legacy
1182
- forecast timestamps, including offset variants and single `$date`/`value`
1183
- wrappers. It converts them to UTC RFC 3339 without losing fractional precision;
1184
- ambiguous or unzoned values remain untouched, and the preserved seller wire
1185
- object is not mutated.
1176
+ In SDK 14, every `TaskResult.metadata` exposed the selected seller wire
1177
+ generation as `serverVersion: 'v2' | 'v3'`. `serverVersionSynthetic`
1178
+ distinguishes an authoritative capability declaration (`false`) from the SDK's
1179
+ compatibility fallback (`true`). Both fields survive submitted/deferred
1180
+ continuations and durable restart recovery. `adcpVersion` remains the distinct,
1181
+ release-precision value echoed by a seller response. SDK 16 only dispatches
1182
+ AdCP 3 and rejects stored AdCP 2 continuations before resuming them; see the
1183
+ [AdCP 2 retirement guide](./migration-drop-adcp-2.md).
1184
+
1185
+ The SDK 14 v2.5 `get_products` response adapter also accepted explicitly zoned
1186
+ legacy forecast timestamps, including offset variants and single `$date`/`value`
1187
+ wrappers. It converted them to UTC RFC 3339 without losing fractional precision;
1188
+ ambiguous or unzoned values remained untouched, and the preserved seller wire
1189
+ object was not mutated. That AdCP 2 adapter was removed in SDK 16.
1186
1190
 
1187
1191
  SDK 14 also adds semantic refinements to public object schemas. Behavior when
1188
1192
  composing a refined schema varies across supported Zod 4 releases: `.extend()`
@@ -16,18 +16,18 @@ 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-beta.8` |
20
- | npm integrity | registry-derived after publication; run `npm view @adcp/sdk@16.0.0-beta.8 dist.integrity` |
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` |
21
21
  | Node.js runtime | `^20.19.0 || >=22.12.0` |
22
22
  | Default AdCP wire release | `3.2.5` |
23
- | 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` |
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` |
24
24
  | Canonical migration notes | [SDK 15 OAuth](./migration-oauth-issuer-bindings.md), [issuer-binding and storage](./guides/OAUTH-ISSUER-BINDING.md); historical [13.x → 14](./migration-13-to-14.md) |
25
25
 
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-beta.8'
30
- npm view '@adcp/sdk@16.0.0-beta.8' dist.integrity
29
+ npm install --save-exact '@adcp/sdk@16.0.0'
30
+ npm view '@adcp/sdk@16.0.0' dist.integrity
31
31
  ```
32
32
 
33
33
  ### Required and optional peers