@adcp/sdk 14.0.0-rc.37 → 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 (622) 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/content-mismatch.d.mts +126 -0
  79. package/dist/lib/reporting/content-mismatch.d.ts +126 -0
  80. package/dist/lib/reporting/content-mismatch.js +90 -0
  81. package/dist/lib/reporting/content-mismatch.mjs +66 -0
  82. package/dist/lib/reporting/evidence.d.mts +1 -0
  83. package/dist/lib/reporting/evidence.d.ts +1 -0
  84. package/dist/lib/reporting/evidence.js +32 -3
  85. package/dist/lib/reporting/evidence.mjs +31 -3
  86. package/dist/lib/reporting/index.d.mts +3 -1
  87. package/dist/lib/reporting/index.d.ts +3 -1
  88. package/dist/lib/reporting/index.js +3 -0
  89. package/dist/lib/reporting/index.mjs +2 -0
  90. package/dist/lib/reporting/ledger/handler.d.mts +51 -1
  91. package/dist/lib/reporting/ledger/handler.d.ts +51 -1
  92. package/dist/lib/reporting/ledger/handler.js +306 -38
  93. package/dist/lib/reporting/ledger/handler.mjs +304 -37
  94. package/dist/lib/reporting/ledger/health.d.mts +12 -0
  95. package/dist/lib/reporting/ledger/health.d.ts +12 -0
  96. package/dist/lib/reporting/ledger/health.js +15 -2
  97. package/dist/lib/reporting/ledger/health.mjs +13 -1
  98. package/dist/lib/reporting/ledger/index.d.mts +3 -0
  99. package/dist/lib/reporting/ledger/index.d.ts +3 -0
  100. package/dist/lib/reporting/ledger/index.js +7 -1
  101. package/dist/lib/reporting/ledger/index.mjs +3 -0
  102. package/dist/lib/reporting/ledger/lifecycle.d.mts +31 -4
  103. package/dist/lib/reporting/ledger/lifecycle.d.ts +31 -4
  104. package/dist/lib/reporting/ledger/lifecycle.js +244 -37
  105. package/dist/lib/reporting/ledger/lifecycle.mjs +244 -37
  106. package/dist/lib/reporting/ledger/managed-postgres.d.mts +231 -0
  107. package/dist/lib/reporting/ledger/managed-postgres.d.ts +231 -0
  108. package/dist/lib/reporting/ledger/managed-postgres.js +1797 -0
  109. package/dist/lib/reporting/ledger/managed-postgres.mjs +1776 -0
  110. package/dist/lib/reporting/ledger/managed.d.mts +355 -0
  111. package/dist/lib/reporting/ledger/managed.d.ts +355 -0
  112. package/dist/lib/reporting/ledger/managed.js +661 -0
  113. package/dist/lib/reporting/ledger/managed.mjs +633 -0
  114. package/dist/lib/reporting/ledger/notification-activity.d.mts +222 -0
  115. package/dist/lib/reporting/ledger/notification-activity.d.ts +222 -0
  116. package/dist/lib/reporting/ledger/notification-activity.js +1139 -0
  117. package/dist/lib/reporting/ledger/notification-activity.mjs +1110 -0
  118. package/dist/lib/reporting/ledger/postgres.d.mts +161 -1
  119. package/dist/lib/reporting/ledger/postgres.d.ts +161 -1
  120. package/dist/lib/reporting/ledger/postgres.js +1153 -21
  121. package/dist/lib/reporting/ledger/postgres.mjs +1152 -21
  122. package/dist/lib/reporting/ledger/producer.d.mts +8 -0
  123. package/dist/lib/reporting/ledger/producer.d.ts +8 -0
  124. package/dist/lib/reporting/ledger/producer.js +146 -52
  125. package/dist/lib/reporting/ledger/producer.mjs +146 -51
  126. package/dist/lib/reporting/ledger/types.d.mts +358 -1
  127. package/dist/lib/reporting/ledger/types.d.ts +358 -1
  128. package/dist/lib/reporting/ledger/types.js +3 -0
  129. package/dist/lib/reporting/ledger/types.mjs +2 -0
  130. package/dist/lib/reporting/reconciliation.d.mts +362 -2
  131. package/dist/lib/reporting/reconciliation.d.ts +362 -2
  132. package/dist/lib/reporting/reconciliation.js +1051 -7
  133. package/dist/lib/reporting/reconciliation.mjs +1053 -7
  134. package/dist/lib/reporting/service/conformance.d.mts +35 -0
  135. package/dist/lib/reporting/service/conformance.d.ts +35 -0
  136. package/dist/lib/reporting/service/conformance.js +89 -0
  137. package/dist/lib/reporting/service/conformance.mjs +68 -0
  138. package/dist/lib/reporting/service/index.d.mts +182 -0
  139. package/dist/lib/reporting/service/index.d.ts +182 -0
  140. package/dist/lib/reporting/service/index.js +793 -0
  141. package/dist/lib/reporting/service/index.mjs +787 -0
  142. package/dist/lib/reporting/source/index.d.mts +2 -1
  143. package/dist/lib/reporting/source/index.d.ts +2 -1
  144. package/dist/lib/reporting/source/index.js +16 -3
  145. package/dist/lib/reporting/source/index.mjs +12 -1
  146. package/dist/lib/reporting/source/inline.d.mts +88 -1
  147. package/dist/lib/reporting/source/inline.d.ts +88 -1
  148. package/dist/lib/reporting/source/inline.js +1161 -163
  149. package/dist/lib/reporting/source/inline.mjs +1166 -163
  150. package/dist/lib/reporting/source/manifest.js +12 -7
  151. package/dist/lib/reporting/source/manifest.mjs +12 -7
  152. package/dist/lib/reporting/source/source.d.mts +26 -0
  153. package/dist/lib/reporting/source/source.d.ts +26 -0
  154. package/dist/lib/reporting/source/source.js +71 -2
  155. package/dist/lib/reporting/source/source.mjs +65 -1
  156. package/dist/lib/schemas/index.d.mts +22 -1
  157. package/dist/lib/schemas/index.d.ts +22 -1
  158. package/dist/lib/schemas/index.js +7 -0
  159. package/dist/lib/schemas/index.mjs +7 -0
  160. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  161. package/dist/lib/server/create-adcp-server.d.mts +18 -0
  162. package/dist/lib/server/create-adcp-server.d.ts +18 -0
  163. package/dist/lib/server/create-adcp-server.js +52 -2
  164. package/dist/lib/server/create-adcp-server.mjs +52 -2
  165. package/dist/lib/server/decisioning/account.d.mts +1 -1
  166. package/dist/lib/server/decisioning/account.d.ts +1 -1
  167. package/dist/lib/server/decisioning/index.d.mts +1 -0
  168. package/dist/lib/server/decisioning/index.d.ts +1 -0
  169. package/dist/lib/server/decisioning/platform.d.mts +3 -0
  170. package/dist/lib/server/decisioning/platform.d.ts +3 -0
  171. package/dist/lib/server/decisioning/runtime/from-platform.js +88 -10
  172. package/dist/lib/server/decisioning/runtime/from-platform.mjs +88 -10
  173. package/dist/lib/server/decisioning/specialisms/reporting.d.mts +38 -0
  174. package/dist/lib/server/decisioning/specialisms/reporting.d.ts +38 -0
  175. package/dist/lib/{types/v3-1-beta/index.js → server/decisioning/specialisms/reporting.js} +2 -8
  176. package/dist/lib/server/decisioning/specialisms/reporting.mjs +0 -0
  177. package/dist/lib/server/index.d.mts +4 -2
  178. package/dist/lib/server/index.d.ts +4 -2
  179. package/dist/lib/server/index.js +5 -0
  180. package/dist/lib/server/index.mjs +4 -0
  181. package/dist/lib/server/media-buy-action-resolver.d.mts +63 -0
  182. package/dist/lib/server/media-buy-action-resolver.d.ts +63 -0
  183. package/dist/lib/server/media-buy-action-resolver.js +297 -0
  184. package/dist/lib/server/media-buy-action-resolver.mjs +285 -0
  185. package/dist/lib/server/media-buy-actions.d.mts +7 -8
  186. package/dist/lib/server/media-buy-actions.d.ts +7 -8
  187. package/dist/lib/server/media-buy-actions.js +57 -14
  188. package/dist/lib/server/media-buy-actions.mjs +63 -14
  189. package/dist/lib/server/notification-subscriptions/index.d.mts +2 -2
  190. package/dist/lib/server/notification-subscriptions/index.d.ts +2 -2
  191. package/dist/lib/server/notification-subscriptions/index.js +2 -0
  192. package/dist/lib/server/notification-subscriptions/index.mjs +2 -0
  193. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.mts +3 -1
  194. package/dist/lib/server/notification-subscriptions/postgres-runtime.d.ts +3 -1
  195. package/dist/lib/server/notification-subscriptions/postgres-runtime.js +1 -0
  196. package/dist/lib/server/notification-subscriptions/postgres-runtime.mjs +1 -0
  197. package/dist/lib/server/notification-subscriptions/runtime.d.mts +12 -1
  198. package/dist/lib/server/notification-subscriptions/runtime.d.ts +12 -1
  199. package/dist/lib/server/notification-subscriptions/runtime.js +102 -16
  200. package/dist/lib/server/notification-subscriptions/runtime.mjs +101 -16
  201. package/dist/lib/server/notification-subscriptions/types.d.mts +104 -1
  202. package/dist/lib/server/notification-subscriptions/types.d.ts +104 -1
  203. package/dist/lib/server/webhook-emitter.d.mts +40 -5
  204. package/dist/lib/server/webhook-emitter.d.ts +40 -5
  205. package/dist/lib/server/webhook-emitter.js +23 -12
  206. package/dist/lib/server/webhook-emitter.mjs +23 -12
  207. package/dist/lib/storage/interfaces.d.mts +14 -2
  208. package/dist/lib/storage/interfaces.d.ts +14 -2
  209. package/dist/lib/testing/compliance/comply.d.mts +9 -3
  210. package/dist/lib/testing/compliance/comply.d.ts +9 -3
  211. package/dist/lib/testing/compliance/comply.js +158 -3
  212. package/dist/lib/testing/compliance/comply.mjs +159 -4
  213. package/dist/lib/testing/compliance/storyboard-tracks.js +7 -5
  214. package/dist/lib/testing/compliance/storyboard-tracks.mjs +7 -5
  215. package/dist/lib/testing/compliance/summary.js +10 -1
  216. package/dist/lib/testing/compliance/summary.mjs +10 -1
  217. package/dist/lib/testing/index.d.mts +1 -1
  218. package/dist/lib/testing/index.d.ts +1 -1
  219. package/dist/lib/testing/index.js +2 -0
  220. package/dist/lib/testing/index.mjs +3 -1
  221. package/dist/lib/testing/storyboard/agent-routing.d.mts +12 -43
  222. package/dist/lib/testing/storyboard/agent-routing.d.ts +12 -43
  223. package/dist/lib/testing/storyboard/agent-routing.js +75 -13
  224. package/dist/lib/testing/storyboard/agent-routing.mjs +70 -12
  225. package/dist/lib/testing/storyboard/index.d.mts +1 -0
  226. package/dist/lib/testing/storyboard/index.d.ts +1 -0
  227. package/dist/lib/testing/storyboard/index.js +3 -0
  228. package/dist/lib/testing/storyboard/index.mjs +2 -0
  229. package/dist/lib/testing/storyboard/junit.d.mts +1 -1
  230. package/dist/lib/testing/storyboard/junit.d.ts +1 -1
  231. package/dist/lib/testing/storyboard/junit.js +21 -2
  232. package/dist/lib/testing/storyboard/junit.mjs +21 -2
  233. package/dist/lib/testing/storyboard/probes.d.mts +130 -0
  234. package/dist/lib/testing/storyboard/probes.d.ts +130 -0
  235. package/dist/lib/testing/storyboard/probes.js +682 -10
  236. package/dist/lib/testing/storyboard/probes.mjs +683 -3
  237. package/dist/lib/testing/storyboard/request-signing/builder.d.mts +16 -5
  238. package/dist/lib/testing/storyboard/request-signing/builder.d.ts +16 -5
  239. package/dist/lib/testing/storyboard/request-signing/grader.d.mts +44 -1
  240. package/dist/lib/testing/storyboard/request-signing/grader.d.ts +44 -1
  241. package/dist/lib/testing/storyboard/request-signing/grader.js +46 -22
  242. package/dist/lib/testing/storyboard/request-signing/grader.mjs +43 -21
  243. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.mts +86 -11
  244. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +86 -11
  245. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +119 -25
  246. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +117 -26
  247. package/dist/lib/testing/storyboard/request-signing/synthesize.js +22 -2
  248. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +22 -2
  249. package/dist/lib/testing/storyboard/runner.d.mts +103 -0
  250. package/dist/lib/testing/storyboard/runner.d.ts +103 -0
  251. package/dist/lib/testing/storyboard/runner.js +1090 -268
  252. package/dist/lib/testing/storyboard/runner.mjs +1096 -261
  253. package/dist/lib/testing/storyboard/seeding.d.mts +4 -1
  254. package/dist/lib/testing/storyboard/seeding.d.ts +4 -1
  255. package/dist/lib/testing/storyboard/seeding.js +55 -24
  256. package/dist/lib/testing/storyboard/seeding.mjs +55 -24
  257. package/dist/lib/testing/storyboard/test-kit.d.mts +37 -3
  258. package/dist/lib/testing/storyboard/test-kit.d.ts +37 -3
  259. package/dist/lib/testing/storyboard/test-kit.js +8 -2
  260. package/dist/lib/testing/storyboard/test-kit.mjs +7 -2
  261. package/dist/lib/testing/storyboard/types.d.mts +132 -10
  262. package/dist/lib/testing/storyboard/types.d.ts +132 -10
  263. package/dist/lib/testing/storyboard/types.js +17 -0
  264. package/dist/lib/testing/storyboard/types.mjs +16 -0
  265. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  266. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  267. package/dist/lib/testing/storyboard/validations.js +16 -0
  268. package/dist/lib/testing/storyboard/validations.mjs +16 -0
  269. package/dist/lib/testing/test-controller.d.mts +1 -1
  270. package/dist/lib/testing/test-controller.d.ts +1 -1
  271. package/dist/lib/types/buy-products.d.ts +71 -6
  272. package/dist/lib/types/control-media-buy.d.ts +25 -11
  273. package/dist/lib/types/core.generated.d.mts +69 -10
  274. package/dist/lib/types/core.generated.d.ts +69 -10
  275. package/dist/lib/types/create-media-buy.d.ts +71 -6
  276. package/dist/lib/types/forward-compat-error-codes.d.mts +7 -6
  277. package/dist/lib/types/forward-compat-error-codes.d.ts +7 -6
  278. package/dist/lib/types/index.d.mts +2 -2
  279. package/dist/lib/types/index.d.ts +2 -2
  280. package/dist/lib/types/schemas.generated.d.ts +8040 -8116
  281. package/dist/lib/types/schemas.generated.js +1074 -309
  282. package/dist/lib/types/schemas.generated.mjs +1068 -309
  283. package/dist/lib/types/tools.generated.d.mts +65 -6
  284. package/dist/lib/types/tools.generated.d.ts +65 -6
  285. package/dist/lib/types/update-media-buy.d.ts +71 -6
  286. package/dist/lib/utils/redact-secrets.d.mts +1 -1
  287. package/dist/lib/utils/redact-secrets.d.ts +1 -1
  288. package/dist/lib/utils/redact-secrets.js +1 -1
  289. package/dist/lib/utils/redact-secrets.mjs +1 -1
  290. package/dist/lib/v2/projection/cache-versions.d.mts +0 -1
  291. package/dist/lib/v2/projection/cache-versions.d.ts +0 -1
  292. package/dist/lib/v2/projection/cache-versions.js +1 -15
  293. package/dist/lib/v2/projection/cache-versions.mjs +1 -14
  294. package/dist/lib/v2/projection/canonical-properties.js +2 -2
  295. package/dist/lib/v2/projection/canonical-properties.mjs +3 -3
  296. package/dist/lib/v2/projection/registry.d.mts +1 -1
  297. package/dist/lib/v2/projection/registry.d.ts +1 -1
  298. package/dist/lib/v2/projection/registry.js +2 -2
  299. package/dist/lib/v2/projection/registry.mjs +3 -3
  300. package/dist/lib/validation/schema-loader.d.mts +9 -1
  301. package/dist/lib/validation/schema-loader.d.ts +9 -1
  302. package/dist/lib/validation/schema-loader.js +65 -8
  303. package/dist/lib/validation/schema-loader.mjs +64 -8
  304. package/dist/lib/version.d.mts +5 -5
  305. package/dist/lib/version.d.ts +5 -5
  306. package/dist/lib/version.js +3 -8
  307. package/dist/lib/version.mjs +3 -8
  308. package/dist/lib/wholesale-feed-sync/index.d.mts +1 -0
  309. package/dist/lib/wholesale-feed-sync/index.d.ts +1 -0
  310. package/dist/lib/wholesale-feed-sync/protocol-types.d.mts +42 -0
  311. package/dist/lib/wholesale-feed-sync/protocol-types.d.ts +42 -0
  312. package/dist/lib/wholesale-feed-sync/protocol-types.js +16 -0
  313. package/dist/lib/wholesale-feed-sync/protocol-types.mjs +0 -0
  314. package/dist/lib/wholesale-feed-sync/sync.d.mts +6 -6
  315. package/dist/lib/wholesale-feed-sync/sync.d.ts +6 -6
  316. package/dist/lib/wholesale-feed-sync/sync.js +3 -1
  317. package/dist/lib/wholesale-feed-sync/sync.mjs +3 -1
  318. package/dist/lib/wholesale-feed-sync/types.d.mts +15 -14
  319. package/dist/lib/wholesale-feed-sync/types.d.ts +15 -14
  320. package/dist/lib/wholesale-feed-sync/webhook-notification.d.mts +7 -5
  321. package/dist/lib/wholesale-feed-sync/webhook-notification.d.ts +7 -5
  322. package/dist/lib/wholesale-feed-sync/webhook-notification.js +45 -0
  323. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +44 -0
  324. package/docs/CLI.md +1 -1
  325. package/docs/TYPE-SUMMARY.md +118 -4
  326. package/docs/guides/ASYNC-API-REFERENCE.md +62 -1
  327. package/docs/guides/ASYNC-DEVELOPER-GUIDE.md +25 -0
  328. package/docs/guides/ASYNC-DOCUMENTATION-INDEX.md +3 -0
  329. package/docs/guides/BUYER-QUICKSTART-3.2.md +5 -0
  330. package/docs/guides/DURABLE-BUYER-WRITES.md +337 -0
  331. package/docs/guides/EXISTING-PLATFORM.md +80 -1
  332. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +57 -0
  333. package/docs/guides/MEDIA-BUY-ACTION-ASSESSMENT.md +300 -0
  334. package/docs/guides/REPORTING-LEDGER.md +654 -3
  335. package/docs/guides/REPORTING-RECONCILIATION.md +50 -0
  336. package/docs/guides/REPORTING-SOURCE-EXECUTOR.md +63 -1
  337. package/docs/guides/SELLER-QUICKSTART-3.2.md +2 -0
  338. package/docs/guides/VALIDATE-YOUR-AGENT.md +35 -0
  339. package/docs/guides/idempotency-crash-recovery.md +4 -0
  340. package/docs/llms.txt +4 -2
  341. package/docs/migration-14.x-rc-worksheet.md +60 -5
  342. package/docs/migration-7.9-to-7.10.md +7 -5
  343. package/examples/README.md +17 -0
  344. package/examples/durable-buyer-writes/caller.ts +745 -0
  345. package/examples/durable-buyer-writes/worker.ts +240 -0
  346. package/examples/reliable-reporting-service/README.md +100 -0
  347. package/examples/seller-3.2-starter.ts +7 -8
  348. package/examples/targeting-input-existing-platform.ts +153 -0
  349. package/package.json +41 -29
  350. package/skills/build-seller-agent/SKILL.md +2 -0
  351. package/skills/build-seller-agent/specialisms/signed-requests.md +11 -1
  352. package/skills/cross-cutting.md +28 -11
  353. package/compliance/cache/3.1.0-beta.7/domains/brand/index.yaml +0 -160
  354. package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -415
  355. package/compliance/cache/3.1.0-beta.7/domains/brand/scenarios/single_side_trust_extension.yaml +0 -454
  356. package/compliance/cache/3.1.0-beta.7/domains/creative/index.yaml +0 -339
  357. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/billing_out_of_band.yaml +0 -153
  358. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
  359. package/compliance/cache/3.1.0-beta.7/domains/creative/scenarios/native_in_feed.yaml +0 -543
  360. package/compliance/cache/3.1.0-beta.7/domains/governance/index.yaml +0 -682
  361. package/compliance/cache/3.1.0-beta.7/domains/media-buy/index.yaml +0 -781
  362. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -380
  363. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/available_actions.yaml +0 -565
  364. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
  365. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/canonical_formats.yaml +0 -711
  366. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
  367. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
  368. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -234
  369. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
  370. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/creative_reception.yaml +0 -247
  371. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/delivery_reporting.yaml +0 -357
  372. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment.yaml +0 -633
  373. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
  374. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -399
  375. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
  376. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_approved.yaml +0 -214
  377. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_conditions.yaml +0 -199
  378. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied.yaml +0 -204
  379. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
  380. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/invalid_transitions.yaml +0 -289
  381. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
  382. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
  383. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_accountability.yaml +0 -244
  384. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
  385. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
  386. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
  387. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -428
  388. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
  389. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -373
  390. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize.yaml +0 -399
  391. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
  392. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
  393. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
  394. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -517
  395. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
  396. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -823
  397. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
  398. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/refine_products.yaml +0 -148
  399. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
  400. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
  401. package/compliance/cache/3.1.0-beta.7/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
  402. package/compliance/cache/3.1.0-beta.7/domains/media-buy/state-machine.yaml +0 -442
  403. package/compliance/cache/3.1.0-beta.7/domains/signals/index.yaml +0 -266
  404. package/compliance/cache/3.1.0-beta.7/domains/sponsored-intelligence/index.yaml +0 -256
  405. package/compliance/cache/3.1.0-beta.7/index.json +0 -356
  406. package/compliance/cache/3.1.0-beta.7/protocols/brand/index.yaml +0 -160
  407. package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -415
  408. package/compliance/cache/3.1.0-beta.7/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -454
  409. package/compliance/cache/3.1.0-beta.7/protocols/creative/index.yaml +0 -339
  410. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/billing_out_of_band.yaml +0 -153
  411. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -389
  412. package/compliance/cache/3.1.0-beta.7/protocols/creative/scenarios/native_in_feed.yaml +0 -543
  413. package/compliance/cache/3.1.0-beta.7/protocols/governance/index.yaml +0 -682
  414. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/index.yaml +0 -781
  415. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -380
  416. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/available_actions.yaml +0 -565
  417. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -354
  418. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/canonical_formats.yaml +0 -711
  419. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -264
  420. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -344
  421. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -234
  422. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +0 -419
  423. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/creative_reception.yaml +0 -247
  424. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -357
  425. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -633
  426. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -800
  427. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -399
  428. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -309
  429. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_approved.yaml +0 -214
  430. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_conditions.yaml +0 -199
  431. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied.yaml +0 -204
  432. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -252
  433. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -289
  434. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -148
  435. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -276
  436. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -244
  437. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -203
  438. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -274
  439. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -500
  440. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -428
  441. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -470
  442. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -373
  443. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -399
  444. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -264
  445. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -257
  446. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -333
  447. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -517
  448. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -294
  449. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -823
  450. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -360
  451. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/refine_products.yaml +0 -148
  452. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -293
  453. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -307
  454. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -576
  455. package/compliance/cache/3.1.0-beta.7/protocols/media-buy/state-machine.yaml +0 -442
  456. package/compliance/cache/3.1.0-beta.7/protocols/signals/index.yaml +0 -266
  457. package/compliance/cache/3.1.0-beta.7/protocols/sponsored-intelligence/index.yaml +0 -256
  458. package/compliance/cache/3.1.0-beta.7/specialisms/audience-sync/index.yaml +0 -313
  459. package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/index.yaml +0 -350
  460. package/compliance/cache/3.1.0-beta.7/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -226
  461. package/compliance/cache/3.1.0-beta.7/specialisms/collection-lists/index.yaml +0 -359
  462. package/compliance/cache/3.1.0-beta.7/specialisms/content-standards/index.yaml +0 -572
  463. package/compliance/cache/3.1.0-beta.7/specialisms/creative-ad-server/index.yaml +0 -409
  464. package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/generative-seller.yaml +0 -807
  465. package/compliance/cache/3.1.0-beta.7/specialisms/creative-generative/index.yaml +0 -758
  466. package/compliance/cache/3.1.0-beta.7/specialisms/creative-template/index.yaml +0 -510
  467. package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/index.yaml +0 -143
  468. package/compliance/cache/3.1.0-beta.7/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -117
  469. package/compliance/cache/3.1.0-beta.7/specialisms/governance-delivery-monitor/index.yaml +0 -441
  470. package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/denied.yaml +0 -221
  471. package/compliance/cache/3.1.0-beta.7/specialisms/governance-spend-authority/index.yaml +0 -330
  472. package/compliance/cache/3.1.0-beta.7/specialisms/property-lists/index.yaml +0 -482
  473. package/compliance/cache/3.1.0-beta.7/specialisms/sales-broadcast-tv/index.yaml +0 -738
  474. package/compliance/cache/3.1.0-beta.7/specialisms/sales-catalog-driven/index.yaml +0 -840
  475. package/compliance/cache/3.1.0-beta.7/specialisms/sales-guaranteed/index.yaml +0 -601
  476. package/compliance/cache/3.1.0-beta.7/specialisms/sales-non-guaranteed/index.yaml +0 -546
  477. package/compliance/cache/3.1.0-beta.7/specialisms/sales-proposal-mode/index.yaml +0 -586
  478. package/compliance/cache/3.1.0-beta.7/specialisms/sales-social/index.yaml +0 -919
  479. package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/index.yaml +0 -424
  480. package/compliance/cache/3.1.0-beta.7/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -211
  481. package/compliance/cache/3.1.0-beta.7/specialisms/signal-owned/index.yaml +0 -317
  482. package/compliance/cache/3.1.0-beta.7/specialisms/sponsored-intelligence/index.yaml +0 -59
  483. package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor-live.yaml +0 -78
  484. package/compliance/cache/3.1.0-beta.7/test-kits/acme-outdoor.yaml +0 -223
  485. package/compliance/cache/3.1.0-beta.7/test-kits/billing-gate-runner.yaml +0 -115
  486. package/compliance/cache/3.1.0-beta.7/test-kits/bistro-oranje.yaml +0 -126
  487. package/compliance/cache/3.1.0-beta.7/test-kits/distributed-brand-runner.yaml +0 -281
  488. package/compliance/cache/3.1.0-beta.7/test-kits/nova-motors.yaml +0 -262
  489. package/compliance/cache/3.1.0-beta.7/test-kits/osei-natural.yaml +0 -126
  490. package/compliance/cache/3.1.0-beta.7/test-kits/parallel-dispatch-runner.yaml +0 -196
  491. package/compliance/cache/3.1.0-beta.7/test-kits/rate-limit-trip-runner.yaml +0 -172
  492. package/compliance/cache/3.1.0-beta.7/test-kits/signed-requests-runner.yaml +0 -155
  493. package/compliance/cache/3.1.0-beta.7/test-kits/single-side-trust-runner.yaml +0 -294
  494. package/compliance/cache/3.1.0-beta.7/test-kits/substitution-observer-runner.yaml +0 -688
  495. package/compliance/cache/3.1.0-beta.7/test-kits/summit-foods.yaml +0 -125
  496. package/compliance/cache/3.1.0-beta.7/test-kits/webhook-receiver-runner.yaml +0 -265
  497. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/001-minimal-plan.json +0 -43
  498. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/002-full-plan.json +0 -217
  499. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -60
  500. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004a-human-review-omitted.json +0 -43
  501. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -49
  502. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -53
  503. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -57
  504. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -49
  505. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -53
  506. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/007-unicode-objectives.json +0 -43
  507. package/compliance/cache/3.1.0-beta.7/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -65
  508. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/README.md +0 -220
  509. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/canonicalization.json +0 -241
  510. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/keys.json +0 -60
  511. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/001-no-signature-header.json +0 -24
  512. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/002-wrong-tag.json +0 -26
  513. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/003-expired-signature.json +0 -26
  514. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/004-window-too-long.json +0 -26
  515. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -26
  516. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -26
  517. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -26
  518. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -26
  519. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -27
  520. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -33
  521. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/011-malformed-header.json +0 -27
  522. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -26
  523. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/013-expires-le-created.json +0 -27
  524. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -27
  525. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/015-signature-invalid.json +0 -28
  526. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -35
  527. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/017-key-revoked.json +0 -38
  528. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -28
  529. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -26
  530. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/020-rate-abuse.json +0 -34
  531. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -31
  532. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -31
  533. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -32
  534. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -31
  535. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -43
  536. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -31
  537. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -25
  538. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -26
  539. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/001-basic-post.json +0 -30
  540. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -31
  541. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/003-es256-post.json +0 -30
  542. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -26
  543. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -30
  544. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -30
  545. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -30
  546. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -30
  547. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -30
  548. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -30
  549. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -30
  550. package/compliance/cache/3.1.0-beta.7/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -30
  551. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/README.md +0 -211
  552. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/keys.json +0 -61
  553. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -26
  554. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -26
  555. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -26
  556. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -26
  557. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -26
  558. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -25
  559. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -26
  560. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -26
  561. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -26
  562. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -26
  563. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -25
  564. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -26
  565. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -26
  566. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -26
  567. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -26
  568. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -37
  569. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -32
  570. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -33
  571. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -32
  572. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -41
  573. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -26
  574. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/001-basic-post.json +0 -24
  575. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/002-es256-post.json +0 -24
  576. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -24
  577. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -24
  578. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -24
  579. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -24
  580. package/compliance/cache/3.1.0-beta.7/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -25
  581. package/compliance/cache/3.1.0-beta.7/universal/billing-gate-dispatch.yaml +0 -450
  582. package/compliance/cache/3.1.0-beta.7/universal/canonical-format-validate-input.yaml +0 -640
  583. package/compliance/cache/3.1.0-beta.7/universal/capability-discovery.yaml +0 -125
  584. package/compliance/cache/3.1.0-beta.7/universal/collection-lists-pagination-integrity.yaml +0 -306
  585. package/compliance/cache/3.1.0-beta.7/universal/comply-controller-mode-gate.yaml +0 -141
  586. package/compliance/cache/3.1.0-beta.7/universal/content-standards-pagination-integrity.yaml +0 -326
  587. package/compliance/cache/3.1.0-beta.7/universal/deterministic-testing.yaml +0 -1430
  588. package/compliance/cache/3.1.0-beta.7/universal/error-compliance-signals.yaml +0 -377
  589. package/compliance/cache/3.1.0-beta.7/universal/error-compliance.yaml +0 -528
  590. package/compliance/cache/3.1.0-beta.7/universal/fictional-entities.yaml +0 -307
  591. package/compliance/cache/3.1.0-beta.7/universal/get-media-buys-pagination-integrity.yaml +0 -160
  592. package/compliance/cache/3.1.0-beta.7/universal/get-signals-pagination-integrity.yaml +0 -211
  593. package/compliance/cache/3.1.0-beta.7/universal/idempotency.yaml +0 -861
  594. package/compliance/cache/3.1.0-beta.7/universal/notification-config-event-scope.yaml +0 -119
  595. package/compliance/cache/3.1.0-beta.7/universal/notification-config-lifecycle.yaml +0 -337
  596. package/compliance/cache/3.1.0-beta.7/universal/notification-config-rejections.yaml +0 -107
  597. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-creative-formats.yaml +0 -265
  598. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity-list-accounts.yaml +0 -245
  599. package/compliance/cache/3.1.0-beta.7/universal/pagination-integrity.yaml +0 -263
  600. package/compliance/cache/3.1.0-beta.7/universal/property-lists-pagination-integrity.yaml +0 -307
  601. package/compliance/cache/3.1.0-beta.7/universal/read-tool-idempotency.yaml +0 -405
  602. package/compliance/cache/3.1.0-beta.7/universal/runner-output-contract.yaml +0 -1266
  603. package/compliance/cache/3.1.0-beta.7/universal/schema-validation-signals.yaml +0 -181
  604. package/compliance/cache/3.1.0-beta.7/universal/schema-validation.yaml +0 -548
  605. package/compliance/cache/3.1.0-beta.7/universal/security.yaml +0 -539
  606. package/compliance/cache/3.1.0-beta.7/universal/signed-requests.yaml +0 -217
  607. package/compliance/cache/3.1.0-beta.7/universal/stale-response-advisory.yaml +0 -295
  608. package/compliance/cache/3.1.0-beta.7/universal/storyboard-schema.yaml +0 -2136
  609. package/compliance/cache/3.1.0-beta.7/universal/v3-envelope-integrity.yaml +0 -117
  610. package/compliance/cache/3.1.0-beta.7/universal/version-negotiation.yaml +0 -130
  611. package/compliance/cache/3.1.0-beta.7/universal/webhook-emission.yaml +0 -411
  612. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-bulk-webhooks.yaml +0 -82
  613. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-product-webhooks.yaml +0 -83
  614. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-products.yaml +0 -151
  615. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signal-webhooks.yaml +0 -83
  616. package/compliance/cache/3.1.0-beta.7/universal/wholesale-feed-signals.yaml +0 -149
  617. package/dist/lib/types/v3-1-beta/index.d.mts +0 -1
  618. package/dist/lib/types/v3-1-beta/index.d.ts +0 -1
  619. package/dist/lib/types/v3-1-beta/index.mjs +0 -1
  620. package/dist/lib/types/v3-1-beta/tools.generated.d.mts +0 -26788
  621. package/dist/lib/types/v3-1-beta/tools.generated.d.ts +0 -26788
  622. /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;