@adcp/sdk 6.7.0 → 6.9.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 (971) hide show
  1. package/ADCP_VERSION +1 -1
  2. package/bin/adcp.js +15 -3
  3. package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/inventory_list_targeting.yaml +5 -0
  4. package/compliance/cache/{3.0.5 → 3.0.6}/index.json +2 -2
  5. package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +5 -0
  6. package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-guaranteed/index.yaml +1 -1
  7. package/compliance/cache/{3.0.5 → 3.0.6}/universal/storyboard-schema.yaml +15 -0
  8. package/dist/lib/adapters/derived-account-store.d.ts +152 -0
  9. package/dist/lib/adapters/derived-account-store.d.ts.map +1 -0
  10. package/dist/lib/adapters/derived-account-store.js +135 -0
  11. package/dist/lib/adapters/derived-account-store.js.map +1 -0
  12. package/dist/lib/adapters/implicit-account-store.d.ts +3 -1
  13. package/dist/lib/adapters/implicit-account-store.d.ts.map +1 -1
  14. package/dist/lib/adapters/implicit-account-store.js +3 -1
  15. package/dist/lib/adapters/implicit-account-store.js.map +1 -1
  16. package/dist/lib/adapters/index.d.ts +1 -0
  17. package/dist/lib/adapters/index.d.ts.map +1 -1
  18. package/dist/lib/adapters/index.js +7 -1
  19. package/dist/lib/adapters/index.js.map +1 -1
  20. package/dist/lib/adapters/oauth-passthrough-resolver.d.ts +3 -1
  21. package/dist/lib/adapters/oauth-passthrough-resolver.d.ts.map +1 -1
  22. package/dist/lib/adapters/oauth-passthrough-resolver.js +3 -1
  23. package/dist/lib/adapters/oauth-passthrough-resolver.js.map +1 -1
  24. package/dist/lib/adapters/roster-account-store.d.ts +85 -24
  25. package/dist/lib/adapters/roster-account-store.d.ts.map +1 -1
  26. package/dist/lib/adapters/roster-account-store.js +52 -30
  27. package/dist/lib/adapters/roster-account-store.js.map +1 -1
  28. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  29. package/dist/lib/core/AgentClient.js +20 -0
  30. package/dist/lib/core/AgentClient.js.map +1 -1
  31. package/dist/lib/index.d.ts +3 -3
  32. package/dist/lib/index.d.ts.map +1 -1
  33. package/dist/lib/index.js +13 -8
  34. package/dist/lib/index.js.map +1 -1
  35. package/dist/lib/mock-server/creative-ad-server/seed-data.d.ts +81 -0
  36. package/dist/lib/mock-server/creative-ad-server/seed-data.d.ts.map +1 -0
  37. package/dist/lib/mock-server/creative-ad-server/seed-data.js +200 -0
  38. package/dist/lib/mock-server/creative-ad-server/seed-data.js.map +1 -0
  39. package/dist/lib/mock-server/creative-ad-server/server.d.ts +39 -0
  40. package/dist/lib/mock-server/creative-ad-server/server.d.ts.map +1 -0
  41. package/dist/lib/mock-server/creative-ad-server/server.js +618 -0
  42. package/dist/lib/mock-server/creative-ad-server/server.js.map +1 -0
  43. package/dist/lib/mock-server/creative-template/seed-data.d.ts +1 -1
  44. package/dist/lib/mock-server/creative-template/seed-data.d.ts.map +1 -1
  45. package/dist/lib/mock-server/creative-template/seed-data.js +53 -0
  46. package/dist/lib/mock-server/creative-template/seed-data.js.map +1 -1
  47. package/dist/lib/mock-server/creative-template/server.d.ts.map +1 -1
  48. package/dist/lib/mock-server/creative-template/server.js +12 -0
  49. package/dist/lib/mock-server/creative-template/server.js.map +1 -1
  50. package/dist/lib/mock-server/index.d.ts.map +1 -1
  51. package/dist/lib/mock-server/index.js +180 -24
  52. package/dist/lib/mock-server/index.js.map +1 -1
  53. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.d.ts +66 -0
  54. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.d.ts.map +1 -0
  55. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.js +193 -0
  56. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.js.map +1 -0
  57. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts +33 -0
  58. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts.map +1 -0
  59. package/dist/lib/mock-server/sales-non-guaranteed/server.js +782 -0
  60. package/dist/lib/mock-server/sales-non-guaranteed/server.js.map +1 -0
  61. package/dist/lib/mock-server/sponsored-intelligence/seed-data.d.ts +50 -0
  62. package/dist/lib/mock-server/sponsored-intelligence/seed-data.d.ts.map +1 -0
  63. package/dist/lib/mock-server/sponsored-intelligence/seed-data.js +133 -0
  64. package/dist/lib/mock-server/sponsored-intelligence/seed-data.js.map +1 -0
  65. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts +13 -0
  66. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts.map +1 -0
  67. package/dist/lib/mock-server/sponsored-intelligence/server.js +609 -0
  68. package/dist/lib/mock-server/sponsored-intelligence/server.js.map +1 -0
  69. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  70. package/dist/lib/protocols/mcp.js +1 -41
  71. package/dist/lib/protocols/mcp.js.map +1 -1
  72. package/dist/lib/schemas-data/3.0/a2ui/bound-value.json +1 -1
  73. package/dist/lib/schemas-data/3.0/a2ui/component.json +1 -1
  74. package/dist/lib/schemas-data/3.0/a2ui/si-catalog.json +25 -25
  75. package/dist/lib/schemas-data/3.0/a2ui/surface.json +2 -2
  76. package/dist/lib/schemas-data/3.0/a2ui/user-action.json +1 -1
  77. package/dist/lib/schemas-data/3.0/account/get-account-financials-request.json +5 -5
  78. package/dist/lib/schemas-data/3.0/account/get-account-financials-response.json +10 -10
  79. package/dist/lib/schemas-data/3.0/account/list-accounts-request.json +4 -4
  80. package/dist/lib/schemas-data/3.0/account/list-accounts-response.json +6 -6
  81. package/dist/lib/schemas-data/3.0/account/report-usage-request.json +5 -5
  82. package/dist/lib/schemas-data/3.0/account/report-usage-response.json +4 -4
  83. package/dist/lib/schemas-data/3.0/account/sync-accounts-request.json +9 -9
  84. package/dist/lib/schemas-data/3.0/account/sync-accounts-response.json +12 -12
  85. package/dist/lib/schemas-data/3.0/account/sync-governance-request.json +5 -5
  86. package/dist/lib/schemas-data/3.0/account/sync-governance-response.json +8 -8
  87. package/dist/lib/schemas-data/3.0/adagents.json +32 -32
  88. package/dist/lib/schemas-data/3.0/brand/acquire-rights-request.json +8 -8
  89. package/dist/lib/schemas-data/3.0/brand/acquire-rights-response.json +14 -14
  90. package/dist/lib/schemas-data/3.0/brand/creative-approval-request.json +4 -4
  91. package/dist/lib/schemas-data/3.0/brand/creative-approval-response.json +10 -10
  92. package/dist/lib/schemas-data/3.0/brand/get-brand-identity-request.json +3 -3
  93. package/dist/lib/schemas-data/3.0/brand/get-brand-identity-response.json +8 -8
  94. package/dist/lib/schemas-data/3.0/brand/get-rights-request.json +7 -7
  95. package/dist/lib/schemas-data/3.0/brand/get-rights-response.json +9 -9
  96. package/dist/lib/schemas-data/3.0/brand/revocation-notification.json +4 -4
  97. package/dist/lib/schemas-data/3.0/brand/rights-pricing-option.json +5 -5
  98. package/dist/lib/schemas-data/3.0/brand/rights-terms.json +3 -3
  99. package/dist/lib/schemas-data/3.0/brand/update-rights-request.json +4 -4
  100. package/dist/lib/schemas-data/3.0/brand/update-rights-response.json +9 -9
  101. package/dist/lib/schemas-data/3.0/brand.json +14 -14
  102. package/dist/lib/schemas-data/3.0/bundled/content-standards/calibrate-content-request.json +2 -2
  103. package/dist/lib/schemas-data/3.0/bundled/content-standards/calibrate-content-response.json +2 -2
  104. package/dist/lib/schemas-data/3.0/bundled/content-standards/create-content-standards-request.json +2 -2
  105. package/dist/lib/schemas-data/3.0/bundled/content-standards/create-content-standards-response.json +2 -2
  106. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-content-standards-request.json +2 -2
  107. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-content-standards-response.json +2 -2
  108. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-media-buy-artifacts-request.json +2 -2
  109. package/dist/lib/schemas-data/3.0/bundled/content-standards/get-media-buy-artifacts-response.json +2 -2
  110. package/dist/lib/schemas-data/3.0/bundled/content-standards/list-content-standards-request.json +2 -2
  111. package/dist/lib/schemas-data/3.0/bundled/content-standards/list-content-standards-response.json +2 -2
  112. package/dist/lib/schemas-data/3.0/bundled/content-standards/update-content-standards-request.json +2 -2
  113. package/dist/lib/schemas-data/3.0/bundled/content-standards/update-content-standards-response.json +2 -2
  114. package/dist/lib/schemas-data/3.0/bundled/content-standards/validate-content-delivery-request.json +2 -2
  115. package/dist/lib/schemas-data/3.0/bundled/content-standards/validate-content-delivery-response.json +2 -2
  116. package/dist/lib/schemas-data/3.0/bundled/core/tasks-get-request.json +2 -2
  117. package/dist/lib/schemas-data/3.0/bundled/core/tasks-get-response.json +2 -2
  118. package/dist/lib/schemas-data/3.0/bundled/core/tasks-list-request.json +2 -2
  119. package/dist/lib/schemas-data/3.0/bundled/core/tasks-list-response.json +2 -2
  120. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-delivery-request.json +2 -2
  121. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-delivery-response.json +2 -2
  122. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-features-request.json +2 -2
  123. package/dist/lib/schemas-data/3.0/bundled/creative/get-creative-features-response.json +2 -2
  124. package/dist/lib/schemas-data/3.0/bundled/creative/list-creative-formats-request.json +2 -2
  125. package/dist/lib/schemas-data/3.0/bundled/creative/list-creative-formats-response.json +2 -2
  126. package/dist/lib/schemas-data/3.0/bundled/creative/list-creatives-request.json +2 -2
  127. package/dist/lib/schemas-data/3.0/bundled/creative/list-creatives-response.json +2 -2
  128. package/dist/lib/schemas-data/3.0/bundled/creative/preview-creative-request.json +2 -2
  129. package/dist/lib/schemas-data/3.0/bundled/creative/preview-creative-response.json +2 -2
  130. package/dist/lib/schemas-data/3.0/bundled/creative/sync-creatives-request.json +2 -2
  131. package/dist/lib/schemas-data/3.0/bundled/creative/sync-creatives-response.json +2 -2
  132. package/dist/lib/schemas-data/3.0/bundled/media-buy/build-creative-request.json +2 -2
  133. package/dist/lib/schemas-data/3.0/bundled/media-buy/build-creative-response.json +2 -2
  134. package/dist/lib/schemas-data/3.0/bundled/media-buy/create-media-buy-request.json +2 -2
  135. package/dist/lib/schemas-data/3.0/bundled/media-buy/create-media-buy-response.json +2 -2
  136. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buy-delivery-request.json +2 -2
  137. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buy-delivery-response.json +2 -2
  138. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buys-request.json +2 -2
  139. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-media-buys-response.json +2 -2
  140. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-products-request.json +2 -2
  141. package/dist/lib/schemas-data/3.0/bundled/media-buy/get-products-response.json +2 -2
  142. package/dist/lib/schemas-data/3.0/bundled/media-buy/list-creative-formats-request.json +2 -2
  143. package/dist/lib/schemas-data/3.0/bundled/media-buy/list-creative-formats-response.json +2 -2
  144. package/dist/lib/schemas-data/3.0/bundled/media-buy/log-event-request.json +2 -2
  145. package/dist/lib/schemas-data/3.0/bundled/media-buy/log-event-response.json +2 -2
  146. package/dist/lib/schemas-data/3.0/bundled/media-buy/package-request.json +2 -2
  147. package/dist/lib/schemas-data/3.0/bundled/media-buy/provide-performance-feedback-request.json +2 -2
  148. package/dist/lib/schemas-data/3.0/bundled/media-buy/provide-performance-feedback-response.json +2 -2
  149. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-audiences-request.json +2 -2
  150. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-audiences-response.json +2 -2
  151. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-catalogs-request.json +2 -2
  152. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-catalogs-response.json +2 -2
  153. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-event-sources-request.json +2 -2
  154. package/dist/lib/schemas-data/3.0/bundled/media-buy/sync-event-sources-response.json +2 -2
  155. package/dist/lib/schemas-data/3.0/bundled/media-buy/update-media-buy-request.json +2 -2
  156. package/dist/lib/schemas-data/3.0/bundled/media-buy/update-media-buy-response.json +2 -2
  157. package/dist/lib/schemas-data/3.0/bundled/property/create-property-list-request.json +2 -2
  158. package/dist/lib/schemas-data/3.0/bundled/property/create-property-list-response.json +2 -2
  159. package/dist/lib/schemas-data/3.0/bundled/property/delete-property-list-request.json +2 -2
  160. package/dist/lib/schemas-data/3.0/bundled/property/delete-property-list-response.json +2 -2
  161. package/dist/lib/schemas-data/3.0/bundled/property/get-property-list-request.json +2 -2
  162. package/dist/lib/schemas-data/3.0/bundled/property/get-property-list-response.json +2 -2
  163. package/dist/lib/schemas-data/3.0/bundled/property/list-property-lists-request.json +2 -2
  164. package/dist/lib/schemas-data/3.0/bundled/property/list-property-lists-response.json +2 -2
  165. package/dist/lib/schemas-data/3.0/bundled/property/update-property-list-request.json +2 -2
  166. package/dist/lib/schemas-data/3.0/bundled/property/update-property-list-response.json +2 -2
  167. package/dist/lib/schemas-data/3.0/bundled/property/validate-property-delivery-request.json +2 -2
  168. package/dist/lib/schemas-data/3.0/bundled/property/validate-property-delivery-response.json +2 -2
  169. package/dist/lib/schemas-data/3.0/bundled/protocol/get-adcp-capabilities-request.json +2 -2
  170. package/dist/lib/schemas-data/3.0/bundled/protocol/get-adcp-capabilities-response.json +2 -2
  171. package/dist/lib/schemas-data/3.0/bundled/signals/activate-signal-request.json +2 -2
  172. package/dist/lib/schemas-data/3.0/bundled/signals/activate-signal-response.json +2 -2
  173. package/dist/lib/schemas-data/3.0/bundled/signals/get-signals-request.json +2 -2
  174. package/dist/lib/schemas-data/3.0/bundled/signals/get-signals-response.json +2 -2
  175. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-get-offering-request.json +2 -2
  176. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-get-offering-response.json +2 -2
  177. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-initiate-session-request.json +2 -2
  178. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-initiate-session-response.json +2 -2
  179. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-send-message-request.json +2 -2
  180. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-send-message-response.json +2 -2
  181. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-terminate-session-request.json +2 -2
  182. package/dist/lib/schemas-data/3.0/bundled/sponsored-intelligence/si-terminate-session-response.json +2 -2
  183. package/dist/lib/schemas-data/3.0/collection/base-collection-source.json +3 -3
  184. package/dist/lib/schemas-data/3.0/collection/collection-list-changed-webhook.json +2 -2
  185. package/dist/lib/schemas-data/3.0/collection/collection-list-filters.json +7 -7
  186. package/dist/lib/schemas-data/3.0/collection/collection-list.json +5 -5
  187. package/dist/lib/schemas-data/3.0/collection/create-collection-list-request.json +7 -7
  188. package/dist/lib/schemas-data/3.0/collection/create-collection-list-response.json +4 -4
  189. package/dist/lib/schemas-data/3.0/collection/delete-collection-list-request.json +4 -4
  190. package/dist/lib/schemas-data/3.0/collection/delete-collection-list-response.json +3 -3
  191. package/dist/lib/schemas-data/3.0/collection/get-collection-list-request.json +4 -4
  192. package/dist/lib/schemas-data/3.0/collection/get-collection-list-response.json +10 -10
  193. package/dist/lib/schemas-data/3.0/collection/list-collection-lists-request.json +5 -5
  194. package/dist/lib/schemas-data/3.0/collection/list-collection-lists-response.json +5 -5
  195. package/dist/lib/schemas-data/3.0/collection/update-collection-list-request.json +7 -7
  196. package/dist/lib/schemas-data/3.0/collection/update-collection-list-response.json +4 -4
  197. package/dist/lib/schemas-data/3.0/content-standards/artifact-webhook-payload.json +3 -3
  198. package/dist/lib/schemas-data/3.0/content-standards/artifact.json +7 -7
  199. package/dist/lib/schemas-data/3.0/content-standards/calibrate-content-request.json +4 -4
  200. package/dist/lib/schemas-data/3.0/content-standards/calibrate-content-response.json +8 -8
  201. package/dist/lib/schemas-data/3.0/content-standards/content-standards.json +7 -7
  202. package/dist/lib/schemas-data/3.0/content-standards/create-content-standards-request.json +7 -7
  203. package/dist/lib/schemas-data/3.0/content-standards/create-content-standards-response.json +6 -6
  204. package/dist/lib/schemas-data/3.0/content-standards/get-content-standards-request.json +3 -3
  205. package/dist/lib/schemas-data/3.0/content-standards/get-content-standards-response.json +7 -7
  206. package/dist/lib/schemas-data/3.0/content-standards/get-media-buy-artifacts-request.json +4 -4
  207. package/dist/lib/schemas-data/3.0/content-standards/get-media-buy-artifacts-response.json +8 -8
  208. package/dist/lib/schemas-data/3.0/content-standards/list-content-standards-request.json +5 -5
  209. package/dist/lib/schemas-data/3.0/content-standards/list-content-standards-response.json +8 -8
  210. package/dist/lib/schemas-data/3.0/content-standards/update-content-standards-request.json +7 -7
  211. package/dist/lib/schemas-data/3.0/content-standards/update-content-standards-response.json +6 -6
  212. package/dist/lib/schemas-data/3.0/content-standards/validate-content-delivery-request.json +4 -4
  213. package/dist/lib/schemas-data/3.0/content-standards/validate-content-delivery-response.json +8 -8
  214. package/dist/lib/schemas-data/3.0/core/account-ref.json +2 -2
  215. package/dist/lib/schemas-data/3.0/core/account.json +9 -9
  216. package/dist/lib/schemas-data/3.0/core/activation-key.json +1 -1
  217. package/dist/lib/schemas-data/3.0/core/ad-inventory-config.json +1 -1
  218. package/dist/lib/schemas-data/3.0/core/agent-encryption-key.json +1 -1
  219. package/dist/lib/schemas-data/3.0/core/agent-signing-key.json +1 -1
  220. package/dist/lib/schemas-data/3.0/core/app-item.json +4 -4
  221. package/dist/lib/schemas-data/3.0/core/assets/asset-union.json +15 -15
  222. package/dist/lib/schemas-data/3.0/core/assets/audio-asset.json +3 -3
  223. package/dist/lib/schemas-data/3.0/core/assets/brief-asset.json +2 -2
  224. package/dist/lib/schemas-data/3.0/core/assets/catalog-asset.json +2 -2
  225. package/dist/lib/schemas-data/3.0/core/assets/css-asset.json +2 -2
  226. package/dist/lib/schemas-data/3.0/core/assets/daast-asset.json +4 -4
  227. package/dist/lib/schemas-data/3.0/core/assets/html-asset.json +2 -2
  228. package/dist/lib/schemas-data/3.0/core/assets/image-asset.json +2 -2
  229. package/dist/lib/schemas-data/3.0/core/assets/javascript-asset.json +3 -3
  230. package/dist/lib/schemas-data/3.0/core/assets/markdown-asset.json +2 -2
  231. package/dist/lib/schemas-data/3.0/core/assets/text-asset.json +2 -2
  232. package/dist/lib/schemas-data/3.0/core/assets/url-asset.json +3 -3
  233. package/dist/lib/schemas-data/3.0/core/assets/vast-asset.json +4 -4
  234. package/dist/lib/schemas-data/3.0/core/assets/video-asset.json +7 -7
  235. package/dist/lib/schemas-data/3.0/core/assets/webhook-asset.json +7 -7
  236. package/dist/lib/schemas-data/3.0/core/async-response-data.json +25 -25
  237. package/dist/lib/schemas-data/3.0/core/attribution-window.json +4 -4
  238. package/dist/lib/schemas-data/3.0/core/audience-member.json +3 -3
  239. package/dist/lib/schemas-data/3.0/core/audience-selector.json +4 -4
  240. package/dist/lib/schemas-data/3.0/core/brand-id.json +1 -1
  241. package/dist/lib/schemas-data/3.0/core/brand-ref.json +2 -2
  242. package/dist/lib/schemas-data/3.0/core/business-entity.json +2 -2
  243. package/dist/lib/schemas-data/3.0/core/cancellation-policy.json +2 -2
  244. package/dist/lib/schemas-data/3.0/core/catalog-field-mapping.json +2 -2
  245. package/dist/lib/schemas-data/3.0/core/catalog.json +7 -7
  246. package/dist/lib/schemas-data/3.0/core/catchment.json +5 -5
  247. package/dist/lib/schemas-data/3.0/core/collection-distribution.json +2 -2
  248. package/dist/lib/schemas-data/3.0/core/collection-list-ref.json +1 -1
  249. package/dist/lib/schemas-data/3.0/core/collection-selector.json +1 -1
  250. package/dist/lib/schemas-data/3.0/core/collection.json +13 -13
  251. package/dist/lib/schemas-data/3.0/core/content-rating.json +2 -2
  252. package/dist/lib/schemas-data/3.0/core/context.json +1 -1
  253. package/dist/lib/schemas-data/3.0/core/creative-asset.json +6 -6
  254. package/dist/lib/schemas-data/3.0/core/creative-assignment.json +1 -1
  255. package/dist/lib/schemas-data/3.0/core/creative-brief.json +4 -4
  256. package/dist/lib/schemas-data/3.0/core/creative-consumption.json +1 -1
  257. package/dist/lib/schemas-data/3.0/core/creative-filters.json +4 -4
  258. package/dist/lib/schemas-data/3.0/core/creative-item.json +1 -1
  259. package/dist/lib/schemas-data/3.0/core/creative-manifest.json +7 -7
  260. package/dist/lib/schemas-data/3.0/core/creative-policy.json +3 -3
  261. package/dist/lib/schemas-data/3.0/core/creative-variable.json +1 -1
  262. package/dist/lib/schemas-data/3.0/core/creative-variant.json +5 -5
  263. package/dist/lib/schemas-data/3.0/core/data-provider-signal-selector.json +1 -1
  264. package/dist/lib/schemas-data/3.0/core/date-range.json +1 -1
  265. package/dist/lib/schemas-data/3.0/core/datetime-range.json +1 -1
  266. package/dist/lib/schemas-data/3.0/core/daypart-target.json +2 -2
  267. package/dist/lib/schemas-data/3.0/core/deadline-policy.json +1 -1
  268. package/dist/lib/schemas-data/3.0/core/delivery-forecast.json +7 -7
  269. package/dist/lib/schemas-data/3.0/core/delivery-metrics.json +5 -5
  270. package/dist/lib/schemas-data/3.0/core/deployment.json +3 -3
  271. package/dist/lib/schemas-data/3.0/core/destination-item.json +4 -4
  272. package/dist/lib/schemas-data/3.0/core/destination.json +1 -1
  273. package/dist/lib/schemas-data/3.0/core/diagnostic-issue.json +1 -1
  274. package/dist/lib/schemas-data/3.0/core/duration.json +1 -1
  275. package/dist/lib/schemas-data/3.0/core/education-item.json +4 -4
  276. package/dist/lib/schemas-data/3.0/core/error.json +1 -1
  277. package/dist/lib/schemas-data/3.0/core/event-custom-data.json +2 -2
  278. package/dist/lib/schemas-data/3.0/core/event-source-health.json +3 -3
  279. package/dist/lib/schemas-data/3.0/core/event.json +6 -6
  280. package/dist/lib/schemas-data/3.0/core/ext.json +1 -1
  281. package/dist/lib/schemas-data/3.0/core/feature-requirement.json +1 -1
  282. package/dist/lib/schemas-data/3.0/core/flight-item.json +4 -4
  283. package/dist/lib/schemas-data/3.0/core/forecast-point.json +18 -18
  284. package/dist/lib/schemas-data/3.0/core/forecast-range.json +1 -1
  285. package/dist/lib/schemas-data/3.0/core/format-id.json +1 -1
  286. package/dist/lib/schemas-data/3.0/core/format.json +42 -42
  287. package/dist/lib/schemas-data/3.0/core/frequency-cap.json +4 -4
  288. package/dist/lib/schemas-data/3.0/core/generation-credential.json +3 -3
  289. package/dist/lib/schemas-data/3.0/core/geo-breakdown-support.json +3 -3
  290. package/dist/lib/schemas-data/3.0/core/hotel-item.json +4 -4
  291. package/dist/lib/schemas-data/3.0/core/identifier.json +2 -2
  292. package/dist/lib/schemas-data/3.0/core/industry-identifier.json +2 -2
  293. package/dist/lib/schemas-data/3.0/core/insertion-order.json +1 -1
  294. package/dist/lib/schemas-data/3.0/core/installment-deadlines.json +2 -2
  295. package/dist/lib/schemas-data/3.0/core/installment.json +9 -9
  296. package/dist/lib/schemas-data/3.0/core/job-item.json +3 -3
  297. package/dist/lib/schemas-data/3.0/core/limited-series.json +1 -1
  298. package/dist/lib/schemas-data/3.0/core/material-deadline.json +1 -1
  299. package/dist/lib/schemas-data/3.0/core/mcp-webhook-payload.json +5 -5
  300. package/dist/lib/schemas-data/3.0/core/measurement-readiness.json +5 -5
  301. package/dist/lib/schemas-data/3.0/core/measurement-terms.json +3 -3
  302. package/dist/lib/schemas-data/3.0/core/measurement-window.json +1 -1
  303. package/dist/lib/schemas-data/3.0/core/media-buy-features.json +1 -1
  304. package/dist/lib/schemas-data/3.0/core/media-buy.json +7 -7
  305. package/dist/lib/schemas-data/3.0/core/offering-asset-group.json +15 -15
  306. package/dist/lib/schemas-data/3.0/core/offering.json +5 -5
  307. package/dist/lib/schemas-data/3.0/core/optimization-goal.json +6 -6
  308. package/dist/lib/schemas-data/3.0/core/outcome-measurement.json +2 -2
  309. package/dist/lib/schemas-data/3.0/core/overlay.json +1 -1
  310. package/dist/lib/schemas-data/3.0/core/package.json +14 -14
  311. package/dist/lib/schemas-data/3.0/core/pagination-request.json +1 -1
  312. package/dist/lib/schemas-data/3.0/core/pagination-response.json +1 -1
  313. package/dist/lib/schemas-data/3.0/core/performance-feedback.json +3 -3
  314. package/dist/lib/schemas-data/3.0/core/performance-standard.json +4 -4
  315. package/dist/lib/schemas-data/3.0/core/placement-definition.json +5 -5
  316. package/dist/lib/schemas-data/3.0/core/placement.json +2 -2
  317. package/dist/lib/schemas-data/3.0/core/planned-delivery.json +5 -5
  318. package/dist/lib/schemas-data/3.0/core/price.json +1 -1
  319. package/dist/lib/schemas-data/3.0/core/pricing-option.json +10 -10
  320. package/dist/lib/schemas-data/3.0/core/product-allocation.json +4 -4
  321. package/dist/lib/schemas-data/3.0/core/product-filters.json +16 -16
  322. package/dist/lib/schemas-data/3.0/core/product.json +28 -28
  323. package/dist/lib/schemas-data/3.0/core/property-id.json +1 -1
  324. package/dist/lib/schemas-data/3.0/core/property-list-ref.json +1 -1
  325. package/dist/lib/schemas-data/3.0/core/property-tag.json +1 -1
  326. package/dist/lib/schemas-data/3.0/core/property.json +6 -6
  327. package/dist/lib/schemas-data/3.0/core/proposal.json +6 -6
  328. package/dist/lib/schemas-data/3.0/core/protocol-envelope.json +3 -3
  329. package/dist/lib/schemas-data/3.0/core/provenance.json +6 -6
  330. package/dist/lib/schemas-data/3.0/core/publisher-property-selector.json +3 -3
  331. package/dist/lib/schemas-data/3.0/core/push-notification-config.json +2 -2
  332. package/dist/lib/schemas-data/3.0/core/real-estate-item.json +4 -4
  333. package/dist/lib/schemas-data/3.0/core/reference-asset.json +1 -1
  334. package/dist/lib/schemas-data/3.0/core/reporting-capabilities.json +5 -5
  335. package/dist/lib/schemas-data/3.0/core/reporting-webhook.json +3 -3
  336. package/dist/lib/schemas-data/3.0/core/requirements/asset-requirements.json +13 -13
  337. package/dist/lib/schemas-data/3.0/core/requirements/audio-asset-requirements.json +1 -1
  338. package/dist/lib/schemas-data/3.0/core/requirements/catalog-field-binding.json +4 -4
  339. package/dist/lib/schemas-data/3.0/core/requirements/catalog-requirements.json +5 -5
  340. package/dist/lib/schemas-data/3.0/core/requirements/css-asset-requirements.json +1 -1
  341. package/dist/lib/schemas-data/3.0/core/requirements/daast-asset-requirements.json +1 -1
  342. package/dist/lib/schemas-data/3.0/core/requirements/html-asset-requirements.json +1 -1
  343. package/dist/lib/schemas-data/3.0/core/requirements/image-asset-requirements.json +2 -2
  344. package/dist/lib/schemas-data/3.0/core/requirements/javascript-asset-requirements.json +1 -1
  345. package/dist/lib/schemas-data/3.0/core/requirements/markdown-asset-requirements.json +1 -1
  346. package/dist/lib/schemas-data/3.0/core/requirements/offering-asset-constraint.json +4 -4
  347. package/dist/lib/schemas-data/3.0/core/requirements/text-asset-requirements.json +1 -1
  348. package/dist/lib/schemas-data/3.0/core/requirements/url-asset-requirements.json +1 -1
  349. package/dist/lib/schemas-data/3.0/core/requirements/vast-asset-requirements.json +1 -1
  350. package/dist/lib/schemas-data/3.0/core/requirements/video-asset-requirements.json +6 -6
  351. package/dist/lib/schemas-data/3.0/core/requirements/webhook-asset-requirements.json +1 -1
  352. package/dist/lib/schemas-data/3.0/core/response.json +1 -1
  353. package/dist/lib/schemas-data/3.0/core/rights-constraint.json +4 -4
  354. package/dist/lib/schemas-data/3.0/core/seller-agent-ref.json +1 -1
  355. package/dist/lib/schemas-data/3.0/core/signal-definition.json +3 -3
  356. package/dist/lib/schemas-data/3.0/core/signal-filters.json +2 -2
  357. package/dist/lib/schemas-data/3.0/core/signal-id.json +1 -1
  358. package/dist/lib/schemas-data/3.0/core/signal-pricing-option.json +2 -2
  359. package/dist/lib/schemas-data/3.0/core/signal-pricing.json +6 -6
  360. package/dist/lib/schemas-data/3.0/core/signal-targeting.json +4 -4
  361. package/dist/lib/schemas-data/3.0/core/special.json +2 -2
  362. package/dist/lib/schemas-data/3.0/core/start-timing.json +1 -1
  363. package/dist/lib/schemas-data/3.0/core/store-item.json +3 -3
  364. package/dist/lib/schemas-data/3.0/core/talent.json +2 -2
  365. package/dist/lib/schemas-data/3.0/core/targeting.json +20 -20
  366. package/dist/lib/schemas-data/3.0/core/tasks-get-request.json +3 -3
  367. package/dist/lib/schemas-data/3.0/core/tasks-get-response.json +7 -7
  368. package/dist/lib/schemas-data/3.0/core/tasks-list-request.json +11 -11
  369. package/dist/lib/schemas-data/3.0/core/tasks-list-response.json +6 -6
  370. package/dist/lib/schemas-data/3.0/core/user-match.json +3 -3
  371. package/dist/lib/schemas-data/3.0/core/vehicle-item.json +4 -4
  372. package/dist/lib/schemas-data/3.0/core/vendor-pricing-option.json +2 -2
  373. package/dist/lib/schemas-data/3.0/core/x-entity-types.json +1 -1
  374. package/dist/lib/schemas-data/3.0/creative/asset-types/index.json +5 -5
  375. package/dist/lib/schemas-data/3.0/creative/creative-feature-result.json +2 -2
  376. package/dist/lib/schemas-data/3.0/creative/get-creative-delivery-request.json +5 -5
  377. package/dist/lib/schemas-data/3.0/creative/get-creative-delivery-response.json +7 -7
  378. package/dist/lib/schemas-data/3.0/creative/get-creative-features-request.json +5 -5
  379. package/dist/lib/schemas-data/3.0/creative/get-creative-features-response.json +8 -8
  380. package/dist/lib/schemas-data/3.0/creative/list-creative-formats-request.json +11 -11
  381. package/dist/lib/schemas-data/3.0/creative/list-creative-formats-response.json +7 -7
  382. package/dist/lib/schemas-data/3.0/creative/list-creatives-request.json +8 -8
  383. package/dist/lib/schemas-data/3.0/creative/list-creatives-response.json +14 -14
  384. package/dist/lib/schemas-data/3.0/creative/preview-creative-request.json +11 -11
  385. package/dist/lib/schemas-data/3.0/creative/preview-creative-response.json +12 -12
  386. package/dist/lib/schemas-data/3.0/creative/preview-render.json +1 -1
  387. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-input-required.json +3 -3
  388. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-submitted.json +3 -3
  389. package/dist/lib/schemas-data/3.0/creative/sync-creatives-async-response-working.json +3 -3
  390. package/dist/lib/schemas-data/3.0/creative/sync-creatives-request.json +7 -7
  391. package/dist/lib/schemas-data/3.0/creative/sync-creatives-response.json +13 -13
  392. package/dist/lib/schemas-data/3.0/enums/account-scope.json +1 -1
  393. package/dist/lib/schemas-data/3.0/enums/account-status.json +1 -1
  394. package/dist/lib/schemas-data/3.0/enums/action-source.json +1 -1
  395. package/dist/lib/schemas-data/3.0/enums/adcp-protocol.json +1 -1
  396. package/dist/lib/schemas-data/3.0/enums/adjustment-kind.json +1 -1
  397. package/dist/lib/schemas-data/3.0/enums/advertiser-industry.json +1 -1
  398. package/dist/lib/schemas-data/3.0/enums/age-verification-method.json +1 -1
  399. package/dist/lib/schemas-data/3.0/enums/assessment-status.json +1 -1
  400. package/dist/lib/schemas-data/3.0/enums/asset-content-type.json +1 -1
  401. package/dist/lib/schemas-data/3.0/enums/attribution-model.json +1 -1
  402. package/dist/lib/schemas-data/3.0/enums/audience-source.json +1 -1
  403. package/dist/lib/schemas-data/3.0/enums/audience-status.json +1 -1
  404. package/dist/lib/schemas-data/3.0/enums/audio-channel-layout.json +1 -1
  405. package/dist/lib/schemas-data/3.0/enums/auth-scheme.json +1 -1
  406. package/dist/lib/schemas-data/3.0/enums/available-metric.json +1 -1
  407. package/dist/lib/schemas-data/3.0/enums/billing-party.json +1 -1
  408. package/dist/lib/schemas-data/3.0/enums/binary-verdict.json +1 -1
  409. package/dist/lib/schemas-data/3.0/enums/brand-agent-type.json +1 -1
  410. package/dist/lib/schemas-data/3.0/enums/canceled-by.json +1 -1
  411. package/dist/lib/schemas-data/3.0/enums/catalog-action.json +1 -1
  412. package/dist/lib/schemas-data/3.0/enums/catalog-item-status.json +1 -1
  413. package/dist/lib/schemas-data/3.0/enums/catalog-type.json +1 -1
  414. package/dist/lib/schemas-data/3.0/enums/channels.json +1 -1
  415. package/dist/lib/schemas-data/3.0/enums/cloud-storage-protocol.json +1 -1
  416. package/dist/lib/schemas-data/3.0/enums/co-branding-requirement.json +1 -1
  417. package/dist/lib/schemas-data/3.0/enums/collection-cadence.json +1 -1
  418. package/dist/lib/schemas-data/3.0/enums/collection-kind.json +1 -1
  419. package/dist/lib/schemas-data/3.0/enums/collection-relationship.json +1 -1
  420. package/dist/lib/schemas-data/3.0/enums/collection-status.json +1 -1
  421. package/dist/lib/schemas-data/3.0/enums/consent-basis.json +1 -1
  422. package/dist/lib/schemas-data/3.0/enums/content-id-type.json +1 -1
  423. package/dist/lib/schemas-data/3.0/enums/content-rating-system.json +1 -1
  424. package/dist/lib/schemas-data/3.0/enums/creative-action.json +1 -1
  425. package/dist/lib/schemas-data/3.0/enums/creative-agent-capability.json +1 -1
  426. package/dist/lib/schemas-data/3.0/enums/creative-approval-status.json +1 -1
  427. package/dist/lib/schemas-data/3.0/enums/creative-identifier-type.json +1 -1
  428. package/dist/lib/schemas-data/3.0/enums/creative-quality.json +1 -1
  429. package/dist/lib/schemas-data/3.0/enums/creative-sort-field.json +1 -1
  430. package/dist/lib/schemas-data/3.0/enums/creative-status.json +1 -1
  431. package/dist/lib/schemas-data/3.0/enums/daast-tracking-event.json +1 -1
  432. package/dist/lib/schemas-data/3.0/enums/daast-version.json +1 -1
  433. package/dist/lib/schemas-data/3.0/enums/day-of-week.json +1 -1
  434. package/dist/lib/schemas-data/3.0/enums/delegation-authority.json +1 -1
  435. package/dist/lib/schemas-data/3.0/enums/delivery-type.json +1 -1
  436. package/dist/lib/schemas-data/3.0/enums/demographic-system.json +1 -1
  437. package/dist/lib/schemas-data/3.0/enums/derivative-type.json +1 -1
  438. package/dist/lib/schemas-data/3.0/enums/device-platform.json +1 -1
  439. package/dist/lib/schemas-data/3.0/enums/device-type.json +1 -1
  440. package/dist/lib/schemas-data/3.0/enums/digital-source-type.json +1 -1
  441. package/dist/lib/schemas-data/3.0/enums/dimension-unit.json +1 -1
  442. package/dist/lib/schemas-data/3.0/enums/disclosure-persistence.json +1 -1
  443. package/dist/lib/schemas-data/3.0/enums/disclosure-position.json +1 -1
  444. package/dist/lib/schemas-data/3.0/enums/distance-unit.json +1 -1
  445. package/dist/lib/schemas-data/3.0/enums/distribution-identifier-type.json +1 -1
  446. package/dist/lib/schemas-data/3.0/enums/error-code.json +3 -3
  447. package/dist/lib/schemas-data/3.0/enums/escalation-severity.json +1 -1
  448. package/dist/lib/schemas-data/3.0/enums/event-type.json +1 -1
  449. package/dist/lib/schemas-data/3.0/enums/exclusivity.json +1 -1
  450. package/dist/lib/schemas-data/3.0/enums/feature-check-status.json +1 -1
  451. package/dist/lib/schemas-data/3.0/enums/feed-format.json +1 -1
  452. package/dist/lib/schemas-data/3.0/enums/feedback-source.json +1 -1
  453. package/dist/lib/schemas-data/3.0/enums/forecast-method.json +1 -1
  454. package/dist/lib/schemas-data/3.0/enums/forecast-range-unit.json +1 -1
  455. package/dist/lib/schemas-data/3.0/enums/forecastable-metric.json +1 -1
  456. package/dist/lib/schemas-data/3.0/enums/format-id-parameter.json +1 -1
  457. package/dist/lib/schemas-data/3.0/enums/frame-rate-type.json +1 -1
  458. package/dist/lib/schemas-data/3.0/enums/frequency-cap-scope.json +1 -1
  459. package/dist/lib/schemas-data/3.0/enums/genre-taxonomy.json +1 -1
  460. package/dist/lib/schemas-data/3.0/enums/geo-level.json +1 -1
  461. package/dist/lib/schemas-data/3.0/enums/gop-type.json +1 -1
  462. package/dist/lib/schemas-data/3.0/enums/governance-decision.json +1 -1
  463. package/dist/lib/schemas-data/3.0/enums/governance-domain.json +1 -1
  464. package/dist/lib/schemas-data/3.0/enums/governance-mode.json +1 -1
  465. package/dist/lib/schemas-data/3.0/enums/governance-phase.json +1 -1
  466. package/dist/lib/schemas-data/3.0/enums/history-entry-type.json +1 -1
  467. package/dist/lib/schemas-data/3.0/enums/http-method.json +1 -1
  468. package/dist/lib/schemas-data/3.0/enums/identifier-types.json +1 -1
  469. package/dist/lib/schemas-data/3.0/enums/installment-status.json +1 -1
  470. package/dist/lib/schemas-data/3.0/enums/javascript-module-type.json +1 -1
  471. package/dist/lib/schemas-data/3.0/enums/landing-page-requirement.json +1 -1
  472. package/dist/lib/schemas-data/3.0/enums/makegood-remedy.json +1 -1
  473. package/dist/lib/schemas-data/3.0/enums/markdown-flavor.json +1 -1
  474. package/dist/lib/schemas-data/3.0/enums/match-id-type.json +1 -1
  475. package/dist/lib/schemas-data/3.0/enums/match-type.json +1 -1
  476. package/dist/lib/schemas-data/3.0/enums/media-buy-status.json +1 -1
  477. package/dist/lib/schemas-data/3.0/enums/media-buy-valid-action.json +1 -1
  478. package/dist/lib/schemas-data/3.0/enums/metric-type.json +1 -1
  479. package/dist/lib/schemas-data/3.0/enums/metro-system.json +1 -1
  480. package/dist/lib/schemas-data/3.0/enums/moov-atom-position.json +1 -1
  481. package/dist/lib/schemas-data/3.0/enums/notification-type.json +1 -1
  482. package/dist/lib/schemas-data/3.0/enums/outcome-type.json +1 -1
  483. package/dist/lib/schemas-data/3.0/enums/pacing.json +1 -1
  484. package/dist/lib/schemas-data/3.0/enums/payment-terms.json +1 -1
  485. package/dist/lib/schemas-data/3.0/enums/performance-standard-metric.json +1 -1
  486. package/dist/lib/schemas-data/3.0/enums/policy-category.json +1 -1
  487. package/dist/lib/schemas-data/3.0/enums/policy-enforcement.json +1 -1
  488. package/dist/lib/schemas-data/3.0/enums/postal-system.json +1 -1
  489. package/dist/lib/schemas-data/3.0/enums/preview-output-format.json +1 -1
  490. package/dist/lib/schemas-data/3.0/enums/pricing-model.json +1 -1
  491. package/dist/lib/schemas-data/3.0/enums/production-quality.json +1 -1
  492. package/dist/lib/schemas-data/3.0/enums/property-type.json +1 -1
  493. package/dist/lib/schemas-data/3.0/enums/proposal-status.json +1 -1
  494. package/dist/lib/schemas-data/3.0/enums/publisher-identifier-types.json +1 -1
  495. package/dist/lib/schemas-data/3.0/enums/purchase-type.json +1 -1
  496. package/dist/lib/schemas-data/3.0/enums/reach-unit.json +1 -1
  497. package/dist/lib/schemas-data/3.0/enums/reporting-frequency.json +1 -1
  498. package/dist/lib/schemas-data/3.0/enums/response-type.json +1 -1
  499. package/dist/lib/schemas-data/3.0/enums/restricted-attribute.json +1 -1
  500. package/dist/lib/schemas-data/3.0/enums/right-type.json +1 -1
  501. package/dist/lib/schemas-data/3.0/enums/right-use.json +1 -1
  502. package/dist/lib/schemas-data/3.0/enums/rights-billing-period.json +1 -1
  503. package/dist/lib/schemas-data/3.0/enums/scan-type.json +1 -1
  504. package/dist/lib/schemas-data/3.0/enums/si-session-status.json +1 -1
  505. package/dist/lib/schemas-data/3.0/enums/signal-catalog-type.json +1 -1
  506. package/dist/lib/schemas-data/3.0/enums/signal-source.json +1 -1
  507. package/dist/lib/schemas-data/3.0/enums/signal-value-type.json +1 -1
  508. package/dist/lib/schemas-data/3.0/enums/snapshot-unavailable-reason.json +1 -1
  509. package/dist/lib/schemas-data/3.0/enums/sort-direction.json +1 -1
  510. package/dist/lib/schemas-data/3.0/enums/sort-metric.json +1 -1
  511. package/dist/lib/schemas-data/3.0/enums/special-category.json +1 -1
  512. package/dist/lib/schemas-data/3.0/enums/specialism.json +1 -1
  513. package/dist/lib/schemas-data/3.0/enums/talent-role.json +1 -1
  514. package/dist/lib/schemas-data/3.0/enums/task-status.json +1 -1
  515. package/dist/lib/schemas-data/3.0/enums/task-type.json +1 -1
  516. package/dist/lib/schemas-data/3.0/enums/transport-mode.json +1 -1
  517. package/dist/lib/schemas-data/3.0/enums/travel-time-unit.json +1 -1
  518. package/dist/lib/schemas-data/3.0/enums/uid-type.json +1 -1
  519. package/dist/lib/schemas-data/3.0/enums/universal-macro.json +1 -1
  520. package/dist/lib/schemas-data/3.0/enums/update-frequency.json +1 -1
  521. package/dist/lib/schemas-data/3.0/enums/url-asset-type.json +1 -1
  522. package/dist/lib/schemas-data/3.0/enums/validation-mode.json +1 -1
  523. package/dist/lib/schemas-data/3.0/enums/vast-tracking-event.json +1 -1
  524. package/dist/lib/schemas-data/3.0/enums/vast-version.json +1 -1
  525. package/dist/lib/schemas-data/3.0/enums/viewability-standard.json +1 -1
  526. package/dist/lib/schemas-data/3.0/enums/wcag-level.json +1 -1
  527. package/dist/lib/schemas-data/3.0/enums/webhook-response-type.json +1 -1
  528. package/dist/lib/schemas-data/3.0/enums/webhook-security-method.json +1 -1
  529. package/dist/lib/schemas-data/3.0/error-details/account-setup-required.json +1 -1
  530. package/dist/lib/schemas-data/3.0/error-details/audience-too-small.json +1 -1
  531. package/dist/lib/schemas-data/3.0/error-details/budget-too-low.json +1 -1
  532. package/dist/lib/schemas-data/3.0/error-details/conflict.json +1 -1
  533. package/dist/lib/schemas-data/3.0/error-details/creative-rejected.json +1 -1
  534. package/dist/lib/schemas-data/3.0/error-details/policy-violation.json +1 -1
  535. package/dist/lib/schemas-data/3.0/error-details/rate-limited.json +1 -1
  536. package/dist/lib/schemas-data/3.0/error-details/vendor-error-codes.json +1 -1
  537. package/dist/lib/schemas-data/3.0/extensions/extension-meta.json +1 -1
  538. package/dist/lib/schemas-data/3.0/extensions/index.json +2 -2
  539. package/dist/lib/schemas-data/3.0/governance/attribute-definition.json +1 -1
  540. package/dist/lib/schemas-data/3.0/governance/audience-constraints.json +3 -3
  541. package/dist/lib/schemas-data/3.0/governance/check-governance-request.json +7 -7
  542. package/dist/lib/schemas-data/3.0/governance/check-governance-response.json +6 -6
  543. package/dist/lib/schemas-data/3.0/governance/get-plan-audit-logs-request.json +4 -4
  544. package/dist/lib/schemas-data/3.0/governance/get-plan-audit-logs-response.json +9 -9
  545. package/dist/lib/schemas-data/3.0/governance/policy-category-definition.json +2 -2
  546. package/dist/lib/schemas-data/3.0/governance/policy-entry.json +6 -6
  547. package/dist/lib/schemas-data/3.0/governance/policy-ref.json +1 -1
  548. package/dist/lib/schemas-data/3.0/governance/report-plan-outcome-request.json +6 -6
  549. package/dist/lib/schemas-data/3.0/governance/report-plan-outcome-response.json +4 -4
  550. package/dist/lib/schemas-data/3.0/governance/sync-plans-request.json +13 -13
  551. package/dist/lib/schemas-data/3.0/governance/sync-plans-response.json +4 -4
  552. package/dist/lib/schemas-data/3.0/index.json +364 -364
  553. package/dist/lib/schemas-data/3.0/manifest.json +5 -5
  554. package/dist/lib/schemas-data/3.0/manifest.schema.json +1 -1
  555. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-input-required.json +4 -4
  556. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-submitted.json +3 -3
  557. package/dist/lib/schemas-data/3.0/media-buy/build-creative-async-response-working.json +3 -3
  558. package/dist/lib/schemas-data/3.0/media-buy/build-creative-request.json +11 -11
  559. package/dist/lib/schemas-data/3.0/media-buy/build-creative-response.json +17 -17
  560. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-input-required.json +4 -4
  561. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-submitted.json +3 -3
  562. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-async-response-working.json +3 -3
  563. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-request.json +12 -12
  564. package/dist/lib/schemas-data/3.0/media-buy/create-media-buy-response.json +15 -15
  565. package/dist/lib/schemas-data/3.0/media-buy/get-media-buy-delivery-request.json +17 -17
  566. package/dist/lib/schemas-data/3.0/media-buy/get-media-buy-delivery-response.json +24 -24
  567. package/dist/lib/schemas-data/3.0/media-buy/get-media-buys-request.json +7 -7
  568. package/dist/lib/schemas-data/3.0/media-buy/get-media-buys-response.json +19 -19
  569. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-input-required.json +4 -4
  570. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-submitted.json +3 -3
  571. package/dist/lib/schemas-data/3.0/media-buy/get-products-async-response-working.json +3 -3
  572. package/dist/lib/schemas-data/3.0/media-buy/get-products-request.json +11 -11
  573. package/dist/lib/schemas-data/3.0/media-buy/get-products-response.json +8 -8
  574. package/dist/lib/schemas-data/3.0/media-buy/list-creative-formats-request.json +11 -11
  575. package/dist/lib/schemas-data/3.0/media-buy/list-creative-formats-response.json +7 -7
  576. package/dist/lib/schemas-data/3.0/media-buy/log-event-request.json +4 -4
  577. package/dist/lib/schemas-data/3.0/media-buy/log-event-response.json +6 -6
  578. package/dist/lib/schemas-data/3.0/media-buy/package-request.json +12 -12
  579. package/dist/lib/schemas-data/3.0/media-buy/package-update.json +13 -13
  580. package/dist/lib/schemas-data/3.0/media-buy/provide-performance-feedback-request.json +6 -6
  581. package/dist/lib/schemas-data/3.0/media-buy/provide-performance-feedback-response.json +6 -6
  582. package/dist/lib/schemas-data/3.0/media-buy/sync-audiences-request.json +7 -7
  583. package/dist/lib/schemas-data/3.0/media-buy/sync-audiences-response.json +9 -9
  584. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-input-required.json +3 -3
  585. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-submitted.json +3 -3
  586. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-async-response-working.json +3 -3
  587. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-request.json +7 -7
  588. package/dist/lib/schemas-data/3.0/media-buy/sync-catalogs-response.json +9 -9
  589. package/dist/lib/schemas-data/3.0/media-buy/sync-event-sources-request.json +5 -5
  590. package/dist/lib/schemas-data/3.0/media-buy/sync-event-sources-response.json +10 -10
  591. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-input-required.json +3 -3
  592. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-submitted.json +3 -3
  593. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-async-response-working.json +3 -3
  594. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-request.json +10 -10
  595. package/dist/lib/schemas-data/3.0/media-buy/update-media-buy-response.json +10 -10
  596. package/dist/lib/schemas-data/3.0/pricing-options/cpa-option.json +4 -4
  597. package/dist/lib/schemas-data/3.0/pricing-options/cpc-option.json +4 -4
  598. package/dist/lib/schemas-data/3.0/pricing-options/cpcv-option.json +4 -4
  599. package/dist/lib/schemas-data/3.0/pricing-options/cpm-option.json +4 -4
  600. package/dist/lib/schemas-data/3.0/pricing-options/cpp-option.json +5 -5
  601. package/dist/lib/schemas-data/3.0/pricing-options/cpv-option.json +4 -4
  602. package/dist/lib/schemas-data/3.0/pricing-options/flat-rate-option.json +4 -4
  603. package/dist/lib/schemas-data/3.0/pricing-options/price-breakdown.json +2 -2
  604. package/dist/lib/schemas-data/3.0/pricing-options/price-guidance.json +1 -1
  605. package/dist/lib/schemas-data/3.0/pricing-options/time-option.json +4 -4
  606. package/dist/lib/schemas-data/3.0/pricing-options/vcpm-option.json +4 -4
  607. package/dist/lib/schemas-data/3.0/property/authorization-result.json +1 -1
  608. package/dist/lib/schemas-data/3.0/property/base-property-source.json +4 -4
  609. package/dist/lib/schemas-data/3.0/property/create-property-list-request.json +7 -7
  610. package/dist/lib/schemas-data/3.0/property/create-property-list-response.json +4 -4
  611. package/dist/lib/schemas-data/3.0/property/delete-property-list-request.json +4 -4
  612. package/dist/lib/schemas-data/3.0/property/delete-property-list-response.json +3 -3
  613. package/dist/lib/schemas-data/3.0/property/delivery-record.json +3 -3
  614. package/dist/lib/schemas-data/3.0/property/get-property-list-request.json +4 -4
  615. package/dist/lib/schemas-data/3.0/property/get-property-list-response.json +7 -7
  616. package/dist/lib/schemas-data/3.0/property/list-property-lists-request.json +5 -5
  617. package/dist/lib/schemas-data/3.0/property/list-property-lists-response.json +5 -5
  618. package/dist/lib/schemas-data/3.0/property/property-error.json +2 -2
  619. package/dist/lib/schemas-data/3.0/property/property-feature-definition.json +2 -2
  620. package/dist/lib/schemas-data/3.0/property/property-feature-result.json +4 -4
  621. package/dist/lib/schemas-data/3.0/property/property-feature-value.json +2 -2
  622. package/dist/lib/schemas-data/3.0/property/property-feature.json +1 -1
  623. package/dist/lib/schemas-data/3.0/property/property-list-changed-webhook.json +2 -2
  624. package/dist/lib/schemas-data/3.0/property/property-list-filters.json +5 -5
  625. package/dist/lib/schemas-data/3.0/property/property-list.json +6 -6
  626. package/dist/lib/schemas-data/3.0/property/update-property-list-request.json +7 -7
  627. package/dist/lib/schemas-data/3.0/property/update-property-list-response.json +4 -4
  628. package/dist/lib/schemas-data/3.0/property/validate-property-delivery-request.json +5 -5
  629. package/dist/lib/schemas-data/3.0/property/validate-property-delivery-response.json +4 -4
  630. package/dist/lib/schemas-data/3.0/property/validation-result.json +5 -5
  631. package/dist/lib/schemas-data/3.0/protocol/get-adcp-capabilities-request.json +3 -3
  632. package/dist/lib/schemas-data/3.0/protocol/get-adcp-capabilities-response.json +25 -25
  633. package/dist/lib/schemas-data/3.0/signals/activate-signal-request.json +5 -5
  634. package/dist/lib/schemas-data/3.0/signals/activate-signal-response.json +7 -7
  635. package/dist/lib/schemas-data/3.0/signals/get-signals-request.json +8 -8
  636. package/dist/lib/schemas-data/3.0/signals/get-signals-response.json +10 -10
  637. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-capabilities.json +1 -1
  638. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-get-offering-request.json +3 -3
  639. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-get-offering-response.json +4 -4
  640. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-identity.json +1 -1
  641. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-initiate-session-request.json +5 -5
  642. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-initiate-session-response.json +7 -7
  643. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-send-message-request.json +3 -3
  644. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-send-message-response.json +7 -7
  645. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-terminate-session-request.json +3 -3
  646. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-terminate-session-response.json +5 -5
  647. package/dist/lib/schemas-data/3.0/sponsored-intelligence/si-ui-element.json +1 -1
  648. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  649. package/dist/lib/server/account-mode.d.ts +113 -0
  650. package/dist/lib/server/account-mode.d.ts.map +1 -0
  651. package/dist/lib/server/account-mode.js +125 -0
  652. package/dist/lib/server/account-mode.js.map +1 -0
  653. package/dist/lib/server/adcp-server.js +41 -0
  654. package/dist/lib/server/adcp-server.js.map +1 -1
  655. package/dist/lib/server/auth.d.ts +35 -0
  656. package/dist/lib/server/auth.d.ts.map +1 -1
  657. package/dist/lib/server/auth.js.map +1 -1
  658. package/dist/lib/server/create-adcp-server.d.ts +26 -9
  659. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  660. package/dist/lib/server/create-adcp-server.js +46 -20
  661. package/dist/lib/server/create-adcp-server.js.map +1 -1
  662. package/dist/lib/server/ctx-metadata/store.d.ts +1 -1
  663. package/dist/lib/server/ctx-metadata/store.d.ts.map +1 -1
  664. package/dist/lib/server/ctx-metadata/store.js +1 -0
  665. package/dist/lib/server/ctx-metadata/store.js.map +1 -1
  666. package/dist/lib/server/decisioning/account.d.ts +19 -0
  667. package/dist/lib/server/decisioning/account.d.ts.map +1 -1
  668. package/dist/lib/server/decisioning/account.js.map +1 -1
  669. package/dist/lib/server/decisioning/buyer-agent.d.ts +37 -4
  670. package/dist/lib/server/decisioning/buyer-agent.d.ts.map +1 -1
  671. package/dist/lib/server/decisioning/buyer-agent.js +12 -2
  672. package/dist/lib/server/decisioning/buyer-agent.js.map +1 -1
  673. package/dist/lib/server/decisioning/compose.d.ts +33 -2
  674. package/dist/lib/server/decisioning/compose.d.ts.map +1 -1
  675. package/dist/lib/server/decisioning/compose.js +13 -46
  676. package/dist/lib/server/decisioning/compose.js.map +1 -1
  677. package/dist/lib/server/decisioning/index.d.ts +2 -1
  678. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  679. package/dist/lib/server/decisioning/index.js +2 -1
  680. package/dist/lib/server/decisioning/index.js.map +1 -1
  681. package/dist/lib/server/decisioning/platform-helpers.d.ts +18 -0
  682. package/dist/lib/server/decisioning/platform-helpers.d.ts.map +1 -1
  683. package/dist/lib/server/decisioning/platform-helpers.js +20 -0
  684. package/dist/lib/server/decisioning/platform-helpers.js.map +1 -1
  685. package/dist/lib/server/decisioning/platform.d.ts +19 -21
  686. package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
  687. package/dist/lib/server/decisioning/platform.js.map +1 -1
  688. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.js +1 -1
  689. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  690. package/dist/lib/server/decisioning/runtime/from-platform.js +369 -54
  691. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  692. package/dist/lib/server/decisioning/runtime/observed-modes.d.ts +40 -0
  693. package/dist/lib/server/decisioning/runtime/observed-modes.d.ts.map +1 -0
  694. package/dist/lib/server/decisioning/runtime/observed-modes.js +82 -0
  695. package/dist/lib/server/decisioning/runtime/observed-modes.js.map +1 -0
  696. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js +2 -2
  697. package/dist/lib/server/decisioning/runtime/protocol-for-tool.js.map +1 -1
  698. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
  699. package/dist/lib/server/decisioning/runtime/validate-platform.js +9 -1
  700. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
  701. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts +125 -0
  702. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts.map +1 -0
  703. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js +52 -0
  704. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js.map +1 -0
  705. package/dist/lib/server/decisioning/tenant-registry.d.ts +16 -0
  706. package/dist/lib/server/decisioning/tenant-registry.d.ts.map +1 -1
  707. package/dist/lib/server/decisioning/tenant-registry.js.map +1 -1
  708. package/dist/lib/server/index.d.ts +5 -1
  709. package/dist/lib/server/index.d.ts.map +1 -1
  710. package/dist/lib/server/index.js +15 -3
  711. package/dist/lib/server/index.js.map +1 -1
  712. package/dist/lib/server/serve.js +20 -2
  713. package/dist/lib/server/serve.js.map +1 -1
  714. package/dist/lib/server/socket-mode/conformance-client.d.ts +83 -0
  715. package/dist/lib/server/socket-mode/conformance-client.d.ts.map +1 -0
  716. package/dist/lib/server/socket-mode/conformance-client.js +117 -0
  717. package/dist/lib/server/socket-mode/conformance-client.js.map +1 -0
  718. package/dist/lib/server/socket-mode/index.d.ts +15 -0
  719. package/dist/lib/server/socket-mode/index.d.ts.map +1 -0
  720. package/dist/lib/server/socket-mode/index.js +20 -0
  721. package/dist/lib/server/socket-mode/index.js.map +1 -0
  722. package/dist/lib/server/socket-mode/ws-transport.d.ts +26 -0
  723. package/dist/lib/server/socket-mode/ws-transport.d.ts.map +1 -0
  724. package/dist/lib/server/socket-mode/ws-transport.js +93 -0
  725. package/dist/lib/server/socket-mode/ws-transport.js.map +1 -0
  726. package/dist/lib/server/test-controller.d.ts +3 -0
  727. package/dist/lib/server/test-controller.d.ts.map +1 -1
  728. package/dist/lib/server/test-controller.js +23 -20
  729. package/dist/lib/server/test-controller.js.map +1 -1
  730. package/dist/lib/testing/comply-controller.d.ts +65 -3
  731. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  732. package/dist/lib/testing/comply-controller.js +32 -3
  733. package/dist/lib/testing/comply-controller.js.map +1 -1
  734. package/dist/lib/testing/index.d.ts +1 -1
  735. package/dist/lib/testing/index.d.ts.map +1 -1
  736. package/dist/lib/testing/index.js.map +1 -1
  737. package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -1
  738. package/dist/lib/testing/storyboard/request-builder.js +63 -40
  739. package/dist/lib/testing/storyboard/request-builder.js.map +1 -1
  740. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  741. package/dist/lib/testing/storyboard/validations.js +36 -54
  742. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  743. package/dist/lib/testing/test-controller.d.ts +10 -4
  744. package/dist/lib/testing/test-controller.d.ts.map +1 -1
  745. package/dist/lib/testing/test-controller.js +9 -3
  746. package/dist/lib/testing/test-controller.js.map +1 -1
  747. package/dist/lib/types/core.generated.d.ts +54 -14
  748. package/dist/lib/types/core.generated.d.ts.map +1 -1
  749. package/dist/lib/types/core.generated.js +2 -2
  750. package/dist/lib/types/error-codes.d.ts +2 -2
  751. package/dist/lib/types/index.d.ts +4 -3
  752. package/dist/lib/types/index.d.ts.map +1 -1
  753. package/dist/lib/types/index.js +3 -0
  754. package/dist/lib/types/index.js.map +1 -1
  755. package/dist/lib/types/manifest.generated.d.ts +5 -5
  756. package/dist/lib/types/manifest.generated.js +3 -3
  757. package/dist/lib/types/manifest.generated.js.map +1 -1
  758. package/dist/lib/types/schemas.generated.d.ts +465 -381
  759. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  760. package/dist/lib/types/schemas.generated.js +171 -143
  761. package/dist/lib/types/schemas.generated.js.map +1 -1
  762. package/dist/lib/types/tools.generated.d.ts +42 -14
  763. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  764. package/dist/lib/utils/glob.d.ts +4 -2
  765. package/dist/lib/utils/glob.d.ts.map +1 -1
  766. package/dist/lib/utils/glob.js +4 -2
  767. package/dist/lib/utils/glob.js.map +1 -1
  768. package/dist/lib/version.d.ts +7 -7
  769. package/dist/lib/version.d.ts.map +1 -1
  770. package/dist/lib/version.js +6 -5
  771. package/dist/lib/version.js.map +1 -1
  772. package/docs/llms.txt +5 -4
  773. package/examples/README.md +29 -13
  774. package/examples/hello-cluster.ts +62 -23
  775. package/examples/hello_creative_adapter_ad_server.ts +809 -0
  776. package/examples/hello_creative_adapter_template.ts +61 -6
  777. package/examples/hello_seller_adapter_guaranteed.ts +158 -25
  778. package/examples/hello_seller_adapter_multi_tenant.ts +39 -5
  779. package/examples/hello_seller_adapter_non_guaranteed.ts +1071 -0
  780. package/examples/hello_seller_adapter_social.ts +1 -1
  781. package/examples/hello_si_adapter_brand.ts +572 -0
  782. package/examples/hello_signals_adapter_marketplace.ts +34 -29
  783. package/package.json +7 -5
  784. package/skills/SHAPE-GOTCHAS.md +18 -0
  785. package/skills/build-brand-rights-agent/SKILL.md +61 -597
  786. package/skills/build-creative-agent/SKILL.md +69 -830
  787. package/skills/build-generative-seller-agent/SKILL.md +43 -577
  788. package/skills/build-governance-agent/SKILL.md +63 -950
  789. package/skills/build-holdco-agent/SKILL.md +8 -0
  790. package/skills/build-retail-media-agent/SKILL.md +46 -478
  791. package/skills/build-seller-agent/SKILL.md +53 -1795
  792. package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +9 -31
  793. package/skills/build-si-agent/SKILL.md +55 -318
  794. package/skills/build-signals-agent/SKILL.md +49 -537
  795. package/skills/call-adcp-agent/SKILL.md +7 -1
  796. package/skills/cross-cutting.md +84 -0
  797. package/skills/call-adcp-agent.previous/SKILL.md +0 -261
  798. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/brand/index.yaml +0 -0
  799. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/creative/index.yaml +0 -0
  800. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/governance/index.yaml +0 -0
  801. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/creative-reception.yaml +0 -0
  802. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/index.yaml +0 -0
  803. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  804. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -0
  805. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
  806. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
  807. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
  808. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
  809. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  810. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
  811. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  812. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  813. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  814. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
  815. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/scenarios/refine_products.yaml +0 -0
  816. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/media-buy/state-machine.yaml +0 -0
  817. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/signals/index.yaml +0 -0
  818. /package/compliance/cache/{3.0.5 → 3.0.6}/domains/sponsored-intelligence/index.yaml +0 -0
  819. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/brand/index.yaml +0 -0
  820. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/creative/index.yaml +0 -0
  821. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/governance/index.yaml +0 -0
  822. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/creative-reception.yaml +0 -0
  823. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/index.yaml +0 -0
  824. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  825. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -0
  826. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
  827. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
  828. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
  829. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
  830. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  831. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
  832. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  833. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  834. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  835. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
  836. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
  837. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/media-buy/state-machine.yaml +0 -0
  838. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/signals/index.yaml +0 -0
  839. /package/compliance/cache/{3.0.5 → 3.0.6}/protocols/sponsored-intelligence/index.yaml +0 -0
  840. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/audience-sync/index.yaml +0 -0
  841. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/brand-rights/index.yaml +0 -0
  842. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
  843. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/collection-lists/index.yaml +0 -0
  844. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/content-standards/index.yaml +0 -0
  845. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-ad-server/index.yaml +0 -0
  846. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-generative/generative-seller.yaml +0 -0
  847. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-generative/index.yaml +0 -0
  848. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/creative-template/index.yaml +0 -0
  849. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-aware-seller/index.yaml +0 -0
  850. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-delivery-monitor/index.yaml +0 -0
  851. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-spend-authority/denied.yaml +0 -0
  852. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/governance-spend-authority/index.yaml +0 -0
  853. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/property-lists/index.yaml +0 -0
  854. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-broadcast-tv/index.yaml +0 -0
  855. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-catalog-driven/index.yaml +0 -0
  856. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-non-guaranteed/index.yaml +0 -0
  857. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-proposal-mode/index.yaml +0 -0
  858. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/sales-social/index.yaml +0 -0
  859. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-marketplace/index.yaml +0 -0
  860. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
  861. /package/compliance/cache/{3.0.5 → 3.0.6}/specialisms/signal-owned/index.yaml +0 -0
  862. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/acme-outdoor.yaml +0 -0
  863. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/bistro-oranje.yaml +0 -0
  864. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/nova-motors.yaml +0 -0
  865. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/osei-natural.yaml +0 -0
  866. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/signed-requests-runner.yaml +0 -0
  867. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/substitution-observer-runner.yaml +0 -0
  868. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/summit-foods.yaml +0 -0
  869. /package/compliance/cache/{3.0.5 → 3.0.6}/test-kits/webhook-receiver-runner.yaml +0 -0
  870. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
  871. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/002-full-plan.json +0 -0
  872. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
  873. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
  874. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
  875. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
  876. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
  877. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
  878. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
  879. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
  880. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
  881. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/README.md +0 -0
  882. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/canonicalization.json +0 -0
  883. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/keys.json +0 -0
  884. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
  885. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
  886. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
  887. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
  888. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
  889. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
  890. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
  891. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
  892. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
  893. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
  894. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
  895. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
  896. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
  897. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
  898. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
  899. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
  900. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
  901. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
  902. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
  903. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
  904. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
  905. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
  906. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
  907. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
  908. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
  909. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
  910. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
  911. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
  912. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
  913. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
  914. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
  915. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
  916. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
  917. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
  918. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
  919. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
  920. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
  921. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
  922. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
  923. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/README.md +0 -0
  924. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/keys.json +0 -0
  925. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
  926. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
  927. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
  928. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
  929. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
  930. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
  931. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
  932. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
  933. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
  934. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
  935. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
  936. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
  937. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
  938. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
  939. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
  940. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
  941. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
  942. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
  943. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
  944. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
  945. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
  946. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
  947. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
  948. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
  949. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
  950. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
  951. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
  952. /package/compliance/cache/{3.0.5 → 3.0.6}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
  953. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/capability-discovery.yaml +0 -0
  954. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/collection-lists-pagination-integrity.yaml +0 -0
  955. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/content-standards-pagination-integrity.yaml +0 -0
  956. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/deterministic-testing.yaml +0 -0
  957. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/error-compliance.yaml +0 -0
  958. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/fictional-entities.yaml +0 -0
  959. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/get-media-buys-pagination-integrity.yaml +0 -0
  960. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/get-signals-pagination-integrity.yaml +0 -0
  961. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/idempotency.yaml +0 -0
  962. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity-creative-formats.yaml +0 -0
  963. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity-list-accounts.yaml +0 -0
  964. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/pagination-integrity.yaml +0 -0
  965. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/property-lists-pagination-integrity.yaml +0 -0
  966. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/runner-output-contract.yaml +0 -0
  967. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/schema-validation.yaml +0 -0
  968. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/security.yaml +0 -0
  969. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/signed-requests.yaml +0 -0
  970. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/v3-envelope-integrity.yaml +0 -0
  971. /package/compliance/cache/{3.0.5 → 3.0.6}/universal/webhook-emission.yaml +0 -0
