@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.
- package/AGENTS.md +2 -0
- package/dist/lib/adapters/version/3.1/assignments.d.mts +12 -0
- package/dist/lib/adapters/version/3.1/assignments.d.ts +12 -0
- package/dist/lib/adapters/version/3.1/assignments.js +67 -0
- package/dist/lib/adapters/version/3.1/assignments.mjs +43 -0
- package/dist/lib/adapters/version/3.1/bidding.d.mts +3 -0
- package/dist/lib/adapters/version/3.1/bidding.d.ts +3 -0
- package/dist/lib/adapters/version/3.1/bidding.js +115 -0
- package/dist/lib/adapters/version/3.1/bidding.mjs +90 -0
- package/dist/lib/adapters/version/3.1/delivery.d.mts +7 -0
- package/dist/lib/adapters/version/3.1/delivery.d.ts +7 -0
- package/dist/lib/adapters/version/3.1/delivery.js +78 -0
- package/dist/lib/adapters/version/3.1/delivery.mjs +54 -0
- package/dist/lib/adapters/version/3.1/index.d.mts +3 -0
- package/dist/lib/adapters/version/3.1/index.d.ts +3 -0
- package/dist/lib/adapters/version/3.1/index.js +36 -0
- package/dist/lib/adapters/version/3.1/index.mjs +12 -0
- package/dist/lib/adapters/version/index.d.mts +59 -7
- package/dist/lib/adapters/version/index.d.ts +59 -7
- package/dist/lib/adapters/version/index.js +51 -2
- package/dist/lib/adapters/version/index.mjs +49 -1
- package/dist/lib/adapters/version/negotiate.d.mts +71 -0
- package/dist/lib/adapters/version/negotiate.d.ts +71 -0
- package/dist/lib/adapters/version/negotiate.js +101 -0
- package/dist/lib/adapters/version/negotiate.mjs +73 -0
- package/dist/lib/adapters/version/schema-projection.d.mts +33 -0
- package/dist/lib/adapters/version/schema-projection.d.ts +33 -0
- package/dist/lib/adapters/version/schema-projection.js +294 -0
- package/dist/lib/adapters/version/schema-projection.mjs +269 -0
- package/dist/lib/adapters/version/translate.d.mts +122 -0
- package/dist/lib/adapters/version/translate.d.ts +122 -0
- package/dist/lib/adapters/version/translate.js +169 -0
- package/dist/lib/adapters/version/translate.mjs +141 -0
- package/dist/lib/adapters/version/types.d.mts +51 -10
- package/dist/lib/adapters/version/types.d.ts +51 -10
- package/dist/lib/core/AgentClient.d.mts +1 -1
- package/dist/lib/core/AgentClient.d.ts +1 -1
- package/dist/lib/core/AgentClient.js +17 -1
- package/dist/lib/core/AgentClient.mjs +17 -1
- package/dist/lib/core/ConversationTypes.d.mts +7 -0
- package/dist/lib/core/ConversationTypes.d.ts +7 -0
- package/dist/lib/core/SingleAgentClient.d.mts +82 -0
- package/dist/lib/core/SingleAgentClient.d.ts +82 -0
- package/dist/lib/core/SingleAgentClient.js +336 -15
- package/dist/lib/core/SingleAgentClient.mjs +350 -17
- package/dist/lib/core/TaskExecutor.d.mts +1 -1
- package/dist/lib/core/TaskExecutor.d.ts +1 -1
- package/dist/lib/core/TaskExecutor.js +182 -31
- package/dist/lib/core/TaskExecutor.mjs +183 -32
- package/dist/lib/core/account-reduction.d.mts +36 -0
- package/dist/lib/core/account-reduction.d.ts +36 -0
- package/dist/lib/core/account-reduction.js +127 -0
- package/dist/lib/core/account-reduction.mjs +98 -0
- package/dist/lib/core/buyer-account-registry.d.mts +52 -0
- package/dist/lib/core/buyer-account-registry.d.ts +52 -0
- package/dist/lib/core/buyer-account-registry.js +142 -6
- package/dist/lib/core/buyer-account-registry.mjs +142 -6
- package/dist/lib/errors/index.d.mts +34 -0
- package/dist/lib/errors/index.d.ts +34 -0
- package/dist/lib/errors/index.js +11 -0
- package/dist/lib/errors/index.mjs +10 -0
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +2 -0
- package/dist/lib/index.mjs +2 -0
- package/dist/lib/media-buy/action-contracts.js +4 -4
- package/dist/lib/media-buy/action-contracts.mjs +4 -4
- package/dist/lib/media-buy/action-types.d.mts +3 -2
- package/dist/lib/media-buy/action-types.d.ts +3 -2
- package/dist/lib/media-buy/compatibility.d.mts +1 -0
- package/dist/lib/media-buy/compatibility.d.ts +1 -0
- package/dist/lib/media-buy/compatibility.js +33 -10
- package/dist/lib/media-buy/compatibility.mjs +32 -14
- package/dist/lib/media-buy/update-fields.generated.d.mts +3 -2
- package/dist/lib/media-buy/update-fields.generated.d.ts +3 -2
- package/dist/lib/negotiation/buyer.js +11 -5
- package/dist/lib/negotiation/buyer.mjs +11 -5
- package/dist/lib/negotiation/types.d.mts +4 -2
- package/dist/lib/negotiation/types.d.ts +4 -2
- package/dist/lib/negotiation/verification.d.mts +15 -6
- package/dist/lib/negotiation/verification.d.ts +15 -6
- package/dist/lib/negotiation/verification.js +146 -27
- package/dist/lib/negotiation/verification.mjs +146 -28
- package/dist/lib/negotiation/version.d.mts +6 -0
- package/dist/lib/negotiation/version.d.ts +6 -0
- package/dist/lib/negotiation/version.js +60 -0
- package/dist/lib/negotiation/version.mjs +33 -0
- package/dist/lib/registry/types.generated.d.mts +1 -1
- package/dist/lib/registry/types.generated.d.ts +1 -1
- package/dist/lib/server/create-adcp-server.d.mts +21 -0
- package/dist/lib/server/create-adcp-server.d.ts +21 -0
- package/dist/lib/server/create-adcp-server.js +98 -16
- package/dist/lib/server/create-adcp-server.mjs +84 -2
- package/dist/lib/server/error-arm-tools.d.mts +10 -10
- package/dist/lib/server/error-arm-tools.d.ts +10 -10
- package/dist/lib/server/error-arm-tools.js +22 -58
- package/dist/lib/server/error-arm-tools.mjs +30 -65
- package/dist/lib/server/index.d.mts +1 -1
- package/dist/lib/server/index.d.ts +1 -1
- package/dist/lib/storage/interfaces.d.mts +2 -0
- package/dist/lib/storage/interfaces.d.ts +2 -0
- package/dist/lib/testing/compliance/comply.js +17 -0
- package/dist/lib/testing/compliance/comply.mjs +17 -0
- package/dist/lib/testing/index.d.mts +3 -0
- package/dist/lib/testing/index.d.ts +3 -0
- package/dist/lib/testing/index.js +44 -2
- package/dist/lib/testing/index.mjs +42 -0
- package/dist/lib/testing/storyboard/collection-selection.d.mts +259 -0
- package/dist/lib/testing/storyboard/collection-selection.d.ts +259 -0
- package/dist/lib/testing/storyboard/collection-selection.js +384 -0
- package/dist/lib/testing/storyboard/collection-selection.mjs +348 -0
- package/dist/lib/testing/storyboard/context.js +12 -6
- package/dist/lib/testing/storyboard/context.mjs +12 -6
- package/dist/lib/testing/storyboard/fixture-resolution.d.mts +39 -1
- package/dist/lib/testing/storyboard/fixture-resolution.d.ts +39 -1
- package/dist/lib/testing/storyboard/fixture-resolution.js +216 -12
- package/dist/lib/testing/storyboard/fixture-resolution.mjs +218 -12
- package/dist/lib/testing/storyboard/index.d.mts +9 -2
- package/dist/lib/testing/storyboard/index.d.ts +9 -2
- package/dist/lib/testing/storyboard/index.js +51 -2
- package/dist/lib/testing/storyboard/index.mjs +49 -1
- package/dist/lib/testing/storyboard/prepared-fixtures.d.mts +471 -0
- package/dist/lib/testing/storyboard/prepared-fixtures.d.ts +471 -0
- package/dist/lib/testing/storyboard/prepared-fixtures.js +434 -0
- package/dist/lib/testing/storyboard/prepared-fixtures.mjs +389 -0
- package/dist/lib/testing/storyboard/protected-context.d.mts +127 -0
- package/dist/lib/testing/storyboard/protected-context.d.ts +127 -0
- package/dist/lib/testing/storyboard/protected-context.js +301 -0
- package/dist/lib/testing/storyboard/protected-context.mjs +267 -0
- package/dist/lib/testing/storyboard/rejection-hints.js +13 -4
- package/dist/lib/testing/storyboard/rejection-hints.mjs +13 -4
- package/dist/lib/testing/storyboard/runner.d.mts +24 -0
- package/dist/lib/testing/storyboard/runner.d.ts +24 -0
- package/dist/lib/testing/storyboard/runner.js +1061 -105
- package/dist/lib/testing/storyboard/runner.mjs +1075 -106
- package/dist/lib/testing/storyboard/seeding.d.mts +15 -1
- package/dist/lib/testing/storyboard/seeding.d.ts +15 -1
- package/dist/lib/testing/storyboard/seeding.js +272 -12
- package/dist/lib/testing/storyboard/seeding.mjs +274 -13
- package/dist/lib/testing/storyboard/types.d.mts +207 -10
- package/dist/lib/testing/storyboard/types.d.ts +207 -10
- package/dist/lib/testing/storyboard/types.js +1 -1
- package/dist/lib/testing/storyboard/types.mjs +1 -1
- package/dist/lib/testing/storyboard/validations.d.mts +1 -1
- package/dist/lib/testing/storyboard/validations.d.ts +1 -1
- package/dist/lib/testing/storyboard/validations.js +95 -0
- package/dist/lib/testing/storyboard/validations.mjs +95 -0
- package/dist/lib/validation/bundled-schema-store.js +5 -0
- package/dist/lib/validation/bundled-schema-store.mjs +4 -0
- package/dist/lib/validation/schema-loader.js +19 -2
- package/dist/lib/validation/schema-loader.mjs +22 -3
- package/dist/lib/version.d.mts +3 -3
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.mjs +3 -3
- package/docs/TYPE-SUMMARY.md +2 -2
- package/docs/guides/COLLECTION-FIXTURE-FOUNDATION.md +850 -0
- package/docs/guides/PROPOSAL-TERMS-VERIFICATION.md +66 -0
- package/docs/llms.txt +4 -3
- package/docs/migration-14.x-rc-worksheet.md +4 -4
- 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(
|
|
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(
|
|
1269
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
1390
|
-
|
|
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)(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|