@adcp/sdk 16.2.0 → 16.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/lib/adapters/version/3.1/assignments.d.mts +12 -0
  3. package/dist/lib/adapters/version/3.1/assignments.d.ts +12 -0
  4. package/dist/lib/adapters/version/3.1/assignments.js +67 -0
  5. package/dist/lib/adapters/version/3.1/assignments.mjs +43 -0
  6. package/dist/lib/adapters/version/3.1/bidding.d.mts +3 -0
  7. package/dist/lib/adapters/version/3.1/bidding.d.ts +3 -0
  8. package/dist/lib/adapters/version/3.1/bidding.js +115 -0
  9. package/dist/lib/adapters/version/3.1/bidding.mjs +90 -0
  10. package/dist/lib/adapters/version/3.1/delivery.d.mts +7 -0
  11. package/dist/lib/adapters/version/3.1/delivery.d.ts +7 -0
  12. package/dist/lib/adapters/version/3.1/delivery.js +78 -0
  13. package/dist/lib/adapters/version/3.1/delivery.mjs +54 -0
  14. package/dist/lib/adapters/version/3.1/index.d.mts +3 -0
  15. package/dist/lib/adapters/version/3.1/index.d.ts +3 -0
  16. package/dist/lib/adapters/version/3.1/index.js +36 -0
  17. package/dist/lib/adapters/version/3.1/index.mjs +12 -0
  18. package/dist/lib/adapters/version/index.d.mts +59 -7
  19. package/dist/lib/adapters/version/index.d.ts +59 -7
  20. package/dist/lib/adapters/version/index.js +51 -2
  21. package/dist/lib/adapters/version/index.mjs +49 -1
  22. package/dist/lib/adapters/version/negotiate.d.mts +71 -0
  23. package/dist/lib/adapters/version/negotiate.d.ts +71 -0
  24. package/dist/lib/adapters/version/negotiate.js +101 -0
  25. package/dist/lib/adapters/version/negotiate.mjs +73 -0
  26. package/dist/lib/adapters/version/schema-projection.d.mts +33 -0
  27. package/dist/lib/adapters/version/schema-projection.d.ts +33 -0
  28. package/dist/lib/adapters/version/schema-projection.js +294 -0
  29. package/dist/lib/adapters/version/schema-projection.mjs +269 -0
  30. package/dist/lib/adapters/version/translate.d.mts +122 -0
  31. package/dist/lib/adapters/version/translate.d.ts +122 -0
  32. package/dist/lib/adapters/version/translate.js +169 -0
  33. package/dist/lib/adapters/version/translate.mjs +141 -0
  34. package/dist/lib/adapters/version/types.d.mts +51 -10
  35. package/dist/lib/adapters/version/types.d.ts +51 -10
  36. package/dist/lib/core/AgentClient.d.mts +1 -1
  37. package/dist/lib/core/AgentClient.d.ts +1 -1
  38. package/dist/lib/core/AgentClient.js +17 -1
  39. package/dist/lib/core/AgentClient.mjs +17 -1
  40. package/dist/lib/core/ConversationTypes.d.mts +7 -0
  41. package/dist/lib/core/ConversationTypes.d.ts +7 -0
  42. package/dist/lib/core/SingleAgentClient.d.mts +82 -0
  43. package/dist/lib/core/SingleAgentClient.d.ts +82 -0
  44. package/dist/lib/core/SingleAgentClient.js +336 -15
  45. package/dist/lib/core/SingleAgentClient.mjs +350 -17
  46. package/dist/lib/core/TaskExecutor.d.mts +1 -1
  47. package/dist/lib/core/TaskExecutor.d.ts +1 -1
  48. package/dist/lib/core/TaskExecutor.js +182 -31
  49. package/dist/lib/core/TaskExecutor.mjs +183 -32
  50. package/dist/lib/core/account-reduction.d.mts +36 -0
  51. package/dist/lib/core/account-reduction.d.ts +36 -0
  52. package/dist/lib/core/account-reduction.js +127 -0
  53. package/dist/lib/core/account-reduction.mjs +98 -0
  54. package/dist/lib/core/buyer-account-registry.d.mts +52 -0
  55. package/dist/lib/core/buyer-account-registry.d.ts +52 -0
  56. package/dist/lib/core/buyer-account-registry.js +142 -6
  57. package/dist/lib/core/buyer-account-registry.mjs +142 -6
  58. package/dist/lib/errors/index.d.mts +34 -0
  59. package/dist/lib/errors/index.d.ts +34 -0
  60. package/dist/lib/errors/index.js +11 -0
  61. package/dist/lib/errors/index.mjs +10 -0
  62. package/dist/lib/index.d.mts +1 -1
  63. package/dist/lib/index.d.ts +1 -1
  64. package/dist/lib/index.js +2 -0
  65. package/dist/lib/index.mjs +2 -0
  66. package/dist/lib/media-buy/action-contracts.js +4 -4
  67. package/dist/lib/media-buy/action-contracts.mjs +4 -4
  68. package/dist/lib/media-buy/action-types.d.mts +3 -2
  69. package/dist/lib/media-buy/action-types.d.ts +3 -2
  70. package/dist/lib/media-buy/compatibility.d.mts +1 -0
  71. package/dist/lib/media-buy/compatibility.d.ts +1 -0
  72. package/dist/lib/media-buy/compatibility.js +33 -10
  73. package/dist/lib/media-buy/compatibility.mjs +32 -14
  74. package/dist/lib/media-buy/update-fields.generated.d.mts +3 -2
  75. package/dist/lib/media-buy/update-fields.generated.d.ts +3 -2
  76. package/dist/lib/negotiation/buyer.js +11 -5
  77. package/dist/lib/negotiation/buyer.mjs +11 -5
  78. package/dist/lib/negotiation/types.d.mts +4 -2
  79. package/dist/lib/negotiation/types.d.ts +4 -2
  80. package/dist/lib/negotiation/verification.d.mts +15 -6
  81. package/dist/lib/negotiation/verification.d.ts +15 -6
  82. package/dist/lib/negotiation/verification.js +146 -27
  83. package/dist/lib/negotiation/verification.mjs +146 -28
  84. package/dist/lib/negotiation/version.d.mts +6 -0
  85. package/dist/lib/negotiation/version.d.ts +6 -0
  86. package/dist/lib/negotiation/version.js +60 -0
  87. package/dist/lib/negotiation/version.mjs +33 -0
  88. package/dist/lib/registry/types.generated.d.mts +1 -1
  89. package/dist/lib/registry/types.generated.d.ts +1 -1
  90. package/dist/lib/server/create-adcp-server.d.mts +21 -0
  91. package/dist/lib/server/create-adcp-server.d.ts +21 -0
  92. package/dist/lib/server/create-adcp-server.js +98 -16
  93. package/dist/lib/server/create-adcp-server.mjs +84 -2
  94. package/dist/lib/server/error-arm-tools.d.mts +10 -10
  95. package/dist/lib/server/error-arm-tools.d.ts +10 -10
  96. package/dist/lib/server/error-arm-tools.js +22 -58
  97. package/dist/lib/server/error-arm-tools.mjs +30 -65
  98. package/dist/lib/server/index.d.mts +1 -1
  99. package/dist/lib/server/index.d.ts +1 -1
  100. package/dist/lib/storage/interfaces.d.mts +2 -0
  101. package/dist/lib/storage/interfaces.d.ts +2 -0
  102. package/dist/lib/testing/compliance/comply.js +17 -0
  103. package/dist/lib/testing/compliance/comply.mjs +17 -0
  104. package/dist/lib/testing/index.d.mts +3 -0
  105. package/dist/lib/testing/index.d.ts +3 -0
  106. package/dist/lib/testing/index.js +44 -2
  107. package/dist/lib/testing/index.mjs +42 -0
  108. package/dist/lib/testing/storyboard/collection-selection.d.mts +259 -0
  109. package/dist/lib/testing/storyboard/collection-selection.d.ts +259 -0
  110. package/dist/lib/testing/storyboard/collection-selection.js +384 -0
  111. package/dist/lib/testing/storyboard/collection-selection.mjs +348 -0
  112. package/dist/lib/testing/storyboard/context.js +12 -6
  113. package/dist/lib/testing/storyboard/context.mjs +12 -6
  114. package/dist/lib/testing/storyboard/fixture-resolution.d.mts +39 -1
  115. package/dist/lib/testing/storyboard/fixture-resolution.d.ts +39 -1
  116. package/dist/lib/testing/storyboard/fixture-resolution.js +216 -12
  117. package/dist/lib/testing/storyboard/fixture-resolution.mjs +218 -12
  118. package/dist/lib/testing/storyboard/index.d.mts +9 -2
  119. package/dist/lib/testing/storyboard/index.d.ts +9 -2
  120. package/dist/lib/testing/storyboard/index.js +51 -2
  121. package/dist/lib/testing/storyboard/index.mjs +49 -1
  122. package/dist/lib/testing/storyboard/prepared-fixtures.d.mts +471 -0
  123. package/dist/lib/testing/storyboard/prepared-fixtures.d.ts +471 -0
  124. package/dist/lib/testing/storyboard/prepared-fixtures.js +434 -0
  125. package/dist/lib/testing/storyboard/prepared-fixtures.mjs +389 -0
  126. package/dist/lib/testing/storyboard/protected-context.d.mts +127 -0
  127. package/dist/lib/testing/storyboard/protected-context.d.ts +127 -0
  128. package/dist/lib/testing/storyboard/protected-context.js +301 -0
  129. package/dist/lib/testing/storyboard/protected-context.mjs +267 -0
  130. package/dist/lib/testing/storyboard/rejection-hints.js +13 -4
  131. package/dist/lib/testing/storyboard/rejection-hints.mjs +13 -4
  132. package/dist/lib/testing/storyboard/runner.d.mts +24 -0
  133. package/dist/lib/testing/storyboard/runner.d.ts +24 -0
  134. package/dist/lib/testing/storyboard/runner.js +1061 -105
  135. package/dist/lib/testing/storyboard/runner.mjs +1075 -106
  136. package/dist/lib/testing/storyboard/seeding.d.mts +15 -1
  137. package/dist/lib/testing/storyboard/seeding.d.ts +15 -1
  138. package/dist/lib/testing/storyboard/seeding.js +272 -12
  139. package/dist/lib/testing/storyboard/seeding.mjs +274 -13
  140. package/dist/lib/testing/storyboard/types.d.mts +207 -10
  141. package/dist/lib/testing/storyboard/types.d.ts +207 -10
  142. package/dist/lib/testing/storyboard/types.js +1 -1
  143. package/dist/lib/testing/storyboard/types.mjs +1 -1
  144. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  145. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  146. package/dist/lib/testing/storyboard/validations.js +95 -0
  147. package/dist/lib/testing/storyboard/validations.mjs +95 -0
  148. package/dist/lib/validation/bundled-schema-store.js +5 -0
  149. package/dist/lib/validation/bundled-schema-store.mjs +4 -0
  150. package/dist/lib/validation/schema-loader.js +19 -2
  151. package/dist/lib/validation/schema-loader.mjs +22 -3
  152. package/dist/lib/version.d.mts +3 -3
  153. package/dist/lib/version.d.ts +3 -3
  154. package/dist/lib/version.js +3 -3
  155. package/dist/lib/version.mjs +3 -3
  156. package/docs/TYPE-SUMMARY.md +2 -2
  157. package/docs/guides/COLLECTION-FIXTURE-FOUNDATION.md +850 -0
  158. package/docs/guides/PROPOSAL-TERMS-VERIFICATION.md +66 -0
  159. package/docs/llms.txt +4 -3
  160. package/docs/migration-14.x-rc-worksheet.md +4 -4
  161. package/package.json +1 -1
