@adcp/sdk 14.0.0-rc.38 → 14.0.0-rc.39

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 (600) hide show
  1. package/bin/adcp-storyboard-summary.js +286 -0
  2. package/bin/adcp.js +221 -10
  3. package/dist/lib/conformance/schemaLoader.d.mts +1 -1
  4. package/dist/lib/conformance/schemaLoader.d.ts +1 -1
  5. package/dist/lib/core/AgentClient.d.mts +6 -1
  6. package/dist/lib/core/AgentClient.d.ts +6 -1
  7. package/dist/lib/core/AgentClient.js +9 -0
  8. package/dist/lib/core/AgentClient.mjs +9 -0
  9. package/dist/lib/core/ConversationTypes.d.mts +29 -0
  10. package/dist/lib/core/ConversationTypes.d.ts +29 -0
  11. package/dist/lib/core/SingleAgentClient.d.mts +3 -1
  12. package/dist/lib/core/SingleAgentClient.d.ts +3 -1
  13. package/dist/lib/core/SingleAgentClient.js +9 -1
  14. package/dist/lib/core/SingleAgentClient.mjs +9 -1
  15. package/dist/lib/core/TaskExecutor.d.mts +13 -1
  16. package/dist/lib/core/TaskExecutor.d.ts +13 -1
  17. package/dist/lib/core/TaskExecutor.js +216 -18
  18. package/dist/lib/core/TaskExecutor.mjs +216 -19
  19. package/dist/lib/index.d.mts +5 -2
  20. package/dist/lib/index.d.ts +5 -2
  21. package/dist/lib/index.js +10 -1
  22. package/dist/lib/index.mjs +10 -1
  23. package/dist/lib/media-buy/action-assessment.d.mts +77 -0
  24. package/dist/lib/media-buy/action-assessment.d.ts +77 -0
  25. package/dist/lib/media-buy/action-assessment.js +300 -0
  26. package/dist/lib/media-buy/action-assessment.mjs +284 -0
  27. package/dist/lib/media-buy/action-constraints.d.mts +9 -0
  28. package/dist/lib/media-buy/action-constraints.d.ts +9 -0
  29. package/dist/lib/media-buy/action-constraints.js +170 -0
  30. package/dist/lib/media-buy/action-constraints.mjs +146 -0
  31. package/dist/lib/media-buy/action-contracts.d.mts +40 -0
  32. package/dist/lib/media-buy/action-contracts.d.ts +40 -0
  33. package/dist/lib/media-buy/action-contracts.js +304 -0
  34. package/dist/lib/media-buy/action-contracts.mjs +267 -0
  35. package/dist/lib/media-buy/action-metadata.generated.d.mts +37 -0
  36. package/dist/lib/media-buy/action-metadata.generated.d.ts +37 -0
  37. package/dist/lib/media-buy/action-metadata.generated.js +128 -0
  38. package/dist/lib/media-buy/action-metadata.generated.mjs +101 -0
  39. package/dist/lib/media-buy/action-types.d.mts +106 -0
  40. package/dist/lib/media-buy/action-types.d.ts +106 -0
  41. package/dist/lib/{types/v3-1-beta/tools.generated.js → media-buy/action-types.js} +2 -2
  42. package/dist/lib/media-buy/actions.d.mts +6 -0
  43. package/dist/lib/media-buy/actions.d.ts +6 -0
  44. package/dist/lib/media-buy/actions.js +38 -0
  45. package/dist/lib/media-buy/actions.mjs +9 -0
  46. package/dist/lib/media-buy/available-actions.d.mts +2 -1
  47. package/dist/lib/media-buy/available-actions.d.ts +2 -1
  48. package/dist/lib/media-buy/available-actions.js +4 -3
  49. package/dist/lib/media-buy/available-actions.mjs +4 -3
  50. package/dist/lib/media-buy/compatibility.js +3 -0
  51. package/dist/lib/media-buy/compatibility.mjs +3 -0
  52. package/dist/lib/media-buy/index.d.mts +4 -0
  53. package/dist/lib/media-buy/index.d.ts +4 -0
  54. package/dist/lib/media-buy/index.js +3 -1
  55. package/dist/lib/media-buy/index.mjs +1 -0
  56. package/dist/lib/media-buy/legacy-action-ids.d.mts +1 -0
  57. package/dist/lib/media-buy/legacy-action-ids.d.ts +1 -0
  58. package/dist/lib/media-buy/legacy-action-ids.js +50 -0
  59. package/dist/lib/media-buy/legacy-action-ids.mjs +26 -0
  60. package/dist/lib/media-buy/mutations.d.mts +70 -0
  61. package/dist/lib/media-buy/mutations.d.ts +70 -0
  62. package/dist/lib/media-buy/mutations.js +525 -0
  63. package/dist/lib/media-buy/mutations.mjs +498 -0
  64. package/dist/lib/media-buy/preflight.d.mts +20 -69
  65. package/dist/lib/media-buy/preflight.d.ts +20 -69
  66. package/dist/lib/media-buy/preflight.js +100 -336
  67. package/dist/lib/media-buy/preflight.mjs +111 -333
  68. package/dist/lib/media-buy/targeting-input.d.mts +7 -4
  69. package/dist/lib/media-buy/targeting-input.d.ts +7 -4
  70. package/dist/lib/media-buy/types.d.mts +55 -7
  71. package/dist/lib/media-buy/types.d.ts +55 -7
  72. package/dist/lib/protocols/rawResponseCapture.d.mts +12 -0
  73. package/dist/lib/protocols/rawResponseCapture.d.ts +12 -0
  74. package/dist/lib/protocols/rawResponseCapture.js +33 -3
  75. package/dist/lib/protocols/rawResponseCapture.mjs +32 -3
  76. package/dist/lib/registry/types.generated.d.mts +377 -9
  77. package/dist/lib/registry/types.generated.d.ts +377 -9
  78. package/dist/lib/reporting/evidence.d.mts +1 -0
  79. package/dist/lib/reporting/evidence.d.ts +1 -0
  80. package/dist/lib/reporting/evidence.js +32 -3
  81. package/dist/lib/reporting/evidence.mjs +31 -3
  82. package/dist/lib/reporting/ledger/handler.d.mts +51 -1
  83. package/dist/lib/reporting/ledger/handler.d.ts +51 -1
  84. package/dist/lib/reporting/ledger/handler.js +306 -38
  85. package/dist/lib/reporting/ledger/handler.mjs +304 -37
  86. package/dist/lib/reporting/ledger/health.d.mts +12 -0
  87. package/dist/lib/reporting/ledger/health.d.ts +12 -0
  88. package/dist/lib/reporting/ledger/health.js +15 -2
  89. package/dist/lib/reporting/ledger/health.mjs +13 -1
  90. package/dist/lib/reporting/ledger/index.d.mts +3 -0
  91. package/dist/lib/reporting/ledger/index.d.ts +3 -0
  92. package/dist/lib/reporting/ledger/index.js +7 -1
  93. package/dist/lib/reporting/ledger/index.mjs +3 -0
  94. package/dist/lib/reporting/ledger/lifecycle.d.mts +31 -4
  95. package/dist/lib/reporting/ledger/lifecycle.d.ts +31 -4
  96. package/dist/lib/reporting/ledger/lifecycle.js +244 -37
  97. package/dist/lib/reporting/ledger/lifecycle.mjs +244 -37
  98. package/dist/lib/reporting/ledger/managed-postgres.d.mts +231 -0
  99. package/dist/lib/reporting/ledger/managed-postgres.d.ts +231 -0
  100. package/dist/lib/reporting/ledger/managed-postgres.js +1797 -0
  101. package/dist/lib/reporting/ledger/managed-postgres.mjs +1776 -0
  102. package/dist/lib/reporting/ledger/managed.d.mts +355 -0
  103. package/dist/lib/reporting/ledger/managed.d.ts +355 -0
  104. package/dist/lib/reporting/ledger/managed.js +661 -0
  105. package/dist/lib/reporting/ledger/managed.mjs +633 -0
  106. package/dist/lib/reporting/ledger/notification-activity.d.mts +222 -0
  107. package/dist/lib/reporting/ledger/notification-activity.d.ts +222 -0
  108. package/dist/lib/reporting/ledger/notification-activity.js +1139 -0
  109. package/dist/lib/reporting/ledger/notification-activity.mjs +1110 -0
  110. package/dist/lib/reporting/ledger/postgres.d.mts +161 -1
  111. package/dist/lib/reporting/ledger/postgres.d.ts +161 -1
  112. package/dist/lib/reporting/ledger/postgres.js +1153 -21
  113. package/dist/lib/reporting/ledger/postgres.mjs +1152 -21
  114. package/dist/lib/reporting/ledger/producer.d.mts +8 -0
  115. package/dist/lib/reporting/ledger/producer.d.ts +8 -0
  116. package/dist/lib/reporting/ledger/producer.js +146 -52
  117. package/dist/lib/reporting/ledger/producer.mjs +146 -51
  118. package/dist/lib/reporting/ledger/types.d.mts +358 -1
  119. package/dist/lib/reporting/ledger/types.d.ts +358 -1
  120. package/dist/lib/reporting/ledger/types.js +3 -0
  121. package/dist/lib/reporting/ledger/types.mjs +2 -0
  122. package/dist/lib/reporting/service/conformance.d.mts +35 -0
  123. package/dist/lib/reporting/service/conformance.d.ts +35 -0
  124. package/dist/lib/reporting/service/conformance.js +89 -0
  125. package/dist/lib/reporting/service/conformance.mjs +68 -0
  126. package/dist/lib/reporting/service/index.d.mts +182 -0
  127. package/dist/lib/reporting/service/index.d.ts +182 -0
  128. package/dist/lib/reporting/service/index.js +793 -0
  129. package/dist/lib/reporting/service/index.mjs +787 -0
  130. package/dist/lib/reporting/source/index.d.mts +2 -1
  131. package/dist/lib/reporting/source/index.d.ts +2 -1
  132. package/dist/lib/reporting/source/index.js +16 -3
  133. package/dist/lib/reporting/source/index.mjs +12 -1
  134. package/dist/lib/reporting/source/inline.d.mts +88 -1
  135. package/dist/lib/reporting/source/inline.d.ts +88 -1
  136. package/dist/lib/reporting/source/inline.js +1161 -163
  137. package/dist/lib/reporting/source/inline.mjs +1166 -163
  138. package/dist/lib/reporting/source/manifest.js +12 -7
  139. package/dist/lib/reporting/source/manifest.mjs +12 -7
  140. package/dist/lib/reporting/source/source.d.mts +26 -0
  141. package/dist/lib/reporting/source/source.d.ts +26 -0
  142. package/dist/lib/reporting/source/source.js +71 -2
  143. package/dist/lib/reporting/source/source.mjs +65 -1
  144. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  145. package/dist/lib/server/create-adcp-server.d.mts +18 -0
  146. package/dist/lib/server/create-adcp-server.d.ts +18 -0
  147. package/dist/lib/server/create-adcp-server.js +52 -2
  148. package/dist/lib/server/create-adcp-server.mjs +52 -2
  149. package/dist/lib/server/decisioning/account.d.mts +1 -1
  150. package/dist/lib/server/decisioning/account.d.ts +1 -1
  151. package/dist/lib/server/decisioning/index.d.mts +1 -0
  152. package/dist/lib/server/decisioning/index.d.ts +1 -0
  153. package/dist/lib/server/decisioning/platform.d.mts +3 -0
  154. package/dist/lib/server/decisioning/platform.d.ts +3 -0
  155. package/dist/lib/server/decisioning/runtime/from-platform.js +88 -10
  156. package/dist/lib/server/decisioning/runtime/from-platform.mjs +88 -10
  157. package/dist/lib/server/decisioning/specialisms/reporting.d.mts +38 -0
  158. package/dist/lib/server/decisioning/specialisms/reporting.d.ts +38 -0
  159. package/dist/lib/{types/v3-1-beta/index.js → server/decisioning/specialisms/reporting.js} +2 -8
  160. package/dist/lib/server/decisioning/specialisms/reporting.mjs +0 -0
  161. package/dist/lib/server/index.d.mts +4 -2
  162. package/dist/lib/server/index.d.ts +4 -2
  163. package/dist/lib/server/index.js +5 -0
  164. package/dist/lib/server/index.mjs +4 -0
  165. package/dist/lib/server/media-buy-action-resolver.d.mts +63 -0
  166. package/dist/lib/server/media-buy-action-resolver.d.ts +63 -0
  167. package/dist/lib/server/media-buy-action-resolver.js +297 -0
  168. package/dist/lib/server/media-buy-action-resolver.mjs +285 -0
  169. package/dist/lib/server/media-buy-actions.d.mts +7 -8
  170. package/dist/lib/server/media-buy-actions.d.ts +7 -8
  171. package/dist/lib/server/media-buy-actions.js +57 -14
  172. package/dist/lib/server/media-buy-actions.mjs +63 -14
  173. package/dist/lib/server/notification-subscriptions/index.d.mts +2 -2
  174. package/dist/lib/server/notification-subscriptions/index.d.ts +2 -2
  175. package/dist/lib/server/notification-subscriptions/index.js +2 -0
  176. package/dist/lib/server/notification-subscriptions/index.mjs +2 -0
  177. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +3 -1
  178. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +3 -1
  179. package/dist/lib/server/notification-subscriptions/postgres-runtime.js +1 -0
  180. package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +1 -0
  181. package/dist/lib/server/notification-subscriptions/runtime.d.mts +12 -1
  182. package/dist/lib/server/notification-subscriptions/runtime.d.ts +12 -1
  183. package/dist/lib/server/notification-subscriptions/runtime.js +102 -16
  184. package/dist/lib/server/notification-subscriptions/runtime.mjs +101 -16
  185. package/dist/lib/server/notification-subscriptions/types.d.mts +104 -1
  186. package/dist/lib/server/notification-subscriptions/types.d.ts +104 -1
  187. package/dist/lib/server/webhook-emitter.d.mts +40 -5
  188. package/dist/lib/server/webhook-emitter.d.ts +40 -5
  189. package/dist/lib/server/webhook-emitter.js +23 -12
  190. package/dist/lib/server/webhook-emitter.mjs +23 -12
  191. package/dist/lib/storage/interfaces.d.mts +14 -2
  192. package/dist/lib/storage/interfaces.d.ts +14 -2
  193. package/dist/lib/testing/compliance/comply.d.mts +9 -3
  194. package/dist/lib/testing/compliance/comply.d.ts +9 -3
  195. package/dist/lib/testing/compliance/comply.js +158 -3
  196. package/dist/lib/testing/compliance/comply.mjs +159 -4
  197. package/dist/lib/testing/compliance/storyboard-tracks.js +7 -5
  198. package/dist/lib/testing/compliance/storyboard-tracks.mjs +7 -5
  199. package/dist/lib/testing/compliance/summary.js +10 -1
  200. package/dist/lib/testing/compliance/summary.mjs +10 -1
  201. package/dist/lib/testing/index.d.mts +1 -1
  202. package/dist/lib/testing/index.d.ts +1 -1
  203. package/dist/lib/testing/index.js +2 -0
  204. package/dist/lib/testing/index.mjs +3 -1
  205. package/dist/lib/testing/storyboard/agent-routing.d.mts +12 -43
  206. package/dist/lib/testing/storyboard/agent-routing.d.ts +12 -43
  207. package/dist/lib/testing/storyboard/agent-routing.js +75 -13
  208. package/dist/lib/testing/storyboard/agent-routing.mjs +70 -12
  209. package/dist/lib/testing/storyboard/index.d.mts +1 -0
  210. package/dist/lib/testing/storyboard/index.d.ts +1 -0
  211. package/dist/lib/testing/storyboard/index.js +3 -0
  212. package/dist/lib/testing/storyboard/index.mjs +2 -0
  213. package/dist/lib/testing/storyboard/junit.d.mts +1 -1
  214. package/dist/lib/testing/storyboard/junit.d.ts +1 -1
  215. package/dist/lib/testing/storyboard/junit.js +21 -2
  216. package/dist/lib/testing/storyboard/junit.mjs +21 -2
  217. package/dist/lib/testing/storyboard/probes.d.mts +130 -0
  218. package/dist/lib/testing/storyboard/probes.d.ts +130 -0
  219. package/dist/lib/testing/storyboard/probes.js +682 -10
  220. package/dist/lib/testing/storyboard/probes.mjs +683 -3
  221. package/dist/lib/testing/storyboard/request-signing/builder.d.mts +16 -5
  222. package/dist/lib/testing/storyboard/request-signing/builder.d.ts +16 -5
  223. package/dist/lib/testing/storyboard/request-signing/grader.d.mts +44 -1
  224. package/dist/lib/testing/storyboard/request-signing/grader.d.ts +44 -1
  225. package/dist/lib/testing/storyboard/request-signing/grader.js +46 -22
  226. package/dist/lib/testing/storyboard/request-signing/grader.mjs +43 -21
  227. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +86 -11
  228. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +86 -11
  229. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +119 -25
  230. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +117 -26
  231. package/dist/lib/testing/storyboard/request-signing/synthesize.js +22 -2
  232. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +22 -2
  233. package/dist/lib/testing/storyboard/runner.d.mts +103 -0
  234. package/dist/lib/testing/storyboard/runner.d.ts +103 -0
  235. package/dist/lib/testing/storyboard/runner.js +1090 -268
  236. package/dist/lib/testing/storyboard/runner.mjs +1096 -261
  237. package/dist/lib/testing/storyboard/seeding.d.mts +4 -1
  238. package/dist/lib/testing/storyboard/seeding.d.ts +4 -1
  239. package/dist/lib/testing/storyboard/seeding.js +55 -24
  240. package/dist/lib/testing/storyboard/seeding.mjs +55 -24
  241. package/dist/lib/testing/storyboard/test-kit.d.mts +37 -3
  242. package/dist/lib/testing/storyboard/test-kit.d.ts +37 -3
  243. package/dist/lib/testing/storyboard/test-kit.js +8 -2
  244. package/dist/lib/testing/storyboard/test-kit.mjs +7 -2
  245. package/dist/lib/testing/storyboard/types.d.mts +132 -10
  246. package/dist/lib/testing/storyboard/types.d.ts +132 -10
  247. package/dist/lib/testing/storyboard/types.js +17 -0
  248. package/dist/lib/testing/storyboard/types.mjs +16 -0
  249. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  250. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  251. package/dist/lib/testing/storyboard/validations.js +16 -0
  252. package/dist/lib/testing/storyboard/validations.mjs +16 -0
  253. package/dist/lib/testing/test-controller.d.mts +1 -1
  254. package/dist/lib/testing/test-controller.d.ts +1 -1
  255. package/dist/lib/types/buy-products.d.ts +71 -6
  256. package/dist/lib/types/control-media-buy.d.ts +25 -11
  257. package/dist/lib/types/core.generated.d.mts +69 -10
  258. package/dist/lib/types/core.generated.d.ts +69 -10
  259. package/dist/lib/types/create-media-buy.d.ts +71 -6
  260. package/dist/lib/types/forward-compat-error-codes.d.mts +7 -6
  261. package/dist/lib/types/forward-compat-error-codes.d.ts +7 -6
  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/schemas.generated.d.ts +8040 -8116
  265. package/dist/lib/types/schemas.generated.js +1074 -309
  266. package/dist/lib/types/schemas.generated.mjs +1068 -309
  267. package/dist/lib/types/tools.generated.d.mts +65 -6
  268. package/dist/lib/types/tools.generated.d.ts +65 -6
  269. package/dist/lib/types/update-media-buy.d.ts +71 -6
  270. package/dist/lib/utils/redact-secrets.d.mts +1 -1
  271. package/dist/lib/utils/redact-secrets.d.ts +1 -1
  272. package/dist/lib/utils/redact-secrets.js +1 -1
  273. package/dist/lib/utils/redact-secrets.mjs +1 -1
  274. package/dist/lib/v2/projection/cache-versions.d.mts +0 -1
  275. package/dist/lib/v2/projection/cache-versions.d.ts +0 -1
  276. package/dist/lib/v2/projection/cache-versions.js +1 -15
  277. package/dist/lib/v2/projection/cache-versions.mjs +1 -14
  278. package/dist/lib/v2/projection/canonical-properties.js +2 -2
  279. package/dist/lib/v2/projection/canonical-properties.mjs +3 -3
  280. package/dist/lib/v2/projection/registry.d.mts +1 -1
  281. package/dist/lib/v2/projection/registry.d.ts +1 -1
  282. package/dist/lib/v2/projection/registry.js +2 -2
  283. package/dist/lib/v2/projection/registry.mjs +3 -3
  284. package/dist/lib/version.d.mts +5 -5
  285. package/dist/lib/version.d.ts +5 -5
  286. package/dist/lib/version.js +3 -8
  287. package/dist/lib/version.mjs +3 -8
  288. package/dist/lib/wholesale-feed-sync/index.d.mts +1 -0
  289. package/dist/lib/wholesale-feed-sync/index.d.ts +1 -0
  290. package/dist/lib/wholesale-feed-sync/protocol-types.d.mts +42 -0
  291. package/dist/lib/wholesale-feed-sync/protocol-types.d.ts +42 -0
  292. package/dist/lib/wholesale-feed-sync/protocol-types.js +16 -0
  293. package/dist/lib/wholesale-feed-sync/protocol-types.mjs +0 -0
  294. package/dist/lib/wholesale-feed-sync/sync.d.mts +6 -6
  295. package/dist/lib/wholesale-feed-sync/sync.d.ts +6 -6
  296. package/dist/lib/wholesale-feed-sync/sync.js +3 -1
  297. package/dist/lib/wholesale-feed-sync/sync.mjs +3 -1
  298. package/dist/lib/wholesale-feed-sync/types.d.mts +15 -14
  299. package/dist/lib/wholesale-feed-sync/types.d.ts +15 -14
  300. package/dist/lib/wholesale-feed-sync/webhook-notification.d.mts +7 -5
  301. package/dist/lib/wholesale-feed-sync/webhook-notification.d.ts +7 -5
  302. package/dist/lib/wholesale-feed-sync/webhook-notification.js +45 -0
  303. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +44 -0
  304. package/docs/CLI.md +1 -1
  305. package/docs/TYPE-SUMMARY.md +118 -4
  306. package/docs/guides/ASYNC-API-REFERENCE.md +62 -1
  307. package/docs/guides/ASYNC-DEVELOPER-GUIDE.md +25 -0
  308. package/docs/guides/ASYNC-DOCUMENTATION-INDEX.md +3 -0
  309. package/docs/guides/BUYER-QUICKSTART-3.2.md +5 -0
  310. package/docs/guides/DURABLE-BUYER-WRITES.md +337 -0
  311. package/docs/guides/EXISTING-PLATFORM.md +35 -0
  312. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +7 -3
  313. package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
  314. package/docs/guides/REPORTING-LEDGER.md +654 -3
  315. package/docs/guides/REPORTING-SOURCE-EXECUTOR.md +63 -1
  316. package/docs/guides/SELLER-QUICKSTART-3.2.md +2 -0
  317. package/docs/guides/VALIDATE-YOUR-AGENT.md +35 -0
  318. package/docs/guides/idempotency-crash-recovery.md +4 -0
  319. package/docs/llms.txt +4 -2
  320. package/docs/migration-14.x-rc-worksheet.md +5 -5
  321. package/docs/migration-7.9-to-7.10.md +7 -5
  322. package/examples/README.md +17 -0
  323. package/examples/durable-buyer-writes/caller.ts +745 -0
  324. package/examples/durable-buyer-writes/worker.ts +240 -0
  325. package/examples/reliable-reporting-service/README.md +100 -0
  326. package/examples/seller-3.2-starter.ts +7 -8
  327. package/examples/targeting-input-existing-platform.ts +153 -0
  328. package/package.json +41 -29
  329. package/skills/build-seller-agent/specialisms/signed-requests.md +11 -1
  330. package/skills/cross-cutting.md +28 -11
  331. package/compliance/cache/3.1.0-beta.7/domains/brand/index.yaml +0 -160
  332. package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -415
  333. package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/single_side_trust_extension.yaml +0 -454
  334. package/compliance/cache/3.1.0-beta.7/domains/creative/index.yaml +0 -339
  335. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/billing_out_of_band.yaml +0 -153
  336. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
  337. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/native_in_feed.yaml +0 -543
  338. package/compliance/cache/3.1.0-beta.7/domains/governance/index.yaml +0 -682
  339. package/compliance/cache/3.1.0-beta.7/domains/media-buy/index.yaml +0 -781
  340. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -380
  341. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/available_actions.yaml +0 -565
  342. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
  343. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/canonical_formats.yaml +0 -711
  344. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
  345. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
  346. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -234
  347. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
  348. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_reception.yaml +0 -247
  349. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/delivery_reporting.yaml +0 -357
  350. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment.yaml +0 -633
  351. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
  352. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -399
  353. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
  354. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_approved.yaml +0 -214
  355. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_conditions.yaml +0 -199
  356. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied.yaml +0 -204
  357. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
  358. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/invalid_transitions.yaml +0 -289
  359. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
  360. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
  361. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_accountability.yaml +0 -244
  362. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
  363. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
  364. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
  365. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -428
  366. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
  367. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -373
  368. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize.yaml +0 -399
  369. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
  370. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
  371. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
  372. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -517
  373. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
  374. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -823
  375. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
  376. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_products.yaml +0 -148
  377. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
  378. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
  379. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
  380. package/compliance/cache/3.1.0-beta.7/domains/media-buy/state-machine.yaml +0 -442
  381. package/compliance/cache/3.1.0-beta.7/domains/signals/index.yaml +0 -266
  382. package/compliance/cache/3.1.0-beta.7/domains/sponsored-intelligence/index.yaml +0 -256
  383. package/compliance/cache/3.1.0-beta.7/index.json +0 -356
  384. package/compliance/cache/3.1.0-beta.7/protocols/brand/index.yaml +0 -160
  385. package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -415
  386. package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -454
  387. package/compliance/cache/3.1.0-beta.7/protocols/creative/index.yaml +0 -339
  388. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/billing_out_of_band.yaml +0 -153
  389. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
  390. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/native_in_feed.yaml +0 -543
  391. package/compliance/cache/3.1.0-beta.7/protocols/governance/index.yaml +0 -682
  392. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/index.yaml +0 -781
  393. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -380
  394. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/available_actions.yaml +0 -565
  395. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
  396. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/canonical_formats.yaml +0 -711
  397. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
  398. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
  399. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -234
  400. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
  401. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_reception.yaml +0 -247
  402. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -357
  403. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -633
  404. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
  405. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -399
  406. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
  407. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_approved.yaml +0 -214
  408. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_conditions.yaml +0 -199
  409. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied.yaml +0 -204
  410. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
  411. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -289
  412. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
  413. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
  414. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -244
  415. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
  416. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
  417. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
  418. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -428
  419. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
  420. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -373
  421. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -399
  422. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
  423. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
  424. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
  425. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -517
  426. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
  427. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -823
  428. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
  429. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_products.yaml +0 -148
  430. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
  431. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
  432. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
  433. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/state-machine.yaml +0 -442
  434. package/compliance/cache/3.1.0-beta.7/protocols/signals/index.yaml +0 -266
  435. package/compliance/cache/3.1.0-beta.7/protocols/sponsored-intelligence/index.yaml +0 -256
  436. package/compliance/cache/3.1.0-beta.7/specialisms/audience-sync/index.yaml +0 -313
  437. package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/index.yaml +0 -350
  438. package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -226
  439. package/compliance/cache/3.1.0-beta.7/specialisms/collection-lists/index.yaml +0 -359
  440. package/compliance/cache/3.1.0-beta.7/specialisms/content-standards/index.yaml +0 -572
  441. package/compliance/cache/3.1.0-beta.7/specialisms/creative-ad-server/index.yaml +0 -409
  442. package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/generative-seller.yaml +0 -807
  443. package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/index.yaml +0 -758
  444. package/compliance/cache/3.1.0-beta.7/specialisms/creative-template/index.yaml +0 -510
  445. package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/index.yaml +0 -143
  446. package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -117
  447. package/compliance/cache/3.1.0-beta.7/specialisms/governance-delivery-monitor/index.yaml +0 -441
  448. package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/denied.yaml +0 -221
  449. package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/index.yaml +0 -330
  450. package/compliance/cache/3.1.0-beta.7/specialisms/property-lists/index.yaml +0 -482
  451. package/compliance/cache/3.1.0-beta.7/specialisms/sales-broadcast-tv/index.yaml +0 -738
  452. package/compliance/cache/3.1.0-beta.7/specialisms/sales-catalog-driven/index.yaml +0 -840
  453. package/compliance/cache/3.1.0-beta.7/specialisms/sales-guaranteed/index.yaml +0 -601
  454. package/compliance/cache/3.1.0-beta.7/specialisms/sales-non-guaranteed/index.yaml +0 -546
  455. package/compliance/cache/3.1.0-beta.7/specialisms/sales-proposal-mode/index.yaml +0 -586
  456. package/compliance/cache/3.1.0-beta.7/specialisms/sales-social/index.yaml +0 -919
  457. package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/index.yaml +0 -424
  458. package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -211
  459. package/compliance/cache/3.1.0-beta.7/specialisms/signal-owned/index.yaml +0 -317
  460. package/compliance/cache/3.1.0-beta.7/specialisms/sponsored-intelligence/index.yaml +0 -59
  461. package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor-live.yaml +0 -78
  462. package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor.yaml +0 -223
  463. package/compliance/cache/3.1.0-beta.7/test-kits/billing-gate-runner.yaml +0 -115
  464. package/compliance/cache/3.1.0-beta.7/test-kits/bistro-oranje.yaml +0 -126
  465. package/compliance/cache/3.1.0-beta.7/test-kits/distributed-brand-runner.yaml +0 -281
  466. package/compliance/cache/3.1.0-beta.7/test-kits/nova-motors.yaml +0 -262
  467. package/compliance/cache/3.1.0-beta.7/test-kits/osei-natural.yaml +0 -126
  468. package/compliance/cache/3.1.0-beta.7/test-kits/parallel-dispatch-runner.yaml +0 -196
  469. package/compliance/cache/3.1.0-beta.7/test-kits/rate-limit-trip-runner.yaml +0 -172
  470. package/compliance/cache/3.1.0-beta.7/test-kits/signed-requests-runner.yaml +0 -155
  471. package/compliance/cache/3.1.0-beta.7/test-kits/single-side-trust-runner.yaml +0 -294
  472. package/compliance/cache/3.1.0-beta.7/test-kits/substitution-observer-runner.yaml +0 -688
  473. package/compliance/cache/3.1.0-beta.7/test-kits/summit-foods.yaml +0 -125
  474. package/compliance/cache/3.1.0-beta.7/test-kits/webhook-receiver-runner.yaml +0 -265
  475. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/001-minimal-plan.json +0 -43
  476. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/002-full-plan.json +0 -217
  477. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -60
  478. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004a-human-review-omitted.json +0 -43
  479. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -49
  480. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -53
  481. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -57
  482. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -49
  483. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -53
  484. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/007-unicode-objectives.json +0 -43
  485. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -65
  486. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/README.md +0 -220
  487. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/canonicalization.json +0 -241
  488. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/keys.json +0 -60
  489. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/001-no-signature-header.json +0 -24
  490. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/002-wrong-tag.json +0 -26
  491. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/003-expired-signature.json +0 -26
  492. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/004-window-too-long.json +0 -26
  493. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -26
  494. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -26
  495. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -26
  496. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -26
  497. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -27
  498. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -33
  499. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/011-malformed-header.json +0 -27
  500. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -26
  501. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/013-expires-le-created.json +0 -27
  502. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -27
  503. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/015-signature-invalid.json +0 -28
  504. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -35
  505. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/017-key-revoked.json +0 -38
  506. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -28
  507. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -26
  508. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/020-rate-abuse.json +0 -34
  509. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -31
  510. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -31
  511. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -32
  512. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -31
  513. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -43
  514. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -31
  515. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -25
  516. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -26
  517. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/001-basic-post.json +0 -30
  518. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -31
  519. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/003-es256-post.json +0 -30
  520. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -26
  521. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -30
  522. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -30
  523. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -30
  524. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -30
  525. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -30
  526. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -30
  527. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -30
  528. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -30
  529. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/README.md +0 -211
  530. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/keys.json +0 -61
  531. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -26
  532. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -26
  533. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -26
  534. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -26
  535. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -26
  536. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -25
  537. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -26
  538. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -26
  539. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -26
  540. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -26
  541. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -25
  542. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -26
  543. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -26
  544. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -26
  545. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -26
  546. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -37
  547. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -32
  548. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -33
  549. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -32
  550. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -41
  551. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -26
  552. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/001-basic-post.json +0 -24
  553. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/002-es256-post.json +0 -24
  554. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -24
  555. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -24
  556. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -24
  557. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -24
  558. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -25
  559. package/compliance/cache/3.1.0-beta.7/universal/billing-gate-dispatch.yaml +0 -450
  560. package/compliance/cache/3.1.0-beta.7/universal/canonical-format-validate-input.yaml +0 -640
  561. package/compliance/cache/3.1.0-beta.7/universal/capability-discovery.yaml +0 -125
  562. package/compliance/cache/3.1.0-beta.7/universal/collection-lists-pagination-integrity.yaml +0 -306
  563. package/compliance/cache/3.1.0-beta.7/universal/comply-controller-mode-gate.yaml +0 -141
  564. package/compliance/cache/3.1.0-beta.7/universal/content-standards-pagination-integrity.yaml +0 -326
  565. package/compliance/cache/3.1.0-beta.7/universal/deterministic-testing.yaml +0 -1430
  566. package/compliance/cache/3.1.0-beta.7/universal/error-compliance-signals.yaml +0 -377
  567. package/compliance/cache/3.1.0-beta.7/universal/error-compliance.yaml +0 -528
  568. package/compliance/cache/3.1.0-beta.7/universal/fictional-entities.yaml +0 -307
  569. package/compliance/cache/3.1.0-beta.7/universal/get-media-buys-pagination-integrity.yaml +0 -160
  570. package/compliance/cache/3.1.0-beta.7/universal/get-signals-pagination-integrity.yaml +0 -211
  571. package/compliance/cache/3.1.0-beta.7/universal/idempotency.yaml +0 -861
  572. package/compliance/cache/3.1.0-beta.7/universal/notification-config-event-scope.yaml +0 -119
  573. package/compliance/cache/3.1.0-beta.7/universal/notification-config-lifecycle.yaml +0 -337
  574. package/compliance/cache/3.1.0-beta.7/universal/notification-config-rejections.yaml +0 -107
  575. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-creative-formats.yaml +0 -265
  576. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-list-accounts.yaml +0 -245
  577. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity.yaml +0 -263
  578. package/compliance/cache/3.1.0-beta.7/universal/property-lists-pagination-integrity.yaml +0 -307
  579. package/compliance/cache/3.1.0-beta.7/universal/read-tool-idempotency.yaml +0 -405
  580. package/compliance/cache/3.1.0-beta.7/universal/runner-output-contract.yaml +0 -1266
  581. package/compliance/cache/3.1.0-beta.7/universal/schema-validation-signals.yaml +0 -181
  582. package/compliance/cache/3.1.0-beta.7/universal/schema-validation.yaml +0 -548
  583. package/compliance/cache/3.1.0-beta.7/universal/security.yaml +0 -539
  584. package/compliance/cache/3.1.0-beta.7/universal/signed-requests.yaml +0 -217
  585. package/compliance/cache/3.1.0-beta.7/universal/stale-response-advisory.yaml +0 -295
  586. package/compliance/cache/3.1.0-beta.7/universal/storyboard-schema.yaml +0 -2136
  587. package/compliance/cache/3.1.0-beta.7/universal/v3-envelope-integrity.yaml +0 -117
  588. package/compliance/cache/3.1.0-beta.7/universal/version-negotiation.yaml +0 -130
  589. package/compliance/cache/3.1.0-beta.7/universal/webhook-emission.yaml +0 -411
  590. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-bulk-webhooks.yaml +0 -82
  591. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-product-webhooks.yaml +0 -83
  592. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-products.yaml +0 -151
  593. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signal-webhooks.yaml +0 -83
  594. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signals.yaml +0 -149
  595. package/dist/lib/types/v3-1-beta/index.d.mts +0 -1
  596. package/dist/lib/types/v3-1-beta/index.d.ts +0 -1
  597. package/dist/lib/types/v3-1-beta/index.mjs +0 -1
  598. package/dist/lib/types/v3-1-beta/tools.generated.d.mts +0 -26788
  599. package/dist/lib/types/v3-1-beta/tools.generated.d.ts +0 -26788
  600. /package/dist/lib/{types/v3-1-beta/tools.generated.mjs → media-buy/action-types.mjs} +0 -0
