@adcp/sdk 12.0.0 → 12.0.2

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 (959) hide show
  1. package/dist/lib/adapters/content-standards-adapter.mjs +0 -6
  2. package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
  3. package/dist/lib/adapters/derived-account-store.mjs +0 -6
  4. package/dist/lib/adapters/derived-account-store.mjs.map +1 -1
  5. package/dist/lib/adapters/governance-adapter.mjs +0 -6
  6. package/dist/lib/adapters/governance-adapter.mjs.map +1 -1
  7. package/dist/lib/adapters/implicit-account-store.mjs +0 -6
  8. package/dist/lib/adapters/implicit-account-store.mjs.map +1 -1
  9. package/dist/lib/adapters/index.mjs +0 -6
  10. package/dist/lib/adapters/index.mjs.map +1 -1
  11. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -6
  12. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs.map +1 -1
  13. package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -6
  14. package/dist/lib/adapters/legacy/v2-5/get_products.mjs.map +1 -1
  15. package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -6
  16. package/dist/lib/adapters/legacy/v2-5/index.mjs.map +1 -1
  17. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -6
  18. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs.map +1 -1
  19. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -6
  20. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs.map +1 -1
  21. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -6
  22. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs.map +1 -1
  23. package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -6
  24. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -6
  25. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs.map +1 -1
  26. package/dist/lib/adapters/oauth-passthrough-resolver.mjs +0 -6
  27. package/dist/lib/adapters/oauth-passthrough-resolver.mjs.map +1 -1
  28. package/dist/lib/adapters/property-list-adapter.mjs +0 -6
  29. package/dist/lib/adapters/property-list-adapter.mjs.map +1 -1
  30. package/dist/lib/adapters/roster-account-store.mjs +0 -6
  31. package/dist/lib/adapters/roster-account-store.mjs.map +1 -1
  32. package/dist/lib/adapters/si-session-manager.mjs +0 -6
  33. package/dist/lib/adapters/si-session-manager.mjs.map +1 -1
  34. package/dist/lib/adapters/version/3.0/brand-fields.mjs +0 -6
  35. package/dist/lib/adapters/version/3.0/brand-fields.mjs.map +1 -1
  36. package/dist/lib/adapters/version/3.0/get-products.mjs +0 -6
  37. package/dist/lib/adapters/version/3.0/get-products.mjs.map +1 -1
  38. package/dist/lib/adapters/version/3.0/index.mjs +0 -6
  39. package/dist/lib/adapters/version/3.0/index.mjs.map +1 -1
  40. package/dist/lib/adapters/version/3.0/sync-accounts.mjs +0 -6
  41. package/dist/lib/adapters/version/3.0/sync-accounts.mjs.map +1 -1
  42. package/dist/lib/adapters/version/index.mjs +0 -6
  43. package/dist/lib/adapters/version/index.mjs.map +1 -1
  44. package/dist/lib/adapters/version/types.mjs +0 -6
  45. package/dist/lib/advanced.mjs +0 -6
  46. package/dist/lib/advanced.mjs.map +1 -1
  47. package/dist/lib/agents/index.generated.mjs +0 -6
  48. package/dist/lib/agents/index.generated.mjs.map +1 -1
  49. package/dist/lib/auth/index.mjs +0 -6
  50. package/dist/lib/auth/index.mjs.map +1 -1
  51. package/dist/lib/auth/oauth/CLIFlowHandler.mjs +0 -6
  52. package/dist/lib/auth/oauth/CLIFlowHandler.mjs.map +1 -1
  53. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs +0 -6
  54. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs.map +1 -1
  55. package/dist/lib/auth/oauth/MCPOAuthProvider.mjs +0 -6
  56. package/dist/lib/auth/oauth/MCPOAuthProvider.mjs.map +1 -1
  57. package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs +0 -6
  58. package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs.map +1 -1
  59. package/dist/lib/auth/oauth/authorization-required.mjs +0 -6
  60. package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
  61. package/dist/lib/auth/oauth/diagnose.mjs +0 -6
  62. package/dist/lib/auth/oauth/diagnose.mjs.map +1 -1
  63. package/dist/lib/auth/oauth/diagnostics.mjs +0 -6
  64. package/dist/lib/auth/oauth/diagnostics.mjs.map +1 -1
  65. package/dist/lib/auth/oauth/discovery.mjs +0 -6
  66. package/dist/lib/auth/oauth/discovery.mjs.map +1 -1
  67. package/dist/lib/auth/oauth/file-storage.mjs +0 -6
  68. package/dist/lib/auth/oauth/file-storage.mjs.map +1 -1
  69. package/dist/lib/auth/oauth/index.mjs +0 -6
  70. package/dist/lib/auth/oauth/index.mjs.map +1 -1
  71. package/dist/lib/auth/oauth/secret-resolver.mjs +0 -6
  72. package/dist/lib/auth/oauth/secret-resolver.mjs.map +1 -1
  73. package/dist/lib/auth/oauth/storage-registry.mjs +0 -6
  74. package/dist/lib/auth/oauth/storage-registry.mjs.map +1 -1
  75. package/dist/lib/auth/oauth/types.mjs +0 -6
  76. package/dist/lib/auth/oauth/types.mjs.map +1 -1
  77. package/dist/lib/auth/oauth/web-flow.mjs +0 -6
  78. package/dist/lib/auth/oauth/web-flow.mjs.map +1 -1
  79. package/dist/lib/brand/index.mjs +0 -6
  80. package/dist/lib/brand/index.mjs.map +1 -1
  81. package/dist/lib/canonical-references/index.mjs +6 -7
  82. package/dist/lib/canonical-references/index.mjs.map +1 -1
  83. package/dist/lib/client/index.mjs +0 -6
  84. package/dist/lib/client/index.mjs.map +1 -1
  85. package/dist/lib/compliance/index.mjs +0 -6
  86. package/dist/lib/compliance/index.mjs.map +1 -1
  87. package/dist/lib/compliance-fixtures/index.mjs +0 -6
  88. package/dist/lib/compliance-fixtures/index.mjs.map +1 -1
  89. package/dist/lib/compliance-fixtures/test-authorization-server.mjs +0 -6
  90. package/dist/lib/compliance-fixtures/test-authorization-server.mjs.map +1 -1
  91. package/dist/lib/conformance/index.mjs +0 -6
  92. package/dist/lib/conformance/index.mjs.map +1 -1
  93. package/dist/lib/conformance/invariants/uniformError.mjs +0 -6
  94. package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
  95. package/dist/lib/conformance/invariants/uniformErrorComparator.mjs +0 -6
  96. package/dist/lib/conformance/invariants/uniformErrorComparator.mjs.map +1 -1
  97. package/dist/lib/conformance/oracle.mjs +0 -6
  98. package/dist/lib/conformance/oracle.mjs.map +1 -1
  99. package/dist/lib/conformance/runConformance.mjs +0 -6
  100. package/dist/lib/conformance/runConformance.mjs.map +1 -1
  101. package/dist/lib/conformance/runners.mjs +0 -6
  102. package/dist/lib/conformance/runners.mjs.map +1 -1
  103. package/dist/lib/conformance/schemaArbitrary.mjs +0 -6
  104. package/dist/lib/conformance/schemaArbitrary.mjs.map +1 -1
  105. package/dist/lib/conformance/schemaLoader.mjs +5 -6
  106. package/dist/lib/conformance/schemaLoader.mjs.map +1 -1
  107. package/dist/lib/conformance/seeder.mjs +0 -6
  108. package/dist/lib/conformance/seeder.mjs.map +1 -1
  109. package/dist/lib/conformance/types.mjs +0 -6
  110. package/dist/lib/conformance/types.mjs.map +1 -1
  111. package/dist/lib/conformance/webhook.mjs +0 -6
  112. package/dist/lib/conformance/webhook.mjs.map +1 -1
  113. package/dist/lib/core/ADCPMultiAgentClient.mjs +0 -6
  114. package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
  115. package/dist/lib/core/AgentClient.mjs +0 -6
  116. package/dist/lib/core/AgentClient.mjs.map +1 -1
  117. package/dist/lib/core/AsyncHandler.mjs +0 -6
  118. package/dist/lib/core/AsyncHandler.mjs.map +1 -1
  119. package/dist/lib/core/ConfigurationManager.mjs +0 -6
  120. package/dist/lib/core/ConfigurationManager.mjs.map +1 -1
  121. package/dist/lib/core/ConversationTypes.mjs +0 -6
  122. package/dist/lib/core/CreativeAgentClient.mjs +0 -6
  123. package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
  124. package/dist/lib/core/GovernanceMiddleware.mjs +0 -6
  125. package/dist/lib/core/GovernanceMiddleware.mjs.map +1 -1
  126. package/dist/lib/core/GovernanceTypes.mjs +0 -6
  127. package/dist/lib/core/GovernanceTypes.mjs.map +1 -1
  128. package/dist/lib/core/ProtocolResponseParser.mjs +0 -6
  129. package/dist/lib/core/ProtocolResponseParser.mjs.map +1 -1
  130. package/dist/lib/core/ResponseValidator.mjs +0 -6
  131. package/dist/lib/core/ResponseValidator.mjs.map +1 -1
  132. package/dist/lib/core/SingleAgentClient.mjs +0 -6
  133. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  134. package/dist/lib/core/TaskEventTypes.mjs +0 -6
  135. package/dist/lib/core/TaskEventTypes.mjs.map +1 -1
  136. package/dist/lib/core/TaskExecutor.mjs +0 -6
  137. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  138. package/dist/lib/core/match.mjs +0 -6
  139. package/dist/lib/core/match.mjs.map +1 -1
  140. package/dist/lib/core/task-status.mjs +0 -6
  141. package/dist/lib/core/task-status.mjs.map +1 -1
  142. package/dist/lib/core/webhook-url.mjs +0 -6
  143. package/dist/lib/core/webhook-url.mjs.map +1 -1
  144. package/dist/lib/discovery/adagents-redirects.mjs +0 -6
  145. package/dist/lib/discovery/adagents-redirects.mjs.map +1 -1
  146. package/dist/lib/discovery/agent-directory.mjs +0 -6
  147. package/dist/lib/discovery/agent-directory.mjs.map +1 -1
  148. package/dist/lib/discovery/inline-publisher-properties.mjs +0 -6
  149. package/dist/lib/discovery/inline-publisher-properties.mjs.map +1 -1
  150. package/dist/lib/discovery/network-consistency-checker.mjs +0 -6
  151. package/dist/lib/discovery/network-consistency-checker.mjs.map +1 -1
  152. package/dist/lib/discovery/property-crawler.mjs +0 -6
  153. package/dist/lib/discovery/property-crawler.mjs.map +1 -1
  154. package/dist/lib/discovery/property-index.mjs +0 -6
  155. package/dist/lib/discovery/property-index.mjs.map +1 -1
  156. package/dist/lib/discovery/publisher-property-selector.mjs +0 -6
  157. package/dist/lib/discovery/publisher-property-selector.mjs.map +1 -1
  158. package/dist/lib/discovery/resolve-agent-properties.mjs +0 -6
  159. package/dist/lib/discovery/resolve-agent-properties.mjs.map +1 -1
  160. package/dist/lib/discovery/types.mjs +0 -6
  161. package/dist/lib/discovery/validate-adagents.mjs +0 -6
  162. package/dist/lib/discovery/validate-adagents.mjs.map +1 -1
  163. package/dist/lib/enums.mjs +0 -6
  164. package/dist/lib/enums.mjs.map +1 -1
  165. package/dist/lib/errors/index.mjs +0 -6
  166. package/dist/lib/errors/index.mjs.map +1 -1
  167. package/dist/lib/express-mcp/index.mjs +0 -6
  168. package/dist/lib/express-mcp/index.mjs.map +1 -1
  169. package/dist/lib/governance/index.mjs +0 -6
  170. package/dist/lib/governance/index.mjs.map +1 -1
  171. package/dist/lib/handlers/types.mjs +0 -6
  172. package/dist/lib/handlers/types.mjs.map +1 -1
  173. package/dist/lib/index.d.mts +1 -1
  174. package/dist/lib/index.d.ts +1 -1
  175. package/dist/lib/index.d.ts.map +1 -1
  176. package/dist/lib/index.js.map +1 -1
  177. package/dist/lib/index.mjs +0 -6
  178. package/dist/lib/index.mjs.map +1 -1
  179. package/dist/lib/media-buy/available-actions.mjs +0 -6
  180. package/dist/lib/media-buy/available-actions.mjs.map +1 -1
  181. package/dist/lib/media-buy/index.mjs +0 -6
  182. package/dist/lib/media-buy/index.mjs.map +1 -1
  183. package/dist/lib/media-buy/preflight.mjs +0 -6
  184. package/dist/lib/media-buy/preflight.mjs.map +1 -1
  185. package/dist/lib/media-buy/property-policy.mjs +0 -6
  186. package/dist/lib/media-buy/property-policy.mjs.map +1 -1
  187. package/dist/lib/media-buy/types.mjs +0 -6
  188. package/dist/lib/media-buy/types.mjs.map +1 -1
  189. package/dist/lib/media-buy/update-fields.generated.mjs +0 -6
  190. package/dist/lib/media-buy/update-fields.generated.mjs.map +1 -1
  191. package/dist/lib/mock-server/creative-ad-server/seed-data.mjs +0 -6
  192. package/dist/lib/mock-server/creative-ad-server/seed-data.mjs.map +1 -1
  193. package/dist/lib/mock-server/creative-ad-server/server.mjs +0 -6
  194. package/dist/lib/mock-server/creative-ad-server/server.mjs.map +1 -1
  195. package/dist/lib/mock-server/creative-template/seed-data.mjs +0 -6
  196. package/dist/lib/mock-server/creative-template/seed-data.mjs.map +1 -1
  197. package/dist/lib/mock-server/creative-template/server.mjs +0 -6
  198. package/dist/lib/mock-server/creative-template/server.mjs.map +1 -1
  199. package/dist/lib/mock-server/index.mjs +0 -6
  200. package/dist/lib/mock-server/index.mjs.map +1 -1
  201. package/dist/lib/mock-server/sales-guaranteed/recipe.mjs +0 -6
  202. package/dist/lib/mock-server/sales-guaranteed/recipe.mjs.map +1 -1
  203. package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs +0 -6
  204. package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs.map +1 -1
  205. package/dist/lib/mock-server/sales-guaranteed/server.mjs +0 -6
  206. package/dist/lib/mock-server/sales-guaranteed/server.mjs.map +1 -1
  207. package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs +0 -6
  208. package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs.map +1 -1
  209. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs +0 -6
  210. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs.map +1 -1
  211. package/dist/lib/mock-server/sales-non-guaranteed/server.mjs +0 -6
  212. package/dist/lib/mock-server/sales-non-guaranteed/server.mjs.map +1 -1
  213. package/dist/lib/mock-server/sales-social/seed-data.mjs +0 -6
  214. package/dist/lib/mock-server/sales-social/seed-data.mjs.map +1 -1
  215. package/dist/lib/mock-server/sales-social/server.mjs +0 -6
  216. package/dist/lib/mock-server/sales-social/server.mjs.map +1 -1
  217. package/dist/lib/mock-server/scenario.mjs +0 -6
  218. package/dist/lib/mock-server/scenario.mjs.map +1 -1
  219. package/dist/lib/mock-server/signal-marketplace/seed-data.mjs +0 -6
  220. package/dist/lib/mock-server/signal-marketplace/seed-data.mjs.map +1 -1
  221. package/dist/lib/mock-server/signal-marketplace/server.mjs +0 -6
  222. package/dist/lib/mock-server/signal-marketplace/server.mjs.map +1 -1
  223. package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs +0 -6
  224. package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs.map +1 -1
  225. package/dist/lib/mock-server/sponsored-intelligence/server.mjs +0 -6
  226. package/dist/lib/mock-server/sponsored-intelligence/server.mjs.map +1 -1
  227. package/dist/lib/net/address-guards.mjs +0 -6
  228. package/dist/lib/net/address-guards.mjs.map +1 -1
  229. package/dist/lib/net/index.mjs +0 -6
  230. package/dist/lib/net/index.mjs.map +1 -1
  231. package/dist/lib/net/ssrf-fetch.mjs +0 -6
  232. package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
  233. package/dist/lib/observability/index.mjs +0 -6
  234. package/dist/lib/observability/index.mjs.map +1 -1
  235. package/dist/lib/observability/tracing.mjs +6 -7
  236. package/dist/lib/observability/tracing.mjs.map +1 -1
  237. package/dist/lib/protocols/a2a.mjs +0 -6
  238. package/dist/lib/protocols/a2a.mjs.map +1 -1
  239. package/dist/lib/protocols/abort.mjs +0 -6
  240. package/dist/lib/protocols/abort.mjs.map +1 -1
  241. package/dist/lib/protocols/index.mjs +0 -6
  242. package/dist/lib/protocols/index.mjs.map +1 -1
  243. package/dist/lib/protocols/mcp-modern.mjs +0 -6
  244. package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
  245. package/dist/lib/protocols/mcp-tasks.mjs +0 -6
  246. package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
  247. package/dist/lib/protocols/mcp.mjs +0 -6
  248. package/dist/lib/protocols/mcp.mjs.map +1 -1
  249. package/dist/lib/protocols/rawResponseCapture.mjs +0 -6
  250. package/dist/lib/protocols/rawResponseCapture.mjs.map +1 -1
  251. package/dist/lib/protocols/responseSizeLimit.mjs +0 -6
  252. package/dist/lib/protocols/responseSizeLimit.mjs.map +1 -1
  253. package/dist/lib/protocols/transportDiagnostics.mjs +0 -6
  254. package/dist/lib/protocols/transportDiagnostics.mjs.map +1 -1
  255. package/dist/lib/registry/cursor-store.mjs +0 -6
  256. package/dist/lib/registry/cursor-store.mjs.map +1 -1
  257. package/dist/lib/registry/feed-stream.mjs +0 -6
  258. package/dist/lib/registry/feed-stream.mjs.map +1 -1
  259. package/dist/lib/registry/index.mjs +0 -6
  260. package/dist/lib/registry/index.mjs.map +1 -1
  261. package/dist/lib/registry/property-registry.mjs +0 -6
  262. package/dist/lib/registry/property-registry.mjs.map +1 -1
  263. package/dist/lib/registry/sync.mjs +0 -6
  264. package/dist/lib/registry/sync.mjs.map +1 -1
  265. package/dist/lib/registry/types.generated.mjs +0 -6
  266. package/dist/lib/registry/types.mjs +0 -6
  267. package/dist/lib/schemas/index.mjs +0 -6
  268. package/dist/lib/schemas/index.mjs.map +1 -1
  269. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  270. package/dist/lib/server/a2a-adapter.mjs +0 -6
  271. package/dist/lib/server/a2a-adapter.mjs.map +1 -1
  272. package/dist/lib/server/account-mode.mjs +0 -6
  273. package/dist/lib/server/account-mode.mjs.map +1 -1
  274. package/dist/lib/server/adcp-server.mjs +0 -6
  275. package/dist/lib/server/adcp-server.mjs.map +1 -1
  276. package/dist/lib/server/auth-introspection.mjs +0 -6
  277. package/dist/lib/server/auth-introspection.mjs.map +1 -1
  278. package/dist/lib/server/auth-signature.mjs +0 -6
  279. package/dist/lib/server/auth-signature.mjs.map +1 -1
  280. package/dist/lib/server/auth.mjs +0 -6
  281. package/dist/lib/server/auth.mjs.map +1 -1
  282. package/dist/lib/server/create-adcp-server.d.mts +13 -0
  283. package/dist/lib/server/create-adcp-server.d.ts +13 -0
  284. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  285. package/dist/lib/server/create-adcp-server.js +3 -2
  286. package/dist/lib/server/create-adcp-server.js.map +1 -1
  287. package/dist/lib/server/create-adcp-server.mjs +3 -8
  288. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  289. package/dist/lib/server/credential-policy.mjs +0 -6
  290. package/dist/lib/server/credential-policy.mjs.map +1 -1
  291. package/dist/lib/server/ctx-metadata/backends/memory.mjs +0 -6
  292. package/dist/lib/server/ctx-metadata/backends/memory.mjs.map +1 -1
  293. package/dist/lib/server/ctx-metadata/backends/pg.mjs +0 -6
  294. package/dist/lib/server/ctx-metadata/backends/pg.mjs.map +1 -1
  295. package/dist/lib/server/ctx-metadata/backends/redis.mjs +0 -6
  296. package/dist/lib/server/ctx-metadata/backends/redis.mjs.map +1 -1
  297. package/dist/lib/server/ctx-metadata/index.mjs +0 -6
  298. package/dist/lib/server/ctx-metadata/index.mjs.map +1 -1
  299. package/dist/lib/server/ctx-metadata/store.mjs +0 -6
  300. package/dist/lib/server/ctx-metadata/store.mjs.map +1 -1
  301. package/dist/lib/server/ctx-metadata/wire-shape.mjs +0 -6
  302. package/dist/lib/server/ctx-metadata/wire-shape.mjs.map +1 -1
  303. package/dist/lib/server/decisioning/account.mjs +0 -6
  304. package/dist/lib/server/decisioning/account.mjs.map +1 -1
  305. package/dist/lib/server/decisioning/admin-router.mjs +0 -6
  306. package/dist/lib/server/decisioning/admin-router.mjs.map +1 -1
  307. package/dist/lib/server/decisioning/assembly-helpers.mjs +0 -6
  308. package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
  309. package/dist/lib/server/decisioning/async-outcome.mjs +0 -6
  310. package/dist/lib/server/decisioning/async-outcome.mjs.map +1 -1
  311. package/dist/lib/server/decisioning/buyer-agent.mjs +0 -6
  312. package/dist/lib/server/decisioning/buyer-agent.mjs.map +1 -1
  313. package/dist/lib/server/decisioning/capabilities.mjs +0 -6
  314. package/dist/lib/server/decisioning/capabilities.mjs.map +1 -1
  315. package/dist/lib/server/decisioning/compose.mjs +0 -6
  316. package/dist/lib/server/decisioning/compose.mjs.map +1 -1
  317. package/dist/lib/server/decisioning/context.mjs +0 -6
  318. package/dist/lib/server/decisioning/errors-typed.mjs +0 -6
  319. package/dist/lib/server/decisioning/errors-typed.mjs.map +1 -1
  320. package/dist/lib/server/decisioning/helpers.mjs +0 -6
  321. package/dist/lib/server/decisioning/helpers.mjs.map +1 -1
  322. package/dist/lib/server/decisioning/index.mjs +0 -6
  323. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  324. package/dist/lib/server/decisioning/list-helpers.mjs +0 -6
  325. package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
  326. package/dist/lib/server/decisioning/manifest-helpers.mjs +0 -6
  327. package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
  328. package/dist/lib/server/decisioning/pagination.mjs +0 -6
  329. package/dist/lib/server/decisioning/platform-helpers.mjs +0 -6
  330. package/dist/lib/server/decisioning/platform-helpers.mjs.map +1 -1
  331. package/dist/lib/server/decisioning/platform.mjs +0 -6
  332. package/dist/lib/server/decisioning/proposal/dispatch.mjs +0 -6
  333. package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
  334. package/dist/lib/server/decisioning/proposal/index.mjs +0 -6
  335. package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
  336. package/dist/lib/server/decisioning/proposal/lifecycle.mjs +0 -6
  337. package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
  338. package/dist/lib/server/decisioning/proposal/mock-manager.mjs +0 -6
  339. package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
  340. package/dist/lib/server/decisioning/proposal/store.mjs +0 -6
  341. package/dist/lib/server/decisioning/proposal/store.mjs.map +1 -1
  342. package/dist/lib/server/decisioning/proposal/types.mjs +0 -6
  343. package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
  344. package/dist/lib/server/decisioning/resolve-presets.mjs +0 -6
  345. package/dist/lib/server/decisioning/resolve-presets.mjs.map +1 -1
  346. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs +0 -6
  347. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs.map +1 -1
  348. package/dist/lib/server/decisioning/runtime/from-platform.mjs +0 -6
  349. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  350. package/dist/lib/server/decisioning/runtime/observed-modes.mjs +0 -6
  351. package/dist/lib/server/decisioning/runtime/observed-modes.mjs.map +1 -1
  352. package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs +0 -6
  353. package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs.map +1 -1
  354. package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs +0 -6
  355. package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs.map +1 -1
  356. package/dist/lib/server/decisioning/runtime/task-registry.mjs +0 -6
  357. package/dist/lib/server/decisioning/runtime/task-registry.mjs.map +1 -1
  358. package/dist/lib/server/decisioning/runtime/to-context.mjs +0 -6
  359. package/dist/lib/server/decisioning/runtime/to-context.mjs.map +1 -1
  360. package/dist/lib/server/decisioning/runtime/validate-platform.mjs +0 -6
  361. package/dist/lib/server/decisioning/runtime/validate-platform.mjs.map +1 -1
  362. package/dist/lib/server/decisioning/specialisms/audiences.mjs +0 -6
  363. package/dist/lib/server/decisioning/specialisms/brand-rights.mjs +0 -6
  364. package/dist/lib/server/decisioning/specialisms/campaign-governance.mjs +0 -6
  365. package/dist/lib/server/decisioning/specialisms/content-standards.mjs +0 -6
  366. package/dist/lib/server/decisioning/specialisms/creative-ad-server.mjs +0 -6
  367. package/dist/lib/server/decisioning/specialisms/creative.mjs +0 -6
  368. package/dist/lib/server/decisioning/specialisms/lists.mjs +0 -6
  369. package/dist/lib/server/decisioning/specialisms/sales.mjs +0 -6
  370. package/dist/lib/server/decisioning/specialisms/signals.mjs +0 -6
  371. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.mjs +0 -6
  372. package/dist/lib/server/decisioning/start-time.mjs +0 -6
  373. package/dist/lib/server/decisioning/start-time.mjs.map +1 -1
  374. package/dist/lib/server/decisioning/status-changes.mjs +0 -6
  375. package/dist/lib/server/decisioning/status-changes.mjs.map +1 -1
  376. package/dist/lib/server/decisioning/status-mappers.mjs +0 -6
  377. package/dist/lib/server/decisioning/status-mappers.mjs.map +1 -1
  378. package/dist/lib/server/decisioning/tenant-registry.mjs +0 -6
  379. package/dist/lib/server/decisioning/tenant-registry.mjs.map +1 -1
  380. package/dist/lib/server/decisioning/tenant-store.mjs +0 -6
  381. package/dist/lib/server/decisioning/tenant-store.mjs.map +1 -1
  382. package/dist/lib/server/decisioning/validate-specialisms.mjs +0 -6
  383. package/dist/lib/server/decisioning/validate-specialisms.mjs.map +1 -1
  384. package/dist/lib/server/dynamic-registry.mjs +0 -6
  385. package/dist/lib/server/dynamic-registry.mjs.map +1 -1
  386. package/dist/lib/server/envelope-allowlist.mjs +0 -6
  387. package/dist/lib/server/envelope-allowlist.mjs.map +1 -1
  388. package/dist/lib/server/error-arm-tools.mjs +5 -6
  389. package/dist/lib/server/error-arm-tools.mjs.map +1 -1
  390. package/dist/lib/server/errors.mjs +0 -6
  391. package/dist/lib/server/errors.mjs.map +1 -1
  392. package/dist/lib/server/example-tld-guard.mjs +0 -6
  393. package/dist/lib/server/example-tld-guard.mjs.map +1 -1
  394. package/dist/lib/server/express-adapter.mjs +0 -6
  395. package/dist/lib/server/express-adapter.mjs.map +1 -1
  396. package/dist/lib/server/governance.mjs +0 -6
  397. package/dist/lib/server/governance.mjs.map +1 -1
  398. package/dist/lib/server/idempotency/backends/lazy.mjs +0 -6
  399. package/dist/lib/server/idempotency/backends/lazy.mjs.map +1 -1
  400. package/dist/lib/server/idempotency/backends/memory.mjs +0 -6
  401. package/dist/lib/server/idempotency/backends/memory.mjs.map +1 -1
  402. package/dist/lib/server/idempotency/backends/pg.mjs +0 -6
  403. package/dist/lib/server/idempotency/backends/pg.mjs.map +1 -1
  404. package/dist/lib/server/idempotency/backends/redis.mjs +0 -6
  405. package/dist/lib/server/idempotency/backends/redis.mjs.map +1 -1
  406. package/dist/lib/server/idempotency/index.mjs +0 -6
  407. package/dist/lib/server/idempotency/index.mjs.map +1 -1
  408. package/dist/lib/server/idempotency/store.mjs +0 -6
  409. package/dist/lib/server/idempotency/store.mjs.map +1 -1
  410. package/dist/lib/server/index.d.mts +1 -1
  411. package/dist/lib/server/index.d.ts +1 -1
  412. package/dist/lib/server/index.d.ts.map +1 -1
  413. package/dist/lib/server/index.js.map +1 -1
  414. package/dist/lib/server/index.mjs +0 -6
  415. package/dist/lib/server/index.mjs.map +1 -1
  416. package/dist/lib/server/legacy/v5/index.d.mts +1 -1
  417. package/dist/lib/server/legacy/v5/index.d.ts +1 -1
  418. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
  419. package/dist/lib/server/legacy/v5/index.js.map +1 -1
  420. package/dist/lib/server/legacy/v5/index.mjs +0 -6
  421. package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
  422. package/dist/lib/server/mcp-modern-server.mjs +0 -6
  423. package/dist/lib/server/mcp-modern-server.mjs.map +1 -1
  424. package/dist/lib/server/media-buy-actions.mjs +0 -6
  425. package/dist/lib/server/media-buy-actions.mjs.map +1 -1
  426. package/dist/lib/server/media-buy-helpers.mjs +0 -6
  427. package/dist/lib/server/media-buy-helpers.mjs.map +1 -1
  428. package/dist/lib/server/media-buy-store.mjs +0 -6
  429. package/dist/lib/server/media-buy-store.mjs.map +1 -1
  430. package/dist/lib/server/normalize-errors.mjs +0 -6
  431. package/dist/lib/server/normalize-errors.mjs.map +1 -1
  432. package/dist/lib/server/operational-platform.mjs +0 -6
  433. package/dist/lib/server/operational-platform.mjs.map +1 -1
  434. package/dist/lib/server/pick-safe-details.mjs +0 -6
  435. package/dist/lib/server/pick-safe-details.mjs.map +1 -1
  436. package/dist/lib/server/pin-and-bind-fetch.mjs +0 -6
  437. package/dist/lib/server/pin-and-bind-fetch.mjs.map +1 -1
  438. package/dist/lib/server/postgres-state-store.mjs +0 -6
  439. package/dist/lib/server/postgres-state-store.mjs.map +1 -1
  440. package/dist/lib/server/postgres-task-store.mjs +0 -6
  441. package/dist/lib/server/postgres-task-store.mjs.map +1 -1
  442. package/dist/lib/server/product-defaults.mjs +0 -6
  443. package/dist/lib/server/product-defaults.mjs.map +1 -1
  444. package/dist/lib/server/redact.mjs +0 -6
  445. package/dist/lib/server/redact.mjs.map +1 -1
  446. package/dist/lib/server/responses.mjs +0 -6
  447. package/dist/lib/server/responses.mjs.map +1 -1
  448. package/dist/lib/server/serve.mjs +0 -6
  449. package/dist/lib/server/serve.mjs.map +1 -1
  450. package/dist/lib/server/socket-mode/conformance-client.mjs +0 -6
  451. package/dist/lib/server/socket-mode/conformance-client.mjs.map +1 -1
  452. package/dist/lib/server/socket-mode/index.mjs +0 -6
  453. package/dist/lib/server/socket-mode/index.mjs.map +1 -1
  454. package/dist/lib/server/socket-mode/ws-transport.mjs +0 -6
  455. package/dist/lib/server/socket-mode/ws-transport.mjs.map +1 -1
  456. package/dist/lib/server/state-machine.mjs +0 -6
  457. package/dist/lib/server/state-machine.mjs.map +1 -1
  458. package/dist/lib/server/state-store.mjs +0 -6
  459. package/dist/lib/server/state-store.mjs.map +1 -1
  460. package/dist/lib/server/structured-serialize.mjs +0 -6
  461. package/dist/lib/server/structured-serialize.mjs.map +1 -1
  462. package/dist/lib/server/targeting-helpers.mjs +0 -6
  463. package/dist/lib/server/targeting-helpers.mjs.map +1 -1
  464. package/dist/lib/server/tasks.mjs +0 -6
  465. package/dist/lib/server/tasks.mjs.map +1 -1
  466. package/dist/lib/server/test-controller-bridge.mjs +0 -6
  467. package/dist/lib/server/test-controller-bridge.mjs.map +1 -1
  468. package/dist/lib/server/test-controller.mjs +0 -6
  469. package/dist/lib/server/test-controller.mjs.map +1 -1
  470. package/dist/lib/server/upstream-helpers.mjs +0 -6
  471. package/dist/lib/server/upstream-helpers.mjs.map +1 -1
  472. package/dist/lib/server/webhook-emitter.mjs +0 -6
  473. package/dist/lib/server/webhook-emitter.mjs.map +1 -1
  474. package/dist/lib/server/wire-safe.mjs +0 -6
  475. package/dist/lib/server/wire-safe.mjs.map +1 -1
  476. package/dist/lib/server/wire-spec-fields.generated.mjs +0 -6
  477. package/dist/lib/server/wire-spec-fields.generated.mjs.map +1 -1
  478. package/dist/lib/server/wrap-envelope.mjs +0 -6
  479. package/dist/lib/server/wrap-envelope.mjs.map +1 -1
  480. package/dist/lib/signing/agent-context.mjs +0 -6
  481. package/dist/lib/signing/agent-context.mjs.map +1 -1
  482. package/dist/lib/signing/agent-fetch.mjs +0 -6
  483. package/dist/lib/signing/agent-fetch.mjs.map +1 -1
  484. package/dist/lib/signing/agent-resolver/canonicalize.mjs +0 -6
  485. package/dist/lib/signing/agent-resolver/canonicalize.mjs.map +1 -1
  486. package/dist/lib/signing/agent-resolver/capabilities-types.mjs +0 -6
  487. package/dist/lib/signing/agent-resolver/capabilities-types.mjs.map +1 -1
  488. package/dist/lib/signing/agent-resolver/consistency.mjs +0 -6
  489. package/dist/lib/signing/agent-resolver/consistency.mjs.map +1 -1
  490. package/dist/lib/signing/agent-resolver/errors.mjs +0 -6
  491. package/dist/lib/signing/agent-resolver/errors.mjs.map +1 -1
  492. package/dist/lib/signing/agent-resolver/etld.mjs +0 -6
  493. package/dist/lib/signing/agent-resolver/etld.mjs.map +1 -1
  494. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs +0 -6
  495. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs.map +1 -1
  496. package/dist/lib/signing/agent-resolver/index.mjs +0 -6
  497. package/dist/lib/signing/agent-resolver/index.mjs.map +1 -1
  498. package/dist/lib/signing/agent-resolver/jwks-set.mjs +0 -6
  499. package/dist/lib/signing/agent-resolver/jwks-set.mjs.map +1 -1
  500. package/dist/lib/signing/agent-resolver/resolve-agent.mjs +0 -6
  501. package/dist/lib/signing/agent-resolver/resolve-agent.mjs.map +1 -1
  502. package/dist/lib/signing/agent-resolver/select-agent.mjs +0 -6
  503. package/dist/lib/signing/agent-resolver/select-agent.mjs.map +1 -1
  504. package/dist/lib/signing/agent-resolver/strict-json.mjs +0 -6
  505. package/dist/lib/signing/agent-resolver/strict-json.mjs.map +1 -1
  506. package/dist/lib/signing/brand-jwks.mjs +0 -6
  507. package/dist/lib/signing/brand-jwks.mjs.map +1 -1
  508. package/dist/lib/signing/canonicalize.mjs +0 -6
  509. package/dist/lib/signing/canonicalize.mjs.map +1 -1
  510. package/dist/lib/signing/capability-cache.mjs +0 -6
  511. package/dist/lib/signing/capability-cache.mjs.map +1 -1
  512. package/dist/lib/signing/capability-priming.mjs +0 -6
  513. package/dist/lib/signing/capability-priming.mjs.map +1 -1
  514. package/dist/lib/signing/client.mjs +0 -6
  515. package/dist/lib/signing/client.mjs.map +1 -1
  516. package/dist/lib/signing/content-digest.mjs +0 -6
  517. package/dist/lib/signing/content-digest.mjs.map +1 -1
  518. package/dist/lib/signing/crypto.mjs +0 -6
  519. package/dist/lib/signing/crypto.mjs.map +1 -1
  520. package/dist/lib/signing/ecdsa-encoding.mjs +0 -6
  521. package/dist/lib/signing/ecdsa-encoding.mjs.map +1 -1
  522. package/dist/lib/signing/errors.mjs +0 -6
  523. package/dist/lib/signing/errors.mjs.map +1 -1
  524. package/dist/lib/signing/fetch-async.mjs +0 -6
  525. package/dist/lib/signing/fetch-async.mjs.map +1 -1
  526. package/dist/lib/signing/fetch.mjs +0 -6
  527. package/dist/lib/signing/fetch.mjs.map +1 -1
  528. package/dist/lib/signing/index.mjs +0 -6
  529. package/dist/lib/signing/index.mjs.map +1 -1
  530. package/dist/lib/signing/jwks-helpers.mjs +0 -6
  531. package/dist/lib/signing/jwks-helpers.mjs.map +1 -1
  532. package/dist/lib/signing/jwks-https.mjs +0 -6
  533. package/dist/lib/signing/jwks-https.mjs.map +1 -1
  534. package/dist/lib/signing/jwks.mjs +0 -6
  535. package/dist/lib/signing/jwks.mjs.map +1 -1
  536. package/dist/lib/signing/middleware.mjs +0 -6
  537. package/dist/lib/signing/middleware.mjs.map +1 -1
  538. package/dist/lib/signing/parser.mjs +0 -6
  539. package/dist/lib/signing/parser.mjs.map +1 -1
  540. package/dist/lib/signing/postgres-replay-store.mjs +0 -6
  541. package/dist/lib/signing/postgres-replay-store.mjs.map +1 -1
  542. package/dist/lib/signing/protocol-response.mjs +0 -6
  543. package/dist/lib/signing/protocol-response.mjs.map +1 -1
  544. package/dist/lib/signing/provider.mjs +0 -6
  545. package/dist/lib/signing/redis-replay-store.mjs +0 -6
  546. package/dist/lib/signing/redis-replay-store.mjs.map +1 -1
  547. package/dist/lib/signing/replay.mjs +0 -6
  548. package/dist/lib/signing/replay.mjs.map +1 -1
  549. package/dist/lib/signing/request-context.mjs +0 -6
  550. package/dist/lib/signing/request-context.mjs.map +1 -1
  551. package/dist/lib/signing/revocation-https.mjs +0 -6
  552. package/dist/lib/signing/revocation-https.mjs.map +1 -1
  553. package/dist/lib/signing/revocation.mjs +0 -6
  554. package/dist/lib/signing/revocation.mjs.map +1 -1
  555. package/dist/lib/signing/server.mjs +0 -6
  556. package/dist/lib/signing/server.mjs.map +1 -1
  557. package/dist/lib/signing/signer-async.mjs +0 -6
  558. package/dist/lib/signing/signer-async.mjs.map +1 -1
  559. package/dist/lib/signing/signer.mjs +0 -6
  560. package/dist/lib/signing/signer.mjs.map +1 -1
  561. package/dist/lib/signing/testing.mjs +0 -6
  562. package/dist/lib/signing/testing.mjs.map +1 -1
  563. package/dist/lib/signing/types.mjs +0 -6
  564. package/dist/lib/signing/types.mjs.map +1 -1
  565. package/dist/lib/signing/verifier.mjs +0 -6
  566. package/dist/lib/signing/verifier.mjs.map +1 -1
  567. package/dist/lib/signing/webhook-auth-detection.mjs +0 -6
  568. package/dist/lib/signing/webhook-auth-detection.mjs.map +1 -1
  569. package/dist/lib/signing/webhook-verifier.mjs +0 -6
  570. package/dist/lib/signing/webhook-verifier.mjs.map +1 -1
  571. package/dist/lib/storage/MemoryStorage.mjs +0 -6
  572. package/dist/lib/storage/MemoryStorage.mjs.map +1 -1
  573. package/dist/lib/storage/interfaces.mjs +0 -6
  574. package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs +0 -6
  575. package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs.map +1 -1
  576. package/dist/lib/substitution/encoder/index.mjs +0 -6
  577. package/dist/lib/substitution/encoder/index.mjs.map +1 -1
  578. package/dist/lib/substitution/index.mjs +0 -6
  579. package/dist/lib/substitution/index.mjs.map +1 -1
  580. package/dist/lib/substitution/observer/SubstitutionObserver.mjs +0 -6
  581. package/dist/lib/substitution/observer/SubstitutionObserver.mjs.map +1 -1
  582. package/dist/lib/substitution/observer/alignment.mjs +0 -6
  583. package/dist/lib/substitution/observer/alignment.mjs.map +1 -1
  584. package/dist/lib/substitution/observer/assertions.mjs +0 -6
  585. package/dist/lib/substitution/observer/assertions.mjs.map +1 -1
  586. package/dist/lib/substitution/observer/html-parser.mjs +0 -6
  587. package/dist/lib/substitution/observer/html-parser.mjs.map +1 -1
  588. package/dist/lib/substitution/observer/index.mjs +0 -6
  589. package/dist/lib/substitution/observer/index.mjs.map +1 -1
  590. package/dist/lib/substitution/observer/ssrf.mjs +0 -6
  591. package/dist/lib/substitution/observer/ssrf.mjs.map +1 -1
  592. package/dist/lib/substitution/rfc3986.mjs +0 -6
  593. package/dist/lib/substitution/rfc3986.mjs.map +1 -1
  594. package/dist/lib/substitution/translate.mjs +0 -6
  595. package/dist/lib/substitution/translate.mjs.map +1 -1
  596. package/dist/lib/substitution/types.mjs +0 -6
  597. package/dist/lib/substitution/vectors.mjs +0 -6
  598. package/dist/lib/substitution/vectors.mjs.map +1 -1
  599. package/dist/lib/testing/agent-tester.mjs +0 -6
  600. package/dist/lib/testing/agent-tester.mjs.map +1 -1
  601. package/dist/lib/testing/client.mjs +0 -6
  602. package/dist/lib/testing/client.mjs.map +1 -1
  603. package/dist/lib/testing/compliance/briefs.mjs +0 -6
  604. package/dist/lib/testing/compliance/briefs.mjs.map +1 -1
  605. package/dist/lib/testing/compliance/comply.mjs +0 -6
  606. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  607. package/dist/lib/testing/compliance/index.mjs +0 -6
  608. package/dist/lib/testing/compliance/index.mjs.map +1 -1
  609. package/dist/lib/testing/compliance/spec-conformance.mjs +0 -6
  610. package/dist/lib/testing/compliance/spec-conformance.mjs.map +1 -1
  611. package/dist/lib/testing/compliance/storyboard-tracks.mjs +0 -6
  612. package/dist/lib/testing/compliance/storyboard-tracks.mjs.map +1 -1
  613. package/dist/lib/testing/compliance/summary.mjs +0 -6
  614. package/dist/lib/testing/compliance/summary.mjs.map +1 -1
  615. package/dist/lib/testing/compliance/types.mjs +0 -6
  616. package/dist/lib/testing/comply-controller.mjs +0 -6
  617. package/dist/lib/testing/comply-controller.mjs.map +1 -1
  618. package/dist/lib/testing/controller-assertions.mjs +0 -6
  619. package/dist/lib/testing/controller-assertions.mjs.map +1 -1
  620. package/dist/lib/testing/formatter.mjs +0 -6
  621. package/dist/lib/testing/formatter.mjs.map +1 -1
  622. package/dist/lib/testing/index.mjs +0 -6
  623. package/dist/lib/testing/index.mjs.map +1 -1
  624. package/dist/lib/testing/local-agent-runner.mjs +0 -6
  625. package/dist/lib/testing/local-agent-runner.mjs.map +1 -1
  626. package/dist/lib/testing/orchestrator.mjs +0 -6
  627. package/dist/lib/testing/orchestrator.mjs.map +1 -1
  628. package/dist/lib/testing/personas/index.mjs +0 -6
  629. package/dist/lib/testing/personas/index.mjs.map +1 -1
  630. package/dist/lib/testing/scenarios/brand-rights.mjs +0 -6
  631. package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
  632. package/dist/lib/testing/scenarios/capabilities.mjs +0 -6
  633. package/dist/lib/testing/scenarios/capabilities.mjs.map +1 -1
  634. package/dist/lib/testing/scenarios/creative.mjs +0 -6
  635. package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
  636. package/dist/lib/testing/scenarios/deterministic.mjs +0 -6
  637. package/dist/lib/testing/scenarios/deterministic.mjs.map +1 -1
  638. package/dist/lib/testing/scenarios/discovery.mjs +0 -6
  639. package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
  640. package/dist/lib/testing/scenarios/edge-cases.mjs +0 -6
  641. package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
  642. package/dist/lib/testing/scenarios/error-compliance.mjs +0 -6
  643. package/dist/lib/testing/scenarios/error-compliance.mjs.map +1 -1
  644. package/dist/lib/testing/scenarios/governance.mjs +0 -6
  645. package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
  646. package/dist/lib/testing/scenarios/health.mjs +0 -6
  647. package/dist/lib/testing/scenarios/health.mjs.map +1 -1
  648. package/dist/lib/testing/scenarios/index.mjs +0 -6
  649. package/dist/lib/testing/scenarios/index.mjs.map +1 -1
  650. package/dist/lib/testing/scenarios/media-buy.mjs +0 -6
  651. package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
  652. package/dist/lib/testing/scenarios/schema-compliance.mjs +0 -6
  653. package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
  654. package/dist/lib/testing/scenarios/signals.mjs +0 -6
  655. package/dist/lib/testing/scenarios/signals.mjs.map +1 -1
  656. package/dist/lib/testing/scenarios/sponsored-intelligence.mjs +0 -6
  657. package/dist/lib/testing/scenarios/sponsored-intelligence.mjs.map +1 -1
  658. package/dist/lib/testing/scenarios/trusted-match.mjs +0 -6
  659. package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
  660. package/dist/lib/testing/seed-merge.mjs +0 -6
  661. package/dist/lib/testing/seed-merge.mjs.map +1 -1
  662. package/dist/lib/testing/storyboard/agent-routing.mjs +0 -6
  663. package/dist/lib/testing/storyboard/agent-routing.mjs.map +1 -1
  664. package/dist/lib/testing/storyboard/assertions.mjs +0 -6
  665. package/dist/lib/testing/storyboard/assertions.mjs.map +1 -1
  666. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +0 -6
  667. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs.map +1 -1
  668. package/dist/lib/testing/storyboard/compliance.mjs +5 -6
  669. package/dist/lib/testing/storyboard/compliance.mjs.map +1 -1
  670. package/dist/lib/testing/storyboard/context.mjs +0 -6
  671. package/dist/lib/testing/storyboard/context.mjs.map +1 -1
  672. package/dist/lib/testing/storyboard/default-invariants.mjs +0 -6
  673. package/dist/lib/testing/storyboard/default-invariants.mjs.map +1 -1
  674. package/dist/lib/testing/storyboard/index.mjs +0 -6
  675. package/dist/lib/testing/storyboard/index.mjs.map +1 -1
  676. package/dist/lib/testing/storyboard/junit.mjs +0 -6
  677. package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
  678. package/dist/lib/testing/storyboard/loader.mjs +0 -6
  679. package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
  680. package/dist/lib/testing/storyboard/parallel-dispatch.mjs +0 -6
  681. package/dist/lib/testing/storyboard/parallel-dispatch.mjs.map +1 -1
  682. package/dist/lib/testing/storyboard/path.mjs +0 -6
  683. package/dist/lib/testing/storyboard/path.mjs.map +1 -1
  684. package/dist/lib/testing/storyboard/probes.mjs +0 -6
  685. package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
  686. package/dist/lib/testing/storyboard/rate-limit-trip.mjs +0 -6
  687. package/dist/lib/testing/storyboard/rate-limit-trip.mjs.map +1 -1
  688. package/dist/lib/testing/storyboard/rejection-hints.mjs +0 -6
  689. package/dist/lib/testing/storyboard/rejection-hints.mjs.map +1 -1
  690. package/dist/lib/testing/storyboard/request-builder.mjs +0 -6
  691. package/dist/lib/testing/storyboard/request-builder.mjs.map +1 -1
  692. package/dist/lib/testing/storyboard/request-signing/builder.mjs +0 -6
  693. package/dist/lib/testing/storyboard/request-signing/builder.mjs.map +1 -1
  694. package/dist/lib/testing/storyboard/request-signing/grader.mjs +0 -6
  695. package/dist/lib/testing/storyboard/request-signing/grader.mjs.map +1 -1
  696. package/dist/lib/testing/storyboard/request-signing/index.mjs +0 -6
  697. package/dist/lib/testing/storyboard/request-signing/index.mjs.map +1 -1
  698. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +0 -6
  699. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs.map +1 -1
  700. package/dist/lib/testing/storyboard/request-signing/probe.mjs +0 -6
  701. package/dist/lib/testing/storyboard/request-signing/probe.mjs.map +1 -1
  702. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +0 -6
  703. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs.map +1 -1
  704. package/dist/lib/testing/storyboard/request-signing/test-kit.mjs +0 -6
  705. package/dist/lib/testing/storyboard/request-signing/test-kit.mjs.map +1 -1
  706. package/dist/lib/testing/storyboard/request-signing/types.mjs +0 -6
  707. package/dist/lib/testing/storyboard/request-signing/types.mjs.map +1 -1
  708. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +0 -6
  709. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
  710. package/dist/lib/testing/storyboard/runner.mjs +0 -6
  711. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  712. package/dist/lib/testing/storyboard/sandbox-entities.mjs +0 -6
  713. package/dist/lib/testing/storyboard/sandbox-entities.mjs.map +1 -1
  714. package/dist/lib/testing/storyboard/seeding.mjs +0 -6
  715. package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
  716. package/dist/lib/testing/storyboard/shape-drift-hints.mjs +0 -6
  717. package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
  718. package/dist/lib/testing/storyboard/signer-grader/grader.mjs +0 -6
  719. package/dist/lib/testing/storyboard/signer-grader/grader.mjs.map +1 -1
  720. package/dist/lib/testing/storyboard/signer-grader/index.mjs +0 -6
  721. package/dist/lib/testing/storyboard/signer-grader/index.mjs.map +1 -1
  722. package/dist/lib/testing/storyboard/signer-grader/types.mjs +0 -6
  723. package/dist/lib/testing/storyboard/strict-validation-hints.mjs +0 -6
  724. package/dist/lib/testing/storyboard/strict-validation-hints.mjs.map +1 -1
  725. package/dist/lib/testing/storyboard/task-map.mjs +0 -6
  726. package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
  727. package/dist/lib/testing/storyboard/test-kit.mjs +0 -6
  728. package/dist/lib/testing/storyboard/test-kit.mjs.map +1 -1
  729. package/dist/lib/testing/storyboard/types.mjs +0 -6
  730. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  731. package/dist/lib/testing/storyboard/validations.mjs +0 -6
  732. package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
  733. package/dist/lib/testing/storyboard/webhook-assertions.mjs +0 -6
  734. package/dist/lib/testing/storyboard/webhook-assertions.mjs.map +1 -1
  735. package/dist/lib/testing/storyboard/webhook-receiver.mjs +0 -6
  736. package/dist/lib/testing/storyboard/webhook-receiver.mjs.map +1 -1
  737. package/dist/lib/testing/stubs/governance-agent-stub.mjs +0 -6
  738. package/dist/lib/testing/stubs/governance-agent-stub.mjs.map +1 -1
  739. package/dist/lib/testing/stubs/index.mjs +0 -6
  740. package/dist/lib/testing/stubs/index.mjs.map +1 -1
  741. package/dist/lib/testing/test-controller.mjs +0 -6
  742. package/dist/lib/testing/test-controller.mjs.map +1 -1
  743. package/dist/lib/testing/test-helpers.mjs +0 -6
  744. package/dist/lib/testing/test-helpers.mjs.map +1 -1
  745. package/dist/lib/testing/types.mjs +0 -6
  746. package/dist/lib/types/adcp.mjs +0 -6
  747. package/dist/lib/types/adcp.mjs.map +1 -1
  748. package/dist/lib/types/asset-instances.mjs +0 -6
  749. package/dist/lib/types/compat.mjs +0 -6
  750. package/dist/lib/types/compat.mjs.map +1 -1
  751. package/dist/lib/types/core.generated.mjs +0 -6
  752. package/dist/lib/types/enums.generated.mjs +0 -6
  753. package/dist/lib/types/enums.generated.mjs.map +1 -1
  754. package/dist/lib/types/error-codes.mjs +0 -6
  755. package/dist/lib/types/error-codes.mjs.map +1 -1
  756. package/dist/lib/types/error-details.aliases.mjs +0 -6
  757. package/dist/lib/types/error-details.aliases.mjs.map +1 -1
  758. package/dist/lib/types/format-asset-slots.mjs +0 -6
  759. package/dist/lib/types/forward-compat-error-codes.mjs +0 -6
  760. package/dist/lib/types/forward-compat-error-codes.mjs.map +1 -1
  761. package/dist/lib/types/index.mjs +0 -6
  762. package/dist/lib/types/index.mjs.map +1 -1
  763. package/dist/lib/types/inline-enums.aliases.mjs +0 -6
  764. package/dist/lib/types/inline-enums.aliases.mjs.map +1 -1
  765. package/dist/lib/types/inline-enums.generated.mjs +0 -6
  766. package/dist/lib/types/inline-enums.generated.mjs.map +1 -1
  767. package/dist/lib/types/manifest.generated.mjs +0 -6
  768. package/dist/lib/types/manifest.generated.mjs.map +1 -1
  769. package/dist/lib/types/schemas.generated.mjs +0 -6
  770. package/dist/lib/types/schemas.generated.mjs.map +1 -1
  771. package/dist/lib/types/server-payload-aliases.mjs +0 -6
  772. package/dist/lib/types/server-payload.mjs +0 -6
  773. package/dist/lib/types/sync-rows.mjs +0 -6
  774. package/dist/lib/types/tools.generated.mjs +0 -6
  775. package/dist/lib/types/v2-5/index.mjs +0 -6
  776. package/dist/lib/types/v2-5/index.mjs.map +1 -1
  777. package/dist/lib/types/v2-5/tools.generated.mjs +0 -6
  778. package/dist/lib/types/v3-1-beta/index.mjs +0 -6
  779. package/dist/lib/types/v3-1-beta/index.mjs.map +1 -1
  780. package/dist/lib/types/v3-1-beta/tools.generated.mjs +0 -6
  781. package/dist/lib/types/wellknown-schemas.generated.mjs +0 -6
  782. package/dist/lib/types/wellknown-schemas.generated.mjs.map +1 -1
  783. package/dist/lib/upstream-recorder/constants.mjs +0 -6
  784. package/dist/lib/upstream-recorder/constants.mjs.map +1 -1
  785. package/dist/lib/upstream-recorder/index.mjs +0 -6
  786. package/dist/lib/upstream-recorder/index.mjs.map +1 -1
  787. package/dist/lib/upstream-recorder/recorder.mjs +0 -6
  788. package/dist/lib/upstream-recorder/recorder.mjs.map +1 -1
  789. package/dist/lib/upstream-recorder/types.mjs +0 -6
  790. package/dist/lib/upstream-recorder/types.mjs.map +1 -1
  791. package/dist/lib/utils/a2a-artifacts.mjs +0 -6
  792. package/dist/lib/utils/a2a-artifacts.mjs.map +1 -1
  793. package/dist/lib/utils/a2a-discovery.mjs +0 -6
  794. package/dist/lib/utils/a2a-discovery.mjs.map +1 -1
  795. package/dist/lib/utils/activation-key-builders.mjs +0 -6
  796. package/dist/lib/utils/activation-key-builders.mjs.map +1 -1
  797. package/dist/lib/utils/adcp-version-config.mjs +0 -6
  798. package/dist/lib/utils/adcp-version-config.mjs.map +1 -1
  799. package/dist/lib/utils/asset-builders.mjs +0 -6
  800. package/dist/lib/utils/asset-builders.mjs.map +1 -1
  801. package/dist/lib/utils/build-creative-return-builders.mjs +0 -6
  802. package/dist/lib/utils/build-creative-return-builders.mjs.map +1 -1
  803. package/dist/lib/utils/buyer-retry-policy.mjs +0 -6
  804. package/dist/lib/utils/buyer-retry-policy.mjs.map +1 -1
  805. package/dist/lib/utils/capabilities.mjs +0 -6
  806. package/dist/lib/utils/capabilities.mjs.map +1 -1
  807. package/dist/lib/utils/capability-rollups.mjs +0 -6
  808. package/dist/lib/utils/capability-rollups.mjs.map +1 -1
  809. package/dist/lib/utils/creative-adapter.mjs +0 -6
  810. package/dist/lib/utils/creative-adapter.mjs.map +1 -1
  811. package/dist/lib/utils/creative-delivery.mjs +0 -6
  812. package/dist/lib/utils/creative-delivery.mjs.map +1 -1
  813. package/dist/lib/utils/deprecation.mjs +0 -6
  814. package/dist/lib/utils/deprecation.mjs.map +1 -1
  815. package/dist/lib/utils/envelope-status-compat.mjs +0 -6
  816. package/dist/lib/utils/envelope-status-compat.mjs.map +1 -1
  817. package/dist/lib/utils/error-extraction.mjs +0 -6
  818. package/dist/lib/utils/error-extraction.mjs.map +1 -1
  819. package/dist/lib/utils/extract-result.mjs +0 -6
  820. package/dist/lib/utils/extract-result.mjs.map +1 -1
  821. package/dist/lib/utils/format-asset-slot-builders.mjs +0 -6
  822. package/dist/lib/utils/format-asset-slot-builders.mjs.map +1 -1
  823. package/dist/lib/utils/format-assets.mjs +0 -6
  824. package/dist/lib/utils/format-assets.mjs.map +1 -1
  825. package/dist/lib/utils/format-render-builders.mjs +0 -6
  826. package/dist/lib/utils/format-render-builders.mjs.map +1 -1
  827. package/dist/lib/utils/format-renders.mjs +0 -6
  828. package/dist/lib/utils/format-renders.mjs.map +1 -1
  829. package/dist/lib/utils/get-products-cache-scope.mjs +0 -6
  830. package/dist/lib/utils/get-products-cache-scope.mjs.map +1 -1
  831. package/dist/lib/utils/glob.mjs +0 -6
  832. package/dist/lib/utils/glob.mjs.map +1 -1
  833. package/dist/lib/utils/global-async-local-storage.mjs +0 -6
  834. package/dist/lib/utils/global-async-local-storage.mjs.map +1 -1
  835. package/dist/lib/utils/idempotency.mjs +0 -6
  836. package/dist/lib/utils/idempotency.mjs.map +1 -1
  837. package/dist/lib/utils/index.mjs +0 -6
  838. package/dist/lib/utils/index.mjs.map +1 -1
  839. package/dist/lib/utils/jcs.mjs +0 -6
  840. package/dist/lib/utils/jcs.mjs.map +1 -1
  841. package/dist/lib/utils/json-depth.mjs +0 -6
  842. package/dist/lib/utils/json-depth.mjs.map +1 -1
  843. package/dist/lib/utils/logger.mjs +0 -6
  844. package/dist/lib/utils/logger.mjs.map +1 -1
  845. package/dist/lib/utils/media-buy-delivery-notification-builders.mjs +0 -6
  846. package/dist/lib/utils/media-buy-delivery-notification-builders.mjs.map +1 -1
  847. package/dist/lib/utils/media-buy-status.mjs +0 -6
  848. package/dist/lib/utils/media-buy-status.mjs.map +1 -1
  849. package/dist/lib/utils/pagination.mjs +0 -6
  850. package/dist/lib/utils/pagination.mjs.map +1 -1
  851. package/dist/lib/utils/preview-creative-builders.mjs +0 -6
  852. package/dist/lib/utils/preview-creative-builders.mjs.map +1 -1
  853. package/dist/lib/utils/preview-normalizer.mjs +0 -6
  854. package/dist/lib/utils/preview-normalizer.mjs.map +1 -1
  855. package/dist/lib/utils/preview-utils.mjs +0 -6
  856. package/dist/lib/utils/preview-utils.mjs.map +1 -1
  857. package/dist/lib/utils/pricing-adapter.mjs +0 -6
  858. package/dist/lib/utils/pricing-adapter.mjs.map +1 -1
  859. package/dist/lib/utils/probe-policy.mjs +0 -6
  860. package/dist/lib/utils/probe-policy.mjs.map +1 -1
  861. package/dist/lib/utils/protocol-detection.mjs +0 -6
  862. package/dist/lib/utils/protocol-detection.mjs.map +1 -1
  863. package/dist/lib/utils/redact-secrets.mjs +0 -6
  864. package/dist/lib/utils/redact-secrets.mjs.map +1 -1
  865. package/dist/lib/utils/redis-default-prefix-warn.mjs +0 -6
  866. package/dist/lib/utils/redis-default-prefix-warn.mjs.map +1 -1
  867. package/dist/lib/utils/render-builders.mjs +0 -6
  868. package/dist/lib/utils/render-builders.mjs.map +1 -1
  869. package/dist/lib/utils/request-normalizer.mjs +0 -6
  870. package/dist/lib/utils/request-normalizer.mjs.map +1 -1
  871. package/dist/lib/utils/response-schemas.mjs +0 -6
  872. package/dist/lib/utils/response-schemas.mjs.map +1 -1
  873. package/dist/lib/utils/response-unwrapper.mjs +0 -6
  874. package/dist/lib/utils/response-unwrapper.mjs.map +1 -1
  875. package/dist/lib/utils/retry.mjs +0 -6
  876. package/dist/lib/utils/retry.mjs.map +1 -1
  877. package/dist/lib/utils/signal-discovery-helpers.mjs +0 -6
  878. package/dist/lib/utils/signal-discovery-helpers.mjs.map +1 -1
  879. package/dist/lib/utils/signal-id-builders.mjs +0 -6
  880. package/dist/lib/utils/signal-id-builders.mjs.map +1 -1
  881. package/dist/lib/utils/sync-creatives-adapter.mjs +0 -6
  882. package/dist/lib/utils/sync-creatives-adapter.mjs.map +1 -1
  883. package/dist/lib/utils/task-state.mjs +0 -6
  884. package/dist/lib/utils/task-state.mjs.map +1 -1
  885. package/dist/lib/utils/tool-request-schemas.mjs +0 -6
  886. package/dist/lib/utils/tool-request-schemas.mjs.map +1 -1
  887. package/dist/lib/utils/typeGuards.mjs +0 -6
  888. package/dist/lib/utils/typeGuards.mjs.map +1 -1
  889. package/dist/lib/utils/union-errors.mjs +0 -6
  890. package/dist/lib/utils/union-errors.mjs.map +1 -1
  891. package/dist/lib/utils/validate-user-agent.mjs +0 -6
  892. package/dist/lib/utils/validate-user-agent.mjs.map +1 -1
  893. package/dist/lib/v2/format-schema/fetch.mjs +0 -6
  894. package/dist/lib/v2/format-schema/fetch.mjs.map +1 -1
  895. package/dist/lib/v2/format-schema/index.mjs +0 -6
  896. package/dist/lib/v2/format-schema/index.mjs.map +1 -1
  897. package/dist/lib/v2/format-schema/regex-safety.mjs +0 -6
  898. package/dist/lib/v2/format-schema/regex-safety.mjs.map +1 -1
  899. package/dist/lib/v2/format-schema/resolver.mjs +7 -8
  900. package/dist/lib/v2/format-schema/resolver.mjs.map +1 -1
  901. package/dist/lib/v2/format-schema/sandbox-refs.mjs +0 -6
  902. package/dist/lib/v2/format-schema/sandbox-refs.mjs.map +1 -1
  903. package/dist/lib/v2/projection/augment-response.mjs +0 -6
  904. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  905. package/dist/lib/v2/projection/builders.mjs +0 -6
  906. package/dist/lib/v2/projection/builders.mjs.map +1 -1
  907. package/dist/lib/v2/projection/cache-versions.mjs +0 -6
  908. package/dist/lib/v2/projection/cache-versions.mjs.map +1 -1
  909. package/dist/lib/v2/projection/canonical-properties.mjs +5 -6
  910. package/dist/lib/v2/projection/canonical-properties.mjs.map +1 -1
  911. package/dist/lib/v2/projection/catalog.mjs +5 -6
  912. package/dist/lib/v2/projection/catalog.mjs.map +1 -1
  913. package/dist/lib/v2/projection/constants.mjs +0 -6
  914. package/dist/lib/v2/projection/constants.mjs.map +1 -1
  915. package/dist/lib/v2/projection/index.mjs +0 -6
  916. package/dist/lib/v2/projection/index.mjs.map +1 -1
  917. package/dist/lib/v2/projection/registry.mjs +5 -6
  918. package/dist/lib/v2/projection/registry.mjs.map +1 -1
  919. package/dist/lib/v2/projection/types.mjs +0 -6
  920. package/dist/lib/v2/projection/v1-to-v2.mjs +0 -6
  921. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  922. package/dist/lib/v2/projection/v2-to-v1.mjs +0 -6
  923. package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
  924. package/dist/lib/v2/projection/write-side.mjs +0 -6
  925. package/dist/lib/v2/projection/write-side.mjs.map +1 -1
  926. package/dist/lib/v2/publisher-catalog/formats.mjs +0 -6
  927. package/dist/lib/v2/publisher-catalog/formats.mjs.map +1 -1
  928. package/dist/lib/v2/publisher-catalog/index.mjs +0 -6
  929. package/dist/lib/v2/publisher-catalog/index.mjs.map +1 -1
  930. package/dist/lib/validation/client-hooks.mjs +0 -6
  931. package/dist/lib/validation/client-hooks.mjs.map +1 -1
  932. package/dist/lib/validation/hints.mjs +0 -6
  933. package/dist/lib/validation/hints.mjs.map +1 -1
  934. package/dist/lib/validation/index.mjs +0 -6
  935. package/dist/lib/validation/index.mjs.map +1 -1
  936. package/dist/lib/validation/schema-errors.mjs +0 -6
  937. package/dist/lib/validation/schema-errors.mjs.map +1 -1
  938. package/dist/lib/validation/schema-loader.mjs +5 -6
  939. package/dist/lib/validation/schema-loader.mjs.map +1 -1
  940. package/dist/lib/validation/schema-validator.mjs +0 -6
  941. package/dist/lib/validation/schema-validator.mjs.map +1 -1
  942. package/dist/lib/validation/sync-creatives.mjs +0 -6
  943. package/dist/lib/validation/sync-creatives.mjs.map +1 -1
  944. package/dist/lib/version.d.mts +3 -3
  945. package/dist/lib/version.d.ts +3 -3
  946. package/dist/lib/version.js +3 -3
  947. package/dist/lib/version.js.map +1 -1
  948. package/dist/lib/version.mjs +3 -9
  949. package/dist/lib/version.mjs.map +1 -1
  950. package/dist/lib/webhooks/index.mjs +0 -6
  951. package/dist/lib/webhooks/index.mjs.map +1 -1
  952. package/dist/lib/wholesale-feed-sync/index.mjs +0 -6
  953. package/dist/lib/wholesale-feed-sync/index.mjs.map +1 -1
  954. package/dist/lib/wholesale-feed-sync/sync.mjs +0 -6
  955. package/dist/lib/wholesale-feed-sync/sync.mjs.map +1 -1
  956. package/dist/lib/wholesale-feed-sync/types.mjs +0 -6
  957. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +0 -6
  958. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs.map +1 -1
  959. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/core/ADCPMultiAgentClient.ts"],"sourcesContent":["// Multi-agent orchestrator providing simple, intuitive API\n\nimport type { AgentConfig } from '../types';\nimport { AgentClient, type V2AugmentedGetProductsResponse } from './AgentClient';\nimport type { SingleAgentClientConfig } from './SingleAgentClient';\nimport { ADCP_VERSION } from '../version';\nimport { resolveAdcpVersion } from '../utils/adcp-version-config';\nimport { ConfigurationManager } from './ConfigurationManager';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from './CreativeAgentClient';\nimport type { CreativeFormat } from './CreativeAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo } from './ConversationTypes';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesRequest,\n ListCreativesResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\n\n/**\n * Collection of agent clients for parallel operations across multiple AdCP agents.\n *\n * Provides methods to execute AdCP operations (get_products, create_media_buy, etc.)\n * across multiple agents simultaneously using Promise.all().\n *\n * @example\n * ```typescript\n * const collection = new AgentCollection([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com/mcp/', protocol: 'mcp' }\n * ]);\n *\n * // Execute getProducts across all agents\n * const results = await collection.getProducts({ brief: 'Coffee brands' });\n * results.forEach((result, i) => {\n * console.log(`Agent ${i}: ${result.status}`);\n * });\n * ```\n *\n * @public\n */\nexport class AgentCollection {\n private clients: Map<string, AgentClient> = new Map();\n\n constructor(\n private agents: AgentConfig[],\n private config: SingleAgentClientConfig = {}\n ) {\n for (const agent of agents) {\n this.clients.set(agent.id, new AgentClient(agent, config));\n }\n }\n\n private async executeAllSettled<T>(\n operation: (client: AgentClient) => Promise<TaskResult<T>>\n ): Promise<TaskResult<T>[]> {\n const clients = Array.from(this.clients.values());\n const results = await Promise.allSettled(clients.map(client => operation(client)));\n\n return results.map((result, index) => {\n if (result.status === 'fulfilled') {\n return result.value;\n }\n const client = clients[index]!;\n return {\n success: false as const,\n status: 'failed' as const,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n metadata: {\n taskId: '',\n taskName: '',\n agent: client.getAgent(),\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status: 'failed' as const,\n },\n };\n });\n }\n\n // ====== PARALLEL TASK EXECUTION ======\n\n /**\n * Execute getProducts on all agents in parallel.\n *\n * Each agent's response is auto-augmented with v2 `format_options[]`\n * by default — see `AgentClient.getProducts()`. Pass\n * `{ project: false }` to opt out across all agents in this fan-out.\n */\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: true }\n ): Promise<TaskResult<V2AugmentedGetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project: false }\n ): Promise<TaskResult<GetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: boolean }\n ): Promise<TaskResult<GetProductsResponse | V2AugmentedGetProductsResponse>[]> {\n // Discriminate on the literal `project` flag so the per-client call\n // hits the matching overload — TS can't narrow `boolean` to the\n // overload's literal `true | undefined` / `false` shapes on its own.\n if (options?.project === false) {\n const optsOff = options as TaskOptions & { project: false };\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOff));\n }\n const optsOn = options as (TaskOptions & { project?: true }) | undefined;\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOn));\n }\n\n /**\n * Execute listCreativeFormats on all agents in parallel\n */\n async listCreativeFormats(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>[]> {\n return this.executeAllSettled(client => client.listCreativeFormats(params, inputHandler, options));\n }\n\n /**\n * Execute createMediaBuy on all agents in parallel\n * Note: This might not make sense for all use cases, but provided for completeness\n */\n async createMediaBuy(\n params: MutatingRequestInput<CreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.createMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute updateMediaBuy on all agents in parallel\n */\n async updateMediaBuy(\n params: MutatingRequestInput<UpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.updateMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute syncCreatives on all agents in parallel\n */\n async syncCreatives(\n params: MutatingRequestInput<SyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncCreativesResponse>[]> {\n return this.executeAllSettled(client => client.syncCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute listCreatives on all agents in parallel\n */\n async listCreatives(\n params: ListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativesResponse>[]> {\n return this.executeAllSettled(client => client.listCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute getMediaBuyDelivery on all agents in parallel\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuyDeliveryResponse>[]> {\n return this.executeAllSettled(client => client.getMediaBuyDelivery(params, inputHandler, options));\n }\n\n /**\n * Execute providePerformanceFeedback on all agents in parallel\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>[]> {\n return this.executeAllSettled(client => client.providePerformanceFeedback(params, inputHandler, options));\n }\n\n /**\n * Execute getSignals on all agents in parallel\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>[]> {\n return this.executeAllSettled(client => client.getSignals(params, inputHandler, options));\n }\n\n /**\n * Execute activateSignal on all agents in parallel\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>[]> {\n return this.executeAllSettled(client => client.activateSignal(params, inputHandler, options));\n }\n\n // ====== COLLECTION UTILITIES ======\n\n /**\n * Get individual agent client\n */\n getAgent(agentId: string): AgentClient {\n const client = this.clients.get(agentId);\n if (!client) {\n throw new Error(\n `Agent '${agentId}' not found in collection. Available: ${Array.from(this.clients.keys()).join(', ')}`\n );\n }\n return client;\n }\n\n /**\n * Get all agent clients\n */\n getAllAgents(): AgentClient[] {\n return Array.from(this.clients.values());\n }\n\n /**\n * Get agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Get agent count\n */\n get count(): number {\n return this.clients.size;\n }\n\n /**\n * Filter agents by a condition\n */\n filter(predicate: (agent: AgentClient) => boolean): AgentClient[] {\n return Array.from(this.clients.values()).filter(predicate);\n }\n\n /**\n * Map over all agents\n */\n map<T>(mapper: (agent: AgentClient) => T): T[] {\n return Array.from(this.clients.values()).map(mapper);\n }\n\n /**\n * Execute a custom function on all agents in parallel.\n * Returns PromiseSettledResult array so callers can handle partial failures.\n */\n async execute<T>(executor: (agent: AgentClient) => Promise<T>): Promise<PromiseSettledResult<T>[]> {\n const promises = Array.from(this.clients.values()).map(executor);\n return Promise.allSettled(promises);\n }\n}\n\n/**\n * Main multi-agent AdCP client providing unified access to multiple advertising protocol agents.\n *\n * This is the **primary entry point** for the @adcp/sdk library. It provides flexible\n * access patterns for working with one or multiple AdCP agents (MCP or A2A protocols).\n *\n * ## Key Features\n *\n * - **Single agent access** via `agent(id)` - for individual operations\n * - **Multi-agent access** via `agents([ids])` - for parallel execution across specific agents\n * - **Broadcast access** via `allAgents()` - for parallel execution across all configured agents\n * - **Auto-configuration** via static factory methods (`fromConfig()`, `fromEnv()`, `fromFile()`)\n * - **Full type safety** - all AdCP request/response types are strongly typed\n * - **Protocol agnostic** - works seamlessly with both MCP and A2A agents\n *\n * ## Basic Usage\n *\n * @example Single agent operation\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'mcp' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'a2a' }\n * ]);\n *\n * // Execute operation on single agent\n * const result = await client.agent('agent1').getProducts({\n * brief: 'Coffee brands for premium audience'\n * });\n *\n * if (result.status === 'completed') {\n * console.log('Products:', result.data.products);\n * }\n * ```\n *\n * @example Multi-agent parallel execution\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['agent1', 'agent2']).getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Execute across all agents\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Process results from all agents\n * allResults.forEach((result, i) => {\n * console.log(`Agent ${client.agentIds[i]}: ${result.status}`);\n * if (result.status === 'completed') {\n * console.log(` Products: ${result.data.products.length}`);\n * }\n * });\n * ```\n *\n * @example Auto-configuration from environment\n * ```typescript\n * // Load agents from environment variables or config files\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Or from environment only\n * const client = ADCPMultiAgentClient.fromEnv();\n *\n * // Or from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n * ```\n *\n * ## Available Operations\n *\n * All standard AdCP operations are available:\n * - `getProducts()` - Discover advertising products\n * - `listCreativeFormats()` - Get supported creative formats\n * - `createMediaBuy()` - Create new media buy\n * - `updateMediaBuy()` - Update existing media buy\n * - `syncCreatives()` - Upload/sync creative assets\n * - `listCreatives()` - List creative assets\n * - `getMediaBuyDelivery()` - Get delivery performance\n * - `getSignals()` - Get audience signals\n * - `activateSignal()` - Activate audience signals\n * - `providePerformanceFeedback()` - Send performance feedback\n *\n * @see {@link AgentClient} for single-agent operations\n * @see {@link AgentCollection} for multi-agent parallel operations\n * @see {@link SingleAgentClientConfig} for configuration options\n *\n * @public\n */\nexport class ADCPMultiAgentClient {\n private agentClients: Map<string, AgentClient> = new Map();\n private readonly resolvedAdcpVersion: string;\n\n constructor(\n agentConfigs: AgentConfig[] = [],\n private config: SingleAgentClientConfig = {}\n ) {\n // Validates `config.adcpVersion` once for the orchestrator; per-agent\n // AgentClients will re-validate via SingleAgentClient (cheap pure check)\n // and surface the same ConfigurationError if the pin is invalid.\n this.resolvedAdcpVersion = resolveAdcpVersion(config.adcpVersion);\n\n for (const agentConfig of agentConfigs) {\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, config));\n }\n }\n\n /**\n * Returns the AdCP protocol version this multi-agent client speaks. The\n * value is shared across every per-agent client created by this orchestrator\n * and originates from the constructor `config.adcpVersion`. See\n * {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.resolvedAdcpVersion;\n }\n\n // ====== FACTORY METHODS FOR EASY SETUP ======\n\n /**\n * Create client by auto-discovering agent configuration\n *\n * Automatically loads agents from:\n * 1. Environment variables (SALES_AGENTS_CONFIG, ADCP_AGENTS_CONFIG, etc.)\n * 2. Config files (adcp.config.json, adcp.json, .adcp.json, agents.json)\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with discovered agents\n *\n * @example\n * ```typescript\n * // Simplest possible setup - auto-discovers configuration\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Use with options\n * const client = ADCPMultiAgentClient.fromConfig({\n * debug: true,\n * defaultTimeout: 60000\n * });\n * ```\n */\n static fromConfig(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgents();\n\n if (agents.length === 0) {\n console.log('\\n' + ConfigurationManager.getConfigurationHelp());\n throw new Error('No ADCP agents configured. See configuration help above.');\n }\n\n // Validate configuration\n ConfigurationManager.validateAgentsConfig(agents);\n\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from environment variables only\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with environment-loaded agents\n *\n * @example\n * ```typescript\n * // Load agents from SALES_AGENTS_CONFIG environment variable\n * const client = ADCPMultiAgentClient.fromEnv();\n * ```\n */\n static fromEnv(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromEnv();\n\n if (agents.length === 0) {\n const envVars = ConfigurationManager.getEnvVars();\n throw new Error(`No agents found in environment variables. ` + `Please set one of: ${envVars.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from a specific config file\n *\n * @param configPath - Path to configuration file\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with file-loaded agents\n *\n * @example\n * ```typescript\n * // Load from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n *\n * // Load from default locations\n * const client = ADCPMultiAgentClient.fromFile();\n * ```\n */\n static fromFile(configPath?: string, config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromConfig(configPath);\n\n if (agents.length === 0) {\n const searchPaths = configPath ? [configPath] : ConfigurationManager.getConfigPaths();\n throw new Error(`No agents found in config file(s). Searched: ${searchPaths.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create a simple client with minimal configuration\n *\n * @param agentUrl - Single agent URL\n * @param options - Optional agent and client configuration\n * @returns ADCPMultiAgentClient instance with single agent\n *\n * @example\n * ```typescript\n * // Simplest possible setup for single agent\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com');\n *\n * // With options\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com', {\n * agentName: 'My Agent',\n * protocol: 'mcp',\n * authToken: 'my-token',\n * debug: true\n * });\n * ```\n */\n static simple(\n agentUrl: string,\n options: {\n agentId?: string;\n agentName?: string;\n protocol?: 'mcp' | 'a2a';\n authToken?: string;\n debug?: boolean;\n timeout?: number;\n } = {}\n ): ADCPMultiAgentClient {\n const {\n agentId = 'default-agent',\n agentName = 'Default Agent',\n protocol = 'mcp',\n authToken,\n debug = false,\n timeout,\n } = options;\n\n const agent: AgentConfig = {\n id: agentId,\n name: agentName,\n agent_uri: agentUrl,\n protocol,\n auth_token: authToken,\n };\n\n ConfigurationManager.validateAgentConfig(agent);\n\n return new ADCPMultiAgentClient([agent], {\n debug,\n workingTimeout: timeout,\n });\n }\n\n // ====== SINGLE AGENT ACCESS ======\n\n /**\n * Get a single agent client for individual operations.\n *\n * This is the primary method for executing operations on a specific agent.\n * Returns an {@link AgentClient} instance that provides all AdCP operations.\n *\n * @param agentId - The unique identifier of the agent to retrieve\n * @returns Agent client instance for the specified agent\n * @throws {Error} If agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'sales_agent', agent_uri: 'https://sales.example.com', protocol: 'a2a' }\n * ]);\n *\n * // Get specific agent and execute operation\n * const agent = client.agent('sales_agent');\n * const result = await agent.getProducts({ brief: 'Premium coffee brands' });\n * ```\n *\n * @see {@link AgentClient} for available operations\n */\n agent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n // ====== MULTI-AGENT ACCESS ======\n\n /**\n * Get multiple specific agents for parallel operations.\n *\n * Returns an {@link AgentCollection} that executes operations across the specified\n * agents in parallel using Promise.all(). Useful when you want to query specific\n * agents simultaneously and compare results.\n *\n * @param agentIds - Array of agent IDs to include in the collection\n * @returns Agent collection for parallel operations across specified agents\n * @throws {Error} If any agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['sales_agent_1', 'sales_agent_2']).getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Process parallel results\n * results.forEach((result, i) => {\n * if (result.status === 'completed') {\n * console.log(`Agent ${i + 1}: ${result.data.products.length} products`);\n * }\n * });\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n agents(agentIds: string[]): AgentCollection {\n const agentConfigs: AgentConfig[] = [];\n\n for (const agentId of agentIds) {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n agentConfigs.push(agent.getAgent());\n }\n\n return new AgentCollection(agentConfigs, this.config);\n }\n\n /**\n * Get all configured agents for broadcast operations.\n *\n * Returns an {@link AgentCollection} containing all agents in the client configuration.\n * Executes operations across all agents in parallel, useful for market research,\n * price comparison, or discovering capabilities across your entire agent network.\n *\n * @returns Agent collection for parallel operations across all configured agents\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'mcp' },\n * { id: 'agent3', agent_uri: 'https://agent3.com', protocol: 'a2a' }\n * ]);\n *\n * // Query all agents simultaneously\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Find best options across all agents\n * const successfulResults = allResults.filter(r => r.status === 'completed');\n * console.log(`Got products from ${successfulResults.length} agents`);\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n allAgents(): AgentCollection {\n if (this.agentClients.size === 0) {\n throw new Error('No agents configured. Add agents to the client first.');\n }\n\n const agentConfigs = Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n return new AgentCollection(agentConfigs, this.config);\n }\n\n // ====== AGENT MANAGEMENT ======\n\n /**\n * Add an agent to the client\n *\n * @param agentConfig - Agent configuration to add\n * @throws Error if agent ID already exists\n */\n addAgent(agentConfig: AgentConfig): void {\n if (this.agentClients.has(agentConfig.id)) {\n throw new Error(`Agent with ID '${agentConfig.id}' already exists`);\n }\n\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, this.config));\n }\n\n /**\n * Remove an agent from the client\n *\n * @param agentId - ID of agent to remove\n * @returns True if agent was removed, false if not found\n */\n removeAgent(agentId: string): boolean {\n return this.agentClients.delete(agentId);\n }\n\n /**\n * Get individual agent client by ID\n *\n * @param agentId - ID of agent to retrieve\n * @returns AgentClient instance\n * @throws Error if agent not found\n */\n getAgent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n /**\n * Check if an agent exists\n */\n hasAgent(agentId: string): boolean {\n return this.agentClients.has(agentId);\n }\n\n /**\n * Get all configured agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.agentClients.keys());\n }\n\n /**\n * Get all agent configurations\n */\n getAgentConfigs(): AgentConfig[] {\n return Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n }\n\n /**\n * Get count of configured agents\n */\n get agentCount(): number {\n return this.agentClients.size;\n }\n\n // ====== UTILITY METHODS ======\n\n /**\n * Filter agents by protocol\n */\n getAgentsByProtocol(protocol: 'mcp' | 'a2a'): AgentCollection {\n const filteredConfigs = Array.from(this.agentClients.values())\n .filter(agent => agent.getProtocol() === protocol)\n .map(agent => agent.getAgent());\n\n return new AgentCollection(filteredConfigs, this.config);\n }\n\n /**\n * Find agents that support a specific task\n * This is a placeholder - in a full implementation, you'd query agent capabilities\n */\n findAgentsForTask(taskName: string): AgentCollection {\n // For now, assume all agents support all tasks\n return this.allAgents();\n }\n\n /**\n * Get all active tasks across all agents\n */\n getAllActiveTasks() {\n const allTasks = [];\n for (const agent of this.agentClients.values()) {\n allTasks.push(...agent.getActiveTasks());\n }\n return allTasks;\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATIONS ======\n\n /**\n * Get all tasks from all agents with detailed information\n *\n * @returns Promise resolving to array of all tasks across agents\n *\n * @example\n * ```typescript\n * const allTasks = await client.listAllTasks();\n * console.log(`Total active tasks: ${allTasks.length}`);\n * ```\n */\n async listAllTasks(): Promise<TaskInfo[]> {\n const taskPromises = Array.from(this.agentClients.values()).map(agent => agent.listTasks());\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get tasks for specific agents\n *\n * @param agentIds - Array of agent IDs to get tasks for\n * @returns Promise resolving to array of tasks from specified agents\n */\n async listTasksForAgents(agentIds: string[]): Promise<TaskInfo[]> {\n const taskPromises = agentIds.map(agentId => {\n const agent = this.agentClients.get(agentId);\n return agent ? agent.listTasks() : Promise.resolve([]);\n });\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get task information by ID from any agent\n *\n * @param taskId - ID of the task to find\n * @returns Promise resolving to task information or null if not found\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n for (const agent of this.agentClients.values()) {\n const taskInfo = await agent.getTaskInfo(taskId);\n if (taskInfo) {\n return taskInfo;\n }\n }\n return null;\n }\n\n /**\n * Subscribe to task events from all agents\n *\n * @param callbacks - Event callbacks for different task events\n * @returns Unsubscribe function that removes all subscriptions\n *\n * @example\n * ```typescript\n * const unsubscribe = client.onTaskEvents({\n * onTaskCompleted: (task) => {\n * console.log(`Task ${task.taskName} completed!`);\n * },\n * onTaskFailed: (task, error) => {\n * console.error(`Task ${task.taskName} failed:`, error);\n * }\n * });\n * ```\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskEvents(callbacks);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Subscribe to task updates from all agents\n *\n * @param callback - Function to call when any task status changes\n * @returns Unsubscribe function\n */\n onAnyTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskUpdate(callback);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Register webhooks for all agents\n *\n * @param webhookUrl - Base webhook URL (will append agent ID)\n * @param taskTypes - Optional array of task types to watch\n */\n async registerWebhooksForAll(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent =>\n agent.registerWebhook(`${webhookUrl}?agentId=${agent.getAgentId()}`, taskTypes)\n );\n await Promise.allSettled(promises);\n }\n\n /**\n * Unregister webhooks for all agents\n */\n async unregisterAllWebhooks(): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent => agent.unregisterWebhook());\n await Promise.allSettled(promises);\n }\n\n /**\n * Get count of active tasks by status\n *\n * @returns Promise resolving to object with counts by status\n *\n * @example\n * ```typescript\n * const counts = await client.getTaskCountsByStatus();\n * console.log(`Working: ${counts.working}, Completed: ${counts.completed}`);\n * ```\n */\n async getTaskCountsByStatus(): Promise<Record<string, number>> {\n const tasks = await this.listAllTasks();\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n counts[task.status] = (counts[task.status] || 0) + 1;\n }\n\n return counts;\n }\n\n // ====== WEBHOOK METHODS ======\n\n /**\n * Generate webhook URL for a specific agent, task type, and operation\n *\n * @param agentId - ID of the agent\n * @param taskType - Type of task (e.g., 'get_products', 'media_buy_delivery')\n * @param operationId - Operation ID for this request\n * @returns Full webhook URL with macros replaced\n *\n * @example\n * ```typescript\n * const webhookUrl = client.getWebhookUrl('agent1', 'sync_creatives', 'op_123');\n * // Returns: https://myapp.com/webhook/sync_creatives/agent1/op_123\n * ```\n */\n getWebhookUrl(agentId: string, taskType: string, operationId: string): string {\n const agent = this.getAgent(agentId);\n return agent.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Handle webhook from any agent (async task completion or notifications)\n *\n * Automatically routes webhook to the correct agent based on agent_id in payload.\n *\n * @param payload - Webhook payload from agent (must contain agent_id or operation_id)\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @returns Whether webhook was handled successfully\n *\n * @example\n * ```typescript\n * import { verifyWebhookRequest } from '@adcp/sdk/webhooks';\n *\n * app.post('/webhook', async (req, res) => {\n * try {\n * const check = verifyWebhookRequest({\n * rawBody: req.rawBody,\n * headers: req.headers,\n * globalSecret: process.env.WEBHOOK_SECRET,\n * });\n * if (!check.ok) return res.status(401).json({ error: check.reason });\n *\n * const handled = await client.handleWebhook(\n * req.body,\n * req.params.taskType,\n * req.params.operationId,\n * check.signature,\n * check.timestamp,\n * req.rawBody\n * );\n * res.status(200).json({ received: handled });\n * } catch (error) {\n * res.status(401).json({ error: error.message });\n * }\n * });\n * ```\n */\n async handleWebhook(\n payload: any,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n // Extract agent ID from payload\n // Webhook payloads include agent_id or we can infer from operation_id pattern\n const agentId = payload.agent_id || this.inferAgentIdFromPayload(payload);\n\n if (!agentId) {\n throw new Error('Cannot determine agent ID from webhook payload. Payload must contain agent_id or operation_id.');\n }\n\n const agent = this.getAgent(agentId);\n return agent.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Infer agent ID from webhook payload when not explicitly provided\n *\n * Looks for patterns in operation_id or context_id that may contain agent information\n */\n private inferAgentIdFromPayload(payload: any): string | null {\n // Try to extract from operation_id pattern (e.g., \"delivery_report_agent1_2024-01\")\n if (payload.operation_id && typeof payload.operation_id === 'string') {\n const dateMatch = payload.operation_id.match(/_(\\d{4}-\\d{2})$/);\n if (dateMatch) {\n const prefix = payload.operation_id.slice(0, -dateMatch[0].length);\n const lastUnderscore = prefix.lastIndexOf('_');\n if (lastUnderscore >= 0) {\n const candidateId = prefix.slice(lastUnderscore + 1);\n if (candidateId && this.hasAgent(candidateId)) {\n return candidateId;\n }\n }\n }\n }\n\n // Try to extract from context_id if it contains agent reference\n if (payload.context_id && typeof payload.context_id === 'string') {\n for (const agentId of this.getAgentIds()) {\n if (payload.context_id.includes(agentId)) {\n return agentId;\n }\n }\n }\n\n return null;\n }\n\n // ====== CREATIVE AGENT OPERATIONS ======\n\n /**\n * Create a creative agent client\n *\n * @param agentUrl - URL of the creative agent\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @param authToken - Optional authentication token\n * @returns CreativeAgentClient instance\n *\n * @example\n * ```typescript\n * // Use standard creative agent\n * const creativeAgent = client.createCreativeAgent(\n * 'https://creative.adcontextprotocol.org/mcp'\n * );\n *\n * // List formats\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n createCreativeAgent(agentUrl: string, protocol: 'mcp' | 'a2a' = 'mcp', authToken?: string): CreativeAgentClient {\n return new CreativeAgentClient({\n agentUrl,\n protocol,\n authToken,\n ...this.config,\n });\n }\n\n /**\n * Get the standard AdCP creative agent\n *\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @returns CreativeAgentClient instance for standard agent\n *\n * @example\n * ```typescript\n * const creativeAgent = client.getStandardCreativeAgent();\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n getStandardCreativeAgent(protocol: 'mcp' | 'a2a' = 'mcp'): CreativeAgentClient {\n const agentUrl =\n protocol === 'mcp' ? STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE : STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE_A2A;\n\n return this.createCreativeAgent(agentUrl, protocol);\n }\n\n /**\n * Discover creative formats from standard creative agent\n *\n * Convenience method to quickly get formats from the standard AdCP creative agent\n *\n * @returns Promise resolving to array of creative formats\n *\n * @example\n * ```typescript\n * const formats = await client.discoverFormats();\n *\n * // Find specific format\n * const banner = formats.find(f => f.format_id.id === 'display_300x250_image');\n * ```\n */\n async discoverFormats(): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.listFormats();\n }\n\n /**\n * Find creative formats by dimensions\n *\n * @param width - Width in pixels\n * @param height - Height in pixels\n * @returns Promise resolving to matching formats\n *\n * @example\n * ```typescript\n * // Find all 300x250 formats\n * const mediumRectangles = await client.findFormatsByDimensions(300, 250);\n * ```\n */\n async findFormatsByDimensions(width: number, height: number): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.findByDimensions(width, height);\n }\n}\n\n/**\n * Factory function to create a multi-agent ADCP client\n *\n * @param agents - Array of agent configurations\n * @param config - Client configuration\n * @returns Configured ADCPMultiAgentClient instance\n */\nexport function createADCPMultiAgentClient(\n agents: AgentConfig[],\n config?: SingleAgentClientConfig\n): ADCPMultiAgentClient {\n return new ADCPMultiAgentClient(agents, config);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/core/ADCPMultiAgentClient.ts"],"sourcesContent":["// Multi-agent orchestrator providing simple, intuitive API\n\nimport type { AgentConfig } from '../types';\nimport { AgentClient, type V2AugmentedGetProductsResponse } from './AgentClient';\nimport type { SingleAgentClientConfig } from './SingleAgentClient';\nimport { ADCP_VERSION } from '../version';\nimport { resolveAdcpVersion } from '../utils/adcp-version-config';\nimport { ConfigurationManager } from './ConfigurationManager';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from './CreativeAgentClient';\nimport type { CreativeFormat } from './CreativeAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo } from './ConversationTypes';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesRequest,\n ListCreativesResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\n\n/**\n * Collection of agent clients for parallel operations across multiple AdCP agents.\n *\n * Provides methods to execute AdCP operations (get_products, create_media_buy, etc.)\n * across multiple agents simultaneously using Promise.all().\n *\n * @example\n * ```typescript\n * const collection = new AgentCollection([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com/mcp/', protocol: 'mcp' }\n * ]);\n *\n * // Execute getProducts across all agents\n * const results = await collection.getProducts({ brief: 'Coffee brands' });\n * results.forEach((result, i) => {\n * console.log(`Agent ${i}: ${result.status}`);\n * });\n * ```\n *\n * @public\n */\nexport class AgentCollection {\n private clients: Map<string, AgentClient> = new Map();\n\n constructor(\n private agents: AgentConfig[],\n private config: SingleAgentClientConfig = {}\n ) {\n for (const agent of agents) {\n this.clients.set(agent.id, new AgentClient(agent, config));\n }\n }\n\n private async executeAllSettled<T>(\n operation: (client: AgentClient) => Promise<TaskResult<T>>\n ): Promise<TaskResult<T>[]> {\n const clients = Array.from(this.clients.values());\n const results = await Promise.allSettled(clients.map(client => operation(client)));\n\n return results.map((result, index) => {\n if (result.status === 'fulfilled') {\n return result.value;\n }\n const client = clients[index]!;\n return {\n success: false as const,\n status: 'failed' as const,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n metadata: {\n taskId: '',\n taskName: '',\n agent: client.getAgent(),\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status: 'failed' as const,\n },\n };\n });\n }\n\n // ====== PARALLEL TASK EXECUTION ======\n\n /**\n * Execute getProducts on all agents in parallel.\n *\n * Each agent's response is auto-augmented with v2 `format_options[]`\n * by default — see `AgentClient.getProducts()`. Pass\n * `{ project: false }` to opt out across all agents in this fan-out.\n */\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: true }\n ): Promise<TaskResult<V2AugmentedGetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project: false }\n ): Promise<TaskResult<GetProductsResponse>[]>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: boolean }\n ): Promise<TaskResult<GetProductsResponse | V2AugmentedGetProductsResponse>[]> {\n // Discriminate on the literal `project` flag so the per-client call\n // hits the matching overload — TS can't narrow `boolean` to the\n // overload's literal `true | undefined` / `false` shapes on its own.\n if (options?.project === false) {\n const optsOff = options as TaskOptions & { project: false };\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOff));\n }\n const optsOn = options as (TaskOptions & { project?: true }) | undefined;\n return this.executeAllSettled(client => client.getProducts(params, inputHandler, optsOn));\n }\n\n /**\n * Execute listCreativeFormats on all agents in parallel\n */\n async listCreativeFormats(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>[]> {\n return this.executeAllSettled(client => client.listCreativeFormats(params, inputHandler, options));\n }\n\n /**\n * Execute createMediaBuy on all agents in parallel\n * Note: This might not make sense for all use cases, but provided for completeness\n */\n async createMediaBuy(\n params: MutatingRequestInput<CreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.createMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute updateMediaBuy on all agents in parallel\n */\n async updateMediaBuy(\n params: MutatingRequestInput<UpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdateMediaBuyResponse>[]> {\n return this.executeAllSettled(client => client.updateMediaBuy(params, inputHandler, options));\n }\n\n /**\n * Execute syncCreatives on all agents in parallel\n */\n async syncCreatives(\n params: MutatingRequestInput<SyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncCreativesResponse>[]> {\n return this.executeAllSettled(client => client.syncCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute listCreatives on all agents in parallel\n */\n async listCreatives(\n params: ListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativesResponse>[]> {\n return this.executeAllSettled(client => client.listCreatives(params, inputHandler, options));\n }\n\n /**\n * Execute getMediaBuyDelivery on all agents in parallel\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuyDeliveryResponse>[]> {\n return this.executeAllSettled(client => client.getMediaBuyDelivery(params, inputHandler, options));\n }\n\n /**\n * Execute providePerformanceFeedback on all agents in parallel\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>[]> {\n return this.executeAllSettled(client => client.providePerformanceFeedback(params, inputHandler, options));\n }\n\n /**\n * Execute getSignals on all agents in parallel\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>[]> {\n return this.executeAllSettled(client => client.getSignals(params, inputHandler, options));\n }\n\n /**\n * Execute activateSignal on all agents in parallel\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>[]> {\n return this.executeAllSettled(client => client.activateSignal(params, inputHandler, options));\n }\n\n // ====== COLLECTION UTILITIES ======\n\n /**\n * Get individual agent client\n */\n getAgent(agentId: string): AgentClient {\n const client = this.clients.get(agentId);\n if (!client) {\n throw new Error(\n `Agent '${agentId}' not found in collection. Available: ${Array.from(this.clients.keys()).join(', ')}`\n );\n }\n return client;\n }\n\n /**\n * Get all agent clients\n */\n getAllAgents(): AgentClient[] {\n return Array.from(this.clients.values());\n }\n\n /**\n * Get agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.clients.keys());\n }\n\n /**\n * Get agent count\n */\n get count(): number {\n return this.clients.size;\n }\n\n /**\n * Filter agents by a condition\n */\n filter(predicate: (agent: AgentClient) => boolean): AgentClient[] {\n return Array.from(this.clients.values()).filter(predicate);\n }\n\n /**\n * Map over all agents\n */\n map<T>(mapper: (agent: AgentClient) => T): T[] {\n return Array.from(this.clients.values()).map(mapper);\n }\n\n /**\n * Execute a custom function on all agents in parallel.\n * Returns PromiseSettledResult array so callers can handle partial failures.\n */\n async execute<T>(executor: (agent: AgentClient) => Promise<T>): Promise<PromiseSettledResult<T>[]> {\n const promises = Array.from(this.clients.values()).map(executor);\n return Promise.allSettled(promises);\n }\n}\n\n/**\n * Main multi-agent AdCP client providing unified access to multiple advertising protocol agents.\n *\n * This is the **primary entry point** for the @adcp/sdk library. It provides flexible\n * access patterns for working with one or multiple AdCP agents (MCP or A2A protocols).\n *\n * ## Key Features\n *\n * - **Single agent access** via `agent(id)` - for individual operations\n * - **Multi-agent access** via `agents([ids])` - for parallel execution across specific agents\n * - **Broadcast access** via `allAgents()` - for parallel execution across all configured agents\n * - **Auto-configuration** via static factory methods (`fromConfig()`, `fromEnv()`, `fromFile()`)\n * - **Full type safety** - all AdCP request/response types are strongly typed\n * - **Protocol agnostic** - works seamlessly with both MCP and A2A agents\n *\n * ## Basic Usage\n *\n * @example Single agent operation\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'mcp' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'a2a' }\n * ]);\n *\n * // Execute operation on single agent\n * const result = await client.agent('agent1').getProducts({\n * brief: 'Coffee brands for premium audience'\n * });\n *\n * if (result.status === 'completed') {\n * console.log('Products:', result.data.products);\n * }\n * ```\n *\n * @example Multi-agent parallel execution\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['agent1', 'agent2']).getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Execute across all agents\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Coffee brands'\n * });\n *\n * // Process results from all agents\n * allResults.forEach((result, i) => {\n * console.log(`Agent ${client.agentIds[i]}: ${result.status}`);\n * if (result.status === 'completed') {\n * console.log(` Products: ${result.data.products.length}`);\n * }\n * });\n * ```\n *\n * @example Auto-configuration from environment\n * ```typescript\n * // Load agents from environment variables or config files\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Or from environment only\n * const client = ADCPMultiAgentClient.fromEnv();\n *\n * // Or from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n * ```\n *\n * ## Available Operations\n *\n * All standard AdCP operations are available:\n * - `getProducts()` - Discover advertising products\n * - `listCreativeFormats()` - Get supported creative formats\n * - `createMediaBuy()` - Create new media buy\n * - `updateMediaBuy()` - Update existing media buy\n * - `syncCreatives()` - Upload/sync creative assets\n * - `listCreatives()` - List creative assets\n * - `getMediaBuyDelivery()` - Get delivery performance\n * - `getSignals()` - Get audience signals\n * - `activateSignal()` - Activate audience signals\n * - `providePerformanceFeedback()` - Send performance feedback\n *\n * @see {@link AgentClient} for single-agent operations\n * @see {@link AgentCollection} for multi-agent parallel operations\n * @see {@link SingleAgentClientConfig} for configuration options\n *\n * @public\n */\nexport class ADCPMultiAgentClient {\n private agentClients: Map<string, AgentClient> = new Map();\n private readonly resolvedAdcpVersion: string;\n\n constructor(\n agentConfigs: AgentConfig[] = [],\n private config: SingleAgentClientConfig = {}\n ) {\n // Validates `config.adcpVersion` once for the orchestrator; per-agent\n // AgentClients will re-validate via SingleAgentClient (cheap pure check)\n // and surface the same ConfigurationError if the pin is invalid.\n this.resolvedAdcpVersion = resolveAdcpVersion(config.adcpVersion);\n\n for (const agentConfig of agentConfigs) {\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, config));\n }\n }\n\n /**\n * Returns the AdCP protocol version this multi-agent client speaks. The\n * value is shared across every per-agent client created by this orchestrator\n * and originates from the constructor `config.adcpVersion`. See\n * {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.resolvedAdcpVersion;\n }\n\n // ====== FACTORY METHODS FOR EASY SETUP ======\n\n /**\n * Create client by auto-discovering agent configuration\n *\n * Automatically loads agents from:\n * 1. Environment variables (SALES_AGENTS_CONFIG, ADCP_AGENTS_CONFIG, etc.)\n * 2. Config files (adcp.config.json, adcp.json, .adcp.json, agents.json)\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with discovered agents\n *\n * @example\n * ```typescript\n * // Simplest possible setup - auto-discovers configuration\n * const client = ADCPMultiAgentClient.fromConfig();\n *\n * // Use with options\n * const client = ADCPMultiAgentClient.fromConfig({\n * debug: true,\n * defaultTimeout: 60000\n * });\n * ```\n */\n static fromConfig(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgents();\n\n if (agents.length === 0) {\n console.log('\\n' + ConfigurationManager.getConfigurationHelp());\n throw new Error('No ADCP agents configured. See configuration help above.');\n }\n\n // Validate configuration\n ConfigurationManager.validateAgentsConfig(agents);\n\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from environment variables only\n *\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with environment-loaded agents\n *\n * @example\n * ```typescript\n * // Load agents from SALES_AGENTS_CONFIG environment variable\n * const client = ADCPMultiAgentClient.fromEnv();\n * ```\n */\n static fromEnv(config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromEnv();\n\n if (agents.length === 0) {\n const envVars = ConfigurationManager.getEnvVars();\n throw new Error(`No agents found in environment variables. ` + `Please set one of: ${envVars.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create client from a specific config file\n *\n * @param configPath - Path to configuration file\n * @param config - Optional client configuration\n * @returns ADCPMultiAgentClient instance with file-loaded agents\n *\n * @example\n * ```typescript\n * // Load from specific file\n * const client = ADCPMultiAgentClient.fromFile('./my-agents.json');\n *\n * // Load from default locations\n * const client = ADCPMultiAgentClient.fromFile();\n * ```\n */\n static fromFile(configPath?: string, config?: SingleAgentClientConfig): ADCPMultiAgentClient {\n const agents = ConfigurationManager.loadAgentsFromConfig(configPath);\n\n if (agents.length === 0) {\n const searchPaths = configPath ? [configPath] : ConfigurationManager.getConfigPaths();\n throw new Error(`No agents found in config file(s). Searched: ${searchPaths.join(', ')}`);\n }\n\n ConfigurationManager.validateAgentsConfig(agents);\n return new ADCPMultiAgentClient(agents, config);\n }\n\n /**\n * Create a simple client with minimal configuration\n *\n * @param agentUrl - Single agent URL\n * @param options - Optional agent and client configuration\n * @returns ADCPMultiAgentClient instance with single agent\n *\n * @example\n * ```typescript\n * // Simplest possible setup for single agent\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com');\n *\n * // With options\n * const client = ADCPMultiAgentClient.simple('https://my-agent.example.com', {\n * agentName: 'My Agent',\n * protocol: 'mcp',\n * authToken: 'my-token',\n * debug: true\n * });\n * ```\n */\n static simple(\n agentUrl: string,\n options: {\n agentId?: string;\n agentName?: string;\n protocol?: 'mcp' | 'a2a';\n authToken?: string;\n debug?: boolean;\n timeout?: number;\n } = {}\n ): ADCPMultiAgentClient {\n const {\n agentId = 'default-agent',\n agentName = 'Default Agent',\n protocol = 'mcp',\n authToken,\n debug = false,\n timeout,\n } = options;\n\n const agent: AgentConfig = {\n id: agentId,\n name: agentName,\n agent_uri: agentUrl,\n protocol,\n auth_token: authToken,\n };\n\n ConfigurationManager.validateAgentConfig(agent);\n\n return new ADCPMultiAgentClient([agent], {\n debug,\n workingTimeout: timeout,\n });\n }\n\n // ====== SINGLE AGENT ACCESS ======\n\n /**\n * Get a single agent client for individual operations.\n *\n * This is the primary method for executing operations on a specific agent.\n * Returns an {@link AgentClient} instance that provides all AdCP operations.\n *\n * @param agentId - The unique identifier of the agent to retrieve\n * @returns Agent client instance for the specified agent\n * @throws {Error} If agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'sales_agent', agent_uri: 'https://sales.example.com', protocol: 'a2a' }\n * ]);\n *\n * // Get specific agent and execute operation\n * const agent = client.agent('sales_agent');\n * const result = await agent.getProducts({ brief: 'Premium coffee brands' });\n * ```\n *\n * @see {@link AgentClient} for available operations\n */\n agent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n // ====== MULTI-AGENT ACCESS ======\n\n /**\n * Get multiple specific agents for parallel operations.\n *\n * Returns an {@link AgentCollection} that executes operations across the specified\n * agents in parallel using Promise.all(). Useful when you want to query specific\n * agents simultaneously and compare results.\n *\n * @param agentIds - Array of agent IDs to include in the collection\n * @returns Agent collection for parallel operations across specified agents\n * @throws {Error} If any agent ID is not found in configuration\n *\n * @example\n * ```typescript\n * // Execute across specific agents\n * const results = await client.agents(['sales_agent_1', 'sales_agent_2']).getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Process parallel results\n * results.forEach((result, i) => {\n * if (result.status === 'completed') {\n * console.log(`Agent ${i + 1}: ${result.data.products.length} products`);\n * }\n * });\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n agents(agentIds: string[]): AgentCollection {\n const agentConfigs: AgentConfig[] = [];\n\n for (const agentId of agentIds) {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n agentConfigs.push(agent.getAgent());\n }\n\n return new AgentCollection(agentConfigs, this.config);\n }\n\n /**\n * Get all configured agents for broadcast operations.\n *\n * Returns an {@link AgentCollection} containing all agents in the client configuration.\n * Executes operations across all agents in parallel, useful for market research,\n * price comparison, or discovering capabilities across your entire agent network.\n *\n * @returns Agent collection for parallel operations across all configured agents\n *\n * @example\n * ```typescript\n * const client = new ADCPMultiAgentClient([\n * { id: 'agent1', agent_uri: 'https://agent1.com', protocol: 'a2a' },\n * { id: 'agent2', agent_uri: 'https://agent2.com', protocol: 'mcp' },\n * { id: 'agent3', agent_uri: 'https://agent3.com', protocol: 'a2a' }\n * ]);\n *\n * // Query all agents simultaneously\n * const allResults = await client.allAgents().getProducts({\n * brief: 'Premium coffee brands'\n * });\n *\n * // Find best options across all agents\n * const successfulResults = allResults.filter(r => r.status === 'completed');\n * console.log(`Got products from ${successfulResults.length} agents`);\n * ```\n *\n * @see {@link AgentCollection} for available parallel operations\n */\n allAgents(): AgentCollection {\n if (this.agentClients.size === 0) {\n throw new Error('No agents configured. Add agents to the client first.');\n }\n\n const agentConfigs = Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n return new AgentCollection(agentConfigs, this.config);\n }\n\n // ====== AGENT MANAGEMENT ======\n\n /**\n * Add an agent to the client\n *\n * @param agentConfig - Agent configuration to add\n * @throws Error if agent ID already exists\n */\n addAgent(agentConfig: AgentConfig): void {\n if (this.agentClients.has(agentConfig.id)) {\n throw new Error(`Agent with ID '${agentConfig.id}' already exists`);\n }\n\n this.agentClients.set(agentConfig.id, new AgentClient(agentConfig, this.config));\n }\n\n /**\n * Remove an agent from the client\n *\n * @param agentId - ID of agent to remove\n * @returns True if agent was removed, false if not found\n */\n removeAgent(agentId: string): boolean {\n return this.agentClients.delete(agentId);\n }\n\n /**\n * Get individual agent client by ID\n *\n * @param agentId - ID of agent to retrieve\n * @returns AgentClient instance\n * @throws Error if agent not found\n */\n getAgent(agentId: string): AgentClient {\n const agent = this.agentClients.get(agentId);\n if (!agent) {\n throw new Error(`Agent '${agentId}' not found. Available agents: ${this.getAgentIds().join(', ')}`);\n }\n return agent;\n }\n\n /**\n * Check if an agent exists\n */\n hasAgent(agentId: string): boolean {\n return this.agentClients.has(agentId);\n }\n\n /**\n * Get all configured agent IDs\n */\n getAgentIds(): string[] {\n return Array.from(this.agentClients.keys());\n }\n\n /**\n * Get all agent configurations\n */\n getAgentConfigs(): AgentConfig[] {\n return Array.from(this.agentClients.values()).map(agent => agent.getAgent());\n }\n\n /**\n * Get count of configured agents\n */\n get agentCount(): number {\n return this.agentClients.size;\n }\n\n // ====== UTILITY METHODS ======\n\n /**\n * Filter agents by protocol\n */\n getAgentsByProtocol(protocol: 'mcp' | 'a2a'): AgentCollection {\n const filteredConfigs = Array.from(this.agentClients.values())\n .filter(agent => agent.getProtocol() === protocol)\n .map(agent => agent.getAgent());\n\n return new AgentCollection(filteredConfigs, this.config);\n }\n\n /**\n * Find agents that support a specific task\n * This is a placeholder - in a full implementation, you'd query agent capabilities\n */\n findAgentsForTask(taskName: string): AgentCollection {\n // For now, assume all agents support all tasks\n return this.allAgents();\n }\n\n /**\n * Get all active tasks across all agents\n */\n getAllActiveTasks() {\n const allTasks = [];\n for (const agent of this.agentClients.values()) {\n allTasks.push(...agent.getActiveTasks());\n }\n return allTasks;\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATIONS ======\n\n /**\n * Get all tasks from all agents with detailed information\n *\n * @returns Promise resolving to array of all tasks across agents\n *\n * @example\n * ```typescript\n * const allTasks = await client.listAllTasks();\n * console.log(`Total active tasks: ${allTasks.length}`);\n * ```\n */\n async listAllTasks(): Promise<TaskInfo[]> {\n const taskPromises = Array.from(this.agentClients.values()).map(agent => agent.listTasks());\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get tasks for specific agents\n *\n * @param agentIds - Array of agent IDs to get tasks for\n * @returns Promise resolving to array of tasks from specified agents\n */\n async listTasksForAgents(agentIds: string[]): Promise<TaskInfo[]> {\n const taskPromises = agentIds.map(agentId => {\n const agent = this.agentClients.get(agentId);\n return agent ? agent.listTasks() : Promise.resolve([]);\n });\n const results = await Promise.allSettled(taskPromises);\n return results\n .filter((r): r is PromiseFulfilledResult<TaskInfo[]> => r.status === 'fulfilled')\n .flatMap(r => r.value);\n }\n\n /**\n * Get task information by ID from any agent\n *\n * @param taskId - ID of the task to find\n * @returns Promise resolving to task information or null if not found\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n for (const agent of this.agentClients.values()) {\n const taskInfo = await agent.getTaskInfo(taskId);\n if (taskInfo) {\n return taskInfo;\n }\n }\n return null;\n }\n\n /**\n * Subscribe to task events from all agents\n *\n * @param callbacks - Event callbacks for different task events\n * @returns Unsubscribe function that removes all subscriptions\n *\n * @example\n * ```typescript\n * const unsubscribe = client.onTaskEvents({\n * onTaskCompleted: (task) => {\n * console.log(`Task ${task.taskName} completed!`);\n * },\n * onTaskFailed: (task, error) => {\n * console.error(`Task ${task.taskName} failed:`, error);\n * }\n * });\n * ```\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskEvents(callbacks);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Subscribe to task updates from all agents\n *\n * @param callback - Function to call when any task status changes\n * @returns Unsubscribe function\n */\n onAnyTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n const unsubscribers: (() => void)[] = [];\n\n for (const agent of this.agentClients.values()) {\n const unsubscribe = agent.onTaskUpdate(callback);\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n unsubscribers.forEach(unsub => unsub());\n };\n }\n\n /**\n * Register webhooks for all agents\n *\n * @param webhookUrl - Base webhook URL (will append agent ID)\n * @param taskTypes - Optional array of task types to watch\n */\n async registerWebhooksForAll(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent =>\n agent.registerWebhook(`${webhookUrl}?agentId=${agent.getAgentId()}`, taskTypes)\n );\n await Promise.allSettled(promises);\n }\n\n /**\n * Unregister webhooks for all agents\n */\n async unregisterAllWebhooks(): Promise<void> {\n const promises = Array.from(this.agentClients.values()).map(agent => agent.unregisterWebhook());\n await Promise.allSettled(promises);\n }\n\n /**\n * Get count of active tasks by status\n *\n * @returns Promise resolving to object with counts by status\n *\n * @example\n * ```typescript\n * const counts = await client.getTaskCountsByStatus();\n * console.log(`Working: ${counts.working}, Completed: ${counts.completed}`);\n * ```\n */\n async getTaskCountsByStatus(): Promise<Record<string, number>> {\n const tasks = await this.listAllTasks();\n const counts: Record<string, number> = {};\n\n for (const task of tasks) {\n counts[task.status] = (counts[task.status] || 0) + 1;\n }\n\n return counts;\n }\n\n // ====== WEBHOOK METHODS ======\n\n /**\n * Generate webhook URL for a specific agent, task type, and operation\n *\n * @param agentId - ID of the agent\n * @param taskType - Type of task (e.g., 'get_products', 'media_buy_delivery')\n * @param operationId - Operation ID for this request\n * @returns Full webhook URL with macros replaced\n *\n * @example\n * ```typescript\n * const webhookUrl = client.getWebhookUrl('agent1', 'sync_creatives', 'op_123');\n * // Returns: https://myapp.com/webhook/sync_creatives/agent1/op_123\n * ```\n */\n getWebhookUrl(agentId: string, taskType: string, operationId: string): string {\n const agent = this.getAgent(agentId);\n return agent.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Handle webhook from any agent (async task completion or notifications)\n *\n * Automatically routes webhook to the correct agent based on agent_id in payload.\n *\n * @param payload - Webhook payload from agent (must contain agent_id or operation_id)\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @returns Whether webhook was handled successfully\n *\n * @example\n * ```typescript\n * import { verifyWebhookRequest } from '@adcp/sdk/webhooks';\n *\n * app.post('/webhook', async (req, res) => {\n * try {\n * const check = verifyWebhookRequest({\n * rawBody: req.rawBody,\n * headers: req.headers,\n * globalSecret: process.env.WEBHOOK_SECRET,\n * });\n * if (!check.ok) return res.status(401).json({ error: check.reason });\n *\n * const handled = await client.handleWebhook(\n * req.body,\n * req.params.taskType,\n * req.params.operationId,\n * check.signature,\n * check.timestamp,\n * req.rawBody\n * );\n * res.status(200).json({ received: handled });\n * } catch (error) {\n * res.status(401).json({ error: error.message });\n * }\n * });\n * ```\n */\n async handleWebhook(\n payload: any,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n // Extract agent ID from payload\n // Webhook payloads include agent_id or we can infer from operation_id pattern\n const agentId = payload.agent_id || this.inferAgentIdFromPayload(payload);\n\n if (!agentId) {\n throw new Error('Cannot determine agent ID from webhook payload. Payload must contain agent_id or operation_id.');\n }\n\n const agent = this.getAgent(agentId);\n return agent.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Infer agent ID from webhook payload when not explicitly provided\n *\n * Looks for patterns in operation_id or context_id that may contain agent information\n */\n private inferAgentIdFromPayload(payload: any): string | null {\n // Try to extract from operation_id pattern (e.g., \"delivery_report_agent1_2024-01\")\n if (payload.operation_id && typeof payload.operation_id === 'string') {\n const dateMatch = payload.operation_id.match(/_(\\d{4}-\\d{2})$/);\n if (dateMatch) {\n const prefix = payload.operation_id.slice(0, -dateMatch[0].length);\n const lastUnderscore = prefix.lastIndexOf('_');\n if (lastUnderscore >= 0) {\n const candidateId = prefix.slice(lastUnderscore + 1);\n if (candidateId && this.hasAgent(candidateId)) {\n return candidateId;\n }\n }\n }\n }\n\n // Try to extract from context_id if it contains agent reference\n if (payload.context_id && typeof payload.context_id === 'string') {\n for (const agentId of this.getAgentIds()) {\n if (payload.context_id.includes(agentId)) {\n return agentId;\n }\n }\n }\n\n return null;\n }\n\n // ====== CREATIVE AGENT OPERATIONS ======\n\n /**\n * Create a creative agent client\n *\n * @param agentUrl - URL of the creative agent\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @param authToken - Optional authentication token\n * @returns CreativeAgentClient instance\n *\n * @example\n * ```typescript\n * // Use standard creative agent\n * const creativeAgent = client.createCreativeAgent(\n * 'https://creative.adcontextprotocol.org/mcp'\n * );\n *\n * // List formats\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n createCreativeAgent(agentUrl: string, protocol: 'mcp' | 'a2a' = 'mcp', authToken?: string): CreativeAgentClient {\n return new CreativeAgentClient({\n agentUrl,\n protocol,\n authToken,\n ...this.config,\n });\n }\n\n /**\n * Get the standard AdCP creative agent\n *\n * @param protocol - Protocol to use (defaults to 'mcp')\n * @returns CreativeAgentClient instance for standard agent\n *\n * @example\n * ```typescript\n * const creativeAgent = client.getStandardCreativeAgent();\n * const formats = await creativeAgent.listFormats();\n * ```\n */\n getStandardCreativeAgent(protocol: 'mcp' | 'a2a' = 'mcp'): CreativeAgentClient {\n const agentUrl =\n protocol === 'mcp' ? STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE : STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE_A2A;\n\n return this.createCreativeAgent(agentUrl, protocol);\n }\n\n /**\n * Discover creative formats from standard creative agent\n *\n * Convenience method to quickly get formats from the standard AdCP creative agent\n *\n * @returns Promise resolving to array of creative formats\n *\n * @example\n * ```typescript\n * const formats = await client.discoverFormats();\n *\n * // Find specific format\n * const banner = formats.find(f => f.format_id.id === 'display_300x250_image');\n * ```\n */\n async discoverFormats(): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.listFormats();\n }\n\n /**\n * Find creative formats by dimensions\n *\n * @param width - Width in pixels\n * @param height - Height in pixels\n * @returns Promise resolving to matching formats\n *\n * @example\n * ```typescript\n * // Find all 300x250 formats\n * const mediumRectangles = await client.findFormatsByDimensions(300, 250);\n * ```\n */\n async findFormatsByDimensions(width: number, height: number): Promise<CreativeFormat[]> {\n const creativeAgent = this.getStandardCreativeAgent();\n return creativeAgent.findByDimensions(width, height);\n }\n}\n\n/**\n * Factory function to create a multi-agent ADCP client\n *\n * @param agents - Array of agent configurations\n * @param config - Client configuration\n * @returns Configured ADCPMultiAgentClient instance\n */\nexport function createADCPMultiAgentClient(\n agents: AgentConfig[],\n config?: SingleAgentClientConfig\n): ADCPMultiAgentClient {\n return new ADCPMultiAgentClient(agents, config);\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  import { randomUUID } from "node:crypto";
