@adcp/sdk 12.1.1 → 13.0.0-rc.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 (410) hide show
  1. package/README.md +19 -3
  2. package/bin/adcp-fuzz.js +3 -1
  3. package/dist/lib/adapters/content-standards-adapter.d.mts +9 -9
  4. package/dist/lib/adapters/content-standards-adapter.d.ts +9 -9
  5. package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -1
  6. package/dist/lib/adapters/content-standards-adapter.js +22 -22
  7. package/dist/lib/adapters/content-standards-adapter.js.map +1 -1
  8. package/dist/lib/adapters/content-standards-adapter.mjs +18 -18
  9. package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
  10. package/dist/lib/adapters/index.d.mts +2 -2
  11. package/dist/lib/adapters/index.d.ts +2 -2
  12. package/dist/lib/adapters/index.d.ts.map +1 -1
  13. package/dist/lib/adapters/index.js +10 -10
  14. package/dist/lib/adapters/index.js.map +1 -1
  15. package/dist/lib/adapters/index.mjs +9 -9
  16. package/dist/lib/adapters/index.mjs.map +1 -1
  17. package/dist/lib/auth/oauth/provider-cache.d.mts +7 -0
  18. package/dist/lib/auth/oauth/provider-cache.d.ts +8 -0
  19. package/dist/lib/auth/oauth/provider-cache.d.ts.map +1 -0
  20. package/dist/lib/auth/oauth/provider-cache.js +44 -0
  21. package/dist/lib/auth/oauth/provider-cache.js.map +1 -0
  22. package/dist/lib/auth/oauth/provider-cache.mjs +19 -0
  23. package/dist/lib/auth/oauth/provider-cache.mjs.map +1 -0
  24. package/dist/lib/conformance/invariants/uniformError.js +1 -1
  25. package/dist/lib/conformance/invariants/uniformError.js.map +1 -1
  26. package/dist/lib/conformance/invariants/uniformError.mjs +1 -1
  27. package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
  28. package/dist/lib/conformance/runners.js +1 -1
  29. package/dist/lib/conformance/runners.js.map +1 -1
  30. package/dist/lib/conformance/runners.mjs +1 -1
  31. package/dist/lib/conformance/runners.mjs.map +1 -1
  32. package/dist/lib/conformance/seeder.js +5 -5
  33. package/dist/lib/conformance/seeder.js.map +1 -1
  34. package/dist/lib/conformance/seeder.mjs +5 -5
  35. package/dist/lib/conformance/seeder.mjs.map +1 -1
  36. package/dist/lib/core/ADCPMultiAgentClient.d.mts +26 -29
  37. package/dist/lib/core/ADCPMultiAgentClient.d.ts +26 -29
  38. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  39. package/dist/lib/core/ADCPMultiAgentClient.js +27 -19
  40. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  41. package/dist/lib/core/ADCPMultiAgentClient.mjs +27 -19
  42. package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
  43. package/dist/lib/core/AgentClient.d.mts +148 -138
  44. package/dist/lib/core/AgentClient.d.ts +148 -138
  45. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  46. package/dist/lib/core/AgentClient.js +174 -85
  47. package/dist/lib/core/AgentClient.js.map +1 -1
  48. package/dist/lib/core/AgentClient.mjs +174 -85
  49. package/dist/lib/core/AgentClient.mjs.map +1 -1
  50. package/dist/lib/core/AsyncHandler.d.mts +18 -16
  51. package/dist/lib/core/AsyncHandler.d.ts +18 -16
  52. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  53. package/dist/lib/core/AsyncHandler.js +22 -1
  54. package/dist/lib/core/AsyncHandler.js.map +1 -1
  55. package/dist/lib/core/AsyncHandler.mjs +22 -1
  56. package/dist/lib/core/AsyncHandler.mjs.map +1 -1
  57. package/dist/lib/core/ConversationTypes.d.mts +6 -2
  58. package/dist/lib/core/ConversationTypes.d.ts +6 -2
  59. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  60. package/dist/lib/core/ConversationTypes.js.map +1 -1
  61. package/dist/lib/core/CreativeAgentClient.d.mts +41 -17
  62. package/dist/lib/core/CreativeAgentClient.d.ts +41 -17
  63. package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -1
  64. package/dist/lib/core/CreativeAgentClient.js +39 -12
  65. package/dist/lib/core/CreativeAgentClient.js.map +1 -1
  66. package/dist/lib/core/CreativeAgentClient.mjs +39 -12
  67. package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
  68. package/dist/lib/core/SingleAgentClient.d.mts +127 -50
  69. package/dist/lib/core/SingleAgentClient.d.ts +127 -50
  70. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  71. package/dist/lib/core/SingleAgentClient.js +1617 -177
  72. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  73. package/dist/lib/core/SingleAgentClient.mjs +1627 -177
  74. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  75. package/dist/lib/core/TaskExecutor.d.mts +9 -0
  76. package/dist/lib/core/TaskExecutor.d.ts +9 -0
  77. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  78. package/dist/lib/core/TaskExecutor.js +136 -43
  79. package/dist/lib/core/TaskExecutor.js.map +1 -1
  80. package/dist/lib/core/TaskExecutor.mjs +136 -43
  81. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  82. package/dist/lib/index.d.mts +111 -17
  83. package/dist/lib/index.d.ts +111 -17
  84. package/dist/lib/index.d.ts.map +1 -1
  85. package/dist/lib/index.js +94 -94
  86. package/dist/lib/index.js.map +1 -1
  87. package/dist/lib/index.mjs +93 -94
  88. package/dist/lib/index.mjs.map +1 -1
  89. package/dist/lib/protocols/index.d.ts.map +1 -1
  90. package/dist/lib/protocols/index.js +6 -15
  91. package/dist/lib/protocols/index.js.map +1 -1
  92. package/dist/lib/protocols/index.mjs +6 -16
  93. package/dist/lib/protocols/index.mjs.map +1 -1
  94. package/dist/lib/protocols/mcp-modern.d.ts.map +1 -1
  95. package/dist/lib/protocols/mcp-modern.js +87 -12
  96. package/dist/lib/protocols/mcp-modern.js.map +1 -1
  97. package/dist/lib/protocols/mcp-modern.mjs +89 -12
  98. package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
  99. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  100. package/dist/lib/server/create-adcp-server.d.mts +6 -0
  101. package/dist/lib/server/create-adcp-server.d.ts +6 -0
  102. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  103. package/dist/lib/server/create-adcp-server.js +295 -48
  104. package/dist/lib/server/create-adcp-server.js.map +1 -1
  105. package/dist/lib/server/create-adcp-server.mjs +301 -50
  106. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  107. package/dist/lib/server/decisioning/assembly-helpers.d.mts +27 -13
  108. package/dist/lib/server/decisioning/assembly-helpers.d.ts +27 -13
  109. package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -1
  110. package/dist/lib/server/decisioning/assembly-helpers.js +136 -14
  111. package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -1
  112. package/dist/lib/server/decisioning/assembly-helpers.mjs +134 -13
  113. package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
  114. package/dist/lib/server/decisioning/index.d.mts +13 -12
  115. package/dist/lib/server/decisioning/index.d.ts +13 -12
  116. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  117. package/dist/lib/server/decisioning/index.js +6 -0
  118. package/dist/lib/server/decisioning/index.js.map +1 -1
  119. package/dist/lib/server/decisioning/index.mjs +9 -3
  120. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  121. package/dist/lib/server/decisioning/list-helpers.d.mts +13 -3
  122. package/dist/lib/server/decisioning/list-helpers.d.ts +13 -3
  123. package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -1
  124. package/dist/lib/server/decisioning/list-helpers.js +13 -3
  125. package/dist/lib/server/decisioning/list-helpers.js.map +1 -1
  126. package/dist/lib/server/decisioning/list-helpers.mjs +11 -2
  127. package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
  128. package/dist/lib/server/decisioning/manifest-helpers.d.mts +5 -3
  129. package/dist/lib/server/decisioning/manifest-helpers.d.ts +5 -3
  130. package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -1
  131. package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -1
  132. package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
  133. package/dist/lib/server/decisioning/proposal/dispatch.d.mts +2 -2
  134. package/dist/lib/server/decisioning/proposal/dispatch.d.ts +2 -2
  135. package/dist/lib/server/decisioning/proposal/dispatch.d.ts.map +1 -1
  136. package/dist/lib/server/decisioning/proposal/dispatch.js.map +1 -1
  137. package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
  138. package/dist/lib/server/decisioning/proposal/index.d.mts +1 -1
  139. package/dist/lib/server/decisioning/proposal/index.d.ts +1 -1
  140. package/dist/lib/server/decisioning/proposal/index.d.ts.map +1 -1
  141. package/dist/lib/server/decisioning/proposal/index.js.map +1 -1
  142. package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
  143. package/dist/lib/server/decisioning/proposal/lifecycle.d.mts +3 -2
  144. package/dist/lib/server/decisioning/proposal/lifecycle.d.ts +3 -2
  145. package/dist/lib/server/decisioning/proposal/lifecycle.d.ts.map +1 -1
  146. package/dist/lib/server/decisioning/proposal/lifecycle.js.map +1 -1
  147. package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
  148. package/dist/lib/server/decisioning/proposal/mock-manager.d.mts +3 -3
  149. package/dist/lib/server/decisioning/proposal/mock-manager.d.ts +3 -3
  150. package/dist/lib/server/decisioning/proposal/mock-manager.d.ts.map +1 -1
  151. package/dist/lib/server/decisioning/proposal/mock-manager.js.map +1 -1
  152. package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
  153. package/dist/lib/server/decisioning/proposal/types.d.mts +10 -6
  154. package/dist/lib/server/decisioning/proposal/types.d.ts +10 -6
  155. package/dist/lib/server/decisioning/proposal/types.d.ts.map +1 -1
  156. package/dist/lib/server/decisioning/proposal/types.js.map +1 -1
  157. package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
  158. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +21 -2
  159. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +21 -2
  160. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  161. package/dist/lib/server/decisioning/runtime/from-platform.js +754 -81
  162. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  163. package/dist/lib/server/decisioning/runtime/from-platform.mjs +763 -81
  164. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  165. package/dist/lib/server/decisioning/specialisms/brand-rights.d.mts +9 -9
  166. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +9 -9
  167. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -1
  168. package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -1
  169. package/dist/lib/server/decisioning/specialisms/content-standards.d.mts +16 -16
  170. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +16 -16
  171. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -1
  172. package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -1
  173. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.mts +15 -13
  174. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +15 -13
  175. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -1
  176. package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -1
  177. package/dist/lib/server/decisioning/specialisms/creative.d.mts +12 -11
  178. package/dist/lib/server/decisioning/specialisms/creative.d.ts +12 -11
  179. package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -1
  180. package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -1
  181. package/dist/lib/server/decisioning/specialisms/sales.d.mts +25 -15
  182. package/dist/lib/server/decisioning/specialisms/sales.d.ts +25 -15
  183. package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
  184. package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
  185. package/dist/lib/server/index.d.mts +3 -3
  186. package/dist/lib/server/index.d.ts +3 -3
  187. package/dist/lib/server/index.d.ts.map +1 -1
  188. package/dist/lib/server/index.js +72 -72
  189. package/dist/lib/server/index.js.map +1 -1
  190. package/dist/lib/server/index.mjs +36 -36
  191. package/dist/lib/server/index.mjs.map +1 -1
  192. package/dist/lib/server/legacy/v5/index.d.mts +1 -0
  193. package/dist/lib/server/legacy/v5/index.d.ts +1 -0
  194. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
  195. package/dist/lib/server/legacy/v5/index.js +74 -1
  196. package/dist/lib/server/legacy/v5/index.js.map +1 -1
  197. package/dist/lib/server/legacy/v5/index.mjs +75 -1
  198. package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
  199. package/dist/lib/server/responses.d.mts +2 -2
  200. package/dist/lib/server/responses.d.ts +2 -2
  201. package/dist/lib/server/responses.js.map +1 -1
  202. package/dist/lib/server/responses.mjs.map +1 -1
  203. package/dist/lib/testing/client.js +1 -1
  204. package/dist/lib/testing/client.js.map +1 -1
  205. package/dist/lib/testing/client.mjs +1 -1
  206. package/dist/lib/testing/client.mjs.map +1 -1
  207. package/dist/lib/testing/scenarios/brand-rights.js +6 -6
  208. package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
  209. package/dist/lib/testing/scenarios/brand-rights.mjs +6 -6
  210. package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
  211. package/dist/lib/testing/scenarios/creative.js +7 -7
  212. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  213. package/dist/lib/testing/scenarios/creative.mjs +7 -7
  214. package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
  215. package/dist/lib/testing/scenarios/discovery.js +2 -2
  216. package/dist/lib/testing/scenarios/discovery.js.map +1 -1
  217. package/dist/lib/testing/scenarios/discovery.mjs +2 -2
  218. package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
  219. package/dist/lib/testing/scenarios/edge-cases.js +11 -11
  220. package/dist/lib/testing/scenarios/edge-cases.js.map +1 -1
  221. package/dist/lib/testing/scenarios/edge-cases.mjs +11 -11
  222. package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
  223. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  224. package/dist/lib/testing/scenarios/governance.js +16 -22
  225. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  226. package/dist/lib/testing/scenarios/governance.mjs +16 -22
  227. package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
  228. package/dist/lib/testing/scenarios/media-buy.js +5 -5
  229. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  230. package/dist/lib/testing/scenarios/media-buy.mjs +5 -5
  231. package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
  232. package/dist/lib/testing/scenarios/schema-compliance.js +1 -1
  233. package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -1
  234. package/dist/lib/testing/scenarios/schema-compliance.mjs +1 -1
  235. package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
  236. package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -1
  237. package/dist/lib/testing/scenarios/trusted-match.js +4 -3
  238. package/dist/lib/testing/scenarios/trusted-match.js.map +1 -1
  239. package/dist/lib/testing/scenarios/trusted-match.mjs +4 -3
  240. package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
  241. package/dist/lib/testing/storyboard/shape-drift-hints.d.mts +3 -4
  242. package/dist/lib/testing/storyboard/shape-drift-hints.d.ts +3 -4
  243. package/dist/lib/testing/storyboard/shape-drift-hints.d.ts.map +1 -1
  244. package/dist/lib/testing/storyboard/shape-drift-hints.js +27 -27
  245. package/dist/lib/testing/storyboard/shape-drift-hints.js.map +1 -1
  246. package/dist/lib/testing/storyboard/shape-drift-hints.mjs +27 -27
  247. package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
  248. package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
  249. package/dist/lib/testing/storyboard/task-map.js +43 -5
  250. package/dist/lib/testing/storyboard/task-map.js.map +1 -1
  251. package/dist/lib/testing/storyboard/task-map.mjs +43 -5
  252. package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
  253. package/dist/lib/testing/test-helpers.d.mts +2 -2
  254. package/dist/lib/testing/test-helpers.d.ts +2 -2
  255. package/dist/lib/testing/test-helpers.js.map +1 -1
  256. package/dist/lib/testing/test-helpers.mjs.map +1 -1
  257. package/dist/lib/types/adcp.d.mts +14 -14
  258. package/dist/lib/types/adcp.d.ts +14 -14
  259. package/dist/lib/types/adcp.d.ts.map +1 -1
  260. package/dist/lib/types/adcp.js.map +1 -1
  261. package/dist/lib/types/adcp.mjs.map +1 -1
  262. package/dist/lib/types/index.d.mts +2 -2
  263. package/dist/lib/types/index.d.ts +2 -2
  264. package/dist/lib/types/index.d.ts.map +1 -1
  265. package/dist/lib/types/index.js.map +1 -1
  266. package/dist/lib/types/index.mjs.map +1 -1
  267. package/dist/lib/utils/capabilities.d.mts +6 -0
  268. package/dist/lib/utils/capabilities.d.ts +6 -0
  269. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  270. package/dist/lib/utils/capabilities.js +4 -0
  271. package/dist/lib/utils/capabilities.js.map +1 -1
  272. package/dist/lib/utils/capabilities.mjs +4 -0
  273. package/dist/lib/utils/capabilities.mjs.map +1 -1
  274. package/dist/lib/utils/creative-delivery.d.mts +52 -10
  275. package/dist/lib/utils/creative-delivery.d.ts +52 -10
  276. package/dist/lib/utils/creative-delivery.d.ts.map +1 -1
  277. package/dist/lib/utils/creative-delivery.js +104 -9
  278. package/dist/lib/utils/creative-delivery.js.map +1 -1
  279. package/dist/lib/utils/creative-delivery.mjs +104 -8
  280. package/dist/lib/utils/creative-delivery.mjs.map +1 -1
  281. package/dist/lib/utils/format-assets.d.mts +41 -38
  282. package/dist/lib/utils/format-assets.d.ts +41 -38
  283. package/dist/lib/utils/format-assets.d.ts.map +1 -1
  284. package/dist/lib/utils/format-assets.js +3 -1
  285. package/dist/lib/utils/format-assets.js.map +1 -1
  286. package/dist/lib/utils/format-assets.mjs +3 -1
  287. package/dist/lib/utils/format-assets.mjs.map +1 -1
  288. package/dist/lib/utils/index.d.mts +8 -8
  289. package/dist/lib/utils/index.d.ts +8 -8
  290. package/dist/lib/utils/index.d.ts.map +1 -1
  291. package/dist/lib/utils/index.js +11 -9
  292. package/dist/lib/utils/index.js.map +1 -1
  293. package/dist/lib/utils/index.mjs +9 -8
  294. package/dist/lib/utils/index.mjs.map +1 -1
  295. package/dist/lib/utils/preview-utils.d.mts +11 -8
  296. package/dist/lib/utils/preview-utils.d.ts +11 -8
  297. package/dist/lib/utils/preview-utils.d.ts.map +1 -1
  298. package/dist/lib/utils/preview-utils.js +4 -4
  299. package/dist/lib/utils/preview-utils.js.map +1 -1
  300. package/dist/lib/utils/preview-utils.mjs +3 -3
  301. package/dist/lib/utils/preview-utils.mjs.map +1 -1
  302. package/dist/lib/utils/tool-request-schemas.d.mts +2 -2
  303. package/dist/lib/utils/tool-request-schemas.d.ts +2 -2
  304. package/dist/lib/v2/projection/aao-reference-formats.json +492 -0
  305. package/dist/lib/v2/projection/augment-response.d.mts +31 -11
  306. package/dist/lib/v2/projection/augment-response.d.ts +31 -11
  307. package/dist/lib/v2/projection/augment-response.d.ts.map +1 -1
  308. package/dist/lib/v2/projection/augment-response.js +233 -27
  309. package/dist/lib/v2/projection/augment-response.js.map +1 -1
  310. package/dist/lib/v2/projection/augment-response.mjs +232 -27
  311. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  312. package/dist/lib/v2/projection/builders.d.mts +7 -6
  313. package/dist/lib/v2/projection/builders.d.ts +7 -6
  314. package/dist/lib/v2/projection/builders.d.ts.map +1 -1
  315. package/dist/lib/v2/projection/builders.js +11 -8
  316. package/dist/lib/v2/projection/builders.js.map +1 -1
  317. package/dist/lib/v2/projection/builders.mjs +9 -6
  318. package/dist/lib/v2/projection/builders.mjs.map +1 -1
  319. package/dist/lib/v2/projection/catalog-snapshot.d.mts +47 -0
  320. package/dist/lib/v2/projection/catalog-snapshot.d.ts +48 -0
  321. package/dist/lib/v2/projection/catalog-snapshot.d.ts.map +1 -0
  322. package/dist/lib/v2/projection/catalog-snapshot.js +291 -0
  323. package/dist/lib/v2/projection/catalog-snapshot.js.map +1 -0
  324. package/dist/lib/v2/projection/catalog-snapshot.mjs +265 -0
  325. package/dist/lib/v2/projection/catalog-snapshot.mjs.map +1 -0
  326. package/dist/lib/v2/projection/catalog.d.mts +23 -2
  327. package/dist/lib/v2/projection/catalog.d.ts +23 -2
  328. package/dist/lib/v2/projection/catalog.d.ts.map +1 -1
  329. package/dist/lib/v2/projection/catalog.js +34 -10
  330. package/dist/lib/v2/projection/catalog.js.map +1 -1
  331. package/dist/lib/v2/projection/catalog.mjs +33 -10
  332. package/dist/lib/v2/projection/catalog.mjs.map +1 -1
  333. package/dist/lib/v2/projection/creative-delivery.d.mts +157 -0
  334. package/dist/lib/v2/projection/creative-delivery.d.ts +158 -0
  335. package/dist/lib/v2/projection/creative-delivery.d.ts.map +1 -0
  336. package/dist/lib/v2/projection/creative-delivery.js +967 -0
  337. package/dist/lib/v2/projection/creative-delivery.js.map +1 -0
  338. package/dist/lib/v2/projection/creative-delivery.mjs +941 -0
  339. package/dist/lib/v2/projection/creative-delivery.mjs.map +1 -0
  340. package/dist/lib/v2/projection/index.d.mts +8 -6
  341. package/dist/lib/v2/projection/index.d.ts +8 -6
  342. package/dist/lib/v2/projection/index.d.ts.map +1 -1
  343. package/dist/lib/v2/projection/index.js +26 -4
  344. package/dist/lib/v2/projection/index.js.map +1 -1
  345. package/dist/lib/v2/projection/index.mjs +28 -4
  346. package/dist/lib/v2/projection/index.mjs.map +1 -1
  347. package/dist/lib/v2/projection/legacy-metadata.d.mts +21 -0
  348. package/dist/lib/v2/projection/legacy-metadata.d.ts +22 -0
  349. package/dist/lib/v2/projection/legacy-metadata.d.ts.map +1 -0
  350. package/dist/lib/v2/projection/legacy-metadata.js +73 -0
  351. package/dist/lib/v2/projection/legacy-metadata.js.map +1 -0
  352. package/dist/lib/v2/projection/legacy-metadata.mjs +45 -0
  353. package/dist/lib/v2/projection/legacy-metadata.mjs.map +1 -0
  354. package/dist/lib/v2/projection/types.d.mts +29 -23
  355. package/dist/lib/v2/projection/types.d.ts +29 -23
  356. package/dist/lib/v2/projection/types.d.ts.map +1 -1
  357. package/dist/lib/v2/projection/types.js.map +1 -1
  358. package/dist/lib/v2/projection/v1-to-v2.d.mts +29 -6
  359. package/dist/lib/v2/projection/v1-to-v2.d.ts +29 -6
  360. package/dist/lib/v2/projection/v1-to-v2.d.ts.map +1 -1
  361. package/dist/lib/v2/projection/v1-to-v2.js +218 -9
  362. package/dist/lib/v2/projection/v1-to-v2.js.map +1 -1
  363. package/dist/lib/v2/projection/v1-to-v2.mjs +219 -10
  364. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  365. package/dist/lib/v2/projection/v2-to-v1.d.mts +31 -2
  366. package/dist/lib/v2/projection/v2-to-v1.d.ts +31 -2
  367. package/dist/lib/v2/projection/v2-to-v1.d.ts.map +1 -1
  368. package/dist/lib/v2/projection/v2-to-v1.js +138 -7
  369. package/dist/lib/v2/projection/v2-to-v1.js.map +1 -1
  370. package/dist/lib/v2/projection/v2-to-v1.mjs +135 -6
  371. package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
  372. package/dist/lib/v2/projection/write-side.d.mts +12 -13
  373. package/dist/lib/v2/projection/write-side.d.ts +12 -13
  374. package/dist/lib/v2/projection/write-side.d.ts.map +1 -1
  375. package/dist/lib/v2/projection/write-side.js +16 -12
  376. package/dist/lib/v2/projection/write-side.js.map +1 -1
  377. package/dist/lib/v2/projection/write-side.mjs +16 -12
  378. package/dist/lib/v2/projection/write-side.mjs.map +1 -1
  379. package/dist/lib/version.d.mts +3 -3
  380. package/dist/lib/version.d.ts +3 -3
  381. package/dist/lib/version.d.ts.map +1 -1
  382. package/dist/lib/version.js +3 -3
  383. package/dist/lib/version.js.map +1 -1
  384. package/dist/lib/version.mjs +3 -3
  385. package/dist/lib/version.mjs.map +1 -1
  386. package/docs/guides/BUILD-AN-AGENT.md +7 -2
  387. package/docs/guides/PREVIEW-ASSET-DURABILITY.md +6 -2
  388. package/docs/llms.txt +1 -0
  389. package/examples/README.md +1 -1
  390. package/examples/batch-preview-test.ts +3 -3
  391. package/examples/conversation-client.ts +2 -2
  392. package/examples/debug-preview-response.ts +1 -1
  393. package/examples/decisioning-platform-broadcast-tv.ts +10 -4
  394. package/examples/decisioning-platform-mock-seller.ts +16 -9
  395. package/examples/decisioning-platform-programmatic.ts +18 -7
  396. package/examples/error-compliant-server.ts +26 -16
  397. package/examples/generative-creative-demo.ts +7 -19
  398. package/examples/hello_creative_adapter_ad_server.ts +37 -16
  399. package/examples/hello_creative_adapter_template.ts +12 -10
  400. package/examples/hello_seller_adapter_guaranteed.ts +52 -23
  401. package/examples/hello_seller_adapter_multi_tenant.ts +6 -3
  402. package/examples/hello_seller_adapter_non_guaranteed.ts +54 -26
  403. package/examples/hello_seller_adapter_proposal_mode.ts +40 -14
  404. package/examples/hello_seller_adapter_social.ts +2 -7
  405. package/examples/inspect-card-formats.ts +1 -1
  406. package/examples/simple-getting-started.ts +1 -1
  407. package/examples/test-helpers-demo.ts +1 -1
  408. package/package.json +2 -2
  409. package/skills/build-decisioning-creative-template/SKILL.md +11 -11
  410. package/skills/build-decisioning-platform/advanced/REFERENCE.md +8 -2