@@ -53,6 +53,8 @@ var import_client_hooks = require('../validation/client-hooks.js');
53
53
  var import_schema_validator = require('../validation/schema-validator.js');
54
54
  var import_schema_loader = require('../validation/schema-loader.js');
55
55
  var import_version = require('../version.js');
56
+ var import_version2 = require('../negotiation/version.js');
57
+ var import_verification = require('../negotiation/verification.js');
56
58
  var import_response_unwrapper = require('../utils/response-unwrapper.js');
57
59
  var import_error_extraction = require('../utils/error-extraction.js');
58
60
  var import_idempotency = require('../utils/idempotency.js');
@@ -687,7 +689,11 @@ class TaskExecutor {
687
689
  * adaptation runs, so the validator sees the same object the caller wrote.
688
690
  * Throws in strict, logs to `debugLogs` in warn, no-ops in off.
689
691
  */
690
- validateRequest(taskName, params, debugLogs) {
692
+ validateRequest(taskName, params, debugLogs, adcpVersion) {
693
+ if (adcpVersion !== void 0) {
694
+ (0, import_client_hooks.validateOutgoingRequest)(taskName, params, this.requestValidationMode, debugLogs, adcpVersion);
695
+ return;
696
+ }
691
697
  if (this.config.experimentalIdentity33?.() && this.requestValidationMode !== "off") {
692
698
  const outcome = validateIdentity33Payload(taskName, "request", params, this.config.adcpVersion);
693
699
  if (!outcome.valid) {
@@ -823,6 +829,13 @@ class TaskExecutor {
823
829
  agent: { id: agent.id, name: agent.name, protocol: agent.protocol },
824
830
  serverVersion: effectiveServerVersion,
825
831
  serverVersionSynthetic: targetCapabilities?._synthetic ?? serverVersion === void 0,
832
+ ...taskName === "refine_proposals" && targetCapabilities?._synthetic === false && {
833
+ refinementServedVersion: (0, import_version2.applicableRefinementServedVersion)(
834
+ targetCapabilities.servedVersion,
835
+ params?.adcp_version ?? (0, import_version.toReleasePrecisionVersion)(wireAdcpVersion ?? this.config.adcpVersion ?? import_version.ADCP_VERSION),
836
+ (0, import_version.toReleasePrecisionVersion)(this.config.wireAdcpVersion ?? this.config.adcpVersion ?? import_version.ADCP_VERSION)
837
+ )
838
+ },
826
839
  idempotencyKey
827
840
  };
828
841
  this.activeTasks.set(taskId, taskState);
@@ -1113,7 +1126,8 @@ class TaskExecutor {
1113
1126
  dispatchSettlement?.persistPausedContinuation ?? true,
1114
1127
  effectiveServerVersion,
1115
1128
  deferredClientContext,
1116
- dispatchSettlement?.requireDeferredSettlementResumeAuthorization === true
1129
+ dispatchSettlement?.requireDeferredSettlementResumeAuthorization === true,
1130
+ taskState.refinementServedVersion
1117
1131
  );
1118
1132
  (0, import_abort.throwIfAborted)(postDispatchOptions.signal);
1119
1133
  if (governanceResult) {
@@ -1256,17 +1270,36 @@ class TaskExecutor {
1256
1270
  debug_logs: debugLogs
1257
1271
  };
1258
1272
  }
1259
- async handleAsyncResponse(agent, taskId, taskName, params, response, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false) {
1273
+ async handleAsyncResponse(agent, taskId, taskName, params, response, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false, refinementServedVersion) {
1260
1274
  const status = this.responseParser.getStatus(response);
1261
1275
  const serverTaskId = this.responseParser.getTaskId(response);
1262
1276
  const task = this.activeTasks.get(taskId);
1263
1277
  if (task && serverTaskId) task.serverTaskId = serverTaskId;
1264
1278
  switch (status) {
1265
1279
  case import_ProtocolResponseParser.ADCP_STATUS.COMPLETED:
1266
- const completedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
1280
+ const completedData = this.extractResponseData(
1281
+ response,
1282
+ debugLogs,
1283
+ taskName,
1284
+ serverVersion,
1285
+ options.negotiatedAdcpVersion
1286
+ );
1267
1287
  if (!deferTerminalTaskStatus) this.updateTaskStatus(taskId, "completed", completedData);
1268
- const operationSuccess = this.isOperationSuccess(completedData, taskName, serverVersion);
1269
- const validationResult = this.validateResponseSchema(completedData, taskName, debugLogs, serverVersion);
1288
+ const operationSuccess = this.isOperationSuccess(
1289
+ completedData,
1290
+ taskName,
1291
+ serverVersion,
1292
+ options.negotiatedAdcpVersion
1293
+ );
1294
+ const validationResult = this.validateResponseSchema(
1295
+ completedData,
1296
+ taskName,
1297
+ debugLogs,
1298
+ serverVersion,
1299
+ params,
1300
+ refinementServedVersion,
1301
+ options.negotiatedAdcpVersion
1302
+ );
1270
1303
  const finalSuccess = operationSuccess && validationResult.valid;
1271
1304
  const finalError = !finalSuccess ? validationResult.errors.length > 0 ? `Schema validation failed: ${validationResult.errors.join("; ")}` : this.extractOperationError(completedData) : void 0;
1272
1305
  if (finalSuccess) {
@@ -1351,12 +1384,19 @@ class TaskExecutor {
1351
1384
  persistPausedContinuation,
1352
1385
  serverVersion,
1353
1386
  deferredClientContext,
1354
- requireDeferredSettlementResumeAuthorization
1387
+ requireDeferredSettlementResumeAuthorization,
1388
+ refinementServedVersion
1355
1389
  );
1356
1390
  case import_ProtocolResponseParser.ADCP_STATUS.FAILED:
1357
1391
  case import_ProtocolResponseParser.ADCP_STATUS.REJECTED:
1358
1392
  case import_ProtocolResponseParser.ADCP_STATUS.CANCELED: {
1359
- const failedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
1393
+ const failedData = this.extractResponseData(
1394
+ response,
1395
+ debugLogs,
1396
+ taskName,
1397
+ serverVersion,
1398
+ options.negotiatedAdcpVersion
1399
+ );
1360
1400
  const failedPayload = response?.structuredContent === void 0 && response?.content === void 0 && response?.result === void 0 && response?.data != null && typeof response.data === "object" ? response.data : failedData;
1361
1401
  const adcpErrorInfo = (0, import_error_extraction.extractAdcpErrorInfo)(failedPayload);
1362
1402
  const hasStructuredError = !!adcpErrorInfo;
@@ -1384,10 +1424,29 @@ class TaskExecutor {
1384
1424
  };
1385
1425
  }
1386
1426
  default:
1387
- const defaultData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
1427
+ const defaultData = this.extractResponseData(
1428
+ response,
1429
+ debugLogs,
1430
+ taskName,
1431
+ serverVersion,
1432
+ options.negotiatedAdcpVersion
1433
+ );
1388
1434
  if (defaultData && (defaultData !== response || response.structuredContent || response.result || response.data)) {
1389
- const defaultSuccess = this.isOperationSuccess(defaultData, taskName, serverVersion);
1390
- const defaultValidation = this.validateResponseSchema(defaultData, taskName, debugLogs, serverVersion);
1435
+ const defaultSuccess = this.isOperationSuccess(
1436
+ defaultData,
1437
+ taskName,
1438
+ serverVersion,
1439
+ options.negotiatedAdcpVersion
1440
+ );
1441
+ const defaultValidation = this.validateResponseSchema(
1442
+ defaultData,
1443
+ taskName,
1444
+ debugLogs,
1445
+ serverVersion,
1446
+ params,
1447
+ refinementServedVersion,
1448
+ options.negotiatedAdcpVersion
1449
+ );
1391
1450
  const defaultFinalSuccess = defaultSuccess && defaultValidation.valid;
1392
1451
  const defaultFinalError = !defaultFinalSuccess ? defaultValidation.errors.length > 0 ? `Schema validation failed: ${defaultValidation.errors.join("; ")}` : this.extractOperationError(defaultData) : void 0;
1393
1452
  if (defaultFinalSuccess) {
@@ -1437,7 +1496,7 @@ class TaskExecutor {
1437
1496
  *
1438
1497
  * @internal Exposed for testing purposes
1439
1498
  */
1440
- extractResponseData(response, debugLogs, toolName, serverVersion) {
1499
+ extractResponseData(response, debugLogs, toolName, serverVersion, negotiatedAdcpVersion) {
1441
1500
  const a2aState = response?.result?.status?.state;
1442
1501
  if (a2aState === "input-required" || a2aState === "auth-required") {
1443
1502
  const statusParts = response?.result?.status?.message?.parts;
@@ -1478,7 +1537,7 @@ class TaskExecutor {
1478
1537
  }
1479
1538
  const unwrapped = (0, import_response_unwrapper.unwrapProtocolResponse)(response, toolName, void 0, {
1480
1539
  filterInvalidProducts: this.config.filterInvalidProducts,
1481
- responseAdcpVersion: this.effectiveResponseAdcpVersion(serverVersion)
1540
+ responseAdcpVersion: this.effectiveResponseAdcpVersion(serverVersion, negotiatedAdcpVersion)
1482
1541
  });
1483
1542
  if (response?.structuredContent) {
1484
1543
  this.logDebug(debugLogs, "info", "Successfully extracted MCP data", {
@@ -1509,8 +1568,12 @@ class TaskExecutor {
1509
1568
  * Check if extracted response data represents a successful operation.
1510
1569
  * Handles singular `error`, plural `errors` (AdCP schema), and `success: false`.
1511
1570
  */
1512
- isOperationSuccess(data, taskName, serverVersion) {
1513
- return (0, import_response_unwrapper.isAdcpOperationSuccess)(data, taskName, this.effectiveResponseAdcpVersion(serverVersion));
1571
+ isOperationSuccess(data, taskName, serverVersion, negotiatedAdcpVersion) {
1572
+ return (0, import_response_unwrapper.isAdcpOperationSuccess)(
1573
+ data,
1574
+ taskName,
1575
+ this.effectiveResponseAdcpVersion(serverVersion, negotiatedAdcpVersion)
1576
+ );
1514
1577
  }
1515
1578
  /**
1516
1579
  * Extract a human-readable error message from response data.
@@ -1541,7 +1604,13 @@ class TaskExecutor {
1541
1604
  * Handle 'working' status - return as valid intermediate state
1542
1605
  */
1543
1606
  async waitForWorkingCompletion(agent, taskId, taskName, params, initialResponse, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), serverVersion = "v3") {
1544
- const partialData = this.extractResponseData(initialResponse, debugLogs, taskName, serverVersion);
1607
+ const partialData = this.extractResponseData(
1608
+ initialResponse,
1609
+ debugLogs,
1610
+ taskName,
1611
+ serverVersion,
1612
+ options.negotiatedAdcpVersion
1613
+ );
1545
1614
  const metadata = this.buildMetadata({
1546
1615
  taskId,
1547
1616
  taskName,
@@ -1565,7 +1634,13 @@ class TaskExecutor {
1565
1634
  * Set up submitted task with webhook
1566
1635
  */
1567
1636
  async setupSubmittedTask(agent, taskId, taskName, response, messages, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, serverVersion = "v3") {
1568
- const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
1637
+ const partialData = this.extractResponseData(
1638
+ response,
1639
+ debugLogs,
1640
+ taskName,
1641
+ serverVersion,
1642
+ options.negotiatedAdcpVersion
1643
+ );
1569
1644
  let webhookUrl = response.webhookUrl;
1570
1645
  if (!webhookUrl && this.config.webhookManager) {
1571
1646
  webhookUrl = this.config.webhookManager.generateUrl(taskId);
@@ -2001,7 +2076,7 @@ class TaskExecutor {
2001
2076
  * This is common for HITL (human-in-the-loop) workflows where the agent has already processed
2002
2077
  * the request and is just signaling that async approval may be needed.
2003
2078
  */
2004
- async handleInputRequired(agent, taskId, taskName, params, response, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, pauseStatus = "input-required", persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false) {
2079
+ async handleInputRequired(agent, taskId, taskName, params, response, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, pauseStatus = "input-required", persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false, refinementServedVersion) {
2005
2080
  const inputRequest = this.responseParser.parseInputRequest(response);
2006
2081
  const serverContextId = this.responseParser.getContextId(response) ?? response.contextId;
2007
2082
  const a2aTaskId = this.responseParser.getA2AContinuationTaskId(response);
@@ -2009,7 +2084,13 @@ class TaskExecutor {
2009
2084
  const operationRoutedContinuation = deferTerminalTaskStatus || directContinuationRecovery;
2010
2085
  const settlementServerTaskId = operationRoutedContinuation ? this.responseParser.getTaskId(response) : void 0;
2011
2086
  if (agent.protocol === "mcp" || !a2aTaskId) {
2012
- const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
2087
+ const partialData = this.extractResponseData(
2088
+ response,
2089
+ debugLogs,
2090
+ taskName,
2091
+ serverVersion,
2092
+ options.negotiatedAdcpVersion
2093
+ );
2013
2094
  const metadata = this.buildMetadata({
2014
2095
  taskId,
2015
2096
  taskName,
@@ -2030,7 +2111,13 @@ class TaskExecutor {
2030
2111
  };
2031
2112
  }
2032
2113
  if (!inputHandler) {
2033
- const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);
2114
+ const partialData = this.extractResponseData(
2115
+ response,
2116
+ debugLogs,
2117
+ taskName,
2118
+ serverVersion,
2119
+ options.negotiatedAdcpVersion
2120
+ );
2034
2121
  const metadata = this.buildMetadata({
2035
2122
  taskId,
2036
2123
  taskName,
@@ -2057,8 +2144,12 @@ class TaskExecutor {
2057
2144
  a2aTaskId,
2058
2145
  serverVersion,
2059
2146
  ...options.wireAdcpVersion !== void 0 && { wireAdcpVersion: options.wireAdcpVersion },
2147
+ ...options.negotiatedAdcpVersion !== void 0 && {
2148
+ negotiatedAdcpVersion: options.negotiatedAdcpVersion
2149
+ },
2060
2150
  ...options.versionEnvelope !== void 0 && { versionEnvelope: options.versionEnvelope },
2061
2151
  serverVersionSynthetic: this.activeTasks.get(taskId)?.serverVersionSynthetic,
2152
+ ...refinementServedVersion !== void 0 && { refinementServedVersion },
2062
2153
  agentId: agent.id,
2063
2154
  taskName,
2064
2155
  params: durableDeferredSnapshot(params),
@@ -2123,7 +2214,8 @@ class TaskExecutor {
2123
2214
  persistPausedContinuation,
2124
2215
  serverVersion,
2125
2216
  deferredClientContext,
2126
- requireDeferredSettlementResumeAuthorization
2217
+ requireDeferredSettlementResumeAuthorization,
2218
+ refinementServedVersion
2127
2219
  );
2128
2220
  };
2129
2221
  const deferred = {
@@ -2199,8 +2291,12 @@ class TaskExecutor {
2199
2291
  a2aTaskId,
2200
2292
  serverVersion,
2201
2293
  ...options.wireAdcpVersion !== void 0 && { wireAdcpVersion: options.wireAdcpVersion },
2294
+ ...options.negotiatedAdcpVersion !== void 0 && {
2295
+ negotiatedAdcpVersion: options.negotiatedAdcpVersion
2296
+ },
2202
2297
  ...options.versionEnvelope !== void 0 && { versionEnvelope: options.versionEnvelope },
2203
2298
  serverVersionSynthetic: this.activeTasks.get(taskId)?.serverVersionSynthetic,
2299
+ ...refinementServedVersion !== void 0 && { refinementServedVersion },
2204
2300
  agentId: agent.id,
2205
2301
  taskName,
2206
2302
  params: durableDeferredSnapshot(params),
@@ -2266,7 +2362,8 @@ class TaskExecutor {
2266
2362
  persistPausedContinuation,
2267
2363
  serverVersion,
2268
2364
  deferredClientContext,
2269
- requireDeferredSettlementResumeAuthorization
2365
+ requireDeferredSettlementResumeAuthorization,
2366
+ refinementServedVersion
2270
2367
  );
2271
2368
  };
2272
2369
  const deferred = {
@@ -2317,7 +2414,8 @@ class TaskExecutor {
2317
2414
  persistPausedContinuation,
2318
2415
  serverVersion,
2319
2416
  deferredClientContext,
2320
- requireDeferredSettlementResumeAuthorization
2417
+ requireDeferredSettlementResumeAuthorization,
2418
+ refinementServedVersion
2321
2419
  );
2322
2420
  }
2323
2421
  /**
@@ -2533,7 +2631,12 @@ class TaskExecutor {
2533
2631
  });
2534
2632
  }
2535
2633
  if (status.status === import_ProtocolResponseParser.ADCP_STATUS.COMPLETED) {
2536
- const pollSuccess = this.isOperationSuccess(status.result, status.taskType, serverVersion);
2634
+ const pollSuccess = this.isOperationSuccess(
2635
+ status.result,
2636
+ status.taskType,
2637
+ serverVersion,
2638
+ metadataTaskId ? this.activeTasks.get(metadataTaskId)?.options.negotiatedAdcpVersion : void 0
2639
+ );
2537
2640
  if (pollSuccess) {
2538
2641
  return markAuthoritativePolledTerminal(
2539
2642
  (0, import_match.attachMatch)({
@@ -3088,6 +3191,7 @@ class TaskExecutor {
3088
3191
  state.messages,
3089
3192
  {
3090
3193
  ...state.wireAdcpVersion !== void 0 && { wireAdcpVersion: state.wireAdcpVersion },
3194
+ ...state.negotiatedAdcpVersion !== void 0 && { negotiatedAdcpVersion: state.negotiatedAdcpVersion },
3091
3195
  ...state.versionEnvelope !== void 0 && { versionEnvelope: state.versionEnvelope }
3092
3196
  },
3093
3197
  [],
@@ -3309,6 +3413,7 @@ class TaskExecutor {
3309
3413
  // No handler for deferred tasks - input was provided by human
3310
3414
  {
3311
3415
  ...state.wireAdcpVersion !== void 0 && { wireAdcpVersion: state.wireAdcpVersion },
3416
+ ...state.negotiatedAdcpVersion !== void 0 && { negotiatedAdcpVersion: state.negotiatedAdcpVersion },
3312
3417
  ...state.versionEnvelope !== void 0 && { versionEnvelope: state.versionEnvelope }
3313
3418
  },
3314
3419
  [],
@@ -3317,7 +3422,8 @@ class TaskExecutor {
3317
3422
  false,
3318
3423
  state.serverVersion,
3319
3424
  state.clientContext,
3320
- state.settlementResumeAuthorizationRequired === true
3425
+ state.settlementResumeAuthorizationRequired === true,
3426
+ state.refinementServedVersion
3321
3427
  );
3322
3428
  resumed = attachDeferredServerVersion(resumed, state);
3323
3429
  const observedResumedServerTaskId = resumed.metadata.serverTaskId;
@@ -3343,7 +3449,11 @@ class TaskExecutor {
3343
3449
  ...resumed.metadata.contextId !== void 0 ? { contextId: resumed.metadata.contextId } : state.contextId !== void 0 ? { contextId: state.contextId } : {},
3344
3450
  a2aTaskId: nextA2ATaskId,
3345
3451
  serverVersion: state.serverVersion,
3452
+ ...state.refinementServedVersion !== void 0 && {
3453
+ refinementServedVersion: state.refinementServedVersion
3454
+ },
3346
3455
  ...state.wireAdcpVersion !== void 0 && { wireAdcpVersion: state.wireAdcpVersion },
3456
+ ...state.negotiatedAdcpVersion !== void 0 && { negotiatedAdcpVersion: state.negotiatedAdcpVersion },
3347
3457
  ...state.versionEnvelope !== void 0 && { versionEnvelope: state.versionEnvelope },
3348
3458
  ...state.serverVersionSynthetic !== void 0 && {
3349
3459
  serverVersionSynthetic: state.serverVersionSynthetic
@@ -4271,7 +4381,7 @@ class TaskExecutor {
4271
4381
  /**
4272
4382
  * Continue a task after receiving input
4273
4383
  */
4274
- async continueTaskWithInput(agent, taskId, taskName, params, contextId, a2aTaskId, input, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false) {
4384
+ async continueTaskWithInput(agent, taskId, taskName, params, contextId, a2aTaskId, input, messages, inputHandler, options = {}, debugLogs = [], startTime = Date.now(), deferTerminalTaskStatus = false, persistPausedContinuation = true, serverVersion = "v3", deferredClientContext, requireDeferredSettlementResumeAuthorization = false, refinementServedVersion) {
4275
4385
  const inputSnapshot = structuredClone(input);
4276
4386
  if (agent.protocol !== "a2a") {
4277
4387
  throw new Error("MCP does not define a standard continuation for a returned input-required task.");
@@ -4337,7 +4447,8 @@ class TaskExecutor {
4337
4447
  persistPausedContinuation,
4338
4448
  serverVersion,
4339
4449
  deferredClientContext,
4340
- requireDeferredSettlementResumeAuthorization
4450
+ requireDeferredSettlementResumeAuthorization,
4451
+ refinementServedVersion
4341
4452
  );
4342
4453
  }
4343
4454
  /**
@@ -4529,11 +4640,11 @@ class TaskExecutor {
4529
4640
  * valid so the caller can continue. Off mode short-circuits before
4530
4641
  * AJV runs.
4531
4642
  */
4532
- validateResponseSchema(response, taskName, debugLogs, serverVersion) {
4643
+ validateResponseSchema(response, taskName, debugLogs, serverVersion, requestParams, refinementServedVersion, negotiatedAdcpVersion) {
4533
4644
  const mode = this.responseValidationMode;
4534
4645
  const logViolations = this.config.logSchemaViolations !== false;
4535
4646
  try {
4536
- const pinnedValidationVersion = this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? import_version.ADCP_VERSION;
4647
+ const pinnedValidationVersion = this.responseAdcpVersionForValidation() ?? negotiatedAdcpVersion ?? this.config.adcpVersion ?? import_version.ADCP_VERSION;
4537
4648
  if (taskName === "get_adcp_capabilities") {
4538
4649
  return (0, import_schema_loader.withServedValidationVersion)(
4539
4650
  response,
@@ -4541,6 +4652,46 @@ class TaskExecutor {
4541
4652
  (validationVersion) => this.validateResponseSchemaAgainst(response, taskName, debugLogs, mode, logViolations, validationVersion)
4542
4653
  );
4543
4654
  }
4655
+ if (taskName === "refine_proposals" && mode !== "off") {
4656
+ const ceiling = requestParams?.adcp_version ?? (0, import_version.toReleasePrecisionVersion)(this.config.wireAdcpVersion ?? pinnedValidationVersion);
4657
+ const issues = [];
4658
+ const selected = (0, import_verification.selectRefinementSchemaVersion)(
4659
+ ceiling,
4660
+ response,
4661
+ {
4662
+ adcpVersion: pinnedValidationVersion,
4663
+ servedAdcpVersion: (0, import_version2.applicableRefinementServedVersion)(refinementServedVersion, ceiling)
4664
+ },
4665
+ issues
4666
+ );
4667
+ if (!selected) {
4668
+ const errors = issues.map((issue) => `${issue.path}: ${issue.message}`);
4669
+ if (logViolations) {
4670
+ debugLogs.push({
4671
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
4672
+ type: mode === "strict" ? "error" : "warning",
4673
+ message: `Schema validation ${mode === "strict" ? "failed" : "warning"} for ${taskName}: ${errors.join("; ")}`,
4674
+ errors,
4675
+ issues,
4676
+ schemaVersion: pinnedValidationVersion,
4677
+ mode
4678
+ });
4679
+ if (mode === "warn") {
4680
+ console.warn(
4681
+ `Schema validation failed for ${taskName} against AdCP ${pinnedValidationVersion} (non-blocking):`,
4682
+ errors
4683
+ );
4684
+ } else {
4685
+ console.error(
4686
+ `Schema validation failed for ${taskName} against AdCP ${pinnedValidationVersion}:`,
4687
+ errors
4688
+ );
4689
+ }
4690
+ }
4691
+ return { valid: mode !== "strict", errors: mode === "strict" ? errors : [] };
4692
+ }
4693
+ return this.validateResponseSchemaAgainst(response, taskName, debugLogs, mode, logViolations, selected);
4694
+ }
4544
4695
  return this.validateResponseSchemaAgainst(
4545
4696
  response,
4546
4697
  taskName,
@@ -4595,8 +4746,8 @@ class TaskExecutor {
4595
4746
  if (this.config.versionEnvelope === "major-only") return "3.0";
4596
4747
  return void 0;
4597
4748
  }
4598
- effectiveResponseAdcpVersion(serverVersion) {
4599
- return this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? import_version.ADCP_VERSION;
4749
+ effectiveResponseAdcpVersion(serverVersion, negotiatedAdcpVersion) {
4750
+ return this.responseAdcpVersionForValidation() ?? negotiatedAdcpVersion ?? this.config.adcpVersion ?? import_version.ADCP_VERSION;
4600
4751
  }
4601
4752
  /**
4602
4753
  * Update task status and emit events