8
2
  import {
9
3
  SingleAgentClient
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/core/AgentClient.ts"],"sourcesContent":["// Per-agent client wrapper with conversation context preservation\n\nimport type { Client as MCPClient } from '@modelcontextprotocol/sdk/client/index.js';\nimport { randomUUID } from 'node:crypto';\nimport type { AgentConfig } from '../types';\nimport type { MCPWebhookPayload } from '../types/core.generated';\nimport type { Task as A2ATask, TaskStatusUpdateEvent } from '@a2a-js/sdk';\nimport {\n SingleAgentClient,\n type SingleAgentClientConfig,\n type VerifyAndParseWebhookOptions,\n type WebhookParseResult,\n} from './SingleAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message } from './ConversationTypes';\nimport type { AdcpCapabilities } from '../utils/capabilities';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesRequest,\n ListCreativesResponse,\n GetMediaBuysRequest,\n GetMediaBuysResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n GetAdCPCapabilitiesRequest,\n GetAdCPCapabilitiesResponse,\n PreviewCreativeRequest,\n PreviewCreativeResponse,\n BuildCreativeRequest,\n BuildCreativeResponse,\n ListAccountsRequest,\n ListAccountsResponse,\n SyncAccountsRequest,\n SyncAccountsResponse,\n SyncAudiencesRequest,\n SyncAudiencesResponse,\n CreatePropertyListRequest,\n CreatePropertyListResponse,\n GetPropertyListRequest,\n GetPropertyListResponse,\n UpdatePropertyListRequest,\n UpdatePropertyListResponse,\n ListPropertyListsRequest,\n ListPropertyListsResponse,\n DeletePropertyListRequest,\n DeletePropertyListResponse,\n ListContentStandardsRequest,\n ListContentStandardsResponse,\n GetContentStandardsRequest,\n GetContentStandardsResponse,\n CalibrateContentRequest,\n CalibrateContentResponse,\n ValidateContentDeliveryRequest,\n ValidateContentDeliveryResponse,\n SIGetOfferingRequest,\n SIGetOfferingResponse,\n SIInitiateSessionRequest,\n SIInitiateSessionResponse,\n SISendMessageRequest,\n SISendMessageResponse,\n SITerminateSessionRequest,\n SITerminateSessionResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\nimport { withFormatOptions } from '../v2/projection/augment-response';\nimport type { V2AugmentedProduct } from '../v2/projection/augment-response';\nimport type { ProjectionDiagnostic, V1Product } from '../v2/projection/types';\n\n/**\n * AdCP 3.1 V2-mental-model envelope attached to `get_products` responses\n * when the SDK auto-projects `format_ids[]` → `format_options[]`.\n *\n * Present whenever projection ran (the default). Adopters reading the\n * V2 surface check `data.projection.diagnostics` to see what didn't\n * project cleanly; absence of diagnostics means every product's\n * `format_options[]` is fully populated (clean catalog match) or was\n * already v2-shaped on the wire.\n */\nexport interface GetProductsProjectionEnvelope {\n /**\n * Structured diagnostics from the v1→v2 augmentation step\n * (`source: 'sdk'`, parseable `sdk_id`, normative or SDK-local\n * `code`). Empty when every product projects cleanly.\n */\n diagnostics: ProjectionDiagnostic[];\n}\n\n/**\n * `GetProductsResponse` with `format_options[]` guaranteed on every\n * product (the V2 mental model) and a `projection` envelope carrying\n * any diagnostics from the v1→v2 augmentation step.\n *\n * Returned by `AgentClient.getProducts()` by default. Callers passing\n * `{ project: false }` opt out of projection and receive the raw\n * generated `GetProductsResponse` instead.\n */\nexport type V2AugmentedGetProductsResponse = Omit<GetProductsResponse, 'products'> & {\n products: V2AugmentedProduct<V1Product>[];\n projection: GetProductsProjectionEnvelope;\n};\n\n/**\n * Type mapping for task names to their response types\n * Enables type-safe generic executeTask() calls\n */\nexport type TaskResponseTypeMap = {\n get_products: GetProductsResponse;\n list_creative_formats: ListCreativeFormatsResponse;\n create_media_buy: CreateMediaBuyResponse;\n update_media_buy: UpdateMediaBuyResponse;\n sync_creatives: SyncCreativesResponse;\n list_creatives: ListCreativesResponse;\n get_media_buys: GetMediaBuysResponse;\n get_media_buy_delivery: GetMediaBuyDeliveryResponse;\n provide_performance_feedback: ProvidePerformanceFeedbackResponse;\n get_signals: GetSignalsResponse;\n activate_signal: ActivateSignalResponse;\n get_adcp_capabilities: GetAdCPCapabilitiesResponse;\n preview_creative: PreviewCreativeResponse;\n build_creative: BuildCreativeResponse;\n list_accounts: ListAccountsResponse;\n sync_accounts: SyncAccountsResponse;\n sync_audiences: SyncAudiencesResponse;\n create_property_list: CreatePropertyListResponse;\n get_property_list: GetPropertyListResponse;\n update_property_list: UpdatePropertyListResponse;\n list_property_lists: ListPropertyListsResponse;\n delete_property_list: DeletePropertyListResponse;\n list_content_standards: ListContentStandardsResponse;\n get_content_standards: GetContentStandardsResponse;\n calibrate_content: CalibrateContentResponse;\n validate_content_delivery: ValidateContentDeliveryResponse;\n si_get_offering: SIGetOfferingResponse;\n si_initiate_session: SIInitiateSessionResponse;\n si_send_message: SISendMessageResponse;\n si_terminate_session: SITerminateSessionResponse;\n};\n\n/**\n * Valid ADCP task names\n */\nexport type AdcpTaskName = keyof TaskResponseTypeMap;\n\n/**\n * Configuration for `AgentClient.fromMCPClient()`.\n *\n * A narrowed subset of `SingleAgentClientConfig` — only includes options that\n * are meaningful for in-process transport. HTTP-only fields (`userAgent`, `headers`,\n * `webhookUrlTemplate`, OAuth paths) are excluded because they have no effect when\n * the client dispatches directly to an in-process MCP `Client`.\n *\n * The fields you most likely want:\n * - `validation` — `requests`/`responses` validation mode (`strict` | `warn` | `off`)\n * - `governance` — buyer-side governance config\n * - `requireV3ForMutations` — enforce AdCP v3 before dispatching mutating tools\n */\nexport type InProcessAgentClientConfig = Pick<\n SingleAgentClientConfig,\n | 'adcpVersion'\n | 'versionEnvelope'\n | 'debug'\n | 'validation'\n | 'governance'\n | 'onActivity'\n | 'validateFeatures'\n | 'requireV3ForMutations'\n | 'allowV2'\n | 'workingTimeout'\n | 'defaultMaxClarifications'\n | 'persistConversations'\n> & {\n /**\n * Human-readable name for this agent, used in debug logs and\n * `getAgentName()`. Defaults to `'in-process'`.\n */\n agentName?: string;\n /**\n * Stable identifier for this agent, used in `getAgentId()`.\n * Defaults to a random string prefixed with `'in-process-'`.\n */\n agentId?: string;\n};\n\n/**\n * Task result states where the server is still holding the task open. While\n * the last response was in one of these states the AgentClient retains the\n * server-returned `taskId` so a follow-up call can resume the same\n * server-side task (HITL approvals, long-running workflows).\n */\nconst NON_TERMINAL_STATES: ReadonlySet<string> = new Set([\n 'working',\n 'input-required',\n 'submitted',\n 'auth-required',\n 'deferred',\n]);\n\n/**\n * Per-agent client that maintains conversation context across calls.\n *\n * **One AgentClient per conversation.** The client retains `contextId` and\n * `pendingTaskId` in-memory so subsequent calls ride the same A2A session.\n * Sharing an AgentClient across concurrent conversations will interleave\n * their contexts (last-write-wins). Create a fresh AgentClient — or call\n * {@link resetContext} — per logical conversation.\n *\n * **Resume across process restart** — persist `getContextId()` after a\n * non-terminal response and pass it to `resetContext(id)` on rehydration.\n * The server will route the next call back to the same session.\n */\n/**\n * Retained server-side task handle. Paired with the `contextId` and skill\n * name under which it was returned so {@link AgentClient.withSession} only\n * auto-threads it when the next call is plausibly a continuation of the\n * SAME task (same skill, same conversation). A different skill or switched\n * contextId signals new work — sending the retained handle in that case\n * produces \"Task not found\" against spec-compliant A2A sellers (per A2A\n * 0.3.0 §3.4 — Message.taskId continues the parent task).\n */\ninterface PendingTaskHandle {\n taskId: string;\n contextId: string;\n taskName: string;\n}\n\nexport class AgentClient {\n private client: SingleAgentClient;\n private currentContextId?: string;\n private pendingTask?: PendingTaskHandle;\n private readonly _isInProcess: boolean;\n\n constructor(\n private agent: AgentConfig,\n private config: SingleAgentClientConfig = {}\n ) {\n this.client = new SingleAgentClient(agent, config);\n this._isInProcess = agent._inProcessMcpClient !== undefined;\n }\n\n /**\n * Internal access to the underlying `TaskExecutor`. Used by the storyboard\n * runner's `pollTaskCompletion` race so it can poll AdCP `tasks/get` against\n * the agent's transport (see `src/lib/testing/storyboard/runner.ts`'s\n * `resolveTaskCompletionOutputs`). Without this surface the runner sees\n * `executor: undefined` on AgentClient and silently falls back to webhook-\n * only racing — which times out for storyboard fixtures that don't address\n * a runner-controlled webhook URL.\n *\n * Not part of the documented client API; production code goes through the\n * tool-specific methods on `AgentClient` / `AdCPClient`. The shape may\n * change without notice if the runner's polling contract evolves.\n *\n * @internal\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- runtime-internal accessor\n get executor(): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- reach-through to the underlying executor\n return (this.client as any).executor;\n }\n\n /**\n * Returns the AdCP protocol version this client speaks. Mirrors\n * `SingleAgentClient.getAdcpVersion()`. See {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.client.getAdcpVersion();\n }\n\n /**\n * Create an `AgentClient` backed by a pre-connected MCP `Client` instead of\n * an HTTP endpoint. Useful for in-process compliance testing without spinning\n * up a loopback HTTP server.\n *\n * **MCP only.** This factory wraps an MCP `Client` from\n * `@modelcontextprotocol/sdk`. There is no equivalent in-process bridge for\n * A2A today — for A2A agents, run them on a loopback HTTP server and use the\n * standard `AgentClient` constructor with the agent's `agent_uri`.\n *\n * **What this gives you over `dispatchTestRequest`:**\n * All client-side pipeline stages still apply — idempotency key auto-injection,\n * request/response schema validation hooks, governance middleware, and the typed\n * `TaskResult<T>` discriminated-union response shape. None of these apply when\n * calling `dispatchTestRequest()` directly.\n *\n * **Usage:**\n * ```ts\n * import { Client } from '@modelcontextprotocol/sdk/client/index.js';\n * import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';\n * import { AgentClient } from '@adcp/sdk';\n *\n * const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();\n * const mcpClient = new Client({ name: 'test', version: '1.0.0' });\n * await Promise.all([\n * mcpClient.connect(clientTransport),\n * adcpServer.connect(serverTransport),\n * ]);\n *\n * const agent = AgentClient.fromMCPClient(mcpClient, {\n * validation: { requests: 'strict' },\n * });\n * const result = await agent.createMediaBuy({ ... });\n * ```\n *\n * **Unsupported methods on in-process instances:** `resolveCanonicalUrl`,\n * `getWebhookUrl`, `registerWebhook`, `unregisterWebhook` — these require HTTP\n * and will throw `Error` with a descriptive message. Use `getAgentId()` /\n * `getAgentName()` for identification instead.\n *\n * @param mcpClient - An already-connected MCP `Client` (see example above).\n * @param config - Optional narrowed config. HTTP-only fields are excluded.\n */\n static fromMCPClient(mcpClient: MCPClient, config: InProcessAgentClientConfig = {}): AgentClient {\n // Reject pre-connect clients up front — MCP `Client.transport` is only set\n // after `client.connect(transport)` resolves. A pre-connect client would\n // fail later inside `listTools()`/`callTool()` with an opaque error; the\n // up-front check produces a clean failure pointing at the construction site.\n if ((mcpClient as { transport?: unknown }).transport === undefined) {\n throw new Error(\n 'AgentClient.fromMCPClient: the supplied MCP Client is not connected. ' +\n 'Call `await client.connect(transport)` before passing it here.'\n );\n }\n const { agentName, agentId, ...rest } = config;\n // Use randomUUID for collision resistance — the agent ID feeds session\n // routing so a debug-label collision (~65k via Math.random base36) could\n // alias two distinct in-process agents in a concurrent test fleet.\n const id = agentId ?? `in-process-${randomUUID()}`;\n // The `adcp-in-process://` scheme is parseable as a URL so existing\n // url-validation paths don't crash, but distinguishable from real http(s)\n // so the SDK skips network discovery + SSRF checks. The protocol layer\n // routes on the presence of `_inProcessMcpClient`, not the URI shape.\n const syntheticAgent: AgentConfig = {\n id,\n name: agentName ?? 'in-process',\n agent_uri: `adcp-in-process://${id}`,\n protocol: 'mcp',\n _inProcessMcpClient: mcpClient,\n };\n return new AgentClient(syntheticAgent, rest as SingleAgentClientConfig);\n }\n\n /**\n * Absorb the session ids the server returned on `result.metadata`:\n * retain `contextId` whenever one is present, and retain a\n * `PendingTaskHandle` (taskId + contextId + skill name) only while the\n * response was non-terminal. Terminal responses clear `pendingTask` so\n * the next call starts a fresh server-side task.\n *\n * The `deferred` case is deliberately asymmetric: deferred results don't\n * surface a new `serverTaskId` on metadata (the caller holds a resume\n * token, not a task-id), so the partial-metadata guard preserves the\n * pre-defer handle — which is exactly what a later resume needs.\n */\n private retainSession<T>(result: TaskResult<T>): void {\n const meta = result.metadata;\n if (meta?.contextId) {\n this.currentContextId = meta.contextId;\n }\n if (NON_TERMINAL_STATES.has(meta?.status as string)) {\n if (meta?.serverTaskId && meta?.contextId && meta?.taskName) {\n this.pendingTask = {\n taskId: meta.serverTaskId,\n contextId: meta.contextId,\n taskName: meta.taskName,\n };\n }\n // Partial metadata preserves the pre-existing handle. Two distinct\n // cases land here: (1) the deferred resume-token path, where the\n // server intentionally omits a new `serverTaskId`; (2) a non-spec\n // A2A Task that lacks `contextId` or surfaces no `taskName` — by\n // design those are NOT retained as a fresh handle, since auto-\n // threading a partially-keyed taskId into a future call is exactly\n // the leak class #1590 narrows.\n } else {\n this.pendingTask = undefined;\n }\n }\n\n /**\n * Merge the caller's `TaskOptions` with the retained session ids so the\n * outbound request carries whatever session continuity is in scope.\n * Caller-supplied ids win (explicit > implicit); unset caller fields fall\n * back to the retained ones.\n *\n * **Auto-threading the retained taskId is narrowed.** Per A2A 0.3.0 §3.4,\n * `Message.taskId` continues the parent task — sending it implies \"this\n * message belongs to that task.\" We auto-thread `pendingTask.taskId` only\n * when the next call is plausibly a continuation: same skill name AND\n * same effective contextId. A different skill (different work) or a\n * switched contextId signals new work; the retained handle is stale, and\n * sending it produces \"Task not found\" against spec-compliant sellers.\n *\n * HITL flows (e.g., `createMediaBuy` → `input-required` → `createMediaBuy`\n * resume) match same-skill same-context and continue to thread as before.\n * Cross-skill or cross-conversation reuse of one `AgentClient` no longer\n * leaks taskIds — see #1585 / #1590 for the motivating compliance scenario.\n */\n private withSession(taskName: string, options?: TaskOptions): TaskOptions {\n const explicitSwitch = options?.contextId !== undefined && options.contextId !== this.currentContextId;\n const effectiveContextId = options?.contextId ?? this.currentContextId;\n const continuation =\n !explicitSwitch &&\n this.pendingTask !== undefined &&\n this.pendingTask.contextId === effectiveContextId &&\n this.pendingTask.taskName === taskName;\n return {\n ...options,\n contextId: effectiveContextId,\n taskId: options?.taskId ?? (continuation ? this.pendingTask?.taskId : undefined),\n };\n }\n\n /**\n * Handle webhook from agent (async task completion or notifications)\n *\n * @param payload - Webhook payload from agent\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @param taskType - Task type from URL path (e.g., 'create_media_buy')\n * @returns Whether webhook was handled successfully\n */\n async handleWebhook(\n payload: MCPWebhookPayload | A2ATask | TaskStatusUpdateEvent,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n return this.client.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Verify and normalize an inbound webhook without dispatching handlers.\n */\n async verifyAndParseWebhook(options: VerifyAndParseWebhookOptions): Promise<WebhookParseResult> {\n return this.client.verifyAndParseWebhook(options);\n }\n\n /**\n * Verify webhook signature using HMAC-SHA256 per AdCP spec.\n *\n * Prefer passing the raw HTTP body string for correct cross-language interop.\n * Passing a parsed object still works but re-serializes with JSON.stringify,\n * which may not match the sender's byte representation.\n *\n * @param rawBodyOrPayload - Raw HTTP body string (preferred) or parsed payload object (deprecated)\n * @param signature - X-ADCP-Signature header value (format: \"sha256=...\")\n * @param timestamp - X-ADCP-Timestamp header value (Unix timestamp)\n * @returns true if signature is valid\n */\n verifyWebhookSignature(\n rawBodyOrPayload: string | Buffer | Uint8Array | unknown,\n signature: WebhookHeaderValue,\n timestamp: WebhookHeaderValue\n ): boolean {\n return this.client.verifyWebhookSignature(rawBodyOrPayload, signature, timestamp);\n }\n\n // ====== MEDIA BUY TASKS ======\n\n /**\n * Discover available advertising products.\n *\n * By default, response products are augmented with the AdCP 3.1\n * `format_options[]` declaration (the V2 mental model). When the\n * seller emitted v1 `format_ids[]`, the SDK projects them via the\n * AAO canonical-formats catalog so buyers always read the same\n * V2 shape regardless of wire version. The original `format_ids[]`\n * is preserved alongside `format_options[]` (additive — 7.x\n * callers reading `format_ids` keep working).\n *\n * Projection diagnostics surface on\n * `result.data.projection.diagnostics` (structured\n * `source: 'sdk'` markers; codes mirror the spec's error-code\n * vocabulary plus three SDK-local codes — see the projection\n * module's `ProjectionDiagnostic` type for the full set).\n *\n * Pass `{ project: false }` to opt out and receive the raw wire\n * response unmodified — useful for storyboard / compliance\n * harnesses asserting exact seller emission. The opt-out narrows\n * the return type back to `GetProductsResponse` (no `projection`\n * envelope, no guaranteed `format_options[]`).\n *\n * The 8.0 release narrows further by removing `format_ids[]` from\n * the public Product type entirely.\n */\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: true }\n ): Promise<TaskResult<V2AugmentedGetProductsResponse>>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project: false }\n ): Promise<TaskResult<GetProductsResponse>>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: boolean }\n ): Promise<TaskResult<GetProductsResponse | V2AugmentedGetProductsResponse>> {\n const { project, ...sessionOptions } = options ?? {};\n const result = await this.client.getProducts(params, inputHandler, {\n ...this.withSession('get_products', sessionOptions),\n });\n\n this.retainSession(result);\n\n if (project === false) {\n return result;\n }\n\n // Augment on the way out. Only the completed-success branch carries\n // `data` we can project; failure / intermediate results pass through\n // unchanged so the discriminated-union narrowing on the caller side\n // still works.\n if (result.success && result.status === 'completed' && result.data) {\n // The generated `GetProductsResponse.products: Product[]` shape is\n // structurally broader than the projection layer's loose `V1Product`\n // (which requires `format_ids` and an index signature). We treat the\n // generated shape as a v1 product on the way through projection — the\n // augmentation is purely additive and doesn't read the fields the\n // generated type has but `V1Product` doesn't.\n const { response, diagnostics } = withFormatOptions(result.data as unknown as { products?: V1Product[] });\n const augmented: V2AugmentedGetProductsResponse = {\n ...(response as unknown as Omit<GetProductsResponse, 'products'> & {\n products: V2AugmentedProduct<V1Product>[];\n }),\n projection: { diagnostics },\n };\n return {\n ...result,\n data: augmented,\n };\n }\n return result;\n }\n\n /**\n * List available creative formats\n */\n async listCreativeFormats(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>> {\n const result = await this.client.listCreativeFormats(params, inputHandler, {\n ...this.withSession('list_creative_formats', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Create a new media buy.\n *\n * **3.1+ format-option write flow (preferred at 3.1.0-beta.5+).** After\n * `getProducts()` returns the V2-augmented response (`format_options[]`\n * auto-populated), pick declarations by `format_option_id` and use\n * `packageRefsForFormatOptions` to author the package. The helper emits\n * BOTH `format_option_refs[]` (the 3.1+ path) AND `format_ids[]`\n * (legacy named-format dual emission) so a single request works against\n * both format-option-aware and legacy sellers.\n *\n * ```ts\n * import { packageRefsForFormatOptions } from '@adcp/sdk/v2/projection';\n *\n * const { data: { products } } = await agent.getProducts({ brief: '...' });\n * const product = products[0];\n *\n * await agent.createMediaBuy({\n * packages: [{\n * package_id: 'pkg-1',\n * product_id: product.product_id,\n * pricing_option_id: product.pricing_options[0].pricing_option_id,\n * ...packageRefsForFormatOptions(product, ['nytimes_mrec', 'nytimes_video_30s']),\n * // ↑ spreads `{ format_option_refs, format_ids? }`\n * budget: { currency: 'USD', total: 5000 },\n * }],\n * // ...\n * });\n * ```\n *\n * The resulting wire payload for the package looks like:\n *\n * ```json\n * {\n * \"package_id\": \"pkg-1\",\n * \"product_id\": \"...\",\n * \"pricing_option_id\": \"...\",\n * \"format_option_refs\": [\n * {\"scope\": \"product\", \"format_option_id\": \"nytimes_mrec\"},\n * {\"scope\": \"product\", \"format_option_id\": \"nytimes_video_30s\"}\n * ],\n * \"format_ids\": [\n * {\"agent_url\": \"https://creative.adcontextprotocol.org/\", \"id\": \"display_300x250_image\"},\n * {\"agent_url\": \"https://creative.adcontextprotocol.org/\", \"id\": \"video_standard_30s\"}\n * ],\n * \"budget\": {\"currency\": \"USD\", \"total\": 5000}\n * }\n * ```\n *\n * `format_ids` is omitted entirely when every chosen format option is V2-only\n * (the spec's \"neither present\" fallback fires for v1 sellers in that case).\n *\n * **Inline creative fallback.** Sellers that do not advertise a creative\n * library (`supportsSyncCreatives(await agent.getCapabilities()) === false`)\n * can still accept package-scoped creative uploads when they advertise\n * `caps.features.inlineCreativeManagement`. Use\n * `inlineCreativesForPackages(packages, creatives, { assignments })` to\n * project `sync_creatives`-style creative assets into create-media-buy\n * package payloads without rewriting a raw `sync_creatives` call. If using\n * assignments for create payloads, give each package a stable key such as\n * `context.buyer_ref`, or pass a custom `packageId` resolver.\n *\n * For adopters writing strictly to v1 sellers — or for products whose\n * `format_options[]` entries don't publish `format_option_id` — see the\n * `legacyFormatIdsFromOptions` / `tryLegacyFormatIdsFromOptions` /\n * `legacyFormatIdsForFormatOption` helpers in `@adcp/sdk/v2/projection`.\n *\n * `packageRefsForFormatOptions` throws `FormatOptionRefsLookupError`\n * with a normalized `.code` in `{ 'unknown_format_option_id' |\n * 'format_option_refs_not_published' | 'empty_input' | 'invalid_product' }`\n * — branch on `.code` to fall back to the `legacy*` helpers when the\n * product is V1-shape only. See the helper JSDoc for the full\n * recovery example.\n */\n async createMediaBuy(\n params: MutatingRequestInput<CreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreateMediaBuyResponse>> {\n const result = await this.client.createMediaBuy(params, inputHandler, {\n ...this.withSession('create_media_buy', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Update an existing media buy.\n *\n * For sellers without a creative library but with\n * `caps.features.inlineCreativeManagement`, post-create creative replacement\n * can be represented as package-scoped inline `packages[].creatives` on this\n * request. Build the package patch with `inlineCreativesForPackages()` and\n * preflight it with `preflightUpdateMediaBuy(currentBuy, patch)` so\n * `available_actions[]` allows `replace_creative` before dispatch.\n */\n async updateMediaBuy(\n params: MutatingRequestInput<UpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdateMediaBuyResponse>> {\n const result = await this.client.updateMediaBuy(params, inputHandler, {\n ...this.withSession('update_media_buy', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Sync creative assets into the seller's reusable creative library.\n *\n * This is library-scoped: assignments can reference packages, but a raw\n * `sync_creatives` request does not contain enough media-buy context for the\n * SDK to safely rewrite it into inline package creatives. When the seller\n * lacks `creative.has_creative_library` but does advertise\n * `media_buy.features.inline_creative_management`, use\n * `inlineCreativesForPackages()` with explicit package/media-buy context and\n * send a separate `create_media_buy` or `update_media_buy` request with its\n * own idempotency key. If neither capability is advertised, creative upload\n * is not available through this SDK helper surface.\n */\n async syncCreatives(\n params: MutatingRequestInput<SyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncCreativesResponse>> {\n const result = await this.client.syncCreatives(params, inputHandler, {\n ...this.withSession('sync_creatives', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * List creative assets\n */\n async listCreatives(\n params: ListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativesResponse>> {\n const result = await this.client.listCreatives(params, inputHandler, {\n ...this.withSession('list_creatives', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get media buy status, creative approvals, and optional delivery snapshots\n */\n async getMediaBuys(\n params: GetMediaBuysRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuysResponse>> {\n const result = await this.client.getMediaBuys(params, inputHandler, {\n ...this.withSession('get_media_buys', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get media buy delivery information\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuyDeliveryResponse>> {\n const result = await this.client.getMediaBuyDelivery(params, inputHandler, {\n ...this.withSession('get_media_buy_delivery', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Provide performance feedback\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>> {\n const result = await this.client.providePerformanceFeedback(params, inputHandler, {\n ...this.withSession('provide_performance_feedback', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== SIGNALS TASKS ======\n\n /**\n * Get audience signals\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>> {\n const result = await this.client.getSignals(params, inputHandler, this.withSession('get_signals', options));\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Activate audience signals\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>> {\n const result = await this.client.activateSignal(params, inputHandler, {\n ...this.withSession('activate_signal', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== PROTOCOL TASKS ======\n\n /**\n * Get AdCP capabilities (v3 tool call)\n */\n async getAdcpCapabilities(\n params: GetAdCPCapabilitiesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetAdCPCapabilitiesResponse>> {\n const result = await this.client.getAdcpCapabilities(params, inputHandler, {\n ...this.withSession('get_adcp_capabilities', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get normalized capabilities with v2/v3 fallback\n *\n * For v3 servers: calls get_adcp_capabilities tool\n * For v2 servers: builds synthetic capabilities from tool list\n */\n async getCapabilities(options?: Pick<TaskOptions, 'signal' | 'transport'>): Promise<AdcpCapabilities> {\n return this.client.getCapabilities(options);\n }\n\n /**\n * Return the seller's declared `adcp.idempotency.replay_ttl_seconds`, or\n * throw when a v3 seller omits the (required) declaration.\n *\n * Returns `undefined` for v2 agents — v2 pre-dates the idempotency envelope.\n */\n async getIdempotencyReplayTtlSeconds(): Promise<number | undefined> {\n return this.client.getIdempotencyReplayTtlSeconds();\n }\n\n /**\n * Assert that the seller's capabilities corroborate this client's pinned\n * AdCP major (per `getAdcpVersion()`). Throws `VersionUnsupportedError`\n * otherwise. Set `ADCP_ALLOW_V2=1` to bypass.\n */\n async requireSupportedMajor(taskType: string = 'request'): Promise<void> {\n return this.client.requireSupportedMajor(taskType);\n }\n\n /**\n * Deprecated alias for {@link requireSupportedMajor}.\n * @deprecated Use `requireSupportedMajor()` instead.\n */\n async requireV3(taskType: string = 'request'): Promise<void> {\n return this.client.requireSupportedMajor(taskType);\n }\n\n /**\n * Preview a creative\n */\n async previewCreative(\n params: PreviewCreativeRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<PreviewCreativeResponse>> {\n const result = await this.client.previewCreative(params, inputHandler, {\n ...this.withSession('preview_creative', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Build a creative from format and brand context\n */\n async buildCreative(\n params: MutatingRequestInput<BuildCreativeRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<BuildCreativeResponse>> {\n const result = await this.client.buildCreative(params, inputHandler, {\n ...this.withSession('build_creative', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== ACCOUNT & AUDIENCE TASKS ======\n\n /**\n * List accounts\n */\n async listAccounts(\n params: ListAccountsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListAccountsResponse>> {\n const result = await this.client.listAccounts(params, inputHandler, {\n ...this.withSession('list_accounts', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Sync accounts\n */\n async syncAccounts(\n params: MutatingRequestInput<SyncAccountsRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncAccountsResponse>> {\n const result = await this.client.syncAccounts(params, inputHandler, {\n ...this.withSession('sync_accounts', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Sync audiences\n */\n async syncAudiences(\n params: MutatingRequestInput<SyncAudiencesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncAudiencesResponse>> {\n const result = await this.client.syncAudiences(params, inputHandler, {\n ...this.withSession('sync_audiences', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== GOVERNANCE TASKS ======\n\n /**\n * Create a property list\n */\n async createPropertyList(\n params: MutatingRequestInput<CreatePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreatePropertyListResponse>> {\n const result = await this.client.createPropertyList(params, inputHandler, {\n ...this.withSession('create_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Get a property list\n */\n async getPropertyList(\n params: GetPropertyListRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetPropertyListResponse>> {\n const result = await this.client.getPropertyList(params, inputHandler, {\n ...this.withSession('get_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Update a property list\n */\n async updatePropertyList(\n params: MutatingRequestInput<UpdatePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdatePropertyListResponse>> {\n const result = await this.client.updatePropertyList(params, inputHandler, {\n ...this.withSession('update_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * List property lists\n */\n async listPropertyLists(\n params: ListPropertyListsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListPropertyListsResponse>> {\n const result = await this.client.listPropertyLists(params, inputHandler, {\n ...this.withSession('list_property_lists', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Delete a property list\n */\n async deletePropertyList(\n params: MutatingRequestInput<DeletePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<DeletePropertyListResponse>> {\n const result = await this.client.deletePropertyList(params, inputHandler, {\n ...this.withSession('delete_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * List content standards\n */\n async listContentStandards(\n params: ListContentStandardsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListContentStandardsResponse>> {\n const result = await this.client.listContentStandards(params, inputHandler, {\n ...this.withSession('list_content_standards', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Get content standards\n */\n async getContentStandards(\n params: GetContentStandardsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetContentStandardsResponse>> {\n const result = await this.client.getContentStandards(params, inputHandler, {\n ...this.withSession('get_content_standards', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Calibrate content against standards\n */\n async calibrateContent(\n params: MutatingRequestInput<CalibrateContentRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CalibrateContentResponse>> {\n const result = await this.client.calibrateContent(params, inputHandler, {\n ...this.withSession('calibrate_content', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Validate content delivery\n */\n async validateContentDelivery(\n params: ValidateContentDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ValidateContentDeliveryResponse>> {\n const result = await this.client.validateContentDelivery(params, inputHandler, {\n ...this.withSession('validate_content_delivery', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== SPONSORED INTELLIGENCE TASKS ======\n\n /**\n * Get an SI offering\n */\n async siGetOffering(\n params: SIGetOfferingRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SIGetOfferingResponse>> {\n const result = await this.client.siGetOffering(params, inputHandler, {\n ...this.withSession('si_get_offering', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Initiate an SI session\n */\n async siInitiateSession(\n params: MutatingRequestInput<SIInitiateSessionRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SIInitiateSessionResponse>> {\n const result = await this.client.siInitiateSession(params, inputHandler, {\n ...this.withSession('si_initiate_session', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Send a message in an SI session\n */\n async siSendMessage(\n params: MutatingRequestInput<SISendMessageRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SISendMessageResponse>> {\n const result = await this.client.siSendMessage(params, inputHandler, {\n ...this.withSession('si_send_message', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Terminate an SI session\n */\n async siTerminateSession(\n params: SITerminateSessionRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SITerminateSessionResponse>> {\n const result = await this.client.siTerminateSession(params, inputHandler, {\n ...this.withSession('si_terminate_session', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== CONVERSATION MANAGEMENT ======\n\n /**\n * Continue the conversation with a natural language message\n *\n * @param message - Natural language message to send to the agent\n * @param inputHandler - Handler for any clarification requests\n *\n * @example\n * ```typescript\n * const agent = multiClient.agent('my-agent');\n * await agent.getProducts({ brief: 'Tech products' });\n *\n * // Continue the conversation\n * const refined = await agent.continueConversation(\n * 'Focus only on laptops under $1000'\n * );\n * ```\n */\n async continueConversation<T = any>(\n message: string,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>> {\n if (!this.currentContextId) {\n throw new Error('No active conversation to continue. Start with a task method first.');\n }\n\n const result = await this.client.continueConversation<T>(message, this.currentContextId, inputHandler);\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get the full conversation history\n */\n getHistory(): Message[] | undefined {\n if (!this.currentContextId) {\n return undefined;\n }\n return this.client.getConversationHistory(this.currentContextId);\n }\n\n /**\n * Clear the conversation context (start fresh).\n *\n * Equivalent to `resetContext()` — clears both the retained `contextId`\n * and any pending server-side `taskId`, and drops cached history.\n */\n clearContext(): void {\n this.resetContext();\n }\n\n /**\n * Reset conversation state. Call with no args to start a fresh\n * conversation; pass a seed to rehydrate a persisted session id (e.g.,\n * across a process restart).\n *\n * Always clears the retained pending-task handle — a persisted `contextId`\n * places the next send into the same server-side session, but any old\n * `taskId` is stale.\n */\n resetContext(seed?: string): void {\n if (this.currentContextId) {\n this.client.clearConversationHistory(this.currentContextId);\n }\n this.currentContextId = seed;\n this.pendingTask = undefined;\n }\n\n /**\n * Get the current conversation context ID\n */\n getContextId(): string | undefined {\n return this.currentContextId;\n }\n\n /**\n * Get the pending server-side `taskId` from the last non-terminal\n * response, if any. Populated when the server returned\n * `input-required` / `working` / `submitted` / `auth-required`;\n * cleared when the task reaches a terminal state.\n *\n * Persist this alongside `getContextId()` if you need to resume a\n * specific task (not just a conversation) across a process restart.\n */\n getPendingTaskId(): string | undefined {\n return this.pendingTask?.taskId;\n }\n\n /**\n * Set a specific conversation context ID\n */\n setContextId(contextId: string): void {\n this.currentContextId = contextId;\n }\n\n // ====== AGENT INFORMATION ======\n\n /**\n * Get the agent configuration\n */\n getAgent(): AgentConfig {\n return this.client.getAgent();\n }\n\n /**\n * Get the agent ID\n */\n getAgentId(): string {\n return this.client.getAgentId();\n }\n\n /**\n * Get the agent name\n */\n getAgentName(): string {\n return this.client.getAgentName();\n }\n\n /**\n * Get the agent protocol\n */\n getProtocol(): 'mcp' | 'a2a' {\n return this.client.getProtocol();\n }\n\n /**\n * Get the canonical base URL for this agent\n *\n * Returns the canonical URL if already resolved, or computes it synchronously.\n * For guaranteed canonical URL (especially for A2A), use resolveCanonicalUrl() first.\n */\n getCanonicalUrl(): string {\n return this.client.getCanonicalUrl();\n }\n\n /**\n * Resolve and return the canonical base URL for this agent\n *\n * For A2A: Fetches the agent card and uses its 'url' field\n * For MCP: Performs endpoint discovery and strips /mcp suffix\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n * Use `getAgentId()` / `getAgentName()` for identification instead.\n */\n async resolveCanonicalUrl(): Promise<string> {\n if (this._isInProcess) {\n throw new Error(\n 'resolveCanonicalUrl() is not supported on in-process AgentClient instances. ' +\n 'Use getAgentId() or getAgentName() to identify this client.'\n );\n }\n return this.client.resolveCanonicalUrl();\n }\n\n /**\n * Check if this agent is the same as another agent by canonical URL\n */\n isSameAgent(other: AgentConfig | AgentClient): boolean {\n if (other instanceof AgentClient) {\n // Compare using the other client's agent config\n return this.client.isSameAgent(other.getAgent());\n }\n return this.client.isSameAgent(other);\n }\n\n /**\n * Async version that resolves canonical URLs first for more accurate comparison\n */\n async isSameAgentResolved(other: AgentConfig | AgentClient): Promise<boolean> {\n const otherIsInProcess = other instanceof AgentClient && other._isInProcess;\n if (this._isInProcess || otherIsInProcess) {\n // In-process agents have no canonical URL to resolve — compare sentinel IDs instead.\n const thisId = this.getAgentId();\n const otherId = other instanceof AgentClient ? other.getAgentId() : other.id;\n return thisId === otherId;\n }\n if (other instanceof AgentClient) {\n // Resolve both sides first\n await this.resolveCanonicalUrl();\n await other.resolveCanonicalUrl();\n // Then compare using the resolved agent config\n return this.client.isSameAgent(other.getAgent());\n }\n return this.client.isSameAgentResolved(other);\n }\n\n /**\n * Get the fully resolved agent configuration with canonical URL\n */\n async getResolvedAgent(): Promise<AgentConfig> {\n return this.client.getResolvedAgent();\n }\n\n /**\n * Get agent information including capabilities\n */\n async getAgentInfo(options?: Pick<TaskOptions, 'signal' | 'transport'>) {\n return this.client.getAgentInfo(options);\n }\n\n /**\n * Check if there's an active conversation\n */\n hasActiveConversation(): boolean {\n return this.currentContextId !== undefined;\n }\n\n /**\n * Get active tasks for this agent\n */\n getActiveTasks() {\n return this.client.getActiveTasks();\n }\n\n // ====== GENERIC TASK EXECUTION ======\n\n /**\n * Execute any ADCP task by name with full type safety\n *\n * @example\n * ```typescript\n * // ✅ TYPE-SAFE: Automatic response type inference\n * const result = await agent.executeTask('get_products', params);\n * // result is TaskResult<GetProductsResponse> - no casting needed!\n *\n * // ✅ CUSTOM TYPES: For non-standard tasks\n * const customResult = await agent.executeTask<MyCustomResponse>('custom_task', params);\n * ```\n */\n async executeTask<K extends AdcpTaskName>(\n taskName: K,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<TaskResponseTypeMap[K]>>;\n\n /**\n * Execute a task by name with custom response type\n */\n async executeTask<T = unknown>(\n taskName: string,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>>;\n\n async executeTask<T = unknown>(\n taskName: string,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>> {\n const result = await this.client.executeTask<T>(taskName, params, inputHandler, {\n ...this.withSession(taskName, options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== TASK MANAGEMENT DELEGATION ======\n\n /**\n * List all tasks for this agent\n */\n async listTasks(): Promise<TaskInfo[]> {\n return this.client.listTasks();\n }\n\n /**\n * Get detailed information about a specific task\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n return this.client.getTaskInfo(taskId);\n }\n\n /**\n * Subscribe to task notifications for this agent\n */\n onTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n return this.client.onTaskUpdate(callback);\n }\n\n /**\n * Subscribe to all task events\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n return this.client.onTaskEvents(callbacks);\n }\n\n /**\n * Generate webhook URL for a specific task and operation.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n * In-process clients have no HTTP listener to receive webhook callbacks.\n */\n getWebhookUrl(taskType: string, operationId: string): string {\n if (this._isInProcess) {\n throw new Error(\n 'getWebhookUrl() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Register webhook for task notifications.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n */\n async registerWebhook(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n if (this._isInProcess) {\n throw new Error(\n 'registerWebhook() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.registerWebhook(webhookUrl, taskTypes);\n }\n\n /**\n * Unregister webhook notifications.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n */\n async unregisterWebhook(): Promise<void> {\n if (this._isInProcess) {\n throw new Error(\n 'unregisterWebhook() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.unregisterWebhook();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/core/AgentClient.ts"],"sourcesContent":["// Per-agent client wrapper with conversation context preservation\n\nimport type { Client as MCPClient } from '@modelcontextprotocol/sdk/client/index.js';\nimport { randomUUID } from 'node:crypto';\nimport type { AgentConfig } from '../types';\nimport type { MCPWebhookPayload } from '../types/core.generated';\nimport type { Task as A2ATask, TaskStatusUpdateEvent } from '@a2a-js/sdk';\nimport {\n SingleAgentClient,\n type SingleAgentClientConfig,\n type VerifyAndParseWebhookOptions,\n type WebhookParseResult,\n} from './SingleAgentClient';\nimport type { InputHandler, TaskOptions, TaskResult, TaskInfo, Message } from './ConversationTypes';\nimport type { AdcpCapabilities } from '../utils/capabilities';\nimport type { WebhookHeaderValue } from '../webhooks';\nimport type {\n GetProductsRequest,\n GetProductsResponse,\n ListCreativeFormatsRequest,\n ListCreativeFormatsResponse,\n CreateMediaBuyRequest,\n CreateMediaBuyResponse,\n UpdateMediaBuyRequest,\n UpdateMediaBuyResponse,\n SyncCreativesRequest,\n SyncCreativesResponse,\n ListCreativesRequest,\n ListCreativesResponse,\n GetMediaBuysRequest,\n GetMediaBuysResponse,\n GetMediaBuyDeliveryRequest,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackRequest,\n ProvidePerformanceFeedbackResponse,\n GetSignalsRequest,\n GetSignalsResponse,\n ActivateSignalRequest,\n ActivateSignalResponse,\n GetAdCPCapabilitiesRequest,\n GetAdCPCapabilitiesResponse,\n PreviewCreativeRequest,\n PreviewCreativeResponse,\n BuildCreativeRequest,\n BuildCreativeResponse,\n ListAccountsRequest,\n ListAccountsResponse,\n SyncAccountsRequest,\n SyncAccountsResponse,\n SyncAudiencesRequest,\n SyncAudiencesResponse,\n CreatePropertyListRequest,\n CreatePropertyListResponse,\n GetPropertyListRequest,\n GetPropertyListResponse,\n UpdatePropertyListRequest,\n UpdatePropertyListResponse,\n ListPropertyListsRequest,\n ListPropertyListsResponse,\n DeletePropertyListRequest,\n DeletePropertyListResponse,\n ListContentStandardsRequest,\n ListContentStandardsResponse,\n GetContentStandardsRequest,\n GetContentStandardsResponse,\n CalibrateContentRequest,\n CalibrateContentResponse,\n ValidateContentDeliveryRequest,\n ValidateContentDeliveryResponse,\n SIGetOfferingRequest,\n SIGetOfferingResponse,\n SIInitiateSessionRequest,\n SIInitiateSessionResponse,\n SISendMessageRequest,\n SISendMessageResponse,\n SITerminateSessionRequest,\n SITerminateSessionResponse,\n} from '../types/tools.generated';\nimport type { MutatingRequestInput } from '../utils/idempotency';\nimport { withFormatOptions } from '../v2/projection/augment-response';\nimport type { V2AugmentedProduct } from '../v2/projection/augment-response';\nimport type { ProjectionDiagnostic, V1Product } from '../v2/projection/types';\n\n/**\n * AdCP 3.1 V2-mental-model envelope attached to `get_products` responses\n * when the SDK auto-projects `format_ids[]` → `format_options[]`.\n *\n * Present whenever projection ran (the default). Adopters reading the\n * V2 surface check `data.projection.diagnostics` to see what didn't\n * project cleanly; absence of diagnostics means every product's\n * `format_options[]` is fully populated (clean catalog match) or was\n * already v2-shaped on the wire.\n */\nexport interface GetProductsProjectionEnvelope {\n /**\n * Structured diagnostics from the v1→v2 augmentation step\n * (`source: 'sdk'`, parseable `sdk_id`, normative or SDK-local\n * `code`). Empty when every product projects cleanly.\n */\n diagnostics: ProjectionDiagnostic[];\n}\n\n/**\n * `GetProductsResponse` with `format_options[]` guaranteed on every\n * product (the V2 mental model) and a `projection` envelope carrying\n * any diagnostics from the v1→v2 augmentation step.\n *\n * Returned by `AgentClient.getProducts()` by default. Callers passing\n * `{ project: false }` opt out of projection and receive the raw\n * generated `GetProductsResponse` instead.\n */\nexport type V2AugmentedGetProductsResponse = Omit<GetProductsResponse, 'products'> & {\n products: V2AugmentedProduct<V1Product>[];\n projection: GetProductsProjectionEnvelope;\n};\n\n/**\n * Type mapping for task names to their response types\n * Enables type-safe generic executeTask() calls\n */\nexport type TaskResponseTypeMap = {\n get_products: GetProductsResponse;\n list_creative_formats: ListCreativeFormatsResponse;\n create_media_buy: CreateMediaBuyResponse;\n update_media_buy: UpdateMediaBuyResponse;\n sync_creatives: SyncCreativesResponse;\n list_creatives: ListCreativesResponse;\n get_media_buys: GetMediaBuysResponse;\n get_media_buy_delivery: GetMediaBuyDeliveryResponse;\n provide_performance_feedback: ProvidePerformanceFeedbackResponse;\n get_signals: GetSignalsResponse;\n activate_signal: ActivateSignalResponse;\n get_adcp_capabilities: GetAdCPCapabilitiesResponse;\n preview_creative: PreviewCreativeResponse;\n build_creative: BuildCreativeResponse;\n list_accounts: ListAccountsResponse;\n sync_accounts: SyncAccountsResponse;\n sync_audiences: SyncAudiencesResponse;\n create_property_list: CreatePropertyListResponse;\n get_property_list: GetPropertyListResponse;\n update_property_list: UpdatePropertyListResponse;\n list_property_lists: ListPropertyListsResponse;\n delete_property_list: DeletePropertyListResponse;\n list_content_standards: ListContentStandardsResponse;\n get_content_standards: GetContentStandardsResponse;\n calibrate_content: CalibrateContentResponse;\n validate_content_delivery: ValidateContentDeliveryResponse;\n si_get_offering: SIGetOfferingResponse;\n si_initiate_session: SIInitiateSessionResponse;\n si_send_message: SISendMessageResponse;\n si_terminate_session: SITerminateSessionResponse;\n};\n\n/**\n * Valid ADCP task names\n */\nexport type AdcpTaskName = keyof TaskResponseTypeMap;\n\n/**\n * Configuration for `AgentClient.fromMCPClient()`.\n *\n * A narrowed subset of `SingleAgentClientConfig` — only includes options that\n * are meaningful for in-process transport. HTTP-only fields (`userAgent`, `headers`,\n * `webhookUrlTemplate`, OAuth paths) are excluded because they have no effect when\n * the client dispatches directly to an in-process MCP `Client`.\n *\n * The fields you most likely want:\n * - `validation` — `requests`/`responses` validation mode (`strict` | `warn` | `off`)\n * - `governance` — buyer-side governance config\n * - `requireV3ForMutations` — enforce AdCP v3 before dispatching mutating tools\n */\nexport type InProcessAgentClientConfig = Pick<\n SingleAgentClientConfig,\n | 'adcpVersion'\n | 'versionEnvelope'\n | 'debug'\n | 'validation'\n | 'governance'\n | 'onActivity'\n | 'validateFeatures'\n | 'requireV3ForMutations'\n | 'allowV2'\n | 'workingTimeout'\n | 'defaultMaxClarifications'\n | 'persistConversations'\n> & {\n /**\n * Human-readable name for this agent, used in debug logs and\n * `getAgentName()`. Defaults to `'in-process'`.\n */\n agentName?: string;\n /**\n * Stable identifier for this agent, used in `getAgentId()`.\n * Defaults to a random string prefixed with `'in-process-'`.\n */\n agentId?: string;\n};\n\n/**\n * Task result states where the server is still holding the task open. While\n * the last response was in one of these states the AgentClient retains the\n * server-returned `taskId` so a follow-up call can resume the same\n * server-side task (HITL approvals, long-running workflows).\n */\nconst NON_TERMINAL_STATES: ReadonlySet<string> = new Set([\n 'working',\n 'input-required',\n 'submitted',\n 'auth-required',\n 'deferred',\n]);\n\n/**\n * Per-agent client that maintains conversation context across calls.\n *\n * **One AgentClient per conversation.** The client retains `contextId` and\n * `pendingTaskId` in-memory so subsequent calls ride the same A2A session.\n * Sharing an AgentClient across concurrent conversations will interleave\n * their contexts (last-write-wins). Create a fresh AgentClient — or call\n * {@link resetContext} — per logical conversation.\n *\n * **Resume across process restart** — persist `getContextId()` after a\n * non-terminal response and pass it to `resetContext(id)` on rehydration.\n * The server will route the next call back to the same session.\n */\n/**\n * Retained server-side task handle. Paired with the `contextId` and skill\n * name under which it was returned so {@link AgentClient.withSession} only\n * auto-threads it when the next call is plausibly a continuation of the\n * SAME task (same skill, same conversation). A different skill or switched\n * contextId signals new work — sending the retained handle in that case\n * produces \"Task not found\" against spec-compliant A2A sellers (per A2A\n * 0.3.0 §3.4 — Message.taskId continues the parent task).\n */\ninterface PendingTaskHandle {\n taskId: string;\n contextId: string;\n taskName: string;\n}\n\nexport class AgentClient {\n private client: SingleAgentClient;\n private currentContextId?: string;\n private pendingTask?: PendingTaskHandle;\n private readonly _isInProcess: boolean;\n\n constructor(\n private agent: AgentConfig,\n private config: SingleAgentClientConfig = {}\n ) {\n this.client = new SingleAgentClient(agent, config);\n this._isInProcess = agent._inProcessMcpClient !== undefined;\n }\n\n /**\n * Internal access to the underlying `TaskExecutor`. Used by the storyboard\n * runner's `pollTaskCompletion` race so it can poll AdCP `tasks/get` against\n * the agent's transport (see `src/lib/testing/storyboard/runner.ts`'s\n * `resolveTaskCompletionOutputs`). Without this surface the runner sees\n * `executor: undefined` on AgentClient and silently falls back to webhook-\n * only racing — which times out for storyboard fixtures that don't address\n * a runner-controlled webhook URL.\n *\n * Not part of the documented client API; production code goes through the\n * tool-specific methods on `AgentClient` / `AdCPClient`. The shape may\n * change without notice if the runner's polling contract evolves.\n *\n * @internal\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- runtime-internal accessor\n get executor(): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- reach-through to the underlying executor\n return (this.client as any).executor;\n }\n\n /**\n * Returns the AdCP protocol version this client speaks. Mirrors\n * `SingleAgentClient.getAdcpVersion()`. See {@link SingleAgentClientConfig.adcpVersion}.\n */\n getAdcpVersion(): string {\n return this.client.getAdcpVersion();\n }\n\n /**\n * Create an `AgentClient` backed by a pre-connected MCP `Client` instead of\n * an HTTP endpoint. Useful for in-process compliance testing without spinning\n * up a loopback HTTP server.\n *\n * **MCP only.** This factory wraps an MCP `Client` from\n * `@modelcontextprotocol/sdk`. There is no equivalent in-process bridge for\n * A2A today — for A2A agents, run them on a loopback HTTP server and use the\n * standard `AgentClient` constructor with the agent's `agent_uri`.\n *\n * **What this gives you over `dispatchTestRequest`:**\n * All client-side pipeline stages still apply — idempotency key auto-injection,\n * request/response schema validation hooks, governance middleware, and the typed\n * `TaskResult<T>` discriminated-union response shape. None of these apply when\n * calling `dispatchTestRequest()` directly.\n *\n * **Usage:**\n * ```ts\n * import { Client } from '@modelcontextprotocol/sdk/client/index.js';\n * import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';\n * import { AgentClient } from '@adcp/sdk';\n *\n * const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();\n * const mcpClient = new Client({ name: 'test', version: '1.0.0' });\n * await Promise.all([\n * mcpClient.connect(clientTransport),\n * adcpServer.connect(serverTransport),\n * ]);\n *\n * const agent = AgentClient.fromMCPClient(mcpClient, {\n * validation: { requests: 'strict' },\n * });\n * const result = await agent.createMediaBuy({ ... });\n * ```\n *\n * **Unsupported methods on in-process instances:** `resolveCanonicalUrl`,\n * `getWebhookUrl`, `registerWebhook`, `unregisterWebhook` — these require HTTP\n * and will throw `Error` with a descriptive message. Use `getAgentId()` /\n * `getAgentName()` for identification instead.\n *\n * @param mcpClient - An already-connected MCP `Client` (see example above).\n * @param config - Optional narrowed config. HTTP-only fields are excluded.\n */\n static fromMCPClient(mcpClient: MCPClient, config: InProcessAgentClientConfig = {}): AgentClient {\n // Reject pre-connect clients up front — MCP `Client.transport` is only set\n // after `client.connect(transport)` resolves. A pre-connect client would\n // fail later inside `listTools()`/`callTool()` with an opaque error; the\n // up-front check produces a clean failure pointing at the construction site.\n if ((mcpClient as { transport?: unknown }).transport === undefined) {\n throw new Error(\n 'AgentClient.fromMCPClient: the supplied MCP Client is not connected. ' +\n 'Call `await client.connect(transport)` before passing it here.'\n );\n }\n const { agentName, agentId, ...rest } = config;\n // Use randomUUID for collision resistance — the agent ID feeds session\n // routing so a debug-label collision (~65k via Math.random base36) could\n // alias two distinct in-process agents in a concurrent test fleet.\n const id = agentId ?? `in-process-${randomUUID()}`;\n // The `adcp-in-process://` scheme is parseable as a URL so existing\n // url-validation paths don't crash, but distinguishable from real http(s)\n // so the SDK skips network discovery + SSRF checks. The protocol layer\n // routes on the presence of `_inProcessMcpClient`, not the URI shape.\n const syntheticAgent: AgentConfig = {\n id,\n name: agentName ?? 'in-process',\n agent_uri: `adcp-in-process://${id}`,\n protocol: 'mcp',\n _inProcessMcpClient: mcpClient,\n };\n return new AgentClient(syntheticAgent, rest as SingleAgentClientConfig);\n }\n\n /**\n * Absorb the session ids the server returned on `result.metadata`:\n * retain `contextId` whenever one is present, and retain a\n * `PendingTaskHandle` (taskId + contextId + skill name) only while the\n * response was non-terminal. Terminal responses clear `pendingTask` so\n * the next call starts a fresh server-side task.\n *\n * The `deferred` case is deliberately asymmetric: deferred results don't\n * surface a new `serverTaskId` on metadata (the caller holds a resume\n * token, not a task-id), so the partial-metadata guard preserves the\n * pre-defer handle — which is exactly what a later resume needs.\n */\n private retainSession<T>(result: TaskResult<T>): void {\n const meta = result.metadata;\n if (meta?.contextId) {\n this.currentContextId = meta.contextId;\n }\n if (NON_TERMINAL_STATES.has(meta?.status as string)) {\n if (meta?.serverTaskId && meta?.contextId && meta?.taskName) {\n this.pendingTask = {\n taskId: meta.serverTaskId,\n contextId: meta.contextId,\n taskName: meta.taskName,\n };\n }\n // Partial metadata preserves the pre-existing handle. Two distinct\n // cases land here: (1) the deferred resume-token path, where the\n // server intentionally omits a new `serverTaskId`; (2) a non-spec\n // A2A Task that lacks `contextId` or surfaces no `taskName` — by\n // design those are NOT retained as a fresh handle, since auto-\n // threading a partially-keyed taskId into a future call is exactly\n // the leak class #1590 narrows.\n } else {\n this.pendingTask = undefined;\n }\n }\n\n /**\n * Merge the caller's `TaskOptions` with the retained session ids so the\n * outbound request carries whatever session continuity is in scope.\n * Caller-supplied ids win (explicit > implicit); unset caller fields fall\n * back to the retained ones.\n *\n * **Auto-threading the retained taskId is narrowed.** Per A2A 0.3.0 §3.4,\n * `Message.taskId` continues the parent task — sending it implies \"this\n * message belongs to that task.\" We auto-thread `pendingTask.taskId` only\n * when the next call is plausibly a continuation: same skill name AND\n * same effective contextId. A different skill (different work) or a\n * switched contextId signals new work; the retained handle is stale, and\n * sending it produces \"Task not found\" against spec-compliant sellers.\n *\n * HITL flows (e.g., `createMediaBuy` → `input-required` → `createMediaBuy`\n * resume) match same-skill same-context and continue to thread as before.\n * Cross-skill or cross-conversation reuse of one `AgentClient` no longer\n * leaks taskIds — see #1585 / #1590 for the motivating compliance scenario.\n */\n private withSession(taskName: string, options?: TaskOptions): TaskOptions {\n const explicitSwitch = options?.contextId !== undefined && options.contextId !== this.currentContextId;\n const effectiveContextId = options?.contextId ?? this.currentContextId;\n const continuation =\n !explicitSwitch &&\n this.pendingTask !== undefined &&\n this.pendingTask.contextId === effectiveContextId &&\n this.pendingTask.taskName === taskName;\n return {\n ...options,\n contextId: effectiveContextId,\n taskId: options?.taskId ?? (continuation ? this.pendingTask?.taskId : undefined),\n };\n }\n\n /**\n * Handle webhook from agent (async task completion or notifications)\n *\n * @param payload - Webhook payload from agent\n * @param taskType - Task type (e.g create_media_buy) from url param or url part of the webhook delivery\n * @param operationId - Operation id (e.g used for client app to track the operation) from the param or url part of the webhook delivery\n * @param signature - Optional signature for verification (X-ADCP-Signature)\n * @param timestamp - Optional timestamp for verification (X-ADCP-Timestamp)\n * @param taskType - Task type from URL path (e.g., 'create_media_buy')\n * @returns Whether webhook was handled successfully\n */\n async handleWebhook(\n payload: MCPWebhookPayload | A2ATask | TaskStatusUpdateEvent,\n taskType: string,\n operationId: string,\n signature?: WebhookHeaderValue,\n timestamp?: WebhookHeaderValue,\n rawBody?: string | Buffer | Uint8Array\n ): Promise<boolean> {\n return this.client.handleWebhook(payload, taskType, operationId, signature, timestamp, rawBody);\n }\n\n /**\n * Verify and normalize an inbound webhook without dispatching handlers.\n */\n async verifyAndParseWebhook(options: VerifyAndParseWebhookOptions): Promise<WebhookParseResult> {\n return this.client.verifyAndParseWebhook(options);\n }\n\n /**\n * Verify webhook signature using HMAC-SHA256 per AdCP spec.\n *\n * Prefer passing the raw HTTP body string for correct cross-language interop.\n * Passing a parsed object still works but re-serializes with JSON.stringify,\n * which may not match the sender's byte representation.\n *\n * @param rawBodyOrPayload - Raw HTTP body string (preferred) or parsed payload object (deprecated)\n * @param signature - X-ADCP-Signature header value (format: \"sha256=...\")\n * @param timestamp - X-ADCP-Timestamp header value (Unix timestamp)\n * @returns true if signature is valid\n */\n verifyWebhookSignature(\n rawBodyOrPayload: string | Buffer | Uint8Array | unknown,\n signature: WebhookHeaderValue,\n timestamp: WebhookHeaderValue\n ): boolean {\n return this.client.verifyWebhookSignature(rawBodyOrPayload, signature, timestamp);\n }\n\n // ====== MEDIA BUY TASKS ======\n\n /**\n * Discover available advertising products.\n *\n * By default, response products are augmented with the AdCP 3.1\n * `format_options[]` declaration (the V2 mental model). When the\n * seller emitted v1 `format_ids[]`, the SDK projects them via the\n * AAO canonical-formats catalog so buyers always read the same\n * V2 shape regardless of wire version. The original `format_ids[]`\n * is preserved alongside `format_options[]` (additive — 7.x\n * callers reading `format_ids` keep working).\n *\n * Projection diagnostics surface on\n * `result.data.projection.diagnostics` (structured\n * `source: 'sdk'` markers; codes mirror the spec's error-code\n * vocabulary plus three SDK-local codes — see the projection\n * module's `ProjectionDiagnostic` type for the full set).\n *\n * Pass `{ project: false }` to opt out and receive the raw wire\n * response unmodified — useful for storyboard / compliance\n * harnesses asserting exact seller emission. The opt-out narrows\n * the return type back to `GetProductsResponse` (no `projection`\n * envelope, no guaranteed `format_options[]`).\n *\n * The 8.0 release narrows further by removing `format_ids[]` from\n * the public Product type entirely.\n */\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: true }\n ): Promise<TaskResult<V2AugmentedGetProductsResponse>>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project: false }\n ): Promise<TaskResult<GetProductsResponse>>;\n async getProducts(\n params: GetProductsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions & { project?: boolean }\n ): Promise<TaskResult<GetProductsResponse | V2AugmentedGetProductsResponse>> {\n const { project, ...sessionOptions } = options ?? {};\n const result = await this.client.getProducts(params, inputHandler, {\n ...this.withSession('get_products', sessionOptions),\n });\n\n this.retainSession(result);\n\n if (project === false) {\n return result;\n }\n\n // Augment on the way out. Only the completed-success branch carries\n // `data` we can project; failure / intermediate results pass through\n // unchanged so the discriminated-union narrowing on the caller side\n // still works.\n if (result.success && result.status === 'completed' && result.data) {\n // The generated `GetProductsResponse.products: Product[]` shape is\n // structurally broader than the projection layer's loose `V1Product`\n // (which requires `format_ids` and an index signature). We treat the\n // generated shape as a v1 product on the way through projection — the\n // augmentation is purely additive and doesn't read the fields the\n // generated type has but `V1Product` doesn't.\n const { response, diagnostics } = withFormatOptions(result.data as unknown as { products?: V1Product[] });\n const augmented: V2AugmentedGetProductsResponse = {\n ...(response as unknown as Omit<GetProductsResponse, 'products'> & {\n products: V2AugmentedProduct<V1Product>[];\n }),\n projection: { diagnostics },\n };\n return {\n ...result,\n data: augmented,\n };\n }\n return result;\n }\n\n /**\n * List available creative formats\n */\n async listCreativeFormats(\n params: ListCreativeFormatsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativeFormatsResponse>> {\n const result = await this.client.listCreativeFormats(params, inputHandler, {\n ...this.withSession('list_creative_formats', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Create a new media buy.\n *\n * **3.1+ format-option write flow (preferred at 3.1.0-beta.5+).** After\n * `getProducts()` returns the V2-augmented response (`format_options[]`\n * auto-populated), pick declarations by `format_option_id` and use\n * `packageRefsForFormatOptions` to author the package. The helper emits\n * BOTH `format_option_refs[]` (the 3.1+ path) AND `format_ids[]`\n * (legacy named-format dual emission) so a single request works against\n * both format-option-aware and legacy sellers.\n *\n * ```ts\n * import { packageRefsForFormatOptions } from '@adcp/sdk/v2/projection';\n *\n * const { data: { products } } = await agent.getProducts({ brief: '...' });\n * const product = products[0];\n *\n * await agent.createMediaBuy({\n * packages: [{\n * package_id: 'pkg-1',\n * product_id: product.product_id,\n * pricing_option_id: product.pricing_options[0].pricing_option_id,\n * ...packageRefsForFormatOptions(product, ['nytimes_mrec', 'nytimes_video_30s']),\n * // ↑ spreads `{ format_option_refs, format_ids? }`\n * budget: { currency: 'USD', total: 5000 },\n * }],\n * // ...\n * });\n * ```\n *\n * The resulting wire payload for the package looks like:\n *\n * ```json\n * {\n * \"package_id\": \"pkg-1\",\n * \"product_id\": \"...\",\n * \"pricing_option_id\": \"...\",\n * \"format_option_refs\": [\n * {\"scope\": \"product\", \"format_option_id\": \"nytimes_mrec\"},\n * {\"scope\": \"product\", \"format_option_id\": \"nytimes_video_30s\"}\n * ],\n * \"format_ids\": [\n * {\"agent_url\": \"https://creative.adcontextprotocol.org/\", \"id\": \"display_300x250_image\"},\n * {\"agent_url\": \"https://creative.adcontextprotocol.org/\", \"id\": \"video_standard_30s\"}\n * ],\n * \"budget\": {\"currency\": \"USD\", \"total\": 5000}\n * }\n * ```\n *\n * `format_ids` is omitted entirely when every chosen format option is V2-only\n * (the spec's \"neither present\" fallback fires for v1 sellers in that case).\n *\n * **Inline creative fallback.** Sellers that do not advertise a creative\n * library (`supportsSyncCreatives(await agent.getCapabilities()) === false`)\n * can still accept package-scoped creative uploads when they advertise\n * `caps.features.inlineCreativeManagement`. Use\n * `inlineCreativesForPackages(packages, creatives, { assignments })` to\n * project `sync_creatives`-style creative assets into create-media-buy\n * package payloads without rewriting a raw `sync_creatives` call. If using\n * assignments for create payloads, give each package a stable key such as\n * `context.buyer_ref`, or pass a custom `packageId` resolver.\n *\n * For adopters writing strictly to v1 sellers — or for products whose\n * `format_options[]` entries don't publish `format_option_id` — see the\n * `legacyFormatIdsFromOptions` / `tryLegacyFormatIdsFromOptions` /\n * `legacyFormatIdsForFormatOption` helpers in `@adcp/sdk/v2/projection`.\n *\n * `packageRefsForFormatOptions` throws `FormatOptionRefsLookupError`\n * with a normalized `.code` in `{ 'unknown_format_option_id' |\n * 'format_option_refs_not_published' | 'empty_input' | 'invalid_product' }`\n * — branch on `.code` to fall back to the `legacy*` helpers when the\n * product is V1-shape only. See the helper JSDoc for the full\n * recovery example.\n */\n async createMediaBuy(\n params: MutatingRequestInput<CreateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreateMediaBuyResponse>> {\n const result = await this.client.createMediaBuy(params, inputHandler, {\n ...this.withSession('create_media_buy', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Update an existing media buy.\n *\n * For sellers without a creative library but with\n * `caps.features.inlineCreativeManagement`, post-create creative replacement\n * can be represented as package-scoped inline `packages[].creatives` on this\n * request. Build the package patch with `inlineCreativesForPackages()` and\n * preflight it with `preflightUpdateMediaBuy(currentBuy, patch)` so\n * `available_actions[]` allows `replace_creative` before dispatch.\n */\n async updateMediaBuy(\n params: MutatingRequestInput<UpdateMediaBuyRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdateMediaBuyResponse>> {\n const result = await this.client.updateMediaBuy(params, inputHandler, {\n ...this.withSession('update_media_buy', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Sync creative assets into the seller's reusable creative library.\n *\n * This is library-scoped: assignments can reference packages, but a raw\n * `sync_creatives` request does not contain enough media-buy context for the\n * SDK to safely rewrite it into inline package creatives. When the seller\n * lacks `creative.has_creative_library` but does advertise\n * `media_buy.features.inline_creative_management`, use\n * `inlineCreativesForPackages()` with explicit package/media-buy context and\n * send a separate `create_media_buy` or `update_media_buy` request with its\n * own idempotency key. If neither capability is advertised, creative upload\n * is not available through this SDK helper surface.\n */\n async syncCreatives(\n params: MutatingRequestInput<SyncCreativesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncCreativesResponse>> {\n const result = await this.client.syncCreatives(params, inputHandler, {\n ...this.withSession('sync_creatives', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * List creative assets\n */\n async listCreatives(\n params: ListCreativesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListCreativesResponse>> {\n const result = await this.client.listCreatives(params, inputHandler, {\n ...this.withSession('list_creatives', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get media buy status, creative approvals, and optional delivery snapshots\n */\n async getMediaBuys(\n params: GetMediaBuysRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuysResponse>> {\n const result = await this.client.getMediaBuys(params, inputHandler, {\n ...this.withSession('get_media_buys', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get media buy delivery information\n */\n async getMediaBuyDelivery(\n params: GetMediaBuyDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetMediaBuyDeliveryResponse>> {\n const result = await this.client.getMediaBuyDelivery(params, inputHandler, {\n ...this.withSession('get_media_buy_delivery', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Provide performance feedback\n */\n async providePerformanceFeedback(\n params: MutatingRequestInput<ProvidePerformanceFeedbackRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ProvidePerformanceFeedbackResponse>> {\n const result = await this.client.providePerformanceFeedback(params, inputHandler, {\n ...this.withSession('provide_performance_feedback', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== SIGNALS TASKS ======\n\n /**\n * Get audience signals\n */\n async getSignals(\n params: GetSignalsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetSignalsResponse>> {\n const result = await this.client.getSignals(params, inputHandler, this.withSession('get_signals', options));\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Activate audience signals\n */\n async activateSignal(\n params: MutatingRequestInput<ActivateSignalRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ActivateSignalResponse>> {\n const result = await this.client.activateSignal(params, inputHandler, {\n ...this.withSession('activate_signal', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== PROTOCOL TASKS ======\n\n /**\n * Get AdCP capabilities (v3 tool call)\n */\n async getAdcpCapabilities(\n params: GetAdCPCapabilitiesRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetAdCPCapabilitiesResponse>> {\n const result = await this.client.getAdcpCapabilities(params, inputHandler, {\n ...this.withSession('get_adcp_capabilities', options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get normalized capabilities with v2/v3 fallback\n *\n * For v3 servers: calls get_adcp_capabilities tool\n * For v2 servers: builds synthetic capabilities from tool list\n */\n async getCapabilities(options?: Pick<TaskOptions, 'signal' | 'transport'>): Promise<AdcpCapabilities> {\n return this.client.getCapabilities(options);\n }\n\n /**\n * Return the seller's declared `adcp.idempotency.replay_ttl_seconds`, or\n * throw when a v3 seller omits the (required) declaration.\n *\n * Returns `undefined` for v2 agents — v2 pre-dates the idempotency envelope.\n */\n async getIdempotencyReplayTtlSeconds(): Promise<number | undefined> {\n return this.client.getIdempotencyReplayTtlSeconds();\n }\n\n /**\n * Assert that the seller's capabilities corroborate this client's pinned\n * AdCP major (per `getAdcpVersion()`). Throws `VersionUnsupportedError`\n * otherwise. Set `ADCP_ALLOW_V2=1` to bypass.\n */\n async requireSupportedMajor(taskType: string = 'request'): Promise<void> {\n return this.client.requireSupportedMajor(taskType);\n }\n\n /**\n * Deprecated alias for {@link requireSupportedMajor}.\n * @deprecated Use `requireSupportedMajor()` instead.\n */\n async requireV3(taskType: string = 'request'): Promise<void> {\n return this.client.requireSupportedMajor(taskType);\n }\n\n /**\n * Preview a creative\n */\n async previewCreative(\n params: PreviewCreativeRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<PreviewCreativeResponse>> {\n const result = await this.client.previewCreative(params, inputHandler, {\n ...this.withSession('preview_creative', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Build a creative from format and brand context\n */\n async buildCreative(\n params: MutatingRequestInput<BuildCreativeRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<BuildCreativeResponse>> {\n const result = await this.client.buildCreative(params, inputHandler, {\n ...this.withSession('build_creative', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== ACCOUNT & AUDIENCE TASKS ======\n\n /**\n * List accounts\n */\n async listAccounts(\n params: ListAccountsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListAccountsResponse>> {\n const result = await this.client.listAccounts(params, inputHandler, {\n ...this.withSession('list_accounts', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Sync accounts\n */\n async syncAccounts(\n params: MutatingRequestInput<SyncAccountsRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncAccountsResponse>> {\n const result = await this.client.syncAccounts(params, inputHandler, {\n ...this.withSession('sync_accounts', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Sync audiences\n */\n async syncAudiences(\n params: MutatingRequestInput<SyncAudiencesRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SyncAudiencesResponse>> {\n const result = await this.client.syncAudiences(params, inputHandler, {\n ...this.withSession('sync_audiences', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== GOVERNANCE TASKS ======\n\n /**\n * Create a property list\n */\n async createPropertyList(\n params: MutatingRequestInput<CreatePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CreatePropertyListResponse>> {\n const result = await this.client.createPropertyList(params, inputHandler, {\n ...this.withSession('create_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Get a property list\n */\n async getPropertyList(\n params: GetPropertyListRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetPropertyListResponse>> {\n const result = await this.client.getPropertyList(params, inputHandler, {\n ...this.withSession('get_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Update a property list\n */\n async updatePropertyList(\n params: MutatingRequestInput<UpdatePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<UpdatePropertyListResponse>> {\n const result = await this.client.updatePropertyList(params, inputHandler, {\n ...this.withSession('update_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * List property lists\n */\n async listPropertyLists(\n params: ListPropertyListsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListPropertyListsResponse>> {\n const result = await this.client.listPropertyLists(params, inputHandler, {\n ...this.withSession('list_property_lists', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Delete a property list\n */\n async deletePropertyList(\n params: MutatingRequestInput<DeletePropertyListRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<DeletePropertyListResponse>> {\n const result = await this.client.deletePropertyList(params, inputHandler, {\n ...this.withSession('delete_property_list', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * List content standards\n */\n async listContentStandards(\n params: ListContentStandardsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ListContentStandardsResponse>> {\n const result = await this.client.listContentStandards(params, inputHandler, {\n ...this.withSession('list_content_standards', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Get content standards\n */\n async getContentStandards(\n params: GetContentStandardsRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<GetContentStandardsResponse>> {\n const result = await this.client.getContentStandards(params, inputHandler, {\n ...this.withSession('get_content_standards', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Calibrate content against standards\n */\n async calibrateContent(\n params: MutatingRequestInput<CalibrateContentRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<CalibrateContentResponse>> {\n const result = await this.client.calibrateContent(params, inputHandler, {\n ...this.withSession('calibrate_content', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Validate content delivery\n */\n async validateContentDelivery(\n params: ValidateContentDeliveryRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<ValidateContentDeliveryResponse>> {\n const result = await this.client.validateContentDelivery(params, inputHandler, {\n ...this.withSession('validate_content_delivery', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== SPONSORED INTELLIGENCE TASKS ======\n\n /**\n * Get an SI offering\n */\n async siGetOffering(\n params: SIGetOfferingRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SIGetOfferingResponse>> {\n const result = await this.client.siGetOffering(params, inputHandler, {\n ...this.withSession('si_get_offering', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Initiate an SI session\n */\n async siInitiateSession(\n params: MutatingRequestInput<SIInitiateSessionRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SIInitiateSessionResponse>> {\n const result = await this.client.siInitiateSession(params, inputHandler, {\n ...this.withSession('si_initiate_session', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Send a message in an SI session\n */\n async siSendMessage(\n params: MutatingRequestInput<SISendMessageRequest>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SISendMessageResponse>> {\n const result = await this.client.siSendMessage(params, inputHandler, {\n ...this.withSession('si_send_message', options),\n });\n this.retainSession(result);\n return result;\n }\n\n /**\n * Terminate an SI session\n */\n async siTerminateSession(\n params: SITerminateSessionRequest,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<SITerminateSessionResponse>> {\n const result = await this.client.siTerminateSession(params, inputHandler, {\n ...this.withSession('si_terminate_session', options),\n });\n this.retainSession(result);\n return result;\n }\n\n // ====== CONVERSATION MANAGEMENT ======\n\n /**\n * Continue the conversation with a natural language message\n *\n * @param message - Natural language message to send to the agent\n * @param inputHandler - Handler for any clarification requests\n *\n * @example\n * ```typescript\n * const agent = multiClient.agent('my-agent');\n * await agent.getProducts({ brief: 'Tech products' });\n *\n * // Continue the conversation\n * const refined = await agent.continueConversation(\n * 'Focus only on laptops under $1000'\n * );\n * ```\n */\n async continueConversation<T = any>(\n message: string,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>> {\n if (!this.currentContextId) {\n throw new Error('No active conversation to continue. Start with a task method first.');\n }\n\n const result = await this.client.continueConversation<T>(message, this.currentContextId, inputHandler);\n\n this.retainSession(result);\n\n return result;\n }\n\n /**\n * Get the full conversation history\n */\n getHistory(): Message[] | undefined {\n if (!this.currentContextId) {\n return undefined;\n }\n return this.client.getConversationHistory(this.currentContextId);\n }\n\n /**\n * Clear the conversation context (start fresh).\n *\n * Equivalent to `resetContext()` — clears both the retained `contextId`\n * and any pending server-side `taskId`, and drops cached history.\n */\n clearContext(): void {\n this.resetContext();\n }\n\n /**\n * Reset conversation state. Call with no args to start a fresh\n * conversation; pass a seed to rehydrate a persisted session id (e.g.,\n * across a process restart).\n *\n * Always clears the retained pending-task handle — a persisted `contextId`\n * places the next send into the same server-side session, but any old\n * `taskId` is stale.\n */\n resetContext(seed?: string): void {\n if (this.currentContextId) {\n this.client.clearConversationHistory(this.currentContextId);\n }\n this.currentContextId = seed;\n this.pendingTask = undefined;\n }\n\n /**\n * Get the current conversation context ID\n */\n getContextId(): string | undefined {\n return this.currentContextId;\n }\n\n /**\n * Get the pending server-side `taskId` from the last non-terminal\n * response, if any. Populated when the server returned\n * `input-required` / `working` / `submitted` / `auth-required`;\n * cleared when the task reaches a terminal state.\n *\n * Persist this alongside `getContextId()` if you need to resume a\n * specific task (not just a conversation) across a process restart.\n */\n getPendingTaskId(): string | undefined {\n return this.pendingTask?.taskId;\n }\n\n /**\n * Set a specific conversation context ID\n */\n setContextId(contextId: string): void {\n this.currentContextId = contextId;\n }\n\n // ====== AGENT INFORMATION ======\n\n /**\n * Get the agent configuration\n */\n getAgent(): AgentConfig {\n return this.client.getAgent();\n }\n\n /**\n * Get the agent ID\n */\n getAgentId(): string {\n return this.client.getAgentId();\n }\n\n /**\n * Get the agent name\n */\n getAgentName(): string {\n return this.client.getAgentName();\n }\n\n /**\n * Get the agent protocol\n */\n getProtocol(): 'mcp' | 'a2a' {\n return this.client.getProtocol();\n }\n\n /**\n * Get the canonical base URL for this agent\n *\n * Returns the canonical URL if already resolved, or computes it synchronously.\n * For guaranteed canonical URL (especially for A2A), use resolveCanonicalUrl() first.\n */\n getCanonicalUrl(): string {\n return this.client.getCanonicalUrl();\n }\n\n /**\n * Resolve and return the canonical base URL for this agent\n *\n * For A2A: Fetches the agent card and uses its 'url' field\n * For MCP: Performs endpoint discovery and strips /mcp suffix\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n * Use `getAgentId()` / `getAgentName()` for identification instead.\n */\n async resolveCanonicalUrl(): Promise<string> {\n if (this._isInProcess) {\n throw new Error(\n 'resolveCanonicalUrl() is not supported on in-process AgentClient instances. ' +\n 'Use getAgentId() or getAgentName() to identify this client.'\n );\n }\n return this.client.resolveCanonicalUrl();\n }\n\n /**\n * Check if this agent is the same as another agent by canonical URL\n */\n isSameAgent(other: AgentConfig | AgentClient): boolean {\n if (other instanceof AgentClient) {\n // Compare using the other client's agent config\n return this.client.isSameAgent(other.getAgent());\n }\n return this.client.isSameAgent(other);\n }\n\n /**\n * Async version that resolves canonical URLs first for more accurate comparison\n */\n async isSameAgentResolved(other: AgentConfig | AgentClient): Promise<boolean> {\n const otherIsInProcess = other instanceof AgentClient && other._isInProcess;\n if (this._isInProcess || otherIsInProcess) {\n // In-process agents have no canonical URL to resolve — compare sentinel IDs instead.\n const thisId = this.getAgentId();\n const otherId = other instanceof AgentClient ? other.getAgentId() : other.id;\n return thisId === otherId;\n }\n if (other instanceof AgentClient) {\n // Resolve both sides first\n await this.resolveCanonicalUrl();\n await other.resolveCanonicalUrl();\n // Then compare using the resolved agent config\n return this.client.isSameAgent(other.getAgent());\n }\n return this.client.isSameAgentResolved(other);\n }\n\n /**\n * Get the fully resolved agent configuration with canonical URL\n */\n async getResolvedAgent(): Promise<AgentConfig> {\n return this.client.getResolvedAgent();\n }\n\n /**\n * Get agent information including capabilities\n */\n async getAgentInfo(options?: Pick<TaskOptions, 'signal' | 'transport'>) {\n return this.client.getAgentInfo(options);\n }\n\n /**\n * Check if there's an active conversation\n */\n hasActiveConversation(): boolean {\n return this.currentContextId !== undefined;\n }\n\n /**\n * Get active tasks for this agent\n */\n getActiveTasks() {\n return this.client.getActiveTasks();\n }\n\n // ====== GENERIC TASK EXECUTION ======\n\n /**\n * Execute any ADCP task by name with full type safety\n *\n * @example\n * ```typescript\n * // ✅ TYPE-SAFE: Automatic response type inference\n * const result = await agent.executeTask('get_products', params);\n * // result is TaskResult<GetProductsResponse> - no casting needed!\n *\n * // ✅ CUSTOM TYPES: For non-standard tasks\n * const customResult = await agent.executeTask<MyCustomResponse>('custom_task', params);\n * ```\n */\n async executeTask<K extends AdcpTaskName>(\n taskName: K,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<TaskResponseTypeMap[K]>>;\n\n /**\n * Execute a task by name with custom response type\n */\n async executeTask<T = unknown>(\n taskName: string,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>>;\n\n async executeTask<T = unknown>(\n taskName: string,\n params: Record<string, unknown>,\n inputHandler?: InputHandler,\n options?: TaskOptions\n ): Promise<TaskResult<T>> {\n const result = await this.client.executeTask<T>(taskName, params, inputHandler, {\n ...this.withSession(taskName, options),\n });\n\n this.retainSession(result);\n\n return result;\n }\n\n // ====== TASK MANAGEMENT DELEGATION ======\n\n /**\n * List all tasks for this agent\n */\n async listTasks(): Promise<TaskInfo[]> {\n return this.client.listTasks();\n }\n\n /**\n * Get detailed information about a specific task\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n return this.client.getTaskInfo(taskId);\n }\n\n /**\n * Subscribe to task notifications for this agent\n */\n onTaskUpdate(callback: (task: TaskInfo) => void): () => void {\n return this.client.onTaskUpdate(callback);\n }\n\n /**\n * Subscribe to all task events\n */\n onTaskEvents(callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }): () => void {\n return this.client.onTaskEvents(callbacks);\n }\n\n /**\n * Generate webhook URL for a specific task and operation.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n * In-process clients have no HTTP listener to receive webhook callbacks.\n */\n getWebhookUrl(taskType: string, operationId: string): string {\n if (this._isInProcess) {\n throw new Error(\n 'getWebhookUrl() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.getWebhookUrl(taskType, operationId);\n }\n\n /**\n * Register webhook for task notifications.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n */\n async registerWebhook(webhookUrl: string, taskTypes?: string[]): Promise<void> {\n if (this._isInProcess) {\n throw new Error(\n 'registerWebhook() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.registerWebhook(webhookUrl, taskTypes);\n }\n\n /**\n * Unregister webhook notifications.\n *\n * **Not supported on in-process instances** (created via `fromMCPClient`).\n */\n async unregisterWebhook(): Promise<void> {\n if (this._isInProcess) {\n throw new Error(\n 'unregisterWebhook() is not supported on in-process AgentClient instances. ' +\n 'In-process clients have no HTTP listener for webhook delivery.'\n );\n }\n return this.client.unregisterWebhook();\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  class AsyncHandler {
8
2
  constructor(config) {
9
3
  this.config = config;