@@ -5,874 +5,113 @@ description: Use when building an AdCP creative agent — an ad server, creative
5
5
 
6
6
  # Build a Creative Agent
7
7
 
8
- ## Overview
8
+ A creative agent accepts assets from buyers, stores or transforms them, and returns serving artifacts (tags, rendered manifests, previews). The fastest path to a passing agent is to **fork a worked adapter** that matches your archetype. This skill tells you which one and what cross-cutting rules apply.
9
9
 
10
- A creative agent manages the creative lifecycle: accepts assets from buyers, stores them in a library, builds serving tags, and renders previews. Unlike a generative seller (which also sells inventory), a creative agent is a standalone creative platform — it manages creatives but doesn't sell media.
10
+ ## Pick your fork target
11
11
 
12
- > **Common shape gotchas:** `PreviewCreativeResponse` is a three-way discriminated union (`single` | `batch` | `variant`); `BuildCreativeReturn` has 4 valid shapes (framework auto-wraps bare manifests); `VASTAsset` requires `delivery_type` (`'inline'` or `'redirect'`) before `content`/`vast_url`. See [SHAPE-GOTCHAS.md](../SHAPE-GOTCHAS.md) for the patterns adopters consistently get wrong on first pass — schema validators catch these at runtime; type checkers don't.
12
+ Three creative archetypes; two have dedicated worked adapters, the third lives in `build-generative-seller-agent` because it's coupled with selling inventory.
13
13
 