package/bin/adcp.js CHANGED
@@ -48,7 +48,14 @@ const {
48
48
  writeSummaryFile,
49
49
  printSoftFailBlock,
50
50
  defaultComplianceTimeoutSeconds,
51
+ escapeTerminalControlChars,
52
+ formatStepSkipLines,
53
+ formatStepVerdictLines,
54
+ isCoverageUnavailableStep,
55
+ unverifiedSigningCoverage,
56
+ parseRequestSigningFlags,
51
57
  } = require('./adcp-storyboard-summary.js');
58
+
52
59
  const { scheduleVersionCheck } = require('./adcp-version-check.js');
53
60
  const { formatStoryboardResultsAsJUnit } = require('../dist/lib/testing/storyboard/junit.js');
54
61
  const { ADCP_VERSION, LIBRARY_VERSION } = require('../dist/lib/version.js');
@@ -1166,6 +1173,12 @@ function parseAgentOptions(args) {
1166
1173
  ? args[invariantsIdx + 1]
1167
1174
  : null;
1168
1175
 
1176
+ // Request-signing vector knobs are captured here solely so their values are
1177
+ // excluded from `positionalArgs`. The authoritative parse (validation +
1178
+ // error exits) lives in `extractRequestSigningOptions(args)`.
1179
+ const signingTransportValue = readFlagValue(args, '--signing-transport');
1180
+ const signingSkipVectorsValue = readFlagValue(args, '--signing-skip-vectors');
1181
+
1169
1182
  const localAgentIdx = args.indexOf('--local-agent');
1170
1183
  const localAgentValue =
1171
1184
  localAgentIdx !== -1 && localAgentIdx + 1 < args.length && !args[localAgentIdx + 1].startsWith('--')
@@ -1239,6 +1252,8 @@ function parseAgentOptions(args) {
1239
1252
  webhookReceiverTlsCertValue,
1240
1253
  webhookReceiverTlsKeyValue,
1241
1254
  invariantsValue,
1255
+ signingTransportValue,
1256
+ signingSkipVectorsValue,
1242
1257
  localAgentValue,
1243
1258
  formatValue,
1244
1259
  summaryOutputValue,
@@ -2164,6 +2179,35 @@ WEBHOOK OPTIONS:
2164
2179
  direct child only).
2165
2180
  HTTP-on-the-wire — spec-compliant.
2166
2181
 
2182
+ REQUEST-SIGNING VECTOR OPTIONS (signed_requests storyboard):
2183
+ --signing-transport raw|mcp How the RFC 9421 conformance vectors are
2184
+ framed on the wire. NOT the same as
2185
+ --transport/--protocol, which selects how the
2186
+ storyboard itself talks to the agent. Default:
2187
+ inferred from the resolved protocol — an MCP
2188
+ run wraps each vector in a tools/call envelope
2189
+ (mcp); an A2A run reports the vectors
2190
+ signing_transport_unavailable (COVERAGE
2191
+ UNAVAILABLE; the track cannot pass) because
2192
+ the fixtures have no A2A framing. Pass raw for
2193
+ agents that
2194
+ expose AdCP tools as per-operation HTTP
2195
+ endpoints. Mirrors
2196
+ \`adcp grade request-signing --transport\`.
2197
+ --signing-skip-vectors IDS Comma-separated vector ids to skip (graded
2198
+ operator_skip), e.g.
2199
+ 025-jwk-alg-crv-mismatch. Unknown ids are
2200
+ rejected — a typo would otherwise skip
2201
+ nothing, silently.
2202
+ --signing-skip-rate-abuse Skip the rate-abuse vector, which floods
2203
+ cap+1 requests at the agent. Boolean: pass
2204
+ the bare flag (=false is rejected, not read
2205
+ as "off").
2206
+
2207
+ A run whose signing vectors were never dispatched exits 3 even though its
2208
+ steps are skip-shaped: nothing about the verifier was graded. --soft-fail
2209
+ reports it and exits 0.
2210
+
2167
2211
  PARALLEL DISPATCH OPTIONS:
2168
2212
  --parallel-dispatch Enable process-local concurrent dispatches
2169
2213
  for storyboards that require the
@@ -2762,6 +2806,42 @@ async function resolveFileComplianceRunOptions(args, opts) {
2762
2806
  return { adcpVersion, complianceDir, schemaRoot };
2763
2807
  }
2764
2808
 
2809
+ // Only render runner-authored capability dependency details here. Other skip
2810
+ // details can contain raw seller diagnostics and retain their existing surface.
2811
+ function printCapabilityPrerequisiteSkip(step) {
2812
+ if (!step.skipped || step.skip_reason !== 'capability_prerequisite_unavailable' || !step.skip?.detail || step.error)
2813
+ return;
2814
+ console.log(` Skipped: ${escapeTerminalControlChars(step.skip.detail)}`);
2815
+ }
2816
+
2817
+ // `printCapabilityPrerequisiteSkip` already phrases this one.
2818
+ const SKIP_REASONS_PRINTED_ELSEWHERE = new Set(['capability_prerequisite_unavailable']);
2819
+
2820
+ /**
2821
+ * Print why a step was skipped, naming runner-owned coverage gaps as gaps
2822
+ * and echoing the remedy the runner supplied. Without this a skipped-only
2823
+ * run prints a green-looking `0 passed` line and nothing else.
2824
+ */
2825
+ // Remedy strings already printed in this invocation. A whole-storyboard
2826
+ // coverage gap repeats one ~550-character remedy per vector; on a routed run
2827
+ // that is ~38 identical copies, which buries the rest of the report.
2828
+ const PRINTED_SKIP_REMEDIES = new Set();
2829
+
2830
+ function printStepSkipDetail(step) {
2831
+ const lines = formatStepSkipLines(step, { handledReasons: SKIP_REASONS_PRINTED_ELSEWHERE });
2832
+ for (const [index, line] of lines.entries()) {
2833
+ // Line 0 is the reason; any line after it is the detail/remedy.
2834
+ if (index > 0 && line.length > 200) {
2835
+ if (PRINTED_SKIP_REMEDIES.has(line)) {
2836
+ console.log(' (same remedy as above)');
2837
+ continue;
2838
+ }
2839
+ PRINTED_SKIP_REMEDIES.add(line);
2840
+ }
2841
+ console.log(line);
2842
+ }
2843
+ }
2844
+
2765
2845
  async function handleStoryboardRun(args) {
2766
2846
  let opts = parseAgentOptions(args);
2767
2847
  let {
@@ -2849,6 +2929,12 @@ async function handleStoryboardRun(args) {
2849
2929
  process.exit(2);
2850
2930
  }
2851
2931
 
2932
+ // Usage gate before any network work: a mistyped signing flag should exit 2
2933
+ // without protocol autodetection, and certainly without the inline OAuth
2934
+ // browser flow below. The authoritative parse runs again downstream, on the
2935
+ // path that actually consumes the options.
2936
+ extractRequestSigningOptions(args);
2937
+
2852
2938
  // Inline OAuth: if --oauth is set and the agent is a saved alias that
2853
2939
  // doesn't have valid tokens, run the browser flow now so the downstream
2854
2940
  // runner sees freshly-saved tokens via getAgent().
@@ -2903,6 +2989,7 @@ async function handleStoryboardRun(args) {
2903
2989
  const webhookAutoTunnel = args.includes('--webhook-receiver-auto-tunnel');
2904
2990
  const webhookReceiverBase = extractWebhookReceiverOptions(args);
2905
2991
  const parallelDispatchOpts = extractParallelDispatchOptions(args);
2992
+ const requestSigningOpts = extractRequestSigningOptions(args);
2906
2993
  validateAutoTunnelArgs(args, webhookReceiverBase);
2907
2994
 
2908
2995
  // Load invariants before the dry-run gate so `--dry-run --invariants` fails
@@ -2977,6 +3064,7 @@ async function handleStoryboardRun(args) {
2977
3064
  }),
2978
3065
  ...(mergedRunHeaders && { headers: mergedRunHeaders }),
2979
3066
  ...(opts.loadedTestKit !== undefined && { test_kit: opts.loadedTestKit }),
3067
+ ...(requestSigningOpts ?? {}),
2980
3068
  };
2981
3069
 
2982
3070
  const restoreLogs = jsonOutput ? captureStdoutLogs() : null;
@@ -3020,6 +3108,7 @@ async function handleStoryboardRun(args) {
3020
3108
  not_applicable: ' [not applicable]',
3021
3109
  no_phases: ' [no phases]',
3022
3110
  prerequisite_failed: ' [prerequisite failed]',
3111
+ capability_prerequisite_unavailable: ' [capability prerequisite unavailable]',
3023
3112
  unsatisfied_contract: ' [contract out of scope]',
3024
3113
  };
3025
3114
  for (const step of phase.steps) {
@@ -3027,8 +3116,10 @@ async function handleStoryboardRun(args) {
3027
3116
  const skipLabel = SKIP_LABELS[step.skip_reason] ?? '';
3028
3117
  console.log(`\n${icon} ${step.title}${skipLabel} (${step.duration_ms}ms)`);
3029
3118
  console.log(` Task: ${step.task}`);
3119
+ printCapabilityPrerequisiteSkip(step);
3120
+ printStepSkipDetail(step);
3030
3121
  if (step.error) {
3031
- console.log(` Error: ${step.error}`);
3122
+ console.log(` Error: ${escapeTerminalControlChars(step.error)}`);
3032
3123
  }
3033
3124
  for (const v of step.validations) {
3034
3125
  const vIcon = v.passed ? '✅' : '❌';
@@ -3254,6 +3345,54 @@ function extractParallelDispatchOptions(args) {
3254
3345
  return args.includes('--parallel-dispatch') ? { contracts: ['parallel_dispatch_runner'] } : null;
3255
3346
  }
3256
3347
 
3348
+ /**
3349
+ * CLI wrapper over `parseRequestSigningFlags`: turn a rejected flag into a
3350
+ * usage message and exit 2 rather than silently falling back — a mistyped
3351
+ * transport would otherwise surface as 38 unexplained vector failures.
3352
+ */
3353
+ function extractRequestSigningOptions(args) {
3354
+ const parsed = parseRequestSigningFlags(
3355
+ flag => readFlagValue(args, flag),
3356
+ flag => args.includes(flag) || args.some(a => a.startsWith(`${flag}=`)),
3357
+ {
3358
+ readInlineValue: flag => {
3359
+ const eqArg = args.find(a => a.startsWith(`${flag}=`));
3360
+ return eqArg ? eqArg.slice(flag.length + 1) : null;
3361
+ },
3362
+ knownVectorIds: args.some(a => a === '--signing-skip-vectors' || a.startsWith('--signing-skip-vectors='))
3363
+ ? knownSigningVectorIds(args)
3364
+ : null,
3365
+ }
3366
+ );
3367
+ if (!parsed.ok) {
3368
+ console.error(`ERROR: ${parsed.error}`);
3369
+ process.exit(2);
3370
+ }
3371
+ return parsed.options;
3372
+ }
3373
+
3374
+ /**
3375
+ * Vector ids from the compliance cache this run will actually grade against,
3376
+ * for validating `--signing-skip-vectors`.
3377
+ *
3378
+ * Returns `null` when the cache can't be read: a missing cache is the run's
3379
+ * problem to report where it matters (the runner says so with a remedy), not
3380
+ * a reason to refuse an otherwise valid flag.
3381
+ */
3382
+ function knownSigningVectorIds(args) {
3383
+ try {
3384
+ const { loadRequestSigningVectors } = require('../dist/lib/testing/storyboard/request-signing/index.js');
3385
+ const { complianceVersion, complianceDir } = parseComplianceSelection(args);
3386
+ const loaded = loadRequestSigningVectors({
3387
+ ...(complianceVersion && { version: complianceVersion }),
3388
+ ...(complianceDir && { complianceDir }),
3389
+ });
3390
+ return [...loaded.positive, ...loaded.negative].map(v => v.id);
3391
+ } catch {
3392
+ return null;
3393
+ }
3394
+ }
3395
+
3257
3396
  /**
3258
3397
  * Combine independently requested storyboard-runner contracts. Both webhook
3259
3398
  * receiver and parallel dispatch are opt-ins, so a run that requests both
@@ -3939,6 +4078,7 @@ async function handleLocalAgentStoryboardRun(modulePath, args, opts) {
3939
4078
 
3940
4079
  const storyboardsSpec = storyboardId ? [storyboardId] : 'all';
3941
4080
  const parallelDispatchOpts = extractParallelDispatchOptions(args);
4081
+ const requestSigningOpts = extractRequestSigningOptions(args);
3942
4082
  const restoreLogs = jsonOutput ? captureStdoutLogs() : null;
3943
4083
  let result;
3944
4084
  try {
@@ -3957,6 +4097,7 @@ async function handleLocalAgentStoryboardRun(modulePath, args, opts) {
3957
4097
  }),
3958
4098
  ...(opts.loadedTestKit !== undefined && { test_kit: opts.loadedTestKit }),
3959
4099
  ...mergeStoryboardContracts(parallelDispatchOpts),
4100
+ ...(requestSigningOpts ?? {}),
3960
4101
  },
3961
4102
  onStoryboardComplete:
3962
4103
  jsonOutput || format === 'junit'
@@ -4168,6 +4309,7 @@ async function handleMultiInstanceStoryboardRun(args, opts, urls) {
4168
4309
  const webhookAutoTunnel = args.includes('--webhook-receiver-auto-tunnel');
4169
4310
  const webhookReceiverBase = extractWebhookReceiverOptions(args);
4170
4311
  const parallelDispatchOpts = extractParallelDispatchOptions(args);
4312
+ const requestSigningOpts = extractRequestSigningOptions(args);
4171
4313
  validateAutoTunnelArgs(args, webhookReceiverBase);
4172
4314
  if ((webhookReceiverBase || webhookAutoTunnel) && strategy === 'multi-pass') {
4173
4315
  // The runner throws on this combination (each pass binds a fresh receiver
@@ -4394,6 +4536,7 @@ async function handleMultiInstanceStoryboardRun(args, opts, urls) {
4394
4536
  mediaBuyLifecycleCompatibility: opts.mediaBuyLifecycleCompatibility,
4395
4537
  }),
4396
4538
  ...(opts.loadedTestKit !== undefined && { test_kit: opts.loadedTestKit }),
4539
+ ...(requestSigningOpts ?? {}),
4397
4540
  };
4398
4541
 
4399
4542
  const restoreLogs = jsonOutput ? captureStdoutLogs() : null;
@@ -4439,8 +4582,10 @@ async function handleMultiInstanceStoryboardRun(args, opts, urls) {
4439
4582
  const instTag = step.agent_index ? `[#${step.agent_index}] ` : '';
4440
4583
  console.log(`\n${icon} ${instTag}${step.title}${skipLabel} (${step.duration_ms}ms)`);
4441
4584
  console.log(` Task: ${step.task}`);
4585
+ printCapabilityPrerequisiteSkip(step);
4586
+ printStepSkipDetail(step);
4442
4587
  if (step.error) {
4443
- console.log(` Error: ${step.error}`);
4588
+ console.log(` Error: ${escapeTerminalControlChars(step.error)}`);
4444
4589
  }
4445
4590
  for (const v of step.validations) {
4446
4591
  const vIcon = v.passed ? '✅' : '❌';
@@ -4506,6 +4651,7 @@ async function handleAgentsRoutedStoryboardRun(args, opts, routing) {
4506
4651
  const webhookAutoTunnel = args.includes('--webhook-receiver-auto-tunnel');
4507
4652
  const webhookReceiverBase = extractWebhookReceiverOptions(args);
4508
4653
  const parallelDispatchOpts = extractParallelDispatchOptions(args);
4654
+ const requestSigningOpts = extractRequestSigningOptions(args);
4509
4655
  validateAutoTunnelArgs(args, webhookReceiverBase);
4510
4656
 
4511
4657
  // Strip per-flag values that may have leaked into positionals via parseAgentOptions.
@@ -4680,6 +4826,7 @@ async function handleAgentsRoutedStoryboardRun(args, opts, routing) {
4680
4826
  mediaBuyLifecycleCompatibility: opts.mediaBuyLifecycleCompatibility,
4681
4827
  }),
4682
4828
  ...(opts.loadedTestKit !== undefined && { test_kit: opts.loadedTestKit }),
4829
+ ...(requestSigningOpts ?? {}),
4683
4830
  };
4684
4831
 
4685
4832
  const restoreLogs = jsonOutput ? captureStdoutLogs() : null;
@@ -4733,6 +4880,7 @@ async function handleAgentsRoutedStoryboardRun(args, opts, routing) {
4733
4880
  not_applicable: ' [not applicable]',
4734
4881
  no_phases: ' [no phases]',
4735
4882
  prerequisite_failed: ' [prerequisite failed]',
4883
+ capability_prerequisite_unavailable: ' [capability prerequisite unavailable]',
4736
4884
  unsatisfied_contract: ' [contract out of scope]',
4737
4885
  };
4738
4886
  for (const result of results) {
@@ -4748,12 +4896,15 @@ async function handleAgentsRoutedStoryboardRun(args, opts, routing) {
4748
4896
  // routing decisions are visible in the human-readable output.
4749
4897
  let agentTag = '';
4750
4898
  if (step.agent_url && result.agent_map) {
4751
- const key = Object.entries(result.agent_map).find(([, url]) => url === step.agent_url)?.[0];
4899
+ const entries = Object.entries(result.agent_map);
4900
+ const key = entries[step.agent_index - 1]?.[0] ?? entries.find(([, url]) => url === step.agent_url)?.[0];
4752
4901
  if (key) agentTag = `[${key}] `;
4753
4902
  }
4754
4903
  console.log(`\n${icon} ${agentTag}${step.title}${skipLabel} (${step.duration_ms}ms)`);
4755
4904
  console.log(` Task: ${step.task}`);
4756
- if (step.error) console.log(` Error: ${step.error}`);
4905
+ printCapabilityPrerequisiteSkip(step);
4906
+ printStepSkipDetail(step);
4907
+ if (step.error) console.log(` Error: ${escapeTerminalControlChars(step.error)}`);
4757
4908
  for (const v of step.validations) {
4758
4909
  const vIcon = v.passed ? '✅' : '❌';
4759
4910
  console.log(` ${vIcon} ${v.description}`);
@@ -4795,6 +4946,22 @@ async function handleAgentsRoutedStoryboardRun(args, opts, routing) {
4795
4946
  }
4796
4947
 
4797
4948
  // Shared implementation: run all matching storyboards against an agent
4949
+ // One remedy per way a run can end with no graded vector. Keeping them
4950
+ // distinct matters: an unreachable agent and an over-broad
4951
+ // `--signing-skip-vectors` need opposite actions from the operator.
4952
+ const SIGNING_COVERAGE_REMEDIES = {
4953
+ probe_errored: 'the probes could not complete — fix the transport or auth failure reported above, then re-run',
4954
+ transport_unverified:
4955
+ 'this runner has no request-signing dispatch for the run protocol — grade the MCP or REST binding, ' +
4956
+ 'or set --signing-transport when that binding answers at the same URL',
4957
+ scope_excluded:
4958
+ "every vector was excluded by this run's own selection — drop the --signing-skip-vectors entries you did " +
4959
+ 'not mean to exclude',
4960
+ self_check_only:
4961
+ 'only the in-library SDK self-check ran, and it never contacts your agent — widen the selection so a wire ' +
4962
+ 'vector is graded',
4963
+ };
4964
+
4798
4965
  async function runFullAssessment(agentArg, rawArgs, parsedOpts) {
4799
4966
  const opts = parsedOpts || parseAgentOptions(rawArgs);
4800
4967
 
@@ -4875,6 +5042,10 @@ async function runFullAssessment(agentArg, rawArgs, parsedOpts) {
4875
5042
  resolvedOauthClientCredentials: oauthClientCredentials,
4876
5043
  });
4877
5044
 
5045
+ // Validate the signing flags before `resolveWebhookReceiverOptions`, which
5046
+ // may spawn a tunnel child process: a bad flag value should exit 2 without
5047
+ // standing infrastructure up first.
5048
+ const requestSigningOpts = extractRequestSigningOptions(rawArgs);
4878
5049
  const webhookReceiverOpts = await resolveWebhookReceiverOptions(rawArgs, { jsonOutput: opts.jsonOutput });
4879
5050
  const parallelDispatchOpts = extractParallelDispatchOptions(rawArgs);
4880
5051
 
@@ -4904,6 +5075,7 @@ async function runFullAssessment(agentArg, rawArgs, parsedOpts) {
4904
5075
  ...(opts.schemaRoot && { schemaRoot: opts.schemaRoot }),
4905
5076
  ...(!opts.strictResponseSchemaValidation && { strictResponseSchemaValidation: false }),
4906
5077
  ...(opts.hostedStableLineAlias && { hostedStableLineAlias: opts.hostedStableLineAlias }),
5078
+ ...(requestSigningOpts ?? {}),
4907
5079
  };
4908
5080
 
4909
5081
  if (!opts.jsonOutput) {
@@ -5007,14 +5179,34 @@ async function runFullAssessment(agentArg, rawArgs, parsedOpts) {
5007
5179
  // exercised its tracks and they passed" is a CI failure. `partial`
5008
5180
  // is preserved as exit 0 because some tracks were silent (wired but
5009
5181
  // unexercised) — that's a reportable observation, not a hard failure.
5182
+ //
5183
+ // One narrow exception (adcp-client#2954): a run whose request-signing
5184
+ // vectors were never dispatched verified nothing about the verifier, and
5185
+ // its steps are skip-shaped, so every count above reads clean. That is
5186
+ // the case #2956 exists to make visible in CI, so it exits nonzero — on
5187
+ // its own signal, without touching how any other `partial` run exits.
5188
+ const unverifiedSigning = unverifiedSigningCoverage(result);
5010
5189
  const isFailingExit =
5011
5190
  result.overall_status === 'failing' ||
5012
5191
  result.overall_status === 'unreachable' ||
5013
- result.overall_status === 'auth_required';
5192
+ result.overall_status === 'auth_required' ||
5193
+ unverifiedSigning.length > 0;
5014
5194
 
5195
+ if (unverifiedSigning.length > 0 && !opts.jsonOutput) {
5196
+ for (const gap of unverifiedSigning) {
5197
+ console.error(
5198
+ `\n❌ ${escapeTerminalControlChars(gap.storyboard_id)}: no request-signing vector reached the agent. ` +
5199
+ `${SIGNING_COVERAGE_REMEDIES[gap.coverage] ?? 'no vector was graded'}.`
5200
+ );
5201
+ }
5202
+ if (!opts.softFail) {
5203
+ console.error(' Pass --soft-fail to report this without failing the job.');
5204
+ }
5205
+ }
5015
5206
  if (opts.softFail && isFailingExit) {
5016
5207
  const failedNames = result.failures?.map(f => f.storyboard_id).filter((v, i, a) => a.indexOf(v) === i) ?? [];
5017
- printSoftFailBlock(failedNames, opts.jsonOutput);
5208
+ const unverifiedNames = unverifiedSigning.map(gap => gap.storyboard_id);
5209
+ printSoftFailBlock([...new Set([...failedNames, ...unverifiedNames])], opts.jsonOutput);
5018
5210
  }
5019
5211
  process.exit(opts.softFail ? 0 : isFailingExit ? 3 : 0);
5020
5212
  } catch (error) {
@@ -5095,6 +5287,10 @@ async function handleStoryboardStepCmd(args) {
5095
5287
  process.exit(2);
5096
5288
  }
5097
5289
 
5290
+ // Same usage gate as `storyboard run`: fail a bad signing flag before the
5291
+ // OAuth browser flow and agent resolution.
5292
+ extractRequestSigningOptions(args);
5293
+
5098
5294
  await maybeRunInlineOAuth(agentArg, args, { jsonOutput });
5099
5295
 
5100
5296
  const {
@@ -5145,6 +5341,7 @@ async function handleStoryboardStepCmd(args) {
5145
5341
  resolvedOauthClient,
5146
5342
  resolvedOauthClientCredentials,
5147
5343
  }),
5344
+ ...(extractRequestSigningOptions(args) ?? {}),
5148
5345
  };
5149
5346
 
5150
5347
  const restoreLogs = jsonOutput ? captureStdoutLogs() : null;
@@ -5158,10 +5355,12 @@ async function handleStoryboardStepCmd(args) {
5158
5355
  if (jsonOutput) {
5159
5356
  await writeJsonOutput(result);
5160
5357
  } else {
5161
- const icon = result.passed ? '✅' : '❌';
5162
5358
  console.log(`\n── Step: ${result.title} ──────────────────────────────`);
5163
5359
  console.log(`Task: ${result.task}`);
5164
- console.log(`\n${icon} ${result.passed ? 'Passed' : 'Failed'} (${result.duration_ms}ms)`);
5360
+ console.log('');
5361
+ for (const line of formatStepVerdictLines(result, { durationMs: result.duration_ms })) {
5362
+ console.log(line);
5363
+ }
5165
5364
 
5166
5365
  if (result.error) {
5167
5366
  console.log(`Error: ${result.error}`);
@@ -5196,7 +5395,19 @@ async function handleStoryboardStepCmd(args) {
5196
5395
  }
5197
5396
  }
5198
5397
 
5199
- process.exit(result.passed ? 0 : 3);
5398
+ // A skipped step is `passed: true` — skip is not failure. That is right for
5399
+ // a step the agent opted out of, and wrong for one the runner could not
5400
+ // grade: `adcp storyboard step … && echo ok` would print ok for a vector
5401
+ // nothing verified. Exit 3 on that gap, matching what the verdict lines
5402
+ // above already say (adcp-client#2954) — and honour `--soft-fail` here as
5403
+ // every other exit site in this file does, because the help text and the
5404
+ // guide both offer it as the opt-out for exactly this.
5405
+ const stepFailed = !result.passed || isCoverageUnavailableStep(result);
5406
+ if (stepFailed && opts.softFail) {
5407
+ printSoftFailBlock([`${storyboardId}/${stepId}`], jsonOutput);
5408
+ process.exit(0);
5409
+ }
5410
+ process.exit(stepFailed ? 3 : 0);
5200
5411
  }
5201
5412
 
5202
5413
  async function handleCheckNetworkCommand(args) {
@@ -5493,7 +5704,7 @@ function renderDiagnosisReport(report) {
5493
5704
  const label = STEP_LABELS[step.name] || step.name;
5494
5705
  const prefix = ` • ${label}`;
5495
5706
  if (step.error) {
5496
- console.log(`${prefix} ↳ skipped: ${step.error}`);
5707
+ console.log(`${prefix} ↳ skipped: ${escapeTerminalControlChars(step.error)}`);
5497
5708
  continue;
5498
5709
  }
5499
5710
  if (step.http) {
@@ -3,7 +3,7 @@ type JsonSchema = Record<string, unknown>;
3
3
  export interface ConformanceSchemaOptions {
4
4
  /** AdCP schema/cache version to load. Defaults to the SDK-pinned version. */
5
5
  version?: string;
6
- /** External schema-data root, e.g. `dist/schemas/latest` or `dist/lib/schemas-data/3.1.0-beta.7`. */
6
+ /** External schema-data root, e.g. `dist/schemas/latest` or `dist/lib/schemas-data/3.2.0-rc.3`. */
7
7
  schemaRoot?: string;
8
8
  }
9
9
  export declare function loadRequestSchema(tool: ConformanceToolName, options?: ConformanceSchemaOptions): JsonSchema;
@@ -3,7 +3,7 @@ type JsonSchema = Record<string, unknown>;
3
3
  export interface ConformanceSchemaOptions {
4
4
  /** AdCP schema/cache version to load. Defaults to the SDK-pinned version. */
5
5
  version?: string;
6
- /** External schema-data root, e.g. `dist/schemas/latest` or `dist/lib/schemas-data/3.1.0-beta.7`. */
6
+ /** External schema-data root, e.g. `dist/schemas/latest` or `dist/lib/schemas-data/3.2.0-rc.3`. */
7
7
  schemaRoot?: string;
8
8
  }
9
9
  export declare function loadRequestSchema(tool: ConformanceToolName, options?: ConformanceSchemaOptions): JsonSchema;
@@ -3,7 +3,7 @@ import type { AgentConfig } from '../types/index.mjs';
3
3
  import type { MCPWebhookPayload, GetBrandIdentityRequest, GetBrandIdentityResponse, ContextMatchRequest, ContextMatchResponse, IdentityMatchRequest, IdentityMatchResponseRouterPublisher } from '../types/core.generated.mjs';
4
4
  import type { Task as A2ATask, TaskStatusUpdateEvent } from '@a2a-js/sdk';
5
5
  import { type CanonicalReadTaskOptions, type CreativeDeliveryTaskOptions, type SingleAgentClientConfig, type SyncCreativesTaskOptions, type VerifyAndParseWebhookOptions, type WebhookHandlerAdapter, type WebhookParseResult, type WebhookRequestContext } from './SingleAgentClient.mjs';
6
- import type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message } from './ConversationTypes.mjs';
6
+ import type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message, DirectPauseRecoveryRequest } from './ConversationTypes.mjs';
7
7
  import type { AdcpCapabilities } from '../utils/capabilities.mjs';
8
8
  import type { WebhookHeaderValue } from '../webhooks/index.mjs';
9
9
  import type { GetProductsRequest, GetProductsResponse, ListProductsRequest, ListProductsResponse, RequestProposalsRequest, RequestProposalsResponse, DeclineProposalsRequest, DeclineProposalsResponse, BuyProductsRequest, BuyProductsResponse, AcceptProposalRequest, AcceptProposalResponse, ControlMediaBuyRequest, ControlMediaBuyResponse, ListCreativeFormatsRequest, ListCreativeFormatsResponse, CreateMediaBuyRequest, CreateMediaBuyResponse, UpdateMediaBuyRequest, UpdateMediaBuyResponse, SyncCreativesRequest, SyncCreativesResponse, ListCreativesRequest, ListCreativesResponse, GetMediaBuysRequest, GetMediaBuysResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, GetReportingStatusRequest, GetReportingStatusResponse, SyncReportingStatusRequest, SyncReportingStatusResponse, SyncReportingReceiptsRequest, SyncReportingReceiptsResponse, GetCreativeDeliveryRequest, GetCreativeDeliveryResponse, ProvidePerformanceFeedbackRequest, ProvidePerformanceFeedbackResponse, GetSignalsRequest, GetSignalsResponse, ActivateSignalRequest, ActivateSignalResponse, GetAdCPCapabilitiesRequest, GetAdCPCapabilitiesResponse, PreviewCreativeRequest, PreviewCreativeResponse, BuildCreativeRequest, BuildCreativeResponse, ListAccountChangesRequest, ListAccountChangesResponse, ListAccountsRequest, ListAccountsResponse, SyncAccountsRequest, SyncAccountsResponse, SyncAudiencesRequest, SyncAudiencesResponse, CreatePropertyListRequest, CreatePropertyListResponse, GetPropertyListRequest, GetPropertyListResponse, UpdatePropertyListRequest, UpdatePropertyListResponse, ListPropertyListsRequest, ListPropertyListsResponse, DeletePropertyListRequest, DeletePropertyListResponse, ListContentStandardsRequest, ListContentStandardsResponse, GetContentStandardsRequest, GetContentStandardsResponse, CalibrateContentRequest, CalibrateContentResponse, ValidateContentDeliveryRequest, ValidateContentDeliveryResponse, SIGetOfferingRequest, SIGetOfferingResponse, SIInitiateSessionRequest, SIInitiateSessionResponse, SISendMessageRequest, SISendMessageResponse, SITerminateSessionRequest, SITerminateSessionResponse, SyncPlansRequest, SyncPlansResponse, CheckGovernanceRequest, CheckGovernanceResponse, ReportPlanOutcomeRequest, ReportPlanOutcomeResponse, ReportPlanAdjustmentRequest, ReportPlanAdjustmentResponse, GetPlanAuditLogsRequest, GetPlanAuditLogsResponse, ListTransformersRequest, ListTransformersResponse, SyncAgentNotificationConfigsRequest, SyncAgentNotificationConfigsResponse } from '../types/tools.generated.mjs';
@@ -175,6 +175,11 @@ export declare class AgentClient {
175
175
  private readonly sessionTrackedDeferredContinuations;
176
176
  private readonly _isInProcess;
177
177
  constructor(agent: AgentConfig, config?: SingleAgentClientConfig);
178
+ /**
179
+ * Recover the current A2A pause generation for a direct mutation that opted
180
+ * into `TaskOptions.durableContinuationRecovery`.
181
+ */
182
+ recoverDirectPauseContinuation<T>(request: DirectPauseRecoveryRequest): Promise<TaskResult<T>>;
178
183
  /**
179
184
  * Returns the AdCP protocol version this client speaks. Mirrors
180
185
  * `SingleAgentClient.getAdcpVersion()`. See {@link SingleAgentClientConfig.adcpVersion}.
@@ -3,7 +3,7 @@ import type { AgentConfig } from '../types';
3
3
  import type { MCPWebhookPayload, GetBrandIdentityRequest, GetBrandIdentityResponse, ContextMatchRequest, ContextMatchResponse, IdentityMatchRequest, IdentityMatchResponseRouterPublisher } from '../types/core.generated';
4
4
  import type { Task as A2ATask, TaskStatusUpdateEvent } from '@a2a-js/sdk';
5
5
  import { type CanonicalReadTaskOptions, type CreativeDeliveryTaskOptions, type SingleAgentClientConfig, type SyncCreativesTaskOptions, type VerifyAndParseWebhookOptions, type WebhookHandlerAdapter, type WebhookParseResult, type WebhookRequestContext } from './SingleAgentClient';
6
- import type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message } from './ConversationTypes';
6
+ import type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message, DirectPauseRecoveryRequest } from './ConversationTypes';
7
7
  import type { AdcpCapabilities } from '../utils/capabilities';
8
8
  import type { WebhookHeaderValue } from '../webhooks';
9
9
  import type { GetProductsRequest, GetProductsResponse, ListProductsRequest, ListProductsResponse, RequestProposalsRequest, RequestProposalsResponse, DeclineProposalsRequest, DeclineProposalsResponse, BuyProductsRequest, BuyProductsResponse, AcceptProposalRequest, AcceptProposalResponse, ControlMediaBuyRequest, ControlMediaBuyResponse, ListCreativeFormatsRequest, ListCreativeFormatsResponse, CreateMediaBuyRequest, CreateMediaBuyResponse, UpdateMediaBuyRequest, UpdateMediaBuyResponse, SyncCreativesRequest, SyncCreativesResponse, ListCreativesRequest, ListCreativesResponse, GetMediaBuysRequest, GetMediaBuysResponse, GetMediaBuyDeliveryRequest, GetMediaBuyDeliveryResponse, GetReportingStatusRequest, GetReportingStatusResponse, SyncReportingStatusRequest, SyncReportingStatusResponse, SyncReportingReceiptsRequest, SyncReportingReceiptsResponse, GetCreativeDeliveryRequest, GetCreativeDeliveryResponse, ProvidePerformanceFeedbackRequest, ProvidePerformanceFeedbackResponse, GetSignalsRequest, GetSignalsResponse, ActivateSignalRequest, ActivateSignalResponse, GetAdCPCapabilitiesRequest, GetAdCPCapabilitiesResponse, PreviewCreativeRequest, PreviewCreativeResponse, BuildCreativeRequest, BuildCreativeResponse, ListAccountChangesRequest, ListAccountChangesResponse, ListAccountsRequest, ListAccountsResponse, SyncAccountsRequest, SyncAccountsResponse, SyncAudiencesRequest, SyncAudiencesResponse, CreatePropertyListRequest, CreatePropertyListResponse, GetPropertyListRequest, GetPropertyListResponse, UpdatePropertyListRequest, UpdatePropertyListResponse, ListPropertyListsRequest, ListPropertyListsResponse, DeletePropertyListRequest, DeletePropertyListResponse, ListContentStandardsRequest, ListContentStandardsResponse, GetContentStandardsRequest, GetContentStandardsResponse, CalibrateContentRequest, CalibrateContentResponse, ValidateContentDeliveryRequest, ValidateContentDeliveryResponse, SIGetOfferingRequest, SIGetOfferingResponse, SIInitiateSessionRequest, SIInitiateSessionResponse, SISendMessageRequest, SISendMessageResponse, SITerminateSessionRequest, SITerminateSessionResponse, SyncPlansRequest, SyncPlansResponse, CheckGovernanceRequest, CheckGovernanceResponse, ReportPlanOutcomeRequest, ReportPlanOutcomeResponse, ReportPlanAdjustmentRequest, ReportPlanAdjustmentResponse, GetPlanAuditLogsRequest, GetPlanAuditLogsResponse, ListTransformersRequest, ListTransformersResponse, SyncAgentNotificationConfigsRequest, SyncAgentNotificationConfigsResponse } from '../types/tools.generated';
@@ -175,6 +175,11 @@ export declare class AgentClient {
175
175
  private readonly sessionTrackedDeferredContinuations;
176
176
  private readonly _isInProcess;
177
177
  constructor(agent: AgentConfig, config?: SingleAgentClientConfig);
178
+ /**
179
+ * Recover the current A2A pause generation for a direct mutation that opted
180
+ * into `TaskOptions.durableContinuationRecovery`.
181
+ */
182
+ recoverDirectPauseContinuation<T>(request: DirectPauseRecoveryRequest): Promise<TaskResult<T>>;
178
183
  /**
179
184
  * Returns the AdCP protocol version this client speaks. Mirrors
180
185
  * `SingleAgentClient.getAdcpVersion()`. See {@link SingleAgentClientConfig.adcpVersion}.
@@ -101,6 +101,15 @@ class AgentClient {
101
101
  recoverDeferredTaskForOperation(operationId, recoveryKey, publishTerminalTaskStatus = true) {
102
102
  return this.client.recoverDeferredTaskForOperation(operationId, recoveryKey, publishTerminalTaskStatus);
103
103
  }
104
+ /**
105
+ * Recover the current A2A pause generation for a direct mutation that opted
106
+ * into `TaskOptions.durableContinuationRecovery`.
107
+ */
108
+ async recoverDirectPauseContinuation(request) {
109
+ const result = await this.client.recoverDirectPauseContinuation(request);
110
+ this.retainSession(result);
111
+ return result;
112
+ }
104
113
  /** Bridge a store-recovered callback into the deferred terminal checkpoint. @internal */
105
114
  checkpointExternalDeferredSettlement(token, operationId, terminalResult) {
106
115
  return this.client.checkpointExternalDeferredSettlement(token, operationId, terminalResult);
@@ -80,6 +80,15 @@ class AgentClient {
80
80
  recoverDeferredTaskForOperation(operationId, recoveryKey, publishTerminalTaskStatus = true) {
81
81
  return this.client.recoverDeferredTaskForOperation(operationId, recoveryKey, publishTerminalTaskStatus);
82
82
  }
83
+ /**
84
+ * Recover the current A2A pause generation for a direct mutation that opted
85
+ * into `TaskOptions.durableContinuationRecovery`.
86
+ */
87
+ async recoverDirectPauseContinuation(request) {
88
+ const result = await this.client.recoverDirectPauseContinuation(request);
89
+ this.retainSession(result);
90
+ return result;
91
+ }
83
92
  /** Bridge a store-recovered callback into the deferred terminal checkpoint. @internal */
84
93
  checkpointExternalDeferredSettlement(token, operationId, terminalResult) {
85
94
  return this.client.checkpointExternalDeferredSettlement(token, operationId, terminalResult);
@@ -153,6 +153,20 @@ export interface TaskOptions {
153
153
  debug?: boolean;
154
154
  /** Suppress automatic webhook URL generation for this call. */
155
155
  disableWebhook?: boolean;
156
+ /**
157
+ * Opt a direct mutating A2A call into operation-routed pause recovery.
158
+ *
159
+ * `ownerScope` must identify the authenticated buyer principal and account
160
+ * in the host's authorization model. It is hashed together with the trusted
161
+ * seller binding and must be supplied again during recovery.
162
+ *
163
+ * Requires a `DeferredTaskStorage` implementation with the operation-route
164
+ * methods. The SDK returns a distinct, host-only recovery capability in
165
+ * `result.deferred.recovery` when the seller first pauses.
166
+ */
167
+ durableContinuationRecovery?: {
168
+ ownerScope: string;
169
+ };
156
170
  /**
157
171
  * Trusted local authorization tuple for a delegated, cross-origin seller.
158
172
  * The SDK snapshots this before dispatch and persists it with any generated
@@ -252,6 +266,21 @@ export interface DeferredContinuation<T> {
252
266
  question?: string;
253
267
  /** Resume the same seller task with user input or after refreshing auth. */
254
268
  resume: (input: any) => Promise<TaskResult<T>>;
269
+ /**
270
+ * Stable operation route and host-only recovery capability. Present only
271
+ * when the call opted into durable operation-routed recovery. Persist this
272
+ * once; never expose `recoveryKey` to the seller or a human approver.
273
+ */
274
+ recovery?: {
275
+ operationId: string;
276
+ recoveryKey: string;
277
+ };
278
+ }
279
+ /** Authenticated owner input for direct pause route recovery. */
280
+ export interface DirectPauseRecoveryRequest {
281
+ operationId: string;
282
+ recoveryKey: string;
283
+ ownerScope: string;
255
284
  }
256
285
  /**
257
286
  * Continuation for submitted server tasks (server needs time).
@@ -153,6 +153,20 @@ export interface TaskOptions {
153
153
  debug?: boolean;
154
154
  /** Suppress automatic webhook URL generation for this call. */
155
155
  disableWebhook?: boolean;
156
+ /**
157
+ * Opt a direct mutating A2A call into operation-routed pause recovery.
158
+ *
159
+ * `ownerScope` must identify the authenticated buyer principal and account
160
+ * in the host's authorization model. It is hashed together with the trusted
161
+ * seller binding and must be supplied again during recovery.
162
+ *
163
+ * Requires a `DeferredTaskStorage` implementation with the operation-route
164
+ * methods. The SDK returns a distinct, host-only recovery capability in
165
+ * `result.deferred.recovery` when the seller first pauses.
166
+ */
167
+ durableContinuationRecovery?: {
168
+ ownerScope: string;
169
+ };
156
170
  /**
157
171
  * Trusted local authorization tuple for a delegated, cross-origin seller.
158
172
  * The SDK snapshots this before dispatch and persists it with any generated
@@ -252,6 +266,21 @@ export interface DeferredContinuation<T> {
252
266
  question?: string;
253
267
  /** Resume the same seller task with user input or after refreshing auth. */
254
268
  resume: (input: any) => Promise<TaskResult<T>>;
269
+ /**
270
+ * Stable operation route and host-only recovery capability. Present only
271
+ * when the call opted into durable operation-routed recovery. Persist this
272
+ * once; never expose `recoveryKey` to the seller or a human approver.
273
+ */
274
+ recovery?: {
275
+ operationId: string;
276
+ recoveryKey: string;
277
+ };
278
+ }
279
+ /** Authenticated owner input for direct pause route recovery. */
280
+ export interface DirectPauseRecoveryRequest {
281
+ operationId: string;
282
+ recoveryKey: string;
283
+ ownerScope: string;
255
284
  }
256
285
  /**
257
286
  * Continuation for submitted server tasks (server needs time).
@@ -5,7 +5,7 @@ import { type MutatingRequestInput } from '../utils/idempotency.mjs';
5
5
  import type { MCPWebhookPayload, TaskStatus } from '../types/core.generated.mjs';
6
6
  type A2ATask = Record<string, any>;
7
7
  type TaskStatusUpdateEvent = Record<string, any>;
8
- import type { InputHandler, Message, TaskOptions, TaskResult, ConversationConfig, TaskInfo, TaskState, WebhookUrlTemplate } from './ConversationTypes.mjs';
8
+ import type { InputHandler, Message, TaskOptions, TaskResult, ConversationConfig, TaskInfo, TaskState, WebhookUrlTemplate, DirectPauseRecoveryRequest } from './ConversationTypes.mjs';
9
9
  import type { AdcpTaskName, TaskRequestFor, TaskResponseTypeMap } from './AgentClient.mjs';
10
10
  import type { DeferredTaskStorage } from '../storage/interfaces.mjs';
11
11
  import type { Activity, AsyncHandlerConfig } from './AsyncHandler.mjs';
@@ -523,6 +523,8 @@ export declare class SingleAgentClient {
523
523
  * version. Wire-shape adapters key off this method in subsequent stages.
524
524
  */
525
525
  getAdcpVersion(): string;
526
+ /** Recover the current generation of an opt-in direct mutation pause. */
527
+ recoverDirectPauseContinuation<T>(request: DirectPauseRecoveryRequest): Promise<TaskResult<T>>;
526
528
  private recoverDurableSettlement;
527
529
  private recoverPersistedDeferredTerminal;
528
530
  private taskResultFromRecoveredSettlement;