@@ -12,7 +12,7 @@ async function testErrorHandling(agentUrl, options) {
12
12
  const { result, step } = await runStep(
13
13
  "Invalid product_id error response",
14
14
  "create_media_buy",
15
- async () => client.createMediaBuy({
15
+ async () => client.createMediaBuyLegacy({
16
16
  idempotency_key: `error-test-${Date.now()}`,
17
17
  brand_manifest: {
18
18
  name: "Error Test Brand",
@@ -59,7 +59,7 @@ async function testErrorHandling(agentUrl, options) {
59
59
  const { result, step } = await runStep(
60
60
  "Invalid format_id error response",
61
61
  "sync_creatives",
62
- async () => client.syncCreatives({
62
+ async () => client.syncCreativesLegacy({
63
63
  account: resolveAccount(options),
64
64
  creatives: [
65
65
  {
@@ -127,7 +127,7 @@ async function testValidation(agentUrl, options) {
127
127
  const { result, step } = await runStep(
128
128
  "Invalid pacing enum value",
129
129
  "create_media_buy",
130
- async () => client.createMediaBuy({
130
+ async () => client.createMediaBuyLegacy({
131
131
  idempotency_key: `validation-test-${Date.now()}`,
132
132
  brand_manifest: { name: "Validation Test", url: "https://test.example" },
133
133
  start_time: new Date(Date.now() + 864e5).toISOString(),
@@ -155,7 +155,7 @@ async function testValidation(agentUrl, options) {
155
155
  const { result, step } = await runStep(
156
156
  "Negative budget rejection",
157
157
  "create_media_buy",
158
- async () => client.createMediaBuy({
158
+ async () => client.createMediaBuyLegacy({
159
159
  idempotency_key: `negative-budget-test-${Date.now()}`,
160
160
  brand_manifest: { name: "Negative Budget Test", url: "https://test.example" },
161
161
  start_time: new Date(Date.now() + 864e5).toISOString(),
@@ -182,7 +182,7 @@ async function testValidation(agentUrl, options) {
182
182
  const { result, step } = await runStep(
183
183
  "Invalid creative weight (> 100)",
184
184
  "sync_creatives",
185
- async () => client.syncCreatives({
185
+ async () => client.syncCreativesLegacy({
186
186
  account: resolveAccount(options),
187
187
  creatives: [
188
188
  {
@@ -215,7 +215,7 @@ async function testValidation(agentUrl, options) {
215
215
  const { result, step } = await runStep(
216
216
  "Empty creatives array handling",
217
217
  "sync_creatives",
218
- async () => client.syncCreatives({
218
+ async () => client.syncCreativesLegacy({
219
219
  account: resolveAccount(options),
220
220
  creatives: []
221
221
  })
@@ -295,7 +295,7 @@ async function testPricingEdgeCases(agentUrl, options) {
295
295
  const { result, step } = await runStep(
296
296
  "Auction pricing without bid_price",
297
297
  "create_media_buy",
298
- async () => client.createMediaBuy({
298
+ async () => client.createMediaBuyLegacy({
299
299
  idempotency_key: `auction-no-bid-${Date.now()}`,
300
300
  brand_manifest: { name: "Auction Test", url: "https://test.example" },
301
301
  start_time: new Date(Date.now() + 864e5).toISOString(),
@@ -324,7 +324,7 @@ async function testPricingEdgeCases(agentUrl, options) {
324
324
  const { result, step } = await runStep(
325
325
  "Budget below min_spend_per_package",
326
326
  "create_media_buy",
327
- async () => client.createMediaBuy({
327
+ async () => client.createMediaBuyLegacy({
328
328
  idempotency_key: `under-min-spend-${Date.now()}`,
329
329
  brand_manifest: { name: "Min Spend Test", url: "https://test.example" },
330
330
  start_time: new Date(Date.now() + 864e5).toISOString(),
@@ -360,7 +360,7 @@ async function testTemporalValidation(agentUrl, options) {
360
360
  const { result: endBeforeStart, step: step1 } = await runStep(
361
361
  "End time before start time",
362
362
  "create_media_buy",
363
- async () => client.createMediaBuy({
363
+ async () => client.createMediaBuyLegacy({
364
364
  idempotency_key: `temporal-test-${Date.now()}`,
365
365
  brand_manifest: { name: "Temporal Test", url: "https://test.example" },
366
366
  start_time: new Date(Date.now() + 6048e5).toISOString(),
@@ -390,7 +390,7 @@ async function testTemporalValidation(agentUrl, options) {
390
390
  const { result: pastStart, step: step2 } = await runStep(
391
391
  "Start time in the past",
392
392
  "create_media_buy",
393
- async () => client.createMediaBuy({
393
+ async () => client.createMediaBuyLegacy({
394
394
  idempotency_key: `past-start-${Date.now()}`,
395
395
  brand_manifest: { name: "Past Start Test", url: "https://test.example" },
396
396
  start_time: new Date(Date.now() - 864e5).toISOString(),
@@ -490,7 +490,7 @@ async function testResponseConsistency(agentUrl, options) {
490
490
  const { result, step } = await runStep(
491
491
  "Check list_authorized_properties consistency",
492
492
  "list_authorized_properties",
493
- async () => client.executeTask("list_authorized_properties", {})
493
+ async () => client.executeCustomTask("list_authorized_properties", {})
494
494
  );
495
495
  if (result?.success && result?.data) {
496
496
  const data = result.data;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/testing/scenarios/edge-cases.ts"],"sourcesContent":["/**\n * Edge Case Testing Scenarios\n *\n * Tests various edge cases, error handling, and validation:\n * - Error handling (invalid inputs, non-existent IDs)\n * - Schema validation (negative values, invalid enums)\n * - Pricing edge cases (auction vs fixed, min spend, floor prices)\n * - Behavior analysis\n * - Temporal validation\n * - Response consistency\n *\n * These scenarios are designed to find bugs and ensure agents\n * properly handle edge cases according to the AdCP spec.\n */\n\nimport type { Product, PricingOption } from '../../types/core.generated';\nimport type {\n CreateMediaBuyRequest,\n GetProductsRequest,\n SyncCreativesRequest,\n GetMediaBuyDeliveryRequest,\n GetProductsResponse,\n ListCreativesResponse,\n} from '../../types/tools.generated';\nimport type { TestOptions, TestStepResult, AgentProfile, TaskResult } from '../types';\nimport { getOrCreateClient, runStep, resolveBrand, resolveAccount, getOrDiscoverProfile } from '../client';\nimport { testDiscovery } from './discovery';\n\n/**\n * Test: Error Handling\n * Verifies the agent returns proper discriminated union error responses\n */\nexport async function testErrorHandling(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid product_id in create_media_buy\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid product_id error response',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `error-test-${Date.now()}`,\n brand_manifest: {\n name: 'Error Test Brand',\n url: 'https://test.example',\n },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'NONEXISTENT_PRODUCT_ID_12345',\n budget: 1000,\n pricing_option_id: 'nonexistent-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid product_id - should have returned error';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid product_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 2: Missing required field in get_products\n if (profile.tools.includes('get_products')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty request handling',\n 'get_products',\n async () => client.getProducts({} as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty get_products request (permissive)';\n } else {\n // !result (threw) or result.success === false — both mean stricter validation\n step.passed = true;\n step.details = `Agent requires brief or brand (stricter validation)${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 3: Invalid format_id in sync_creatives\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid format_id error response',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `invalid-format-test-${Date.now()}`,\n name: 'Invalid Format Test',\n format_id: { id: 'TOTALLY_INVALID_FORMAT_ID_999' },\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts unknown format_ids (permissive mode)';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid format_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 4: get_media_buy_delivery with non-existent media_buy_id\n if (profile.tools.includes('get_media_buy_delivery')) {\n const { result, step } = await runStep<TaskResult>(\n 'Non-existent media_buy_id error',\n 'get_media_buy_delivery',\n async () =>\n client.getMediaBuyDelivery({\n media_buy_ids: ['NONEXISTENT_MEDIA_BUY_ID_99999'],\n } as unknown as GetMediaBuyDeliveryRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n const data = result.data as unknown as Record<string, unknown> | undefined;\n const deliveries = (data?.deliveries || data?.media_buys || []) as unknown[];\n if (deliveries.length === 0) {\n step.passed = true;\n step.details = 'Agent returned empty deliveries for non-existent media buy';\n } else {\n step.passed = false;\n step.error = 'Agent returned deliveries for non-existent media_buy_id';\n }\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly returned error for non-existent media buy${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Validation\n * Tests that agents properly validate inputs and reject malformed requests\n */\nexport async function testValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid enum value for pacing\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid pacing enum value',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `validation-test-${Date.now()}`,\n brand_manifest: { name: 'Validation Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n pacing: 'INVALID_PACING_VALUE' as unknown as string,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid pacing value - should validate enums';\n } else {\n step.passed = true;\n step.details = `Agent rejected invalid pacing enum value${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Negative budget (definitely invalid)\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Negative budget rejection',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `negative-budget-test-${Date.now()}`,\n brand_manifest: { name: 'Negative Budget Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: -500,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'CRITICAL: Agent accepted negative budget - must validate minimum: 0';\n } else {\n step.passed = true;\n step.details = `Agent correctly rejected negative budget${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 3: Invalid creative weight (> 100)\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid creative weight (> 100)',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `weight-test-${Date.now()}`,\n name: 'Weight Test Creative',\n format_id: { agent_url: 'https://creative.adcontextprotocol.org', id: 'display_300x250' },\n weight: 150,\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted weight > 100 - should validate maximum: 100';\n } else {\n step.passed = true;\n step.details = `Agent rejected weight > 100${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 4: Empty creatives array\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty creatives array handling',\n 'sync_creatives',\n async () =>\n client.syncCreatives({\n account: resolveAccount(options),\n creatives: [],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty creatives array (returns empty result)';\n } else {\n // !result (threw) or result.success === false — both mean agent rejected\n step.passed = true;\n step.details = `Agent rejected empty creatives array${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Pricing Edge Cases\n * Tests auction vs fixed pricing, min spend requirements, bid_price handling\n */\nexport async function testPricingEdgeCases(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { steps: discoverySteps, profile } = await testDiscovery(agentUrl, options);\n steps.push(...discoverySteps);\n\n if (!profile?.tools.includes('create_media_buy') || !profile?.tools.includes('get_products')) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'Agent does not support create_media_buy or get_products',\n });\n return { steps, profile };\n }\n\n // Get products to find actual pricing options\n const { result: productsResult } = await runStep<TaskResult>(\n 'Fetch products for pricing analysis',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products with pricing details',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const productsData = productsResult?.data as GetProductsResponse | undefined;\n const products = productsData?.products;\n if (!products?.length) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'No products available for pricing tests',\n });\n return { steps, profile };\n }\n\n // Analyze products for auction vs fixed pricing\n const auctionProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const fixedProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const productsWithMinSpend: { product: Product; pricingOption: PricingOption; minSpend: number }[] = [];\n\n for (const product of products) {\n for (const po of product.pricing_options || []) {\n if (!('fixed_price' in po) && (po.floor_price !== undefined || po.price_guidance !== undefined)) {\n auctionProducts.push({ product, pricingOption: po });\n } else if ('fixed_price' in po) {\n fixedProducts.push({ product, pricingOption: po });\n }\n if (po.min_spend_per_package != null && po.min_spend_per_package > 0) {\n productsWithMinSpend.push({\n product,\n pricingOption: po,\n minSpend: po.min_spend_per_package,\n });\n }\n }\n }\n\n steps.push({\n step: 'Analyze pricing options',\n passed: true,\n duration_ms: 0,\n details: `Found ${fixedProducts.length} fixed, ${auctionProducts.length} auction, ${productsWithMinSpend.length} with min spend`,\n });\n\n // Test 1: Auction pricing without bid_price (should fail)\n if (auctionProducts.length > 0) {\n const { product, pricingOption } = auctionProducts[0]!;\n const { result, step } = await runStep<TaskResult>(\n 'Auction pricing without bid_price',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `auction-no-bid-${Date.now()}`,\n brand_manifest: { name: 'Auction Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: 5000,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted auction pricing without bid_price - should require it';\n } else {\n step.passed = true;\n step.details = `Agent correctly requires bid_price for auction pricing${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Budget below min_spend_per_package\n if (productsWithMinSpend.length > 0) {\n const { product, pricingOption, minSpend } = productsWithMinSpend[0]!;\n const underBudget = minSpend * 0.5;\n\n const { result, step } = await runStep<TaskResult>(\n 'Budget below min_spend_per_package',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `under-min-spend-${Date.now()}`,\n brand_manifest: { name: 'Min Spend Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: underBudget,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = `Agent accepted budget ${underBudget} below min_spend ${minSpend}`;\n } else {\n step.passed = true;\n step.details = `Agent rejected budget ${underBudget} below min_spend ${minSpend}${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Temporal Validation\n * Tests date/time ordering and format validation\n */\nexport async function testTemporalValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed || !profile.tools.includes('create_media_buy')) {\n return { steps, profile };\n }\n\n // Test 1: End time before start time\n const { result: endBeforeStart, step: step1 } = await runStep<TaskResult>(\n 'End time before start time',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `temporal-test-${Date.now()}`,\n brand_manifest: { name: 'Temporal Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n end_time: new Date(Date.now() + 86400000).toISOString(), // 1 day from now (before start!)\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!endBeforeStart) {\n // runStep caught an exception — agent rejected at transport level, which counts as rejection\n step1.passed = true;\n step1.details = `Agent rejected end_time before start_time (threw error)`;\n } else if (endBeforeStart.success) {\n step1.passed = false;\n step1.error = 'Agent accepted end_time before start_time - must validate';\n } else {\n step1.passed = true;\n step1.details = `Agent correctly rejected end_time before start_time${endBeforeStart.error ? `: ${endBeforeStart.error}` : ''}`;\n }\n steps.push(step1);\n\n // Test 2: Start time in the past\n const { result: pastStart, step: step2 } = await runStep<TaskResult>(\n 'Start time in the past',\n 'create_media_buy',\n async () =>\n client.createMediaBuy({\n idempotency_key: `past-start-${Date.now()}`,\n brand_manifest: { name: 'Past Start Test', url: 'https://test.example' },\n start_time: new Date(Date.now() - 86400000).toISOString(), // Yesterday\n end_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!pastStart) {\n // runStep caught an exception — agent rejected at transport level\n step2.passed = true;\n step2.details = 'Agent rejected start_time in the past (threw error)';\n } else if (pastStart.success) {\n step2.passed = true;\n step2.details = 'Agent accepts start_time in past (may auto-adjust)';\n } else {\n step2.passed = true;\n step2.details = `Agent rejected start_time in the past${pastStart.error ? `: ${pastStart.error}` : ''}`;\n }\n steps.push(step2);\n\n return { steps, profile };\n}\n\n/**\n * Test: Behavior Analysis\n * Analyzes agent behavioral characteristics\n */\nexport async function testBehaviorAnalysis(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Does get_products require brand?\n if (profile.tools.includes('get_products')) {\n const { result: withoutBrand, step: step1 } = await runStep<TaskResult>(\n 'get_products without brand',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show me all available products',\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const withoutBrandProducts = (withoutBrand?.data as GetProductsResponse | undefined)?.products;\n if (withoutBrand?.success && withoutBrandProducts?.length) {\n step1.details = `Returns ${withoutBrandProducts.length} products without brand`;\n } else if (withoutBrand && !withoutBrand.success) {\n step1.details = 'Requires brand for product discovery';\n }\n steps.push(step1);\n\n // Test 2: Are results filtered by brief?\n const { result: specificBrief, step: step2 } = await runStep<TaskResult>(\n 'get_products with specific brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Looking specifically for podcast audio advertising only',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const { result: broadBrief } = await runStep<TaskResult>(\n 'get_products with broad brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products across all channels and formats',\n brand: resolveBrand(options),\n } as unknown as GetProductsRequest) as Promise<TaskResult>\n );\n\n const specificProducts = (specificBrief?.data as GetProductsResponse | undefined)?.products;\n const broadProducts = (broadBrief?.data as GetProductsResponse | undefined)?.products;\n const specificCount = specificProducts?.length || 0;\n const broadCount = broadProducts?.length || 0;\n\n if (specificCount < broadCount) {\n step2.passed = true;\n step2.details = `Brief filtering: specific=${specificCount}, broad=${broadCount} (filtered)`;\n } else if (specificCount === broadCount && broadCount > 0) {\n step2.passed = true;\n step2.details = `No brief filtering: specific=${specificCount}, broad=${broadCount} (same)`;\n } else {\n step2.details = `Brief filtering unclear: specific=${specificCount}, broad=${broadCount}`;\n }\n steps.push(step2);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Response Consistency\n * Checks for schema errors, pagination bugs, data mismatches\n */\nexport async function testResponseConsistency(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test list_authorized_properties consistency\n if (profile.tools.includes('list_authorized_properties')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_authorized_properties consistency',\n 'list_authorized_properties',\n async () => client.executeTask('list_authorized_properties', {}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as unknown as Record<string, unknown>;\n const publisherDomains = (data.publisher_domains || []) as unknown[];\n const issues: string[] = [];\n\n // Check for undefined elements\n for (let i = 0; i < publisherDomains.length; i++) {\n if (publisherDomains[i] === undefined || publisherDomains[i] === null) {\n issues.push(`publisher_domains[${i}] is ${String(publisherDomains[i])}`);\n }\n }\n\n if (issues.length > 0) {\n step.passed = false;\n step.error = `Schema validation errors: ${issues.slice(0, 3).join(', ')}`;\n step.response_preview = JSON.stringify(\n {\n issues: issues.slice(0, 10),\n publisher_domains_count: publisherDomains.length,\n },\n null,\n 2\n );\n } else {\n step.details = `Publisher domains consistent: ${publisherDomains.length} domain(s)`;\n }\n } else if (result && !result.success) {\n step.passed = false;\n step.error = result.error || 'list_authorized_properties failed';\n }\n steps.push(step);\n }\n\n // Test list_creatives pagination consistency\n if (profile.tools.includes('list_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_creatives pagination consistency',\n 'list_creatives',\n async () => client.listCreatives({}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as ListCreativesResponse;\n const creatives = data.creatives || [];\n const querySummary = data.query_summary;\n const totalMatching = querySummary?.total_matching;\n const returned = querySummary?.returned ?? creatives.length;\n\n if (totalMatching !== undefined && totalMatching > 0 && returned === 0) {\n step.passed = false;\n step.error = `Pagination bug: total_matching=${totalMatching} but returned=${returned}`;\n } else if (returned !== creatives.length) {\n step.passed = false;\n step.error = `Mismatch: returned=${returned} but creatives.length=${creatives.length}`;\n } else {\n step.details = `Pagination consistent: ${creatives.length} creatives`;\n }\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/testing/scenarios/edge-cases.ts"],"sourcesContent":["/**\n * Edge Case Testing Scenarios\n *\n * Tests various edge cases, error handling, and validation:\n * - Error handling (invalid inputs, non-existent IDs)\n * - Schema validation (negative values, invalid enums)\n * - Pricing edge cases (auction vs fixed, min spend, floor prices)\n * - Behavior analysis\n * - Temporal validation\n * - Response consistency\n *\n * These scenarios are designed to find bugs and ensure agents\n * properly handle edge cases according to the AdCP spec.\n */\n\nimport type { Product, PricingOption } from '../../types/core.generated';\nimport type {\n CreateMediaBuyRequest,\n SyncCreativesRequest,\n GetMediaBuyDeliveryRequest,\n GetProductsResponse,\n ListCreativesResponse,\n} from '../../types/tools.generated';\nimport type { CanonicalGetProductsRequest } from '../../v2/projection/creative-delivery';\nimport type { TestOptions, TestStepResult, AgentProfile, TaskResult } from '../types';\nimport { getOrCreateClient, runStep, resolveBrand, resolveAccount, getOrDiscoverProfile } from '../client';\nimport { testDiscovery } from './discovery';\n\n/**\n * Test: Error Handling\n * Verifies the agent returns proper discriminated union error responses\n */\nexport async function testErrorHandling(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid product_id in create_media_buy\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid product_id error response',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `error-test-${Date.now()}`,\n brand_manifest: {\n name: 'Error Test Brand',\n url: 'https://test.example',\n },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'NONEXISTENT_PRODUCT_ID_12345',\n budget: 1000,\n pricing_option_id: 'nonexistent-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid product_id - should have returned error';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid product_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 2: Missing required field in get_products\n if (profile.tools.includes('get_products')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty request handling',\n 'get_products',\n async () => client.getProducts({} as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty get_products request (permissive)';\n } else {\n // !result (threw) or result.success === false — both mean stricter validation\n step.passed = true;\n step.details = `Agent requires brief or brand (stricter validation)${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 3: Invalid format_id in sync_creatives\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid format_id error response',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `invalid-format-test-${Date.now()}`,\n name: 'Invalid Format Test',\n format_id: { id: 'TOTALLY_INVALID_FORMAT_ID_999' },\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts unknown format_ids (permissive mode)';\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly rejected invalid format_id${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n // Test 4: get_media_buy_delivery with non-existent media_buy_id\n if (profile.tools.includes('get_media_buy_delivery')) {\n const { result, step } = await runStep<TaskResult>(\n 'Non-existent media_buy_id error',\n 'get_media_buy_delivery',\n async () =>\n client.getMediaBuyDelivery({\n media_buy_ids: ['NONEXISTENT_MEDIA_BUY_ID_99999'],\n } as unknown as GetMediaBuyDeliveryRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n const data = result.data as unknown as Record<string, unknown> | undefined;\n const deliveries = (data?.deliveries || data?.media_buys || []) as unknown[];\n if (deliveries.length === 0) {\n step.passed = true;\n step.details = 'Agent returned empty deliveries for non-existent media buy';\n } else {\n step.passed = false;\n step.error = 'Agent returned deliveries for non-existent media_buy_id';\n }\n } else {\n // !result (threw) or result.success === false — both count as rejection\n step.passed = true;\n step.details = `Agent correctly returned error for non-existent media buy${result?.error ? `: ${result.error}` : ''}`;\n if (result?.error) step.response_preview = JSON.stringify({ error: result.error }, null, 2);\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Validation\n * Tests that agents properly validate inputs and reject malformed requests\n */\nexport async function testValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Invalid enum value for pacing\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid pacing enum value',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `validation-test-${Date.now()}`,\n brand_manifest: { name: 'Validation Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n pacing: 'INVALID_PACING_VALUE' as unknown as string,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted invalid pacing value - should validate enums';\n } else {\n step.passed = true;\n step.details = `Agent rejected invalid pacing enum value${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Negative budget (definitely invalid)\n if (profile.tools.includes('create_media_buy')) {\n const { result, step } = await runStep<TaskResult>(\n 'Negative budget rejection',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `negative-budget-test-${Date.now()}`,\n brand_manifest: { name: 'Negative Budget Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: 'test-product',\n budget: -500,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'CRITICAL: Agent accepted negative budget - must validate minimum: 0';\n } else {\n step.passed = true;\n step.details = `Agent correctly rejected negative budget${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 3: Invalid creative weight (> 100)\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Invalid creative weight (> 100)',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [\n {\n creative_id: `weight-test-${Date.now()}`,\n name: 'Weight Test Creative',\n format_id: { agent_url: 'https://creative.adcontextprotocol.org', id: 'display_300x250' },\n weight: 150,\n assets: {\n primary: {\n url: 'https://via.placeholder.com/300x250',\n width: 300,\n height: 250,\n format: 'png',\n },\n },\n },\n ],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted weight > 100 - should validate maximum: 100';\n } else {\n step.passed = true;\n step.details = `Agent rejected weight > 100${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 4: Empty creatives array\n if (profile.tools.includes('sync_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Empty creatives array handling',\n 'sync_creatives',\n async () =>\n client.syncCreativesLegacy({\n account: resolveAccount(options),\n creatives: [],\n } as unknown as SyncCreativesRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = true;\n step.details = 'Agent accepts empty creatives array (returns empty result)';\n } else {\n // !result (threw) or result.success === false — both mean agent rejected\n step.passed = true;\n step.details = `Agent rejected empty creatives array${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Pricing Edge Cases\n * Tests auction vs fixed pricing, min spend requirements, bid_price handling\n */\nexport async function testPricingEdgeCases(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { steps: discoverySteps, profile } = await testDiscovery(agentUrl, options);\n steps.push(...discoverySteps);\n\n if (!profile?.tools.includes('create_media_buy') || !profile?.tools.includes('get_products')) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'Agent does not support create_media_buy or get_products',\n });\n return { steps, profile };\n }\n\n // Get products to find actual pricing options\n const { result: productsResult } = await runStep<TaskResult>(\n 'Fetch products for pricing analysis',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products with pricing details',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const productsData = productsResult?.data as GetProductsResponse | undefined;\n const products = productsData?.products;\n if (!products?.length) {\n steps.push({\n step: 'Pricing edge cases',\n passed: false,\n duration_ms: 0,\n error: 'No products available for pricing tests',\n });\n return { steps, profile };\n }\n\n // Analyze products for auction vs fixed pricing\n const auctionProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const fixedProducts: { product: Product; pricingOption: PricingOption }[] = [];\n const productsWithMinSpend: { product: Product; pricingOption: PricingOption; minSpend: number }[] = [];\n\n for (const product of products) {\n for (const po of product.pricing_options || []) {\n if (!('fixed_price' in po) && (po.floor_price !== undefined || po.price_guidance !== undefined)) {\n auctionProducts.push({ product, pricingOption: po });\n } else if ('fixed_price' in po) {\n fixedProducts.push({ product, pricingOption: po });\n }\n if (po.min_spend_per_package != null && po.min_spend_per_package > 0) {\n productsWithMinSpend.push({\n product,\n pricingOption: po,\n minSpend: po.min_spend_per_package,\n });\n }\n }\n }\n\n steps.push({\n step: 'Analyze pricing options',\n passed: true,\n duration_ms: 0,\n details: `Found ${fixedProducts.length} fixed, ${auctionProducts.length} auction, ${productsWithMinSpend.length} with min spend`,\n });\n\n // Test 1: Auction pricing without bid_price (should fail)\n if (auctionProducts.length > 0) {\n const { product, pricingOption } = auctionProducts[0]!;\n const { result, step } = await runStep<TaskResult>(\n 'Auction pricing without bid_price',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `auction-no-bid-${Date.now()}`,\n brand_manifest: { name: 'Auction Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: 5000,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = 'Agent accepted auction pricing without bid_price - should require it';\n } else {\n step.passed = true;\n step.details = `Agent correctly requires bid_price for auction pricing${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n // Test 2: Budget below min_spend_per_package\n if (productsWithMinSpend.length > 0) {\n const { product, pricingOption, minSpend } = productsWithMinSpend[0]!;\n const underBudget = minSpend * 0.5;\n\n const { result, step } = await runStep<TaskResult>(\n 'Budget below min_spend_per_package',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `under-min-spend-${Date.now()}`,\n brand_manifest: { name: 'Min Spend Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 86400000).toISOString(),\n end_time: new Date(Date.now() + 604800000).toISOString(),\n packages: [\n {\n product_id: product.product_id,\n budget: underBudget,\n pricing_option_id: pricingOption.pricing_option_id,\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (result?.success) {\n step.passed = false;\n step.error = `Agent accepted budget ${underBudget} below min_spend ${minSpend}`;\n } else {\n step.passed = true;\n step.details = `Agent rejected budget ${underBudget} below min_spend ${minSpend}${result?.error ? `: ${result.error}` : ''}`;\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Temporal Validation\n * Tests date/time ordering and format validation\n */\nexport async function testTemporalValidation(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed || !profile.tools.includes('create_media_buy')) {\n return { steps, profile };\n }\n\n // Test 1: End time before start time\n const { result: endBeforeStart, step: step1 } = await runStep<TaskResult>(\n 'End time before start time',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `temporal-test-${Date.now()}`,\n brand_manifest: { name: 'Temporal Test', url: 'https://test.example' },\n start_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n end_time: new Date(Date.now() + 86400000).toISOString(), // 1 day from now (before start!)\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!endBeforeStart) {\n // runStep caught an exception — agent rejected at transport level, which counts as rejection\n step1.passed = true;\n step1.details = `Agent rejected end_time before start_time (threw error)`;\n } else if (endBeforeStart.success) {\n step1.passed = false;\n step1.error = 'Agent accepted end_time before start_time - must validate';\n } else {\n step1.passed = true;\n step1.details = `Agent correctly rejected end_time before start_time${endBeforeStart.error ? `: ${endBeforeStart.error}` : ''}`;\n }\n steps.push(step1);\n\n // Test 2: Start time in the past\n const { result: pastStart, step: step2 } = await runStep<TaskResult>(\n 'Start time in the past',\n 'create_media_buy',\n async () =>\n client.createMediaBuyLegacy({\n idempotency_key: `past-start-${Date.now()}`,\n brand_manifest: { name: 'Past Start Test', url: 'https://test.example' },\n start_time: new Date(Date.now() - 86400000).toISOString(), // Yesterday\n end_time: new Date(Date.now() + 604800000).toISOString(), // 7 days from now\n packages: [\n {\n product_id: 'test-product',\n budget: 1000,\n pricing_option_id: 'test-pricing',\n },\n ],\n } as unknown as CreateMediaBuyRequest) as Promise<TaskResult>\n );\n\n if (!pastStart) {\n // runStep caught an exception — agent rejected at transport level\n step2.passed = true;\n step2.details = 'Agent rejected start_time in the past (threw error)';\n } else if (pastStart.success) {\n step2.passed = true;\n step2.details = 'Agent accepts start_time in past (may auto-adjust)';\n } else {\n step2.passed = true;\n step2.details = `Agent rejected start_time in the past${pastStart.error ? `: ${pastStart.error}` : ''}`;\n }\n steps.push(step2);\n\n return { steps, profile };\n}\n\n/**\n * Test: Behavior Analysis\n * Analyzes agent behavioral characteristics\n */\nexport async function testBehaviorAnalysis(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test 1: Does get_products require brand?\n if (profile.tools.includes('get_products')) {\n const { result: withoutBrand, step: step1 } = await runStep<TaskResult>(\n 'get_products without brand',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show me all available products',\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const withoutBrandProducts = (withoutBrand?.data as GetProductsResponse | undefined)?.products;\n if (withoutBrand?.success && withoutBrandProducts?.length) {\n step1.details = `Returns ${withoutBrandProducts.length} products without brand`;\n } else if (withoutBrand && !withoutBrand.success) {\n step1.details = 'Requires brand for product discovery';\n }\n steps.push(step1);\n\n // Test 2: Are results filtered by brief?\n const { result: specificBrief, step: step2 } = await runStep<TaskResult>(\n 'get_products with specific brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Looking specifically for podcast audio advertising only',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const { result: broadBrief } = await runStep<TaskResult>(\n 'get_products with broad brief',\n 'get_products',\n async () =>\n client.getProducts({\n buying_mode: 'brief',\n brief: 'Show all products across all channels and formats',\n brand: resolveBrand(options),\n } as unknown as CanonicalGetProductsRequest) as Promise<TaskResult>\n );\n\n const specificProducts = (specificBrief?.data as GetProductsResponse | undefined)?.products;\n const broadProducts = (broadBrief?.data as GetProductsResponse | undefined)?.products;\n const specificCount = specificProducts?.length || 0;\n const broadCount = broadProducts?.length || 0;\n\n if (specificCount < broadCount) {\n step2.passed = true;\n step2.details = `Brief filtering: specific=${specificCount}, broad=${broadCount} (filtered)`;\n } else if (specificCount === broadCount && broadCount > 0) {\n step2.passed = true;\n step2.details = `No brief filtering: specific=${specificCount}, broad=${broadCount} (same)`;\n } else {\n step2.details = `Brief filtering unclear: specific=${specificCount}, broad=${broadCount}`;\n }\n steps.push(step2);\n }\n\n return { steps, profile };\n}\n\n/**\n * Test: Response Consistency\n * Checks for schema errors, pagination bugs, data mismatches\n */\nexport async function testResponseConsistency(\n agentUrl: string,\n options: TestOptions\n): Promise<{ steps: TestStepResult[]; profile?: AgentProfile }> {\n const steps: TestStepResult[] = [];\n const client = getOrCreateClient(agentUrl, options);\n\n const { profile, step: profileStep } = await getOrDiscoverProfile(client, options);\n steps.push(profileStep);\n\n if (!profileStep.passed) {\n return { steps, profile };\n }\n\n // Test list_authorized_properties consistency\n if (profile.tools.includes('list_authorized_properties')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_authorized_properties consistency',\n 'list_authorized_properties',\n async () => client.executeCustomTask('list_authorized_properties', {}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as unknown as Record<string, unknown>;\n const publisherDomains = (data.publisher_domains || []) as unknown[];\n const issues: string[] = [];\n\n // Check for undefined elements\n for (let i = 0; i < publisherDomains.length; i++) {\n if (publisherDomains[i] === undefined || publisherDomains[i] === null) {\n issues.push(`publisher_domains[${i}] is ${String(publisherDomains[i])}`);\n }\n }\n\n if (issues.length > 0) {\n step.passed = false;\n step.error = `Schema validation errors: ${issues.slice(0, 3).join(', ')}`;\n step.response_preview = JSON.stringify(\n {\n issues: issues.slice(0, 10),\n publisher_domains_count: publisherDomains.length,\n },\n null,\n 2\n );\n } else {\n step.details = `Publisher domains consistent: ${publisherDomains.length} domain(s)`;\n }\n } else if (result && !result.success) {\n step.passed = false;\n step.error = result.error || 'list_authorized_properties failed';\n }\n steps.push(step);\n }\n\n // Test list_creatives pagination consistency\n if (profile.tools.includes('list_creatives')) {\n const { result, step } = await runStep<TaskResult>(\n 'Check list_creatives pagination consistency',\n 'list_creatives',\n async () => client.listCreatives({}) as Promise<TaskResult>\n );\n\n if (result?.success && result?.data) {\n const data = result.data as ListCreativesResponse;\n const creatives = data.creatives || [];\n const querySummary = data.query_summary;\n const totalMatching = querySummary?.total_matching;\n const returned = querySummary?.returned ?? creatives.length;\n\n if (totalMatching !== undefined && totalMatching > 0 && returned === 0) {\n step.passed = false;\n step.error = `Pagination bug: total_matching=${totalMatching} but returned=${returned}`;\n } else if (returned !== creatives.length) {\n step.passed = false;\n step.error = `Mismatch: returned=${returned} but creatives.length=${creatives.length}`;\n } else {\n step.details = `Pagination consistent: ${creatives.length} creatives`;\n }\n }\n steps.push(step);\n }\n\n return { steps, profile };\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/scenarios/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,UAAU,CAAC;AA6CtF;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAyP9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsO9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAwM9D;AAUD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA6O9D;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA+L9D;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAkL9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA0L9D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA0T9D;AAuDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnE"}
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../../../src/lib/testing/scenarios/governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAc,MAAM,UAAU,CAAC;AA6CtF;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAyP9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAsO9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAwM9D;AAUD;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA4O9D;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA+L9D;AAED;;;;;GAKG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAkL9D;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CAqL9D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,CAAC,CA0T9D;AAuDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnE"}
@@ -294,7 +294,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
294
294
  const { result, step } = await (0, import_client.runStep)(
295
295
  "List content standards",
296
296
  "list_content_standards",
297
- async () => client.listContentStandards({
297
+ async () => client.listContentStandardsLegacy({
298
298
  context: "E2E testing - list available brand safety configurations",
299
299
  max_results: 10
300
300
  })
@@ -335,7 +335,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
335
335
  const { result, step } = await (0, import_client.runStep)(
336
336
  "Get content standards",
337
337
  "get_content_standards",
338
- async () => client.getContentStandards({
338
+ async () => client.getContentStandardsLegacy({
339
339
  standards_id: standardsIdToTest
340
340
  })
341
341
  );
@@ -362,7 +362,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
362
362
  const { result, step } = await (0, import_client.runStep)(
363
363
  "Calibrate content",
364
364
  "calibrate_content",
365
- async () => client.calibrateContent({
365
+ async () => client.calibrateContentLegacy({
366
366
  context: "E2E testing - evaluate sample content for brand safety",
367
367
  standards_id: standardsIdToTest,
368
368
  artifacts: [
@@ -411,7 +411,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
411
411
  const { result, step } = await (0, import_client.runStep)(
412
412
  "Validate content delivery",
413
413
  "validate_content_delivery",
414
- async () => client.validateContentDelivery({
414
+ async () => client.validateContentDeliveryLegacy({
415
415
  context: "E2E testing - validate delivery records against content standards",
416
416
  standards_id: standardsIdToTest,
417
417
  records: [
@@ -456,7 +456,7 @@ async function testGovernanceContentStandards(agentUrl, options) {
456
456
  const { result: errorResult, step: errorStep } = await (0, import_client.runStep)(
457
457
  "Get invalid content standards (error expected)",
458
458
  "get_content_standards",
459
- async () => client.getContentStandards({
459
+ async () => client.getContentStandardsLegacy({
460
460
  standards_id: "INVALID_STANDARDS_ID_DOES_NOT_EXIST_12345"
461
461
  })
462
462
  );
@@ -695,7 +695,7 @@ async function testCampaignGovernance(agentUrl, options) {
695
695
  },
696
696
  countries: ["US"],
697
697
  channels: {
698
- allowed: ["display", "video"]
698
+ allowed: ["display", "olv"]
699
699
  },
700
700
  delegations: [
701
701
  {
@@ -742,7 +742,7 @@ async function testCampaignGovernance(agentUrl, options) {
742
742
  "check_governance",
743
743
  async () => client.executeTask("check_governance", {
744
744
  plan_id: testPlanId,
745
- binding: "proposed",
745
+ phase: "purchase",
746
746
  caller: callerUrl,
747
747
  tool: "create_media_buy",
748
748
  payload: {
@@ -804,7 +804,7 @@ async function testCampaignGovernance(agentUrl, options) {
804
804
  outcome: "completed",
805
805
  governance_context: governanceContext || "",
806
806
  seller_response: {
807
- media_buy_id: testMediaBuyId,
807
+ seller_reference: testMediaBuyId,
808
808
  packages: [
809
809
  {
810
810
  budget: 1e3
@@ -832,7 +832,6 @@ async function testCampaignGovernance(agentUrl, options) {
832
832
  "get_plan_audit_logs",
833
833
  async () => client.executeTask("get_plan_audit_logs", {
834
834
  plan_ids: [testPlanId],
835
- media_buy_id: testMediaBuyId,
836
835
  include_entries: true
837
836
  })
838
837
  );
@@ -913,7 +912,7 @@ async function testCampaignGovernanceDenied(agentUrl, options) {
913
912
  "check_governance",
914
913
  async () => client.executeTask("check_governance", {
915
914
  plan_id: testPlanId,
916
- binding: "proposed",
915
+ phase: "purchase",
917
916
  caller: callerUrl,
918
917
  tool: "create_media_buy",
919
918
  payload: {
@@ -966,7 +965,7 @@ async function testCampaignGovernanceDenied(agentUrl, options) {
966
965
  "check_governance",
967
966
  async () => client.executeTask("check_governance", {
968
967
  plan_id: testPlanId,
969
- binding: "proposed",
968
+ phase: "purchase",
970
969
  caller: callerUrl,
971
970
  tool: "create_media_buy",
972
971
  payload: {
@@ -1067,10 +1066,10 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
1067
1066
  },
1068
1067
  countries: ["US"],
1069
1068
  channels: {
1070
- allowed: ["display", "video"],
1069
+ allowed: ["display", "olv"],
1071
1070
  mix_targets: {
1072
1071
  display: { min_pct: 30, max_pct: 70 },
1073
- video: { min_pct: 30, max_pct: 70 }
1072
+ olv: { min_pct: 30, max_pct: 70 }
1074
1073
  }
1075
1074
  }
1076
1075
  }
@@ -1086,7 +1085,7 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
1086
1085
  "check_governance",
1087
1086
  async () => client.executeTask("check_governance", {
1088
1087
  plan_id: testPlanId,
1089
- binding: "proposed",
1088
+ phase: "purchase",
1090
1089
  caller: callerUrl,
1091
1090
  tool: "create_media_buy",
1092
1091
  payload: {
@@ -1143,7 +1142,7 @@ async function testCampaignGovernanceConditions(agentUrl, options) {
1143
1142
  "check_governance",
1144
1143
  async () => client.executeTask("check_governance", {
1145
1144
  plan_id: testPlanId,
1146
- binding: "proposed",
1145
+ phase: "purchase",
1147
1146
  caller: callerUrl,
1148
1147
  tool: "create_media_buy",
1149
1148
  payload: adjustedPayload,
@@ -1196,7 +1195,6 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
1196
1195
  }
1197
1196
  profile.supports_governance = true;
1198
1197
  const testPlanId = `test-delivery-plan-${Date.now()}`;
1199
- const testMediaBuyId = `test-mb-${Date.now()}`;
1200
1198
  const callerUrl = "https://test-seller.example";
1201
1199
  const flightStart = new Date(Date.now() - 7 * 24 * 60 * 60 * 1e3);
1202
1200
  const flightEnd = new Date(Date.now() + 23 * 24 * 60 * 60 * 1e3);
@@ -1236,9 +1234,7 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
1236
1234
  "check_governance",
1237
1235
  async () => client.executeTask("check_governance", {
1238
1236
  plan_id: testPlanId,
1239
- binding: "committed",
1240
1237
  caller: callerUrl,
1241
- media_buy_id: testMediaBuyId,
1242
1238
  phase: "delivery",
1243
1239
  planned_delivery: {
1244
1240
  total_budget: 3e3,
@@ -1294,9 +1290,7 @@ async function testCampaignGovernanceDelivery(agentUrl, options) {
1294
1290
  "check_governance",
1295
1291
  async () => client.executeTask("check_governance", {
1296
1292
  plan_id: testPlanId,
1297
- binding: "committed",
1298
1293
  caller: callerUrl,
1299
- media_buy_id: testMediaBuyId,
1300
1294
  phase: "delivery",
1301
1295
  governance_context: deliveryGovernanceContext,
1302
1296
  planned_delivery: {
@@ -1430,7 +1424,7 @@ async function testSellerGovernanceContext(agentUrl, options) {
1430
1424
  const { result: registerResult, step: registerStep } = await (0, import_client.runStep)(
1431
1425
  "Register governance agent with seller",
1432
1426
  "register_governance",
1433
- async () => client.executeTask("register_governance", {
1427
+ async () => client.executeCustomTask("register_governance", {
1434
1428
  accounts: [
1435
1429
  {
1436
1430
  account,
@@ -1497,7 +1491,7 @@ async function testSellerGovernanceContext(agentUrl, options) {
1497
1491
  const { result: createResult, step: createStep } = await (0, import_client.runStep)(
1498
1492
  "Create media buy with governance_context",
1499
1493
  "create_media_buy",
1500
- async () => client.executeTask("create_media_buy", {
1494
+ async () => client.executeTaskLegacy("create_media_buy", {
1501
1495
  account,
1502
1496
  brand: options.brand || { domain: "test.example" },
1503
1497
  start_time: flightStart.toISOString(),