14
- ## When to Use
14
+ | Specialism | Archetype | Fork this | Mock upstream | Storyboard |
15
+ | --- | --- | --- | --- | --- |
16
+ | `creative-ad-server` | Stateful library, pricing + billing (Innovid, Flashtalking, CM360, GAM-creative) | [`hello_creative_adapter_ad_server.ts`](../../examples/hello_creative_adapter_ad_server.ts) | `npx adcp mock-server creative-ad-server` | `creative_ad_server` |
17
+ | `creative-template` | Stateless transform from inline manifest (Celtra, AudioStack, ElevenLabs, Resemble) | [`hello_creative_adapter_template.ts`](../../examples/hello_creative_adapter_template.ts) | `npx adcp mock-server creative-template` | `creative_template` |
18
+ | `creative-generative` | Brief-to-creative generation (AI ad networks coupled with sales) | → `skills/build-generative-seller-agent/` | — | `creative_generative` |
15
19
 
16
- - User wants to build an ad server, creative management platform, or creative rendering service
17
- - User mentions `build_creative`, `preview_creative`, `sync_creatives`, or `list_creatives`
18
- - User references creative formats, VAST tags, serving tags, or creative libraries
20
+ The `interaction_model` in each specialism's `index.yaml` is the forcing function: `stateful_ad_server`, `stateless_transform`, `stateless_generate`. Decide which one matches your business, then fork the adapter for that row.
19
21
 
20
- **Not this skill:**
21
-
22
- - Selling inventory + generating creatives → `skills/build-generative-seller-agent/`
23
- - Selling inventory (no creative management) → `skills/build-seller-agent/`
24
- - Serving audience segments → `skills/build-signals-agent/`
25
-
26
- ## Specialisms This Skill Covers
27
-
28
- Creative specialisms are three distinct archetypes with materially different tool contracts. Pick the one that matches your platform — do not try to make one handler cover all three.
29
-
30
- | Specialism | Archetype | `build_creative` behavior | `sync_creatives` behavior | See |
31
- | --------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------- |
32
- | `creative-ad-server` | Stateful library, pricing + billing | Look up in library by `target_format_id`; return VAST/tag output with macro placeholders; price the output (`pricing_option_id`, `vendor_cost`) | Accept assets into the library; support `include_pricing=true` on `list_creatives` | [§ creative-ad-server](#specialism-creative-ad-server) |
33
- | `creative-template` | Stateless transform | Build from inline `creative_manifest` in the request; no `ctx.store` lookup; support `target_format_ids` (plural) for multi-format | Not used — agents in this specialism are stateless | [§ creative-template](#specialism-creative-template) |
34
- | `creative-generative` | Brief-to-creative generation | Generate assets from `message` + `brand.domain`; honor `quality: draft\|production`; support refinement (re-send manifest in) | Not used — output is ephemeral; buyer syncs to the seller separately | [§ creative-generative](#specialism-creative-generative) |
35
-
36
- The `interaction_model` in each specialism's `index.yaml` is the forcing function: `stateful_ad_server`, `stateless_transform`, `stateless_generate`. Decide which one matches your business, then follow the archetype section below.
37
-
38
- ## Protocol-Wide Requirements
39
-
40
- Full treatment in `skills/build-seller-agent/SKILL.md` §Protocol-Wide Requirements and §Composing. Minimum viable pointers for a creative agent:
41
-
42
- - **`idempotency_key`** on every mutating request (`sync_creatives`, `build_creative`, `report_usage`, any `sync_*` you implement). Pass `createIdempotencyStore` to `createAdcpServerFromPlatform(platform, { idempotency })`.
43
- - **Authentication** via `serve({ authenticate })` with `verifyApiKey`/`verifyBearer` from `@adcp/sdk/server`. Unauthenticated agents fail the universal `security_baseline` storyboard.
44
- - **Signature-header transparency**: accept requests with `Signature-Input`/`Signature` headers even if you don't claim `signed-requests`.
45
-
46
- ## Webhooks (for async review pipelines)
47
-
48
- Creative review flows are naturally async — `sync_creatives` may return `pending_review` with a task envelope, and your review pipeline emits completion webhooks when the creative is approved, rejected, or transitions to a new state. `build_creative` for the ad-server archetype emits `report_usage` completion webhooks. Use `ctx.emitWebhook` — don't hand-roll `fetch` with HMAC signing.
49
-
50
- Pass `webhooks: { signerKey }` to `createAdcpServerFromPlatform(platform, { webhooks })` and call `ctx.emitWebhook({ url, payload, operation_id })` from any handler. The framework handles RFC 9421 signing, stable `idempotency_key` across retries, backoff + terminal error handling. Full pattern in [`skills/build-seller-agent/SKILL.md`](../build-seller-agent/SKILL.md) § Webhooks.
51
-
52
- **`operation_id` rules** (the top at-least-once-delivery bug): stable across retries. `creative_review.${creative_id}` or `report_usage.${report_batch_id}` — NOT a fresh UUID per retry.
53
-
54
- ## Before Writing Code
22
+ For exact response shapes, error codes, and optional fields, `docs/llms.txt` is the canonical reference. The fork target stays in sync with the spec because PR #1394's three-gate contract fails CI when it drifts.
55
23
 
56
- Determine these things. Ask the user — don't guess.
24
+ ## When to use this skill
57
25
 
58
- ### 1. What kind of creative platform?
26
+ - User wants to build an ad server, creative management platform, or audio creative agent
27
+ - User mentions `sync_creatives`, `build_creative`, `list_creative_formats`, or VAST/tag generation
59
28
 
60
- - **Ad server** (Innovid, Flashtalking, CM360) — specialism `creative-ad-server`. Stateful library, builds serving tags (VAST, display tags), tracks delivery, reconciles billing.
61
- - **Creative management platform** (Celtra) — specialism `creative-template`. Stateless transformation from inline manifest, template rendering across formats.
62
- - **Generative creative agent** — specialism `creative-generative`. Takes a brief + brand reference, generates finished creatives from scratch (no inventory sold — that's `build-generative-seller-agent`).
63
- - **Publisher creative service** — accepts buyer assets, validates against publisher specs, renders previews. Usually pairs with `build-seller-agent` and doesn't claim a creative specialism on its own.
29
+ **Not this skill:**
64
30
 
65
- ### 2. What formats?
31
+ - Brief-to-creative generation coupled with selling inventory (AI ad network) → `skills/build-generative-seller-agent/`
32
+ - Publisher creative service that pairs with selling — usually a `build-seller-agent` adopter that omits a creative-* specialism claim
66
33
 
67
- Get specific formats the platform supports. Common ones:
34
+ ## Cross-cutting rules
68
35
 
69
- - **Display**: `display_300x250`, `display_728x90`, `display_160x600`
70
- - **Video**: `video_30s`, `vast_30s`, `video_15s`
71
- - **Native**: `native_content` (image + headline + description)
72
- - **Rich media**: `html5_300x250` (interactive HTML)
36
+ Every creative agent hits the cross-cutting rules in [`../cross-cutting.md`](../cross-cutting.md). The high-traffic ones for creative agents (deep-linked to the rule):
73
37
 
74
- Each format needs: dimensions, accepted asset types (image, video, html, text), mime types.
38
+ - [`idempotency_key`](../cross-cutting.md#idempotency_key-is-required-on-every-mutating-call) on `sync_creatives`, `build_creative`, `report_usage`
39
+ - [Authentication](../cross-cutting.md#authentication-is-mandatory) — `serve({ authenticate })` baseline
40
+ - [Webhooks](../cross-cutting.md#webhooks-stable-operation_id-across-retries) — `creative_review.${creative_id}` and `report_usage.${report_batch_id}` operation_ids must be stable across retries
75
41
 
76
- ### 3. What operations?
42
+ Two creative-specific notes on top of those:
77
43
 
78
- - **Sync** accept and store creatives from buyers (always needed)
79
- - **List** — query the creative library with filtering (recommended)
80
- - **Preview** — render a visual preview of a creative (recommended)
81
- - **Build** — produce serving tags (VAST, display tags, etc.) from stored creatives (recommended)
44
+ ### Webhooks for async review pipelines
82
45
 
83
- ### 4. Review pipeline?
46
+ Creative review is naturally async. `sync_creatives` may return `pending_review` with a task envelope; your review pipeline emits `creative_review` completion webhooks when state transitions. `build_creative` for the ad-server archetype emits `report_usage` completion webhooks. Use `ctx.emitWebhook` per the pattern in [`../cross-cutting.md` § Webhooks](../cross-cutting.md#webhooks-stable-operation_id-across-retries).
84
47
 
85
- What happens when a creative is synced:
48
+ ### `previewCreative` and `listCreativeFormats` are no-account tools
86
49
 
87
- - **Instant accept**creative passes validation, immediately available
88
- - **Pending review** — human or automated review before going live
89
- - **Rejection** — creative fails validation (wrong dimensions, prohibited content)
50
+ Both run with `NoAccountCtx<TCtxMeta>` they don't carry an authenticated account. The fork target's resolver synthesizes a default-listing network so `ctx.account` resolves cleanly inside the no-account handler (migration recipe #11). If you fork from scratch you'll trip this; let the hello adapter do it.
90
51
 
91
- ## Tools and Required Response Shapes
52
+ `preview_creative` should return `urlRender` or `bothRender`, **not `htmlRender` alone**. The creative-template storyboard asserts `previews[0].renders[0].preview_url` is renderable. If your platform can host a preview URL, use `urlRender`. If you only have inline HTML, use `bothRender` (emit both `preview_url` and `preview_html`).
92
53
 
93
- > **Before writing any handler's return statement, fetch [`docs/llms.txt`](../../docs/llms.txt) and grep for `#### \`<tool_name>\``(e.g.`#### \`build_creative\``) to read the exact required + optional field list.** The schema-derived contract lives there; this skill covers patterns, gotchas, and domain-specific examples. Strict response validation is on by default in dev — it will tell you the exact field path if you drift, so write the obvious thing and trust the contract.
94
- >
95
- > **Cross-cutting pitfalls matrix runs keep catching:**
96
- >
97
- > - **Declare `capabilities.specialisms: ['creative-ad-server'] as const` (or `'creative-template'` / `'creative-generative'`) on the `DecisioningPlatform` you pass to `createAdcpServerFromPlatform`.** Value is `string[]` of enum ids (not `[{id, version}]`). Agents that don't declare their specialism fail the grader with "No applicable tracks found" even if every tool works — tracks are gated on the specialism claim.
98
- > - **`list_creative_formats` response — each `Format` MUST have strict-shape `renders[]` and `assets[]`** (matrix v2 PR #1207 keeps catching this).
99
- > - `renders[i]` requires `role` (string) PLUS exactly one of `dimensions: { width, height }` (object — NOT `{ width, height }` inline at the render root) OR `parameters_from_format_id: true`.
100
- > - `assets[i]` requires the **discriminator quartet**: `item_type: 'individual' as const` + `asset_id` + `asset_type` (`'image'`/`'video'`/`'audio'`/`'text'`/`'click_url'`/`'html'`) + `required: boolean`. Missing any of these fails strict validation with `must match exactly one schema in oneOf`.
101
- >
102
- > ```ts
103
- > // ✗ WRONG — passes lenient mode but fails strict (the actual mistake matrix v2 catches)
104
- > { format_id, renders: [{ width: 300, height: 250 }],
105
- > assets: [{ asset_id: 'image', required: true }] }
106
- >
107
- > // ✓ RIGHT — passes strict
108
- > { format_id,
109
- > renders: [{ role: 'primary', dimensions: { width: 300, height: 250 } }],
110
- > assets: [{
111
- > item_type: 'individual' as const,
112
- > asset_id: 'image',
113
- > asset_type: 'image',
114
- > required: true,
115
- > accepted_media_types: ['image/jpeg', 'image/png'],
116
- > }] }
117
- > ```
118
- > - `build_creative` response is `{ creative_manifest: { format_id, assets } }` (single) or `{ creative_manifests: [...] }` (multi). Platform-native fields at the top level (`tag_url`, `creative_id`, `media_type`) are **invalid** — use `buildCreativeResponse({ creative_manifest })` / `buildCreativeMultiResponse({ creative_manifests })` from `@adcp/sdk/server` to lock the shape at compile time.
119
- > - Each asset in `creative_manifest.assets` requires an `asset_type` discriminator. Use the typed factories (`imageAsset`, `videoAsset`, `audioAsset`, `htmlAsset`, `urlAsset`, `textAsset`) so the discriminator is injected for you; a plain `{ serving_tag: { content: '<vast>...' } }` fails validation.
120
- > - `preview_creative` renders have the same pattern — each `renders[]` entry is a oneOf on `output_format`. Use `urlRender({...})`, `htmlRender({...})`, or `bothRender({...})` to inject the discriminator and require the matching `preview_url` / `preview_html` field automatically.
121
- > - `get_creative_delivery` requires **top-level `currency: string`** (ISO 4217), in addition to any per-row spend fields. `reporting_period/start` and `/end` are ISO 8601 **date-time** strings (`new Date().toISOString()`), not date-only.
122
- > - `videoAsset({...})` requires `width` + `height` per GA (previously optional). Set realistic pixel values — `{ url, width: 1920, height: 1080 }`.
123
- > - `list_creatives` response — each `creatives[i].pricing_options[j]` uses the **vendor-pricing discriminator**, which is different from products' `pricing_model`. Field name is `model` (not `pricing_model`), valid values are `cpm` / `percent_of_media` / `flat_fee` / `per_unit` / `custom`. Each model has its own required fields: `cpm` needs `{model, cpm, currency}`; `flat_fee` needs `{model, amount, period, currency}` (`period` is required — the schema rejects `flat_fee` without it); `percent_of_media` needs `{model, percent, currency}`; `per_unit` needs `{model, unit, unit_price, currency}`. If you echo pricing_options from a seed fixture, normalize the shape — storyboard fixtures sometimes carry abbreviated shapes that fail validation on the way out.
54
+ ## Specialism deltas at a glance
124
55
 
125
- **Handler bindings read the Contract column entry before writing each return:**
56
+ The fork targets cover the baseline + specialism deltas. Quick reference for what each archetype needs that the others don't:
126
57
 
127
- | Tool | Handler | Contract (field list) | Gotchas |
128
- | ----------------------- | ------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
129
- | `get_adcp_capabilities` | auto-generated | n/a | Do not register manually. |
130
- | `list_creative_formats` | `creative.listCreativeFormats` | [`#list_creative_formats`](../../docs/llms.txt#list_creative_formats) | Each `renders[]` entry MUST have `role` + exactly one of `dimensions` (object) OR `parameters_from_format_id: true` — `{width, height}` shorthand fails. Each `assets[]` entry MUST have `item_type: 'individual' as const` + `asset_id` + `asset_type` (image/video/audio/text/click_url/html) + `required: boolean`. See the strict-shape callout above the table. |
131
- | `sync_creatives` | `creative.syncCreatives` | [`#sync_creatives`](../../docs/llms.txt#sync_creatives) | Echo `creative_id`; `action` ∈ `created \| updated \| unchanged \| failed \| deleted`. |
132
- | `list_creatives` | `creative.listCreatives` | [`#list_creatives`](../../docs/llms.txt#list_creatives) | Honor `args.filters?.format_ids` when present. `created_date` + `updated_date` on each row are required ISO timestamps. |
133
- | `preview_creative` | `creative.previewCreative` | [`#preview_creative`](../../docs/llms.txt#preview_creative) | `renders[].output_format` is a discriminator — use `urlRender({...})`, `htmlRender({...})`, or `bothRender({...})` so the discriminator is injected and the required `preview_url`/`preview_html` field is enforced at compile time. |
134
- | `build_creative` | `creative.buildCreative` | [`#build_creative`](../../docs/llms.txt#build_creative) | Check `args.target_format_id` → library lookup; fall back to `args.creative_id`. Response requires `creative_manifest.format_id` + `creative_manifest.assets`. |
58
+ **`creative-ad-server`** stateful library (`POST/GET/PATCH /v1/creatives`), tag generation via macro substitution against a stored snippet, per-creative pricing (`include_pricing=true` on `list_creatives`, `pricing_option_id` echoed by `build_creative`, `report_usage` closes the loop), `getCreativeDelivery` with multi-id pass-through and required top-level `currency` + `reporting_period`. Output formats from `list_creative_formats` are **serving-tag formats** (VAST 4.2, display tag HTML, native JSON), not input visual formats.
135
59
 
136
- Asset values use type-specific shapes, not a generic `asset_type` discriminator:
60
+ **`creative-template`** stateless: build from inline `creative_manifest` in the request, no `ctx.store` lookup. Multi-format path: `target_format_ids` (plural) returns `{ creative_manifests: [...] }` (auto-wrapped to `buildCreativeMultiResponse`); single returns `{ creative_manifest: ... }`. Formats declare `variables[]` the template substitutes.
137
61
 
138
- - Image: `{ url: string, width: number, height: number, format: string }`
139
- - Video: `{ url: string, duration_ms: number, format: string }`
140
- - Audio: `{ url: string, container_format: string, codec: string, duration_ms: number, channels?: string, sampling_rate_hz?: number }`
141
- - HTML: `{ content: string }` (not `{ html: string }`)
142
- - Text: `{ content: string }` (not `{ text: string }` — the field is `content`, same as HTML)
62
+ Audio templates (TTS / mix / master, e.g. AudioStack / ElevenLabs / Resemble) follow the same shape with two deltas: (a) format declares `parameterizedRender({ role: 'primary' })` because audio has no width/height — encode duration/codec/bitrate in `accepts_parameters`, not in render entries; (b) the upstream pipeline is naturally minutes-long (voice-over → mix → master), so the adapter returns a task envelope and emits `creative_review` webhooks on completion.
143
63
 
144
- ### Context and Ext Passthrough
64
+ **Audio adopters extend `hello_creative_adapter_template.ts` with four deltas:**
145
65
 
146
- The framework auto-echoes the request's `context` into every response from typed sub-platform handlers — **do not set `context` yourself in your handler return values.** It's injected post-handler only when the field isn't already present.
66
+ 1. Add `audio_url?: string` to `UpstreamRender.output` and extend `output_kind` to include `'audio_url'`
67
+ 2. Add an `audio_url` arm to `outputSlot(t)` returning `FormatAsset.audio({ asset_id: 'serving_tag', required: false })` — declares the output slot in the format so build_creative's response key matches a declared asset_id per `creative-manifest.json:14`.
68
+ 3. Add an audio-output branch to `projectRenderToManifest`:
69
+ ```ts
70
+ } else if (out.audio_url) {
71
+ assets['serving_tag'] = audioAsset({ url: out.audio_url });
72
+ }
73
+ ```
74
+ The `audioAsset` builder injects the `asset_type: 'audio'` discriminator the creative-manifest oneOf requires.
75
+ 4. Seed an audio template in your upstream platform — see `tpl_audiostack_spot_30s_v1` in `src/lib/mock-server/creative-template/seed-data.ts` for the worked reference.
147
76
 
148
- **Crucial:** `context` is schema-typed as an object. If your handler hand-sets a string or narrative description, validation fails with `/context: must be object` and the framework does not overwrite. Leave the field out entirely.
149
-
150
- Some schemas also define an `ext` field for vendor-namespaced extensions. If your request schema includes `ext`, accept it without error. Tools with explicit `ext` support: `get_creative_delivery`, `get_creative_features`.
151
-
152
- ## SDK Quick Reference
153
-
154
- | SDK piece | Usage |
155
- | ------------------------------------------------------- | ---------------------------------------------------------------- |
156
- | `createAdcpServerFromPlatform(platform, opts)` | Create server from a typed `DecisioningPlatform` — compile-time specialism enforcement, auto-capabilities |
157
- | `createAdcpServer(config)` *(legacy)* | v5 handler-bag entry. Mid-migration / escape-hatch only; reach via `@adcp/sdk/server/legacy/v5` |
158
- | `serve(() => createAdcpServerFromPlatform(platform, opts))` | Start HTTP server on `:3001/mcp` |
159
- | `creative: { listCreativeFormats, syncCreatives, ... }` | Domain group — register handlers by name |
160
- | `ctx.store.put(collection, id, data)` | Persist state (creative library) across requests |
161
- | `ctx.store.get(collection, id)` | Retrieve persisted state |
162
- | `ctx.store.list(collection)` | List all items in a collection (for `list_creatives`) |
163
- | `listCreativeFormatsResponse(data)` | Auto-applied response builder (don't call manually) |
164
- | `syncCreativesResponse(data)` | Auto-applied response builder (don't call manually) |
165
- | `listCreativesResponse(data)` | Auto-applied response builder (don't call manually) |
166
- | `buildCreativeResponse(data)` | Auto-applied response builder (don't call manually) |
167
- | `previewCreativeResponse(data)` | Auto-applied response builder (don't call manually) |
168
- | `adcpError(code, { message })` | Structured error |
169
-
170
- Import: `import { createAdcpServerFromPlatform, serve, adcpError } from '@adcp/sdk/server';`
171
-
172
- ## Setup
77
+ **Storyboard coverage for audio is not yet upstream** the `creative_template/build_creative` step asserts display-shaped assets, tracked at [adcontextprotocol/adcp#4015](https://github.com/adcontextprotocol/adcp/issues/4015). Until that ships, audio adopters validate via `npm run compliance:fork-matrix -- --test-name-pattern="hello-creative-adapter-template"` (display + video gate inherited) plus a manual round-trip against the seeded audio template:
173
78
 
174
79
  ```bash
175
- npm init -y
176
- npm install @adcp/sdk
177
- npm install -D typescript @types/node
178
- ```
179
-
180
- Minimal `tsconfig.json`:
181
-
182
- ```json
183
- {
184
- "compilerOptions": {
185
- "target": "ES2022",
186
- "module": "Node16",
187
- "moduleResolution": "Node16",
188
- "strict": true,
189
- "skipLibCheck": true,
190
- "outDir": "dist"
191
- }
192
- }
80
+ npx adcp mock-server creative-template --port 4250
81
+ # In another shell:
82
+ curl -X POST http://127.0.0.1:4250/v3/workspaces/ws_acme_studio/renders \
83
+ -H 'Authorization: Bearer mock_creative_template_key_do_not_use_in_prod' \
84
+ -H 'Content-Type: application/json' \
85
+ -d '{"template_id":"tpl_audiostack_spot_30s_v1","mode":"build","inputs":[{"slot_id":"script","value":"Built for the trail."}],"client_request_id":"smoke-1"}'
86
+ # → { "render_id": "rnd_…", "status": "queued" }
87
+ # Poll twice (queued → running → complete):
88
+ curl -H 'Authorization: Bearer mock_creative_template_key_do_not_use_in_prod' \
89
+ http://127.0.0.1:4250/v3/workspaces/ws_acme_studio/renders/rnd_…
90
+ # Final: { ..., "status": "complete", "output": { "audio_url": "….mp3", "preview_url": "...", "assets": [{ "kind": "audio_url", "mime_type": "audio/mpeg" }] } }
193
91
  ```
194
92
 
195
- `skipLibCheck: true` avoids false-positive errors from transitive `.d.ts` files (e.g., `@opentelemetry/api`).
196
-
197
- ## Implementation
198
-
199
- 1. Single `.ts` file — all tools in one file
200
- 2. Use `createAdcpServerFromPlatform` with `creative: CreativeAdServerPlatform` (or `CreativeBuilderPlatform`) on a `DecisioningPlatform` class — `get_adcp_capabilities` is auto-generated
201
- 3. Handlers return raw data objects — response builders are auto-applied
202
- 4. Use `ctx.store` for persisting the creative library across requests (InMemoryStateStore by default)
203
- 5. Register `preview_creative` manually on the returned server (union schema not in domain group)
204
- 6. Set `sandbox: true` on all mock/demo responses
205
- 7. Context passthrough is handled by the framework — no need to manually echo `args.context`
206
-
207
- ```typescript
208
- import {
209
- createAdcpServerFromPlatform,
210
- serve,
211
- adcpError,
212
- urlRender,
213
- createIdempotencyStore,
214
- memoryBackend,
215
- type DecisioningPlatform,
216
- type CreativeAdServerPlatform,
217
- type AccountStore,
218
- } from '@adcp/sdk/server';
219
-
220
- const formats = [
221
- {
222
- format_id: { agent_url: 'https://creative.example.com/mcp', id: 'display_banner_300x250' },
223
- name: 'Display Banner 300x250',
224
- description: 'Standard MRec display unit',
225
- renders: [
226
- { role: 'primary', dimensions: { width: 300, height: 250 } }, // role + dimensions (oneOf)
227
- ],
228
- assets: [
229
- {
230
- item_type: 'individual' as const,
231
- asset_id: 'image',
232
- asset_type: 'image',
233
- required: true,
234
- accepted_media_types: ['image/png', 'image/jpeg'],
235
- },
236
- ],
237
- },
238
- ];
239
-
240
- // The plain literal above works, but creative agents declaring richer
241
- // acceptance specs (technical `requirements`, carousel/collection wrappers)
242
- // should use the typed slot builders — see "Format asset slot builders"
243
- // below.
244
-
245
- // Idempotency — required for v3 compliance on any agent with mutating
246
- // handlers. `sync_creatives`, `build_creative`, and `calibrate_content`
247
- // are all mutating for creative agents.
248
- const idempotency = createIdempotencyStore({
249
- backend: memoryBackend(), // pgBackend(pool) for production
250
- ttlSeconds: 86400, // 24 hours (spec bounds: 1h–7d)
251
- });
252
-
253
- class MyCreative implements DecisioningPlatform {
254
- capabilities = {
255
- specialisms: ['creative-ad-server'] as const,
256
- config: {},
257
- };
258
-
259
- accounts: AccountStore = {
260
- resolve: async ref => ({
261
- id: 'account_id' in ref ? ref.account_id : 'cr_acc_1',
262
- operator: 'me',
263
- ctx_metadata: {},
264
- }),
265
- upsert: async () => ({ ok: true, items: [] }),
266
- list: async () => ({ items: [], nextCursor: null }),
267
- };
268
-
269
- creative: CreativeAdServerPlatform = {
270
- listCreativeFormats: async (params, ctx) => {
271
- return { formats };
272
- },
273
-
274
- syncCreatives: async (params, ctx) => {
275
- const results = [];
276
- for (const creative of params.creatives) {
277
- const now = new Date().toISOString();
278
- const existing = await ctx.store.get('creatives', creative.creative_id);
279
- await ctx.store.put('creatives', creative.creative_id, {
280
- ...creative,
281
- status: 'approved',
282
- created_date: existing?.created_date ?? now,
283
- updated_date: now,
284
- });
285
- results.push({
286
- creative_id: creative.creative_id,
287
- action: existing ? ('updated' as const) : ('created' as const),
288
- });
289
- }
290
- return { creatives: results };
291
- },
292
-
293
- listCreatives: async (params, ctx) => {
294
- // `ctx.store.list` returns `{ items, nextCursor? }` — destructure.
295
- let { items: creatives } = await ctx.store.list('creatives');
296
- if (params.filters?.format_ids) {
297
- creatives = creatives.filter(c => params.filters!.format_ids!.some(fid => fid.id === c.format_id?.id));
298
- }
299
- return {
300
- query_summary: { total_matching: creatives.length, returned: creatives.length, filters_applied: [] },
301
- creatives,
302
- pagination: { has_more: false },
303
- };
304
- },
305
-
306
- buildCreative: async (params, ctx) => {
307
- // `ctx.store.list` returns `{ items, nextCursor? }` — destructure.
308
- // Calling `.find`/`.map` on the raw result throws `TypeError` and
309
- // the dispatcher wraps it as `SERVICE_UNAVAILABLE`.
310
- const { items: creatives } = await ctx.store.list('creatives');
311
- const match = params.target_format_id
312
- ? creatives.find(c => c.format_id?.id === params.target_format_id!.id)
313
- : params.creative_id
314
- ? await ctx.store.get('creatives', params.creative_id)
315
- : null;
316
- // Return structured errors — don't throw. The dispatcher now unwraps
317
- // thrown envelopes, but throwing still releases the idempotency claim
318
- // before the throw is caught. If your handler mutated state before
319
- // throwing, a retry with the same key re-executes the write. Returning
320
- // an error envelope has the same claim-release semantics, so the rule
321
- // holds for both paths: mutate last, or don't mutate at all on error.
322
- if (!match) return adcpError('CREATIVE_NOT_FOUND', { message: 'No matching creative' });
323
- return {
324
- creative_manifest: { format_id: match.format_id, assets: match.assets ?? {} },
325
- sandbox: true,
326
- };
327
- },
328
-
329
- previewCreative: async params => {
330
- return {
331
- response_type: 'single',
332
- previews: [
333
- {
334
- preview_id: `prev_${Date.now()}`,
335
- input: { name: params.creative_manifest?.name ?? 'Preview' },
336
- renders: [
337
- urlRender({
338
- render_id: `r_${Date.now()}`,
339
- preview_url: 'https://example.com/preview.png',
340
- role: 'primary',
341
- dimensions: { width: 300, height: 250 },
342
- }),
343
- ],
344
- },
345
- ],
346
- expires_at: new Date(Date.now() + 3600000).toISOString(),
347
- };
348
- },
349
- };
350
- }
351
-
352
- const platform = new MyCreative();
353
-
354
- serve(() =>
355
- createAdcpServerFromPlatform(platform, {
356
- name: 'My Creative Agent',
357
- version: '1.0.0',
358
- idempotency,
359
- // Principal scoping for idempotency. MUST never return undefined —
360
- // every mutating request would reject as SERVICE_UNAVAILABLE.
361
- resolveSessionKey: () => 'default-principal',
362
- })
363
- );
364
- ```
93
+ **`creative-generative`** — generate from `message` + `brand.domain`; honor `quality: draft|production`; support refinement (re-send manifest in). Goes through `skills/build-generative-seller-agent/` because it's coupled with selling inventory.
365
94
 
366
- ### Key implementation detail: creative library
367
-
368
- Use `ctx.store` to persist synced creatives. The framework provides `InMemoryStateStore` by default — no need for module-level Maps or external state management.
369
-
370
- The `sync_creatives` handler adds/updates entries via `ctx.store.put('creatives', id, data)`. The `list_creatives` handler queries via `ctx.store.list('creatives')` (include `created_date` and `updated_date` in each creative). The `preview_creative` handler previews the `creative_manifest` sent in the request (no library lookup needed). The `build_creative` handler finds a synced creative by `target_format_id` (matching the format), then builds a serving tag from it.
371
-
372
- ### Format asset slot builders
373
-
374
- Ad servers and creative management platforms declare the technical acceptance contract in `Format.assets[]` — what a buyer must submit for a creative to be accepted. The spec's closed enums and field shapes are easy to get slightly wrong in a handwritten literal; strict response validation then rejects the format even when it's structurally close.
375
-
376
- Four recurring mistakes:
377
-
378
- 1. **Image** uses `formats: ('jpg' | 'png' | 'gif' | 'webp' | 'svg' | 'avif' | 'tiff' | 'pdf' | 'eps')[]` — not `file_types`. Image `aspect_ratio` matches `^\d+(\.\d+)?:\d+(\.\d+)?$` (single-valued).
379
- 2. **Video** uses `containers: ('mp4' | 'webm' | 'mov' | 'avi' | 'mkv')[]` and `codecs: ('h264' | 'h265' | 'vp8' | 'vp9' | 'av1' | 'prores')[]`. Video `aspect_ratio` is integer-only `^\d+:\d+$`. Durations are `min_duration_ms` / `max_duration_ms`.
380
- 3. **Audio** uses `formats: ('mp3' | 'aac' | 'wav' | 'ogg' | 'flac')[]`. Durations are `*_duration_ms`.
381
- 4. **`min_count` / `max_count`** live on the `repeatable_group` wrapper. Formats that render multiple items (galleries, story frames, product showcases) declare an `item_type: 'repeatable_group'` slot with `assets[]` inside — never put counts on an individual asset.
382
-
383
- Use the typed slot builders when declaring acceptance specs. `requirements` is strictly typed per `asset_type`, so misnamed fields and wrong units fail at compile time:
384
-
385
- ```typescript
386
- import {
387
- imageAssetSlot,
388
- videoAssetSlot,
389
- repeatableGroup,
390
- imageGroupAsset,
391
- textGroupAsset,
392
- } from '@adcp/sdk';
393
-
394
- // MRec banner with typed image requirements
395
- {
396
- format_id: { agent_url: AGENT_URL, id: 'display_banner_300x250' },
397
- name: 'Display Banner 300x250',
398
- renders: [{ role: 'primary', dimensions: { width: 300, height: 250 } }],
399
- assets: [
400
- imageAssetSlot({
401
- asset_id: 'image',
402
- required: true,
403
- requirements: { formats: ['jpg', 'png', 'webp'], max_file_size_kb: 200 },
404
- }),
405
- ],
406
- }
407
-
408
- // In-stream video, 6–30s
409
- {
410
- format_id: { agent_url: AGENT_URL, id: 'video_instream_16x9' },
411
- name: 'In-Stream Video 16:9',
412
- renders: [{ role: 'primary', dimensions: { width: 1920, height: 1080 } }],
413
- assets: [
414
- videoAssetSlot({
415
- asset_id: 'video',
416
- required: true,
417
- requirements: {
418
- aspect_ratio: '16:9',
419
- containers: ['mp4', 'webm'],
420
- codecs: ['h264', 'h265'],
421
- min_duration_ms: 6000,
422
- max_duration_ms: 30000,
423
- },
424
- }),
425
- ],
426
- }
427
-
428
- // Gallery format — 3 to 8 image+headline pairs. Counts on the GROUP.
429
- {
430
- format_id: { agent_url: AGENT_URL, id: 'gallery_1x1' },
431
- name: 'Image Gallery',
432
- renders: [{ role: 'primary', dimensions: { width: 1080, height: 1080 } }],
433
- assets: [
434
- repeatableGroup({
435
- asset_group_id: 'cards',
436
- required: true,
437
- min_count: 3,
438
- max_count: 8,
439
- selection_mode: 'sequential',
440
- assets: [
441
- imageGroupAsset({ asset_id: 'card_image', required: true, requirements: { aspect_ratio: '1:1', formats: ['jpg', 'png'] } }),
442
- textGroupAsset({ asset_id: 'card_headline', required: true, requirements: { max_length: 40 } }),
443
- ],
444
- }),
445
- ],
446
- }
447
- ```
448
-
449
- Ad servers whose output is a serving-tag (VAST, display tag HTML) declare those via `vastAssetSlot`, `htmlAssetSlot`, or `javascriptAssetSlot` with their respective requirement shapes (`vast_version`, `sandbox`, `module_type`).
450
-
451
- ## Idempotency
452
-
453
- AdCP v3 requires an `idempotency_key` on every mutating request — for creative agents that's `sync_creatives`, `build_creative`, and `calibrate_content`. Idempotency is already wired in the Implementation example above. The framework then handles:
454
-
455
- - Missing/malformed key → `INVALID_REQUEST` (spec pattern `^[A-Za-z0-9_.:-]{16,255}$`)
456
- - JCS-canonicalized payload hashing with same-key-different-payload → `IDEMPOTENCY_CONFLICT` (no payload leaked in the error body)
457
- - Past-TTL replay → `IDEMPOTENCY_EXPIRED` (±60s clock-skew tolerance)
458
- - Cache hits replay the cached envelope with `replayed: true` injected
459
- - `adcp.idempotency.replay_ttl_seconds` auto-declared on `get_adcp_capabilities`
460
- - Only successful responses cache — failed renders re-execute on retry
461
- - Atomic claim so concurrent retries with a fresh key don't all race to run
462
-
463
- Scoping is per-principal via `resolveSessionKey` (override with `resolveIdempotencyPrincipal` for custom scoping). `ttlSeconds` must be 3600–604800 — out of range throws at construction. If you register mutating handlers without wiring `idempotency`, the framework logs an error at server-creation time.
464
-
465
- ## Protecting your agent
466
-
467
- **An AdCP agent that accepts unauthenticated requests is non-compliant** (see `security_baseline` in the universal storyboard bundle). Ask the operator: "API key, OAuth, or both?" — then wire one of these into `serve()`.
468
-
469
- ```typescript
470
- import { serve } from '@adcp/sdk';
471
- import { verifyApiKey, verifyBearer, anyOf } from '@adcp/sdk/server';
472
-
473
- // API key — simplest, good for B2B integrations
474
- serve(createAgent, {
475
- authenticate: verifyApiKey({
476
- verify: async token => {
477
- const row = await db.api_keys.findUnique({ where: { token } });
478
- return row ? { principal: row.account_id } : null;
479
- },
480
- }),
481
- });
482
-
483
- // OAuth — best when buyers authenticate as themselves
484
- const AGENT_URL = 'https://my-agent.example.com/mcp';
485
- serve(createAgent, {
486
- publicUrl: AGENT_URL, // canonical RFC 8707 audience — also served as `resource` in protected-resource metadata
487
- authenticate: verifyBearer({
488
- jwksUri: 'https://auth.example.com/.well-known/jwks.json',
489
- issuer: 'https://auth.example.com',
490
- audience: AGENT_URL, // MUST equal publicUrl
491
- }),
492
- protectedResource: { authorization_servers: ['https://auth.example.com'] },
493
- });
494
-
495
- // Both
496
- serve(createAgent, {
497
- publicUrl: AGENT_URL,
498
- authenticate: anyOf(verifyApiKey({ verify: lookupKey }), verifyBearer({ jwksUri, issuer, audience: AGENT_URL })),
499
- protectedResource: { authorization_servers: [issuer] },
500
- });
501
- ```
502
-
503
- The framework produces RFC 6750-compliant `WWW-Authenticate: Bearer` 401s on failure, and serves `/.well-known/oauth-protected-resource<mountPath>` with `publicUrl` as the `resource` field so buyers get tokens bound to the right audience. The default JWT allowlist is asymmetric-only (RS*/ES*/PS\*/EdDSA) to prevent algorithm-confusion attacks.
504
-
505
- ## Deterministic Testing (for `creative_generative/seller` and `deterministic_testing`)
506
-
507
- Creative generative sellers — and any creative agent that wants to pass `deterministic_testing` — must expose `comply_test_controller` so the grader can force creative-status transitions deterministically. `createComplyController` handles the scaffolding:
508
-
509
- ```ts
510
- import { createComplyController } from '@adcp/sdk/testing';
511
-
512
- const controller = createComplyController({
513
- sandboxGate: input => input.auth?.sandbox === true,
514
- seed: {
515
- creative: params => creativeRepo.upsert(params.creative_id, params.fixture),
516
- },
517
- force: {
518
- creative_status: params => creativeRepo.transition(params.creative_id, params.status, params.rejection_reason),
519
- },
520
- });
521
-
522
- controller.register(server);
523
- ```
524
-
525
- `controller.register(server)` auto-emits the `capabilities.compliance_testing.scenarios` block per AdCP 3.0 — don't put `compliance_testing` in `supported_protocols`, that's a spec violation on 3.0. Throw `TestControllerError('INVALID_TRANSITION', msg, currentState)` from the adapter when the state machine disallows the transition — the helper emits the typed error envelope. Omitted adapters auto-return `UNKNOWN_SCENARIO`.
526
-
527
- Validate with: `adcp storyboard run <agent> deterministic_testing --auth $TOKEN`.
528
-
529
- ## Validate Locally
530
-
531
- **Full validation checklist:** [docs/guides/VALIDATE-YOUR-AGENT.md](../../docs/guides/VALIDATE-YOUR-AGENT.md). Creative-agent-specific commands:
95
+ ## Validate locally
532
96
 
533
97
  ```bash
534
- # Boot
535
- npx tsx agent.ts &
536
-
537
- # Happy path — the archetype you're claiming
538
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp creative_ad_server --auth $TOKEN # stateful
539
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp creative_template --auth $TOKEN # stateless
540
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp creative_generative --auth $TOKEN # brief-to-creative
541
-
542
- # Cross-cutting obligations (all creative agents)
543
- npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp \
544
- --storyboards security_baseline,idempotency,schema_validation,error_compliance --auth $TOKEN
545
-
546
- # Rejection-surface fuzz — includes preview_creative (referential, fixture-eligible)
547
- npx @adcp/sdk@latest fuzz http://localhost:3001/mcp \
548
- --tools list_creative_formats,list_creatives,get_creative_features,preview_creative \
549
- --fixture creative_ids=cre_a,cre_b \
550
- --auth-token $TOKEN
551
- ```
552
-
553
- Common failure decoder:
554
-
555
- - `response_schema` on `preview_creative` → the union schema requires manual registration; see § creative-template
556
- - `mcp_error` on creative lifecycle → confirm `sync_creatives` status enum is `approved`/`rejected`/`pending_approval`, not a custom value
557
- - `field_present` on build response → `creative_manifest` must be fully populated, not just `id`
558
-
559
- **Keep iterating until all steps pass.** Can't bind ports? `npm run compliance:skill-matrix -- --filter creative` runs an isolated end-to-end test.
560
-
561
- ## Common Mistakes
562
-
563
- | Mistake | Fix |
564
- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
565
- | Using `createTaskCapableServer` + `server.tool()` | Use `createAdcpServerFromPlatform` with a typed `creative: CreativeAdServerPlatform` (or `CreativeBuilderPlatform`) field |
566
- | Calling `createAdcpServer` directly in new code | Reach for `createAdcpServerFromPlatform`; `createAdcpServer` lives at `@adcp/sdk/server/legacy/v5` for mid-migration / escape-hatch only |
567
- | Manually registering `get_adcp_capabilities` | Auto-generated by `createAdcpServerFromPlatform` from your typed `DecisioningPlatform` — do not register it |
568
- | Calling `server.registerTool('preview_creative', ...)` | `AdcpServer` does not expose `registerTool` — put `previewCreative` in the `creative:` domain group like the other handlers |
569
- | Using module-level Maps for state | Use `ctx.store.put/get/list` — framework provides `InMemoryStateStore` by default |
570
- | Calling response builders manually in domain handlers | Handlers return raw data — response builders are auto-applied across the `creative:` group, including `preview_creative` |
571
- | `list_creatives` ignores format filter | Check `args.filters?.format_ids` and filter results |
572
- | `preview_creative` returns wrong response_type | Must be `'single'` for single creative previews |
573
- | `preview_creative` looks up by creative_id | Preview the `creative_manifest` from the request — no library lookup needed |
574
- | `build_creative` looks up by `args.creative_id` only | Storyboard sends `target_format_id` — find a synced creative matching that format |
575
- | `build_creative` missing creative_manifest | Required field — contains the built output |
576
- | `creative_manifest` includes `name` field | `CreativeManifest` has no `name` — only `format_id` and `assets` |
577
- | HTML asset uses `{ html: '...' }` | Use `{ content: '...' }` — the schema field is `content`, not `html` |
578
- | format_ids in list_creative_formats don't match what sellers reference | Sellers include your format_ids in their products — if the buyer can't look them up via list_creative_formats, creative sync breaks |
579
-
580
- ## Storyboards
581
-
582
- | Storyboard | Tests |
583
- | ---------------------- | ---------------------------------------------------------------- |
584
- | `creative_lifecycle` | Full lifecycle: format discovery → sync → list → preview → build |
585
- | `creative_template` | Stateless template rendering (build + preview only) |
586
- | `creative_sales_agent` | Sales agent that accepts pushed assets |
587
- | `creative_ad_server` | Ad server with pre-loaded library |
588
-
589
- ## Specialism Details
590
-
591
- ### <a name="specialism-creative-ad-server"></a>creative-ad-server
592
-
593
- Storyboard: `creative_ad_server`. Stateful — the library is pre-loaded; buyers do **not** push assets via `sync_creatives` at runtime. Pricing and billing round-trips are first-class.
594
-
595
- **`list_creatives`** with `include_pricing=true` returns per-creative `pricing_options`:
596
-
597
- ```typescript
598
- listCreatives: async (params, ctx) => {
599
- const { items } = await ctx.store.list('creatives');
600
- const creatives = items.map((c) => ({
601
- creative_id: c.creative_id,
602
- name: c.name,
603
- format_id: c.format_id,
604
- status: 'approved' as const,
605
- created_date: c.created_date,
606
- updated_date: c.updated_date,
607
- ...(params.include_pricing && {
608
- pricing_options: [{
609
- pricing_option_id: 'standard_cpm',
610
- model: 'cpm' as const,
611
- cpm: 2.5,
612
- currency: 'USD',
613
- }],
614
- }),
615
- }));
616
- return {
617
- query_summary: { total_matching: creatives.length, returned: creatives.length, filters_applied: [] },
618
- creatives,
619
- pagination: { has_more: false },
620
- };
621
- },
622
- ```
623
-
624
- **`build_creative`** receives `media_buy_id`, `package_id`, `target_format_id`, and `pricing_option_id`. Return a VAST tag with macro placeholders, plus `vendor_cost` at CPM = 0 (billing happens via `report_usage`):
625
-
626
- ```typescript
627
- buildCreative: async (params, ctx) => {
628
- const creative = await lookupCreativeForFormat(params.target_format_id, ctx);
629
- const vast = `<?xml version="1.0"?>
630
- <VAST version="4.2">
631
- <Ad id="${creative.creative_id}"><InLine>
632
- <Impression><![CDATA[https://adserver.example/imp?cb=[CACHEBUSTER]&mb=${params.media_buy_id}]]></Impression>
633
- <Creatives><Creative>
634
- <Linear><Duration>00:00:30</Duration>
635
- <MediaFiles><MediaFile type="video/mp4"><![CDATA[${creative.video_url}]]></MediaFile></MediaFiles>
636
- <VideoClicks><ClickThrough><![CDATA[[CLICK_URL]https://landing.example]]></ClickThrough></VideoClicks>
637
- </Linear>
638
- </Creative></Creatives>
639
- </InLine></Ad>
640
- </VAST>`;
641
-
642
- return {
643
- creative_manifest: {
644
- format_id: params.target_format_id,
645
- assets: { serving_tag: { content: vast } }, // HTML asset shape: { content: string }
646
- },
647
- pricing_option_id: params.pricing_option_id, // echo
648
- vendor_cost: { amount: 0, currency: 'USD' }, // CPM at build time — billing is separate
649
- sandbox: true,
650
- };
651
- },
652
- ```
653
-
654
- **`report_usage`** is the billing reconciliation tool. Validate `idempotency_key` (return the same response for the same key) and echo `pricing_option_id` + `reporting_period`:
655
-
656
- ```typescript
657
- reportUsage: async (params, ctx) => {
658
- const existing = await ctx.store.get('usage_reports', params.idempotency_key);
659
- if (existing) return existing; // idempotent
660
- const report = {
661
- idempotency_key: params.idempotency_key,
662
- creative_id: params.creative_id,
663
- pricing_option_id: params.pricing_option_id,
664
- reporting_period: params.reporting_period,
665
- billable_amount: { amount: params.impressions * 2.5 / 1000, currency: 'USD' },
666
- status: 'accepted' as const,
667
- };
668
- await ctx.store.put('usage_reports', params.idempotency_key, report);
669
- return report;
670
- },
671
- ```
672
-
673
- **`get_creative_delivery`** returns impressions/spend, optionally broken down by variant and filtered by `media_buy_ids`:
674
-
675
- ```typescript
676
- getCreativeDelivery: async (params, ctx) => ({
677
- reporting_period: params.reporting_period,
678
- currency: 'USD', // required top-level per get-creative-delivery-response.json
679
- creatives: (params.creative_ids ?? []).map((id) => ({
680
- creative_id: id,
681
- impressions: 12500,
682
- spend: { amount: 31.25, currency: 'USD' },
683
- by_variant: [],
684
- })),
685
- sandbox: true,
686
- }),
687
- ```
688
-
689
- Output formats returned by `list_creative_formats` for ad servers are **serving-tag formats** (VAST 4.2, display tag HTML, native JSON payload), not input visual formats.
690
-
691
- ### <a name="specialism-creative-template"></a>creative-template
692
-
693
- Storyboard: `creative_template`. Stateless — build from the inline `creative_manifest` in the request, do not call `ctx.store`.
694
-
695
- **Fork target**: `examples/hello_creative_adapter_template.ts` is the worked, passing reference adapter for this specialism. CI gates strict tsc + storyboard pass + upstream-traffic façade. Replace the `// SWAP:` markers with calls to your real backend.
696
-
697
- Formats declare `variables` the template will substitute:
698
-
699
- ```typescript
700
- import { displayRender } from '@adcp/sdk';
98
+ # Run the fork-matrix gates for both creative archetypes
99
+ npm run compliance:fork-matrix -- --test-name-pattern="hello-creative-adapter"
701
100
 
702
- listCreativeFormats: async (params) => ({
703
- formats: [{
704
- format_id: { agent_url: AGENT_URL, id: 'banner_300x250_template' },
705
- name: 'Responsive 300x250 Banner Template',
706
- type: 'display' as const,
707
- renders: [displayRender({ role: 'primary', dimensions: { width: 300, height: 250 } })],
708
- variables: [ // template-agent specific
709
- { variable_id: 'headline', type: 'text', max_length: 40 },
710
- { variable_id: 'cta', type: 'text', max_length: 20 },
711
- { variable_id: 'hero_image', type: 'image' },
712
- { variable_id: 'accent_color', type: 'color' },
713
- ],
714
- assets: [/* acceptance specs */],
715
- }],
716
- }),
101
+ # Or validate your forked agent directly against its storyboard
102
+ adcp storyboard run http://127.0.0.1:3002/mcp creative_ad_server \
103
+ --bearer "$ADCP_AUTH_TOKEN" --include-bundles --json
717
104
  ```
718
105
 
719
- `build_creative` must branch on single vs. multi-format:
720
-
721
- ```typescript
722
- buildCreative: async (params) => {
723
- const inputManifest = params.creative_manifest; // already provided — no lookup
724
-
725
- // Multi-format path (plural target_format_ids)
726
- if (params.target_format_ids?.length) {
727
- return {
728
- creative_manifests: params.target_format_ids.map((fid) => renderTemplate(fid, inputManifest)),
729
- sandbox: true,
730
- }; // wraps to buildCreativeMultiResponse
731
- }
732
-
733
- // Single-format
734
- const targetFid = params.target_format_id ?? inputManifest.format_id;
735
- return {
736
- creative_manifest: renderTemplate(targetFid, inputManifest),
737
- sandbox: true,
738
- };
739
- },
740
- ```
741
-
742
- Output can be HTML (`{ content: '<div>...</div>' }`), JavaScript tag (`{ content: '<script>...</script>' }`), or VAST XML. `asset_type: 'url'` is valid for click-through URLs.
743
-
744
- `list_creative_formats` accepts filter params (`type`, `max_width`, `max_height`). Return an empty array — not an error — when nothing matches.
745
-
746
- **`preview_creative` should return `urlRender` or `bothRender` — not `htmlRender` alone.** The creative-template storyboard asserts the preview carries a renderable URL (`previews[0].renders[0].preview_url`). An html-only render is spec-valid but fails that assertion. If your platform can render the creative to a hosted preview URL, use `urlRender`. If you only have inline HTML, use `bothRender` (emit both `preview_url: "<sandbox URL>"` and `preview_html: "<inline markup>"`).
747
-
748
- #### Audio creative-template (TTS / mix / master)
749
-
750
- Audio creative agents (AudioStack, ElevenLabs, Resemble) fit the `creative-template` archetype — stateless transform from an inline manifest to a rendered audio file. Three things differ from display:
751
-
752
- 1. **No width/height.** The `Format.renders[]` item schema has a `oneOf` — each render must satisfy either `dimensions` (width + height required) OR `parameters_from_format_id: true`. Audio has no dimensions, so audio renders go through the parameterized branch. Use `parameterizedRender({ role: 'primary' })` — it auto-injects `parameters_from_format_id: true`. Encode duration/codec/bitrate in the `format_id` parameters (declared via `accepts_parameters`), not in the render entry.
753
- 2. **Async render pipelines.** TTS → mix → master is typically minutes long. Don't block the `build_creative` call waiting for the pipeline; the platform-native SDK (AudioStack's 300s poll window, etc.) belongs inside a task worker. If the platform's API returns quickly, build synchronously; otherwise return the task envelope and emit a `creative_review` completion webhook (see the [Webhooks](#webhooks-for-async-review-pipelines) section above for the wiring).
754
- 3. **Inputs are text assets keyed by `asset_id`.** The buyer sends `creative_manifest.assets.script` (a `TextAsset` with `content: string`) — read `inputManifest.assets.script?.content`, not `.text`.
755
-
756
- Format declaration:
757
-
758
- ```typescript
759
- import { parameterizedRender } from '@adcp/sdk';
760
-
761
- listCreativeFormats: async () => ({
762
- formats: [{
763
- format_id: {
764
- agent_url: AGENT_URL,
765
- id: 'audio_ad',
766
- parameters: { duration_seconds: 30, codec: 'mp3' },
767
- },
768
- name: 'Audio Ad',
769
- type: 'audio' as const,
770
- accepts_parameters: [
771
- { parameter_id: 'duration_seconds', type: 'number' },
772
- { parameter_id: 'codec', type: 'string' },
773
- ],
774
- renders: [parameterizedRender({ role: 'primary' })],
775
- assets: [
776
- { asset_id: 'script', asset_type: 'text', required: true, item_type: 'individual', description: 'Ad script (~70-75 words for a 30s read)' },
777
- { asset_id: 'voice', asset_type: 'text', required: false, item_type: 'individual', description: 'TTS voice name (e.g. "sara", "isaac")' },
778
- { asset_id: 'music_template', asset_type: 'text', required: false, item_type: 'individual', description: 'Music-bed template; omit for voice-only' },
779
- ],
780
- }],
781
- }),
782
- ```
106
+ Each gate is the three-gate contract from [`docs/guides/EXAMPLE-TEST-CONTRACT.md`](../../docs/guides/EXAMPLE-TEST-CONTRACT.md): tsc strict / storyboard zero-failures / upstream façade. Adopters who fork extend the test file with their own adapter path and `expectedRoutes`.
783
107
 
784
- Handler inline manifest in, rendered audio out:
785
-
786
- ```typescript
787
- import { buildCreativeResponse, audioAsset } from '@adcp/sdk/server';
788
-
789
- buildCreative: async (params) => {
790
- const inputManifest = params.creative_manifest; // already inline — no lookup
791
- const targetFid = params.target_format_id ?? inputManifest.format_id;
792
-
793
- // Read inputs from the inline manifest's assets (TextAsset.content, not .text)
794
- const script = inputManifest.assets.script?.content ?? '';
795
- const voice = inputManifest.assets.voice?.content;
796
- const musicTemplate = inputManifest.assets.music_template?.content;
797
-
798
- // Platform pipeline (script → speech → mix). Wrap in a task worker if long-running.
799
- const rendered = await renderAudio({ script, voice, musicTemplate });
800
-
801
- return buildCreativeResponse({
802
- creative_manifest: {
803
- format_id: targetFid,
804
- assets: {
805
- audio: audioAsset({
806
- url: rendered.url,
807
- container_format: 'mp3',
808
- codec: 'mp3',
809
- duration_ms: rendered.durationMs,
810
- channels: 'stereo',
811
- sampling_rate_hz: 44100,
812
- }),
813
- },
814
- },
815
- sandbox: params.account?.sandbox === true,
816
- });
817
- },
818
- ```
819
-
820
- Common trap — returning platform-native fields (`{ tag_url, creative_id, media_type }`) at the top level instead of wrapping in `creative_manifest`. The wire schema rejects it; `buildCreativeResponse` catches it at compile time.
821
-
822
- ### <a name="specialism-creative-generative"></a>creative-generative
823
-
824
- Storyboard: `creative_generative`. Takes a brief (`message`) and brand reference (`brand.domain`), generates finished assets.
825
-
826
- ```typescript
827
- buildCreative: (async params => {
828
- const { message, brand, quality } = params;
829
- const brandDomain = brand?.domain ?? 'unknown';
830
- const q = quality ?? 'draft';
831
-
832
- // Multi-format: return one manifest per target
833
- if (params.target_format_ids?.length) {
834
- const manifests = await Promise.all(
835
- params.target_format_ids.map(fid => generateForFormat(fid, message, brandDomain, q))
836
- );
837
- return { creative_manifests: manifests, sandbox: true };
838
- }
839
-
840
- // Single / refinement: if params.creative_manifest is present, use its assets as a seed
841
- const targetFid = params.target_format_id ?? params.creative_manifest?.format_id;
842
- const manifest = await generateForFormat(targetFid, message, brandDomain, q, params.creative_manifest);
843
- return { creative_manifest: manifest, sandbox: true };
844
- },
845
- async function generateForFormat(fid, message, brandDomain, quality, seed) {
846
- const priorHeadline = seed?.assets?.headline?.text; // refinement — reuse buyer-approved copy
847
- // ... call your image/copy model here
848
- return {
849
- format_id: fid,
850
- assets: {
851
- generated_image: {
852
- url: `${AGENT_URL}/generated/${fid.id}-${quality}.jpg`,
853
- width: 300,
854
- height: 250,
855
- format: 'jpeg',
856
- },
857
- headline: { text: priorHeadline ?? 'Generated headline' },
858
- cta: { text: 'Shop now' },
859
- },
860
- // Provenance metadata when your output is AI-generated:
861
- provenance: {
862
- digital_source_type: 'ai',
863
- ai_tool: 'your-generator-v1',
864
- },
865
- };
866
- });
867
- ```
108
+ For deeper validation (fuzz, request-signing grading, custom invariants): [`docs/guides/VALIDATE-YOUR-AGENT.md`](../../docs/guides/VALIDATE-YOUR-AGENT.md).
868
109
 
869
- Brand resolution: fetch `https://{brand.domain}/brand.json` (or your internal brand store) to pull logos, voice, palette — use that to style the generated assets. If brand resolution fails, return `BRAND_NOT_FOUND` rather than silently using defaults.
110
+ ## Common shape gotchas
870
111
 
871
- Quality levels: `draft` is fast + cheap (thumbnails, placeholder copy); `production` is final-quality (full-resolution, real copy, brand-reviewed). Use the distinction to let buyers iterate cheaply before paying for final renders.
112
+ `BuildCreativeReturn` has 4 valid shapes (framework auto-wraps the bare manifest). `VASTAsset` requires an embedded `delivery_type` discriminator. `Format.renders[]` is a `oneOf` — `dimensions` (width + height) OR `parameters_from_format_id: true`, never both, never neither. See [`../SHAPE-GOTCHAS.md`](../SHAPE-GOTCHAS.md) schema validators catch these at runtime; type checkers don't.
872
113
 
873
- ## Reference
114
+ ## Migration notes
874
115
 
875
- - `storyboards/creative_lifecycle.yaml` full creative lifecycle storyboard
876
- - `docs/guides/BUILD-AN-AGENT.md` — SDK patterns
877
- - `docs/TYPE-SUMMARY.md` — curated type signatures
878
- - `docs/llms.txt` — full protocol reference
116
+ - 6.6 → 6.7: `defineCreativeAdServerPlatform` family drops `req: unknown` casts; `Format.renders[]` codegen is closed-shape (#1325) so typed render builders compose under strict tsc; `NoAccountCtx<TCtxMeta>` narrows the no-account tools. See [`docs/migration-6.6-to-6.7.md`](../../docs/migration-6.6-to-6.7.md).
117
+ - 4.x → 5.x: [`docs/migration-4.x-to-5.x.md`](../../docs/migration-4.x-to-5.x.md).