@adcp/sdk 14.0.0-beta.8 → 14.0.0-beta.9

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 (150) hide show
  1. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  2. package/dist/lib/core/ConversationTypes.d.mts +8 -0
  3. package/dist/lib/core/ConversationTypes.d.ts +8 -0
  4. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  5. package/dist/lib/core/ConversationTypes.js.map +1 -1
  6. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  7. package/dist/lib/core/SingleAgentClient.js +30 -3
  8. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  9. package/dist/lib/core/SingleAgentClient.mjs +30 -3
  10. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  11. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  12. package/dist/lib/core/TaskExecutor.js +32 -5
  13. package/dist/lib/core/TaskExecutor.js.map +1 -1
  14. package/dist/lib/core/TaskExecutor.mjs +32 -5
  15. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  16. package/dist/lib/index.d.mts +2 -2
  17. package/dist/lib/index.d.ts +2 -2
  18. package/dist/lib/index.d.ts.map +1 -1
  19. package/dist/lib/index.js +2 -0
  20. package/dist/lib/index.js.map +1 -1
  21. package/dist/lib/index.mjs +2 -1
  22. package/dist/lib/index.mjs.map +1 -1
  23. package/dist/lib/schemas/index.d.mts +14 -0
  24. package/dist/lib/schemas/index.d.ts +14 -0
  25. package/dist/lib/schemas/index.d.ts.map +1 -1
  26. package/dist/lib/schemas/index.js +13 -1
  27. package/dist/lib/schemas/index.js.map +1 -1
  28. package/dist/lib/schemas/index.mjs +13 -1
  29. package/dist/lib/schemas/index.mjs.map +1 -1
  30. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  31. package/dist/lib/server/adcp-server.d.mts +1 -0
  32. package/dist/lib/server/adcp-server.d.ts +1 -0
  33. package/dist/lib/server/adcp-server.d.ts.map +1 -1
  34. package/dist/lib/server/adcp-server.js +1 -1
  35. package/dist/lib/server/adcp-server.js.map +1 -1
  36. package/dist/lib/server/adcp-server.mjs +1 -1
  37. package/dist/lib/server/adcp-server.mjs.map +1 -1
  38. package/dist/lib/server/create-adcp-server.d.mts +10 -2
  39. package/dist/lib/server/create-adcp-server.d.ts +10 -2
  40. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  41. package/dist/lib/server/create-adcp-server.js +26 -19
  42. package/dist/lib/server/create-adcp-server.js.map +1 -1
  43. package/dist/lib/server/create-adcp-server.mjs +26 -26
  44. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  45. package/dist/lib/server/decisioning/capabilities.d.mts +15 -1
  46. package/dist/lib/server/decisioning/capabilities.d.ts +15 -1
  47. package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -1
  48. package/dist/lib/server/decisioning/capabilities.js.map +1 -1
  49. package/dist/lib/server/decisioning/capabilities.mjs.map +1 -1
  50. package/dist/lib/server/decisioning/index.d.mts +2 -2
  51. package/dist/lib/server/decisioning/index.d.ts +2 -2
  52. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  53. package/dist/lib/server/decisioning/index.js +2 -0
  54. package/dist/lib/server/decisioning/index.js.map +1 -1
  55. package/dist/lib/server/decisioning/index.mjs +2 -0
  56. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  57. package/dist/lib/server/decisioning/proposal/types.d.mts +3 -2
  58. package/dist/lib/server/decisioning/proposal/types.d.ts +3 -2
  59. package/dist/lib/server/decisioning/proposal/types.d.ts.map +1 -1
  60. package/dist/lib/server/decisioning/proposal/types.js.map +1 -1
  61. package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
  62. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +14 -1
  63. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +14 -1
  64. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  65. package/dist/lib/server/decisioning/runtime/from-platform.js +402 -9
  66. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  67. package/dist/lib/server/decisioning/runtime/from-platform.mjs +405 -9
  68. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  69. package/dist/lib/server/decisioning/runtime/validate-platform.d.mts +1 -1
  70. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts +1 -1
  71. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
  72. package/dist/lib/server/decisioning/runtime/validate-platform.js +2 -2
  73. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
  74. package/dist/lib/server/decisioning/runtime/validate-platform.mjs +2 -2
  75. package/dist/lib/server/decisioning/runtime/validate-platform.mjs.map +1 -1
  76. package/dist/lib/server/decisioning/specialisms/sales.d.mts +7 -1
  77. package/dist/lib/server/decisioning/specialisms/sales.d.ts +7 -1
  78. package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
  79. package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
  80. package/dist/lib/storage/interfaces.d.mts +2 -0
  81. package/dist/lib/storage/interfaces.d.ts +2 -0
  82. package/dist/lib/storage/interfaces.d.ts.map +1 -1
  83. package/dist/lib/storage/interfaces.js.map +1 -1
  84. package/dist/lib/testing/compliance/comply.d.mts +18 -0
  85. package/dist/lib/testing/compliance/comply.d.ts +18 -0
  86. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  87. package/dist/lib/testing/compliance/comply.js +30 -5
  88. package/dist/lib/testing/compliance/comply.js.map +1 -1
  89. package/dist/lib/testing/compliance/comply.mjs +28 -4
  90. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  91. package/dist/lib/testing/compliance/index.d.mts +1 -1
  92. package/dist/lib/testing/compliance/index.d.ts +1 -1
  93. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  94. package/dist/lib/testing/compliance/index.js +4 -2
  95. package/dist/lib/testing/compliance/index.js.map +1 -1
  96. package/dist/lib/testing/compliance/index.mjs +4 -2
  97. package/dist/lib/testing/compliance/index.mjs.map +1 -1
  98. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  99. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  100. package/dist/lib/types/list-creatives.d.ts +129 -6
  101. package/dist/lib/types/schemas.generated.d.ts +411 -16
  102. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  103. package/dist/lib/types/schemas.generated.js +22 -6
  104. package/dist/lib/types/schemas.generated.js.map +1 -1
  105. package/dist/lib/types/schemas.generated.mjs +22 -6
  106. package/dist/lib/types/schemas.generated.mjs.map +1 -1
  107. package/dist/lib/types/tools.generated.d.mts +80 -6
  108. package/dist/lib/types/tools.generated.d.ts +80 -6
  109. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  110. package/dist/lib/types/tools.generated.js.map +1 -1
  111. package/dist/lib/utils/adcp-version-config.d.mts +12 -0
  112. package/dist/lib/utils/adcp-version-config.d.ts +12 -0
  113. package/dist/lib/utils/adcp-version-config.d.ts.map +1 -1
  114. package/dist/lib/utils/adcp-version-config.js +5 -3
  115. package/dist/lib/utils/adcp-version-config.js.map +1 -1
  116. package/dist/lib/utils/adcp-version-config.mjs +4 -3
  117. package/dist/lib/utils/adcp-version-config.mjs.map +1 -1
  118. package/dist/lib/utils/pricing-adapter.d.mts +2 -0
  119. package/dist/lib/utils/pricing-adapter.d.ts +2 -0
  120. package/dist/lib/utils/pricing-adapter.d.ts.map +1 -1
  121. package/dist/lib/utils/pricing-adapter.js +68 -1
  122. package/dist/lib/utils/pricing-adapter.js.map +1 -1
  123. package/dist/lib/utils/pricing-adapter.mjs +67 -1
  124. package/dist/lib/utils/pricing-adapter.mjs.map +1 -1
  125. package/dist/lib/v2/projection/index.d.mts +1 -1
  126. package/dist/lib/v2/projection/index.d.ts +1 -1
  127. package/dist/lib/v2/projection/index.d.ts.map +1 -1
  128. package/dist/lib/v2/projection/index.js.map +1 -1
  129. package/dist/lib/v2/projection/index.mjs.map +1 -1
  130. package/dist/lib/v2/projection/v1-to-v2.d.mts +17 -3
  131. package/dist/lib/v2/projection/v1-to-v2.d.ts +17 -3
  132. package/dist/lib/v2/projection/v1-to-v2.d.ts.map +1 -1
  133. package/dist/lib/v2/projection/v1-to-v2.js.map +1 -1
  134. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  135. package/dist/lib/validation/schema-loader.d.mts +17 -0
  136. package/dist/lib/validation/schema-loader.d.ts +17 -0
  137. package/dist/lib/validation/schema-loader.d.ts.map +1 -1
  138. package/dist/lib/validation/schema-loader.js +24 -0
  139. package/dist/lib/validation/schema-loader.js.map +1 -1
  140. package/dist/lib/validation/schema-loader.mjs +23 -0
  141. package/dist/lib/validation/schema-loader.mjs.map +1 -1
  142. package/dist/lib/version.d.mts +3 -3
  143. package/dist/lib/version.d.ts +3 -3
  144. package/dist/lib/version.js +3 -3
  145. package/dist/lib/version.js.map +1 -1
  146. package/dist/lib/version.mjs +3 -3
  147. package/dist/lib/version.mjs.map +1 -1
  148. package/docs/llms.txt +2 -2
  149. package/docs/migration-13-to-14.md +59 -0
  150. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/core/TaskExecutor.ts"],"sourcesContent":["// Core task execution engine for ADCP conversation flow\n// Implements PR #78 async patterns: working/submitted/input-required/completed\n\nimport { createHmac, randomBytes, randomUUID } from 'crypto';\nimport type { AgentConfig } from '../types';\nimport {\n ProtocolClient,\n normalizeTransportOptions,\n prepareProtocolToolCall,\n type PreparedProtocolToolCall,\n} from '../protocols';\nimport { listMCPTasks } from '../protocols/mcp-tasks';\nimport { withPreparedProtocolToolCall } from '../protocols/prepared-call-context';\nimport { getAuthToken } from '../auth';\nimport { is401Error, adcpErrorToTypedError, ConfigurationError } from '../errors';\nimport type { ADCPError } from '../errors';\nimport type { DeferredTaskState, DeferredTaskStorage } from '../storage/interfaces';\nimport {\n validateOutgoingRequest,\n validateIncomingResponse,\n resolveValidationModes,\n type ValidationHookConfig,\n type ValidationMode,\n} from '../validation/client-hooks';\nimport { formatIssues } from '../validation/schema-validator';\nimport { ADCP_VERSION } from '../version';\nimport { unwrapProtocolResponse, isAdcpOperationSuccess } from '../utils/response-unwrapper';\nimport { extractAdcpErrorInfo, extractCorrelationId } from '../utils/error-extraction';\nimport { generateIdempotencyKey, requestUsesIdempotency, redactIdempotencyKeyInArgs } from '../utils/idempotency';\nimport { normalizeGetProductsResponse } from '../utils/pricing-adapter';\nimport { normalizeLegacyMediaBuyStatusForReturn } from '../utils/envelope-status-compat';\nimport { canonicalize } from '../utils/jcs';\nimport { SECRET_KEY_PATTERN, secretKeyPatternMatches } from '../utils/redact-secrets';\nimport { MAX_JSON_DEPTH } from '../utils/json-depth';\nimport { getLatestA2ADataPartFromResponse } from '../utils/a2a-artifacts';\nimport type { AdcpCapabilities } from '../utils/capabilities';\nimport { cancelA2ATask } from '../protocols/a2a';\nimport { isAbortOrTimeoutError, throwIfAborted } from '../protocols/abort';\nimport type {\n Message,\n InputRequest,\n InputHandler,\n ConversationContext,\n TaskOptions,\n TaskResult,\n TaskResultMetadata,\n TaskState,\n TaskStatus,\n TaskInfo,\n DeferredContinuation,\n SubmittedContinuation,\n WebhookUrlTemplate,\n} from './ConversationTypes';\nimport { normalizeHandlerResponse, isDeferResponse, isAbortResponse } from '../handlers/types';\nimport { ProtocolResponseParser, ADCP_STATUS, type ADCPStatus } from './ProtocolResponseParser';\nimport type { Activity } from './AsyncHandler';\nimport { GovernanceMiddleware } from './GovernanceMiddleware';\nimport type { GovernanceConfig, GovernanceCheckResult } from './GovernanceTypes';\nimport { targetDeclaresGovernanceEnforcement } from '../governance';\nimport { attachMatch } from './match';\nimport { resolveWebhookUrl } from './webhook-url';\nimport {\n attachTaskDeadlineGovernanceRecovery,\n attachTaskDeadlineIdempotencyKey,\n getTaskOperationId,\n withTaskDeadline,\n} from './task-deadline';\n\n// Keep the direct `core/TaskExecutor` export identical to the package-level\n// typed timeout error thrown by the deadline wrapper.\nexport { TaskTimeoutError } from '../errors';\n\n/**\n * Custom errors for task execution\n */\nexport class MaxClarificationError extends Error {\n constructor(taskId: string, maxAttempts: number) {\n super(`Task ${taskId} exceeded maximum clarification attempts: ${maxAttempts}`);\n this.name = 'MaxClarificationError';\n }\n}\n\nexport class DeferredTaskError extends Error {\n readonly token!: string;\n\n constructor(token: string) {\n super('Task deferred with an opaque continuation token.');\n this.name = 'DeferredTaskError';\n Object.defineProperty(this, 'token', {\n value: token,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n}\n\nexport class InputRequiredError extends Error {\n constructor(question: string) {\n super(`Server requires input but no handler provided. Question: ${question}`);\n this.name = 'InputRequiredError';\n }\n}\n\n/** Internal settlement acknowledgement carried through higher-level result projection. */\nexport const DEFERRED_SETTLEMENT_ACK = Symbol('adcp.deferredSettlementAck');\nconst DEFERRED_SETTLEMENT_NACK = Symbol('adcp.deferredSettlementNack');\nconst AUTHORITATIVE_POLLED_TERMINAL = Symbol('adcp.authoritativePolledTerminal');\nconst DEFERRED_PENDING_SETTLEMENT = Symbol('adcp.deferredPendingSettlement');\nconst COMPLETION_HANDLER_ALREADY_PUBLISHED = Symbol('adcp.completionHandlerAlreadyPublished');\n// Observation fingerprints live only in process-local settlement maps. A\n// process-private HMAC keeps equality stable for those maps without retaining\n// a reusable digest of credential-bearing seller result data.\nconst EXTERNAL_TASK_OBSERVATION_HMAC_KEY = randomBytes(32);\n\nexport class DeferredSettlementOwnershipError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'DeferredSettlementOwnershipError';\n }\n}\n\n/** Carry only the SDK's private settlement controls across an internal result projection. */\nexport function transferDeferredSettlementAcknowledgement<T extends object>(source: object, target: T): T {\n for (const symbol of [DEFERRED_SETTLEMENT_ACK, DEFERRED_SETTLEMENT_NACK]) {\n const descriptor = Object.getOwnPropertyDescriptor(source, symbol);\n if (descriptor) Object.defineProperty(target, symbol, descriptor);\n }\n return target;\n}\n\n/** Identify the internal submitted continuation that owns a durable pending checkpoint. */\nexport function hasDeferredPendingSettlement(result: TaskResult<any>): boolean {\n return DEFERRED_PENDING_SETTLEMENT in result;\n}\n\nexport function isAuthoritativePolledTerminal(result: TaskResult<any>): boolean {\n return AUTHORITATIVE_POLLED_TERMINAL in result;\n}\n\n/** Mark a result whose configured completion handler was already invoked by durable callback publication. @internal */\nexport function markCompletionHandlerAlreadyPublished<T extends object>(result: T): T {\n Object.defineProperty(result, COMPLETION_HANDLER_ALREADY_PUBLISHED, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return result;\n}\n\n/** Avoid invoking an application completion handler twice for the same durable publication. @internal */\nexport function hasCompletionHandlerAlreadyPublished(result: object): boolean {\n return COMPLETION_HANDLER_ALREADY_PUBLISHED in result;\n}\n\nconst DEFERRED_CONTINUATION_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43,256}$/;\nconst UUID_V4_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nfunction assertDeferredContinuationToken(token: unknown): asserts token is string {\n if (typeof token !== 'string' || (!DEFERRED_CONTINUATION_TOKEN_PATTERN.test(token) && !UUID_V4_PATTERN.test(token))) {\n throw new Error('Deferred continuation token has an invalid shape.');\n }\n}\n\nexport async function checkpointDeferredPendingSettlement<T>(\n owner: TaskResult<any>,\n terminal: TaskResult<T>\n): Promise<TaskResult<T>> {\n const checkpoint = (\n owner as TaskResult<any> & {\n [DEFERRED_PENDING_SETTLEMENT]?: (result: TaskResult<T>) => Promise<TaskResult<T>>;\n }\n )[DEFERRED_PENDING_SETTLEMENT];\n if (!checkpoint) throw new Error('Durable pending settlement checkpoint is unavailable.');\n return checkpoint(terminal);\n}\n\nfunction markAuthoritativePolledTerminal<T>(result: TaskResult<T>): TaskResult<T> {\n Object.defineProperty(result, AUTHORITATIVE_POLLED_TERMINAL, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return result;\n}\n\nexport async function acknowledgeDeferredSettlement(result: TaskResult<any>): Promise<void> {\n const acknowledge = (\n result as TaskResult<any> & {\n [DEFERRED_SETTLEMENT_ACK]?: (finalizedResult?: TaskResult<any>) => Promise<void>;\n }\n )[DEFERRED_SETTLEMENT_ACK];\n await acknowledge?.(result);\n}\n\nexport async function rejectDeferredSettlement(result: TaskResult<any>): Promise<void> {\n const reject = (\n result as TaskResult<any> & {\n [DEFERRED_SETTLEMENT_NACK]?: () => Promise<void>;\n }\n )[DEFERRED_SETTLEMENT_NACK];\n await reject?.();\n}\n\n/** Supporting contract for the internal pre-dispatch boundary. */\nexport type BeforeProtocolDispatchHookResult<T> =\n | {\n action: 'dispatch_committed';\n /** Require the owning durable coordinator to authorize every seller-input continuation. */\n requireDeferredSettlementResumeAuthorization?: boolean;\n /** Persist returned pauses for restart/public-token recovery. Defaults to true. */\n persistPausedContinuation?: boolean;\n /** Persist or otherwise settle the seller result inside the executor-owned dispatch lifetime. */\n onResult?: (result: TaskResult<T>) => Promise<TaskResult<T>>;\n /** Fence transport/parser uncertainty inside the executor-owned dispatch lifetime. */\n onError?: (error: unknown) => Promise<never>;\n }\n | { action: 'return'; result: TaskResult<T> };\n\n/** Context supplied to the internal pre-dispatch boundary. */\nexport interface BeforeProtocolDispatchContext {\n /** Client-minted operation id embedded in the callback route. */\n operationId: string;\n /** True when governance changed the payload rather than approving it unchanged. */\n governanceAdjusted: boolean;\n /** Publish a terminal continuation result after its durable settlement succeeds. */\n publishSettledTaskStatus: (status: TaskStatus, data?: unknown, error?: string) => void;\n /** Register durable settlement for an authoritative terminal push notification. */\n registerExternalTaskSettlement: (handler: ExternalTaskSettlementHandler) => void;\n}\n\nexport interface ExternalTaskSettlementObservation {\n status: TaskStatus;\n result?: unknown;\n serverTaskId?: string;\n taskType?: string;\n idempotencyKey?: string;\n /** True when the caller already owns the deferred terminal finalization lease. @internal */\n deferredCheckpointOwned?: boolean;\n}\n\nexport type ExternalTaskSettlementHandler = (\n observation: ExternalTaskSettlementObservation\n) => Promise<TaskResult<unknown>>;\n\nexport interface ExternalTaskStatusResult {\n settled: boolean;\n /** Accepted for deferred settlement once the response supplies trusted task identity. */\n queued?: boolean;\n /** Exact retry of a terminal observation that already completed durable settlement. */\n duplicate?: boolean;\n result?: unknown;\n status?: TaskStatus;\n error?: string;\n /** Durable acknowledgement to run only after application dispatch succeeds. @internal */\n afterDispatch?: () => Promise<void>;\n /** Release an acquired durable-finalization owner when application dispatch fails. @internal */\n onDispatchError?: () => Promise<void>;\n}\n\ninterface SettledExternalTaskObservation {\n key: string;\n status: TaskStatus;\n error?: string;\n}\n\ninterface ExternalTaskSettlementInFlight {\n observationKey: string;\n settlement: Promise<ExternalTaskStatusResult>;\n waiterCount: number;\n}\n\n/** Hook used by higher-level SDK coordinators at the final dispatch boundary. */\nexport type BeforeProtocolDispatchHook<T> = (\n effectiveParams: any,\n context: BeforeProtocolDispatchContext\n) => Promise<BeforeProtocolDispatchHookResult<T>>;\n\n/** Keeps internal dispatch-boundary failures out of the normal TaskResult error projection. */\n/** @internal */\nexport class BeforeProtocolDispatchHookError extends Error {\n constructor(readonly original: unknown) {\n super('An SDK pre-dispatch hook failed.', { cause: original });\n this.name = 'BeforeProtocolDispatchHookError';\n }\n}\n\n/** Keeps internal post-dispatch settlement failures out of normal TaskResult error projection. */\n/** @internal */\nexport class AfterProtocolDispatchHookError extends Error {\n constructor(readonly original: unknown) {\n super('An SDK post-dispatch settlement hook failed.', { cause: original });\n this.name = 'AfterProtocolDispatchHookError';\n }\n}\n\nconst GOVERNED_CREDENTIAL_SCAN_MAX_NODES = 10_000;\nconst GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH = 64;\nconst GOVERNED_CALLBACK_FIELDS = new Set(['push_notification_config', 'reporting_webhook', 'artifact_webhook']);\n\ntype GovernedCredentialScanResult =\n | { kind: 'credential'; path: string; callbackField: string }\n | { kind: 'limit'; limit: 'nodes' | 'depth' };\n\nfunction webhookRegistrationFromPreparedCall(\n _agent: AgentConfig,\n preparedCall: PreparedProtocolToolCall\n): { callbackUrl: string; mode: 'rfc9421' | 'hmac-sha256' } | undefined {\n const candidate =\n preparedCall.args.push_notification_config &&\n typeof preparedCall.args.push_notification_config === 'object' &&\n !Array.isArray(preparedCall.args.push_notification_config)\n ? (preparedCall.args.push_notification_config as Record<string, unknown>)\n : _agent.protocol === 'a2a'\n ? preparedCall.pushNotificationConfig\n : undefined;\n if (!candidate) return undefined;\n if (typeof candidate.url !== 'string') {\n throw new ConfigurationError('push_notification_config.url must be a string.', 'push_notification_config.url');\n }\n\n if (!Object.prototype.hasOwnProperty.call(candidate, 'authentication')) {\n return { callbackUrl: candidate.url, mode: 'rfc9421' };\n }\n const authentication = candidate.authentication;\n if (!authentication || typeof authentication !== 'object' || Array.isArray(authentication)) {\n throw new ConfigurationError(\n 'push_notification_config.authentication selects legacy verification and must be a supported object.',\n 'push_notification_config.authentication'\n );\n }\n const schemes = (authentication as Record<string, unknown>).schemes;\n const credentials = (authentication as Record<string, unknown>).credentials;\n if (\n !Array.isArray(schemes) ||\n schemes.length !== 1 ||\n schemes[0] !== 'HMAC-SHA256' ||\n typeof credentials !== 'string' ||\n credentials.length === 0\n ) {\n throw new ConfigurationError(\n 'This receiver supports legacy HMAC-SHA256 or RFC 9421 push notifications; Bearer and mixed schemes are not supported.',\n 'push_notification_config.authentication.schemes'\n );\n }\n return {\n callbackUrl: candidate.url,\n mode: 'hmac-sha256',\n };\n}\n\n/**\n * Find callback authentication credentials before an exact downstream payload\n * crosses the governance-agent boundary. AdCP 3.2 requires intent payloads to\n * match the seller arguments byte-for-byte at the JSON-data-model level, so\n * the SDK cannot safely redact a credential and reinsert it after approval:\n * doing so would invalidate the seller's authorized_payload_hash check.\n */\nfunction findGovernedAuthenticationCredential(value: unknown): GovernedCredentialScanResult | undefined {\n const stack: Array<{ value: unknown; depth: number }> = [{ value, depth: 0 }];\n const visited = new WeakSet<object>();\n let visitedNodes = 0;\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (!current.value || typeof current.value !== 'object') continue;\n if (current.depth > GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH) return { kind: 'limit', limit: 'depth' };\n if (visited.has(current.value)) continue;\n visited.add(current.value);\n if (++visitedNodes > GOVERNED_CREDENTIAL_SCAN_MAX_NODES) return { kind: 'limit', limit: 'nodes' };\n\n if (!Array.isArray(current.value)) {\n const record = current.value as Record<string, unknown>;\n for (const callbackField of GOVERNED_CALLBACK_FIELDS) {\n const callback = record[callbackField];\n if (!callback || typeof callback !== 'object' || Array.isArray(callback)) continue;\n const authentication = (callback as Record<string, unknown>).authentication;\n if (\n authentication &&\n typeof authentication === 'object' &&\n !Array.isArray(authentication) &&\n (authentication as Record<string, unknown>).credentials !== undefined\n ) {\n return {\n kind: 'credential',\n path: `${callbackField}.authentication.credentials`,\n callbackField,\n };\n }\n }\n }\n\n for (const key in current.value) {\n if (!Object.prototype.hasOwnProperty.call(current.value, key)) continue;\n const child = (current.value as Record<string, unknown>)[key];\n if (!child || typeof child !== 'object') continue;\n if (visitedNodes + stack.length >= GOVERNED_CREDENTIAL_SCAN_MAX_NODES) {\n return { kind: 'limit', limit: 'nodes' };\n }\n stack.push({ value: child, depth: current.depth + 1 });\n }\n }\n return undefined;\n}\n\nfunction assertGovernedPayloadHasNoCallbackCredentials(\n taskName: string,\n payload: Record<string, unknown>,\n options: { sdkInjectedPushConfig?: boolean } = {}\n): void {\n const scanResult = findGovernedAuthenticationCredential(payload);\n if (!scanResult) return;\n if (scanResult.kind === 'limit') {\n const limitDescription =\n scanResult.limit === 'nodes'\n ? `${GOVERNED_CREDENTIAL_SCAN_MAX_NODES.toLocaleString('en-US')} nested objects`\n : `${GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH} object levels`;\n throw new ConfigurationError(\n `The SDK could not safely inspect the governed ${taskName} payload for callback credentials because it ` +\n `exceeds the ${limitDescription} safety limit. Simplify the payload or move deeply nested extension data ` +\n `out of the governed request before retrying.`,\n 'governance.payload'\n );\n }\n const remedy =\n scanResult.callbackField === 'push_notification_config'\n ? options.sdkInjectedPushConfig\n ? 'Retry with task options `{ disableWebhook: true }` and poll for completion, or use A2A task-status notifications.'\n : 'Remove the credential-bearing push notification config and poll for completion, or use A2A task-status notifications.'\n : `Remove the credential-bearing ${scanResult.callbackField} from this governed request and use a ` +\n `non-webhook delivery path.`;\n throw new ConfigurationError(\n `Governed ${taskName} cannot forward ${scanResult.path} to the governance agent. ` +\n `The SDK will not disclose receiver authentication credentials, and redacting modern AdCP 3.2 payloads ` +\n `would invalidate seller authorization. ${remedy}`,\n scanResult.path\n );\n}\n\n/**\n * Map an AdCP `tasks/get` response (post-unwrap) to the SDK's internal\n * `TaskInfo` shape. The AdCP 3.0 schema\n * (`schemas/cache/3.0.0/bundled/core/tasks-get-response.json`) is flat\n * snake_case: `{ task_id, task_type, protocol, status, created_at,\n * updated_at, error?, progress?, history?, completed_at?, has_webhook?,\n * context?, ext? }`. The internal `TaskInfo` is camelCase with a\n * superset of legacy fields some pre-3.0 sellers still emit.\n *\n * **Result-data extraction.** AdCP 3.1.0 defines a typed `result`\n * field on `tasks/get` responses (per adcontextprotocol/adcp#3126,\n * which closed adcp#3123). Sellers populate it when the buyer's\n * request set `include_result: true` and the task reached\n * `completed`. The mapper reads it directly into `TaskInfo.result`\n * so `pollTaskCompletion` surfaces it on the resolved\n * `TaskResult.data`. Pre-3.1.0 sellers that emitted `result` via\n * `additionalProperties: true` continue to work — the typed and\n * informal paths share the same field name.\n *\n * **Legacy nested shape.** Some pre-3.0 sellers and existing test\n * mocks emit `{ task: { ...TaskInfo } }` — a non-spec wrapper. We\n * unwrap it before the spec-shape mapping so the SDK stays\n * compatible with both surfaces during the transition.\n */\nfunction mapTasksGetResponseToTaskInfo(payload: unknown): TaskInfo {\n if (payload == null || typeof payload !== 'object') {\n return { taskId: '', status: 'unknown', taskType: 'unknown', createdAt: Date.now(), updatedAt: Date.now() };\n }\n const obj = payload as Record<string, unknown>;\n // Walk the transport-level wrappers in priority order:\n // 1. MCP `structuredContent` — the typed AdCP payload from `tools/call`\n // 2. A2A latest structured DataPart — the AdCP payload\n // surfaced via the artifact (per #899)\n // 3. Legacy nested `{ task: TaskInfo }` — pre-3.0 sellers and\n // existing test mocks\n // 4. Flat AdCP-spec shape — what AdCP 3.0 sellers emit directly\n const flat = unwrapTasksGetEnvelope(obj);\n const errorRaw = flat.error;\n const errorMessage =\n typeof errorRaw === 'string'\n ? errorRaw\n : errorRaw != null &&\n typeof errorRaw === 'object' &&\n typeof (errorRaw as { message?: unknown }).message === 'string'\n ? (errorRaw as { message: string }).message\n : undefined;\n const taskInfo: TaskInfo = {\n taskId: stringField(flat.task_id) ?? stringField(flat.taskId) ?? '',\n status: stringField(flat.status) ?? 'unknown',\n taskType: stringField(flat.task_type) ?? stringField(flat.taskType) ?? 'unknown',\n createdAt: parseTimestamp(flat.created_at ?? flat.createdAt),\n updatedAt: parseTimestamp(flat.updated_at ?? flat.updatedAt),\n };\n if (errorMessage !== undefined) taskInfo.error = errorMessage;\n // Top-level `message` field: the AdCP envelope's human-readable\n // status descriptor (advisory string accompanying any status —\n // e.g. \"Budget cap exceeded — task not started\" on a `rejected`\n // task). `pollTaskCompletion` falls back to this when the\n // `error.message` block is absent on a terminal failure. Distinct\n // from `error.message` (which lives under the structured `error`\n // object).\n const messageField = stringField(flat.message);\n if (messageField !== undefined) taskInfo.message = messageField;\n // Result extraction — see JSDoc. AdCP 3.1.0 defines `result` as\n // the canonical typed field; pre-3.1.0 sellers using\n // `additionalProperties: true` shared the same field name, so the\n // mapping is unchanged across versions.\n if (flat.result !== undefined) {\n taskInfo.result =\n flat.result != null && typeof flat.result === 'object' && !Array.isArray(flat.result)\n ? normalizeLegacyMediaBuyStatusForReturn(flat.result as Record<string, unknown>, {\n toolName: taskInfo.taskType,\n })\n : flat.result;\n }\n return taskInfo;\n}\n\nfunction stringField(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Cap on the wrapper-unwrap recursion depth. Real-world responses\n * have at most two layers (MCP `structuredContent` OR A2A JSON-RPC →\n * Task → artifact → DataPart). The cap is a defense against a\n * malformed or hostile seller emitting a deeply-nested wrapper that\n * would otherwise stack-overflow the buyer.\n */\nconst TASKS_GET_UNWRAP_MAX_DEPTH = 8;\n\nfunction unwrapTasksGetEnvelope(obj: Record<string, unknown>, depth = 0, allowRawData = true): Record<string, unknown> {\n if (depth >= TASKS_GET_UNWRAP_MAX_DEPTH) return obj;\n // MCP: `tools/call` response carries the typed payload at\n // `structuredContent`.\n const sc = obj.structuredContent;\n if (sc != null && typeof sc === 'object' && !Array.isArray(sc)) {\n return unwrapTasksGetEnvelope(sc as Record<string, unknown>, depth + 1, false);\n }\n // A2A: `message/send` response is a JSON-RPC envelope wrapping a\n // Task; the AdCP payload sits on the latest structured DataPart.\n const result = obj.result;\n if (result != null && typeof result === 'object' && !Array.isArray(result)) {\n const r = result as Record<string, unknown>;\n if (r.kind === 'task') {\n const extracted = getLatestA2ADataPartFromResponse(obj);\n if (extracted) {\n return unwrapTasksGetEnvelope(extracted.data, depth + 1, false);\n }\n // adcp-client#1612: When the A2A Task has no DataPart artifacts (e.g. the\n // seller returns an A2A transport-level state without an AdCP DataPart\n // payload), surface the transport-layer status as a last-resort hint so\n // `mapTasksGetResponseToTaskInfo` can map terminal states to `failed` /\n // `completed` rather than falling through to `'unknown'`. The transport\n // state overlaps with AdCP status strings for all A2A-native values\n // (`completed`, `failed`, `rejected`, `canceled`, `working`, `submitted`).\n // Note: `auth-required` is an AdCP-layer concept; it won't surface via\n // this path (no A2A-native transport state carries that label) — those\n // responses reach the `unknown` exit branch instead. Also include the A2A\n // task handle (`result.id`) so polling error messages carry the real id.\n const transportStatus = (r.status as Record<string, unknown> | undefined)?.state;\n if (typeof transportStatus === 'string') {\n return { status: transportStatus, task_id: typeof r.id === 'string' ? r.id : undefined };\n }\n }\n }\n // Raw/in-process MCP wrappers sometimes carry the AdCP payload under\n // `data` rather than the official CallToolResult `structuredContent`.\n // Unwrap only when it looks like a task envelope and no official payload\n // has already been selected.\n const data = obj.data;\n if (allowRawData && data != null && typeof data === 'object' && !Array.isArray(data)) {\n const d = data as Record<string, unknown>;\n if ('status' in d || 'task_id' in d || 'taskId' in d) {\n return unwrapTasksGetEnvelope(d, depth + 1, true);\n }\n }\n // Legacy nested wrapper from pre-3.0 sellers and existing mocks.\n // TODO(adcp-client#967): remove once mock fixtures in\n // `test/lib/task-executor*.test.js` migrate to the AdCP-spec flat\n // shape. No real seller emits this; verified at PR review time.\n if (obj.task != null && typeof obj.task === 'object' && !Array.isArray(obj.task)) {\n return obj.task as Record<string, unknown>;\n }\n // Flat AdCP-spec shape — return as-is.\n return obj;\n}\n\nfunction parseTimestamp(value: unknown): number {\n if (typeof value === 'string') {\n const parsed = Date.parse(value);\n if (!Number.isNaN(parsed)) return parsed;\n }\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n return Date.now();\n}\n\n/**\n * Return the idempotency_key this task should use: the caller's value if\n * present, otherwise a fresh UUID v4 for mutating tasks, otherwise undefined.\n */\nfunction resolveIdempotencyKey(taskName: string, params: any, serverVersion?: 'v2' | 'v3'): string | undefined {\n const callerSupplied =\n params && typeof params === 'object' && typeof params.idempotency_key === 'string'\n ? params.idempotency_key\n : undefined;\n if (callerSupplied) return callerSupplied;\n // v2.5 mutations use buyer_ref as their stable replay identity. Request\n // adaptation has already derived it from the caller's canonical key. Do\n // not inject a fresh v3-only idempotency_key after adaptation: that makes\n // identical retries differ on the wire and can defeat legacy dedupe.\n if (serverVersion === 'v2') {\n return params && typeof params === 'object' && typeof params.buyer_ref === 'string' ? params.buyer_ref : undefined;\n }\n if (requestUsesIdempotency(taskName, params)) return generateIdempotencyKey();\n return undefined;\n}\n\n/**\n * Webhook manager for submitted tasks\n */\ninterface WebhookManager {\n generateUrl(taskId: string): string;\n registerWebhook(agent: AgentConfig, taskId: string, webhookUrl: string): Promise<void>;\n processWebhook(token: string, body: any): Promise<void>;\n}\n\ninterface TaskStatusPollResult {\n task: TaskInfo;\n rawResponse: Record<string, unknown>;\n}\n\nclass TaskBindingMismatchError extends Error {\n constructor(\n message: string,\n readonly rawResponse: Record<string, unknown>\n ) {\n super(message);\n this.name = 'TaskBindingMismatchError';\n }\n}\n\nconst COMPACTED_TASK_STATE_LIMIT = 10_000;\nconst DEFAULT_EXTERNAL_TASK_SETTLEMENT_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\nconst TERMINAL_TASK_STATUSES = new Set<TaskStatus>([\n 'completed',\n 'failed',\n 'rejected',\n 'canceled',\n 'governance-denied',\n 'aborted',\n]);\nconst MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS = 8;\nconst MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS = 1_024;\nconst DEFAULT_DEFERRED_TASK_TTL_SECONDS = 7 * 24 * 60 * 60;\n// Human continuation tokens may intentionally be short-lived. Once seller\n// dispatch is admitted, mutation fencing and terminal recovery need their own\n// substantially longer horizon that cannot be shortened by that option.\nconst DEFAULT_DEFERRED_SAFETY_RETENTION_SECONDS = 7 * 24 * 60 * 60;\nconst DEFERRED_SAFETY_MARGIN_SECONDS = 60;\nconst DEFERRED_FINALIZATION_LEASE_MS = 30_000;\nconst DEFERRED_FINALIZATION_RENEW_MS = 10_000;\nconst DEFERRED_DISPATCH_ADMISSION_LEASE_MS = 30_000;\nconst DEFERRED_DISPATCH_ADMISSION_RENEW_MS = 10_000;\nconst DEFERRED_SECRET_KEY_PATTERN = new RegExp(\n `(?:${SECRET_KEY_PATTERN.source})|^(?:auth|oauth)[_-]?token$`,\n SECRET_KEY_PATTERN.flags\n);\n\nfunction snapshotTaskOptions(options: TaskOptions): TaskOptions {\n return {\n ...options,\n ...(options.transport !== undefined && { transport: snapshotTransportOptions(options.transport) }),\n ...(options.metadata !== undefined && { metadata: structuredClone(options.metadata) }),\n };\n}\n\nfunction snapshotTransportOptions(\n transport?: import('../protocols').TransportOptions\n): import('../protocols').TransportOptions | undefined {\n return transport === undefined ? undefined : { ...transport };\n}\n\nfunction durableDeferredSnapshot<T>(value: T): T {\n const snapshot = (current: unknown, depth: number, seen: WeakSet<object>): unknown => {\n // Durable continuations must never preserve an unvisited subtree. The\n // shared recorder redactor relies on a later depth assertion, whereas\n // this path writes the clone directly to adopter-controlled storage.\n if (depth > MAX_JSON_DEPTH) return '[Truncated]';\n if (Array.isArray(current)) {\n if (seen.has(current)) return '[Circular]';\n seen.add(current);\n const result = current.map(item => snapshot(item, depth + 1, seen));\n seen.delete(current);\n return result;\n }\n if (current && typeof current === 'object') {\n if (seen.has(current)) return '[Circular]';\n seen.add(current);\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(current as Record<string, unknown>)) {\n // Secret-shaped containers (for example service-account\n // `credentials`) are opaque. Redact the entire value rather than\n // assuming its vendor-specific child keys also match our pattern.\n const retained = secretKeyPatternMatches(DEFERRED_SECRET_KEY_PATTERN, key)\n ? '[redacted]'\n : snapshot(item, depth + 1, seen);\n Object.defineProperty(result, key, {\n value: retained,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n seen.delete(current);\n return result;\n }\n return current;\n };\n\n return snapshot(value, 0, new WeakSet()) as T;\n}\n\nfunction comparableDeferredTerminal(result: unknown): unknown {\n const snapshot = durableDeferredSnapshot(result) as Partial<TaskResult<unknown>> | undefined;\n if (!snapshot || typeof snapshot !== 'object') return snapshot;\n return {\n success: snapshot.success,\n status: snapshot.status,\n data: snapshot.data,\n error: snapshot.error,\n adcpError: snapshot.adcpError,\n correlationId: snapshot.correlationId,\n serverTaskId: snapshot.metadata?.serverTaskId,\n };\n}\n\nfunction sameDeferredTerminal(left: unknown, right: unknown): boolean {\n return canonicalize(comparableDeferredTerminal(left)) === canonicalize(comparableDeferredTerminal(right));\n}\n\nfunction reconcileDeferredServerTaskId(\n trustedServerTaskId: string | undefined,\n observedServerTaskIds: readonly (string | undefined)[],\n mismatchMessage = 'The committed deferred continuation changed its bound seller task identity.'\n): string | undefined {\n const identities = [trustedServerTaskId, ...observedServerTaskIds].filter(\n (identity): identity is string => identity !== undefined\n );\n for (const identity of identities) {\n if (identity.length === 0) {\n throw new Error('The committed deferred continuation contains an invalid empty seller task identity.');\n }\n }\n const serverTaskId = trustedServerTaskId ?? observedServerTaskIds.find(identity => identity !== undefined);\n if (serverTaskId !== undefined && identities.some(identity => identity !== serverTaskId)) {\n throw new Error(mismatchMessage);\n }\n return serverTaskId;\n}\n\nfunction normalizeDeferredTerminalServerTaskId<T>(\n result: TaskResult<T>,\n trustedServerTaskId?: string\n): { result: TaskResult<T>; serverTaskId?: string } {\n const observedServerTaskId = result.metadata?.serverTaskId;\n const serverTaskId = reconcileDeferredServerTaskId(trustedServerTaskId, [observedServerTaskId]);\n if (serverTaskId === undefined || observedServerTaskId === serverTaskId) {\n return { result, ...(serverTaskId !== undefined && { serverTaskId }) };\n }\n return {\n result: {\n ...result,\n metadata: {\n ...result.metadata,\n serverTaskId,\n },\n },\n serverTaskId,\n };\n}\n\nfunction trustedDeferredServerTaskId(state: DeferredTaskState): string | undefined {\n return reconcileDeferredServerTaskId(\n state.settlementServerTaskId,\n [state.settlementPendingTaskId],\n 'The durable deferred checkpoint contains conflicting seller task identities.'\n );\n}\n\ninterface DeferredFinalizationLease {\n finalize<T>(result: TaskResult<T>): Promise<void>;\n release(completionHandlerPublished?: boolean): Promise<void>;\n}\n\ninterface DeferredDispatchAdmissionLease {\n stop(): Promise<{ version: string; state: DeferredTaskState }>;\n}\n\n/**\n * Core task execution engine that handles the conversation loop with agents\n */\nexport class TaskExecutor {\n private readonly deferredTerminalPublicationTaskIds = new Set<string>();\n private readonly settlementCapacityReservations = new Set<string>();\n private readonly closedExternalTaskSettlementTaskIds = new Set<string>();\n private readonly externalTaskSettlementHandlers = new Map<string, ExternalTaskSettlementHandler>();\n private readonly externalTaskSettlementInFlight = new Map<string, ExternalTaskSettlementInFlight>();\n private readonly settledExternalTaskObservationKeys = new Map<string, SettledExternalTaskObservation>();\n private readonly externalTaskSettlementExpiry = new Map<string, number>();\n private readonly externalTaskSettlementTimers = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly pendingExternalTaskObservations = new Map<string, ExternalTaskSettlementObservation[]>();\n private readonly deferredAgents = new Map<string, AgentConfig>();\n private responseParser: ProtocolResponseParser;\n private activeTasks = new Map<string, TaskState>();\n private compactedTaskIds = new Map<string, true>();\n private conversationStorage?: Map<string, Message[]>;\n private governanceMiddleware?: GovernanceMiddleware;\n private lastKnownServerVersion?: 'v2' | 'v3';\n private requestValidationMode!: ValidationMode;\n private responseValidationMode!: ValidationMode;\n\n constructor(\n private config: {\n /** Default timeout for 'working' status (max 120s per PR #78) */\n workingTimeout?: number;\n /** Polling interval for 'working' status in milliseconds (default: 2000ms) */\n pollingInterval?: number;\n /** Default max clarification attempts */\n defaultMaxClarifications?: number;\n /** Enable conversation storage */\n enableConversationStorage?: boolean;\n /** Webhook manager for submitted tasks */\n webhookManager?: WebhookManager;\n /** Storage for deferred task state */\n deferredStorage?: DeferredTaskStorage;\n /** Resolve current trusted agent configuration after a process restart. */\n resolveDeferredAgent?: (agentId: string) => AgentConfig | undefined | Promise<AgentConfig | undefined>;\n /** Lifetime of a durable human-continuation token. Defaults to seven days. */\n deferredTaskTtlSeconds?: number;\n /** Check whether the owning client can recover a committed deferred settlement. */\n canRecoverDeferredSettlement?: (operationId: string) => boolean | Promise<boolean>;\n /** Verify that this is still the coordinator's current committed continuation token. */\n authorizeDeferredSettlementResume?: (operationId: string, token: string) => boolean | Promise<boolean>;\n /** Verify a separate owner capability before revealing a route's opaque continuation token. */\n authorizeDeferredSettlementOperationRecovery?: (\n operationId: string,\n recoveryKey: string,\n purpose: 'pause-recovery' | 'callback-checkpoint'\n ) => boolean | Promise<boolean>;\n /** Atomically hand a committed coordinator route from one persisted token generation to the next. */\n replaceDeferredSettlementResumeToken?: (\n operationId: string,\n currentToken: string,\n replacementToken: string\n ) => boolean | Promise<boolean>;\n /** Settle a committed deferred result before it can be published or returned. */\n recoverDeferredSettlement?: (\n result: TaskResult<any>,\n operationId: string,\n serverTaskId?: string\n ) => Promise<{ result: TaskResult<any>; afterFinalize?: () => Promise<void> }>;\n /** Webhook URL template for protocol-level webhook support */\n webhookUrlTemplate?: WebhookUrlTemplate;\n /** Agent ID for webhook URL generation */\n agentId?: string;\n /** Webhook secret for legacy HMAC authentication. */\n webhookSecret?: string;\n /** Persist sanitized callback mode provenance before dispatch. */\n onWebhookRegistration?: (registration: {\n agent: AgentConfig;\n taskType: string;\n operationId: string;\n callbackUrl: string;\n mode: 'rfc9421' | 'hmac-sha256';\n }) => void | Promise<void>;\n /** Persist fail-closed routing provenance before a durable mutation claim can run. */\n onDurableSettlementRequired?: (operationId: string) => void | Promise<void>;\n /** Retain durable push-settlement fences for at least the callback registration lifetime. */\n externalTaskSettlementRetentionMs?: number;\n /** Fail tasks when response schema validation fails (default: true) */\n strictSchemaValidation?: boolean;\n /** Emit schema validation violations to debug logs and the console (default: true) */\n logSchemaViolations?: boolean;\n /**\n * Schema-driven validation using the bundled AdCP JSON schemas.\n * Controls outgoing request and incoming response checks independently.\n * Defaults: strict in dev/test, warn in prod. Set a mode to `off` to\n * skip the validator entirely on that side (zero overhead).\n */\n validation?: ValidationHookConfig;\n /** Filter out invalid products from get_products responses instead of rejecting the entire response (default: false) */\n filterInvalidProducts?: boolean;\n /** Global activity callback for observability */\n onActivity?: (activity: Activity) => void | Promise<void>;\n /** Transport-level diagnostics callback for outbound HTTP requests. */\n onTransportActivity?: import('../protocols').TransportActivityHandler;\n /** Governance configuration for buyer-side campaign governance */\n governance?: GovernanceConfig;\n /**\n * AdCP version this executor speaks. Selects which schema bundle\n * `validateIncomingResponse` / `validateOutgoingRequest` validate\n * against, and which `adcp_major_version` value goes on the wire.\n * Defaults to the SDK-pinned `ADCP_VERSION` when omitted.\n *\n * Plumbed from `SingleAgentClient.resolvedAdcpVersion` so the\n * client/agent's `getAdcpVersion()` value is the single source of\n * truth for both validation and wire-level major.\n */\n adcpVersion?: string;\n wireAdcpVersion?: string;\n versionEnvelope?: import('../protocols').VersionEnvelopeMode;\n /**\n * Transport-level safeguards applied to every call this executor\n * dispatches. Per-call options can override individual fields.\n */\n transport?: import('../protocols').TransportOptions;\n } = {}\n ) {\n if (\n config.externalTaskSettlementRetentionMs !== undefined &&\n (!Number.isSafeInteger(config.externalTaskSettlementRetentionMs) || config.externalTaskSettlementRetentionMs < 1)\n ) {\n throw new ConfigurationError('externalTaskSettlementRetentionMs must be a positive safe integer.');\n }\n if (\n config.deferredTaskTtlSeconds !== undefined &&\n (!Number.isSafeInteger(config.deferredTaskTtlSeconds) || config.deferredTaskTtlSeconds < 1)\n ) {\n throw new ConfigurationError('deferredTaskTtlSeconds must be a positive safe integer.');\n }\n if (config.deferredStorage && typeof config.deferredStorage.putIfAbsent !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic putIfAbsent() creation so replicas cannot overwrite a continuation. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n if (config.deferredStorage && typeof config.deferredStorage.replaceIfVersion !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic replaceIfVersion() fencing so only one replica can dispatch a resume. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n if (config.deferredStorage && typeof config.deferredStorage.takeIfVersion !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic takeIfVersion() cleanup so stale owners cannot delete newer state. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n this.responseParser = new ProtocolResponseParser();\n if (config.enableConversationStorage) {\n this.conversationStorage = new Map();\n }\n if (config.governance) {\n this.governanceMiddleware = new GovernanceMiddleware(\n config.governance,\n config.onActivity,\n config.adcpVersion,\n config.versionEnvelope,\n config.onTransportActivity\n );\n }\n const modes = resolveValidationModes(config.validation);\n this.requestValidationMode = modes.requests;\n // Legacy `strictSchemaValidation: false` flips response-side enforcement\n // to warn mode — preserve that behaviour unless `validation.responses`\n // was set explicitly.\n if (config.validation?.responses !== undefined) {\n this.responseValidationMode = config.validation.responses;\n } else if (config.strictSchemaValidation === false) {\n this.responseValidationMode = 'warn';\n } else {\n this.responseValidationMode = modes.responses;\n }\n }\n\n /**\n * Access the governance middleware for direct outcome reporting (async tasks).\n */\n getGovernanceMiddleware(): GovernanceMiddleware | undefined {\n return this.governanceMiddleware;\n }\n\n getRequestParams(taskId: string): Record<string, unknown> | undefined {\n const params = this.activeTasks.get(taskId)?.params;\n return params && typeof params === 'object' && !Array.isArray(params)\n ? (params as Record<string, unknown>)\n : undefined;\n }\n\n /**\n * Reconcile a push-delivered terminal status with the local runner task.\n * Submitted task state is already compacted after dispatch; this schedules\n * the same short final-status retention used by synchronous completions.\n *\n * @internal\n */\n async observeExternalTaskStatus(\n taskId: string,\n status: TaskStatus,\n result?: unknown,\n identity: { serverTaskId?: string; taskType?: string } = {}\n ): Promise<ExternalTaskStatusResult> {\n if (!['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(status)) {\n return { settled: false, result };\n }\n const observation: ExternalTaskSettlementObservation = { status, result, ...identity };\n const observationKey = this.externalTaskObservationKey(observation);\n if (this.closedExternalTaskSettlementTaskIds.has(taskId)) {\n const accepted = this.settledExternalTaskObservationKeys.get(taskId);\n if (accepted?.key === observationKey) {\n return {\n settled: true,\n duplicate: true,\n status: accepted.status,\n ...(accepted.error !== undefined && { error: accepted.error }),\n };\n }\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n if (this.deferredTerminalPublicationTaskIds.has(taskId)) {\n const handler = this.externalTaskSettlementHandlers.get(taskId);\n if (handler) return this.settleExternalTaskStatus(taskId, handler, observation);\n const pending = this.pendingExternalTaskObservations.get(taskId) ?? [];\n if (pending.length >= MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS) {\n throw new Error('Too many terminal push notifications are awaiting durable task settlement.');\n }\n pending.push(observation);\n this.pendingExternalTaskObservations.set(taskId, pending);\n // The seller may wait for callback acknowledgement before returning the\n // response that carries its task id. Do not couple that acknowledgement\n // to the settlement handler that can only be registered from the response.\n return { settled: false, queued: true };\n }\n this.updateTaskStatus(taskId, status, result);\n return { settled: false, result };\n }\n\n /** Whether this process can safely settle or reject a durable callback for the operation. */\n hasExternalTaskSettlementRoute(taskId: string): boolean {\n return (\n this.deferredTerminalPublicationTaskIds.has(taskId) ||\n this.closedExternalTaskSettlementTaskIds.has(taskId) ||\n this.externalTaskSettlementHandlers.has(taskId)\n );\n }\n\n /** Whether durable settlement can run immediately without an in-memory queue. */\n hasExternalTaskSettlementHandler(taskId: string): boolean {\n return this.externalTaskSettlementHandlers.has(taskId);\n }\n\n /**\n * Run the configured pre-send schema check against the user-facing request\n * shape. Callers invoke this on the unadapted (v3) params before any wire\n * adaptation runs, so the validator sees the same object the caller wrote.\n * Throws in strict, logs to `debugLogs` in warn, no-ops in off.\n */\n validateRequest(taskName: string, params: unknown, debugLogs?: any[]): void {\n validateOutgoingRequest(taskName, params, this.requestValidationMode, debugLogs, this.config.adcpVersion);\n }\n\n /**\n * After `adaptRequestForServerVersion` has rewritten a v3 request into v2\n * wire format, validate the adapted shape against the cached v2.5 schema\n * bundle. Always warn-only — adapter bugs shouldn't break user requests,\n * and the v3 pre-send pass already vouched for the user-facing input.\n * This pass exists to surface drift between what the adapter emits and\n * what a v2.5 server expects on the wire (primarily as CI signal via the\n * adapter-conformance test suite).\n *\n * Skips silently for tasks without a v2.5 schema or when the v2.5 bundle\n * isn't cached. Caller is responsible for gating on `serverVersion === 'v2'`\n * so v3-targeted traffic doesn't pay the validation cost.\n */\n validateAdaptedRequestAgainstV2(taskName: string, adaptedParams: unknown, debugLogs?: any[]): void {\n validateOutgoingRequest(taskName, adaptedParams, 'warn', debugLogs, 'v2.5');\n }\n\n /**\n * Generate webhook URL for protocol-level webhook support\n */\n /**\n * Build TaskResultMetadata, including the idempotency fields. The key is\n * pulled from the tracked task state so every result reports the key that\n * was actually sent (auto-generated or caller-supplied); `replayed` is\n * extracted from the response envelope when a response is available.\n */\n private buildMetadata(args: {\n taskId: string;\n taskName: string;\n agent: AgentConfig | { id: string; name: string; protocol: 'mcp' | 'a2a' };\n startTime?: number;\n responseTimeMs?: number;\n status: TaskStatus;\n clarificationRounds?: number;\n response?: any;\n inputRequest?: InputRequest;\n }): TaskResultMetadata {\n const meta: TaskResultMetadata = {\n taskId: args.taskId,\n taskName: args.taskName,\n agent: { id: args.agent.id, name: args.agent.name, protocol: args.agent.protocol },\n responseTimeMs: args.responseTimeMs ?? (args.startTime !== undefined ? Date.now() - args.startTime : 0),\n timestamp: new Date().toISOString(),\n clarificationRounds: args.clarificationRounds ?? 0,\n status: args.status,\n };\n if (args.inputRequest) meta.inputRequest = args.inputRequest;\n const key = this.activeTasks.get(args.taskId)?.idempotencyKey;\n if (key) meta.idempotency_key = key;\n if (args.response !== undefined) {\n const replayed = this.responseParser.getReplayed(args.response);\n if (replayed !== undefined) meta.replayed = replayed;\n const adcpVersion = this.responseParser.getAdcpVersion(args.response);\n if (adcpVersion) meta.adcpVersion = adcpVersion;\n const serverContextId = this.responseParser.getContextId(args.response);\n if (serverContextId) meta.contextId = serverContextId;\n const serverTaskId = this.responseParser.getTaskId(args.response);\n if (serverTaskId) meta.serverTaskId = serverTaskId;\n const a2aTaskId = this.responseParser.getA2APendingTaskId(args.response);\n if (a2aTaskId) meta.a2aTaskId = a2aTaskId;\n }\n return meta;\n }\n\n /**\n * Map a task's structured AdCP error to a typed `ADCPError` subclass when\n * the code has a dedicated class (e.g., `IDEMPOTENCY_CONFLICT` →\n * `IdempotencyConflictError`). The idempotency key is pulled from tracked\n * task state because the server intentionally omits it from error bodies\n * (it's a read-oracle).\n */\n private buildErrorInstance(\n taskId: string,\n adcpError: ReturnType<typeof extractAdcpErrorInfo>\n ): ADCPError | undefined {\n if (!adcpError) return undefined;\n const key = this.activeTasks.get(taskId)?.idempotencyKey;\n return adcpErrorToTypedError(adcpError, key);\n }\n\n private generateWebhookUrl(taskName: string, operationId: string, options?: TaskOptions): string | undefined {\n return resolveWebhookUrl(this.config.webhookUrlTemplate, this.config.agentId, taskName, operationId, options);\n }\n\n /**\n * Execute a task with an agent using PR #78 async patterns\n * Handles: working (keep SSE open), submitted (webhook), input-required (handler), completed\n */\n async executeTask<T = any>(\n agent: AgentConfig,\n taskName: string,\n params: any,\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n serverVersion?: 'v2' | 'v3',\n targetCapabilities?: AdcpCapabilities,\n beforeProtocolDispatch?: BeforeProtocolDispatchHook<T>,\n deferredClientContext?: unknown\n ): Promise<TaskResult<T>> {\n // The configured transport is the same SSRF/custom-fetch trust boundary as\n // a per-call override. Own the effective value before activity, governance,\n // or protocol discovery can yield to code that still holds the config.\n const optionsSnapshot = snapshotTaskOptions({\n ...options,\n ...(options.transport === undefined && this.config.transport !== undefined\n ? { transport: this.config.transport }\n : {}),\n });\n return withTaskDeadline(optionsSnapshot, effectiveOptions =>\n this.executeTaskWithinDeadline<T>(\n agent,\n taskName,\n params,\n inputHandler,\n effectiveOptions,\n serverVersion,\n targetCapabilities,\n beforeProtocolDispatch,\n deferredClientContext\n )\n );\n }\n\n private async executeTaskWithinDeadline<T = any>(\n agent: AgentConfig,\n taskName: string,\n params: any,\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n serverVersion?: 'v2' | 'v3',\n targetCapabilities?: AdcpCapabilities,\n beforeProtocolDispatch?: BeforeProtocolDispatchHook<T>,\n deferredClientContext?: unknown\n ): Promise<TaskResult<T>> {\n const effectiveServerVersion = serverVersion ?? 'v3';\n this.lastKnownServerVersion = effectiveServerVersion;\n // Own the request graph before the first awaited activity/governance\n // boundary. This executor is internal, but direct callers and higher\n // layers may still retain the original nested objects.\n params = structuredClone(params);\n // The client-minted `taskId` is a local correlation id for tracking this\n // call's lifecycle (activeTasks map, metadata, webhook URL macros). It is\n // NOT the same thing as the A2A `taskId` that the server assigns — that\n // flows in on the response and is surfaced via metadata.serverTaskId.\n // `options.contextId` / `options.taskId` ride on the A2A message envelope\n // and are threaded straight to the protocol adapter below.\n const taskId = getTaskOperationId(options) ?? randomUUID();\n const startTime = Date.now();\n const workingTimeout = this.config.workingTimeout || 120000; // 120s max per PR #78\n\n // Auto-generate idempotency_key for mutating tasks when the caller didn't\n // supply one. The key lives on TaskState so internal retries reuse it —\n // re-generating on retry defeats the whole point of the envelope.\n // `options.skipIdempotencyAutoInject` disables this for compliance testing\n // that needs to exercise server-side missing-key behavior.\n const idempotencyKey = options.skipIdempotencyAutoInject\n ? undefined\n : resolveIdempotencyKey(taskName, params, serverVersion);\n if (idempotencyKey) attachTaskDeadlineIdempotencyKey(options, idempotencyKey);\n if (serverVersion !== 'v2' && idempotencyKey && params && typeof params === 'object' && !params.idempotency_key) {\n params = { ...params, idempotency_key: idempotencyKey };\n }\n\n // Register task in active tasks\n const taskState: TaskState = {\n taskId,\n taskName,\n params,\n status: 'pending',\n messages: [],\n startTime,\n attempt: 0,\n maxAttempts: options.maxClarifications || this.config.defaultMaxClarifications || 3,\n options,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n idempotencyKey,\n };\n this.activeTasks.set(taskId, taskState);\n\n // Once the final compatibility boundary starts, an abort may race a\n // durable claim that has committed but whose hook has not returned yet.\n // In that window the boundary, not the caller signal, owns publication of\n // terminal state. The abort listener still compacts retained request data.\n let dispatchBoundaryOwnsTerminalState = false;\n\n // Compact task state as soon as cancellation fires, even if a protocol\n // adapter or caller callback never settles after receiving the signal.\n // The outer deadline race guarantees prompt rejection; this listener is\n // the matching resource-retention boundary for activeTasks.\n const taskAbortListener = options.signal\n ? () => {\n const currentStatus = this.activeTasks.get(taskId)?.status;\n if (currentStatus && !TERMINAL_TASK_STATUSES.has(currentStatus)) {\n if (dispatchBoundaryOwnsTerminalState) {\n this.compactAbandonedObserverTaskState(taskId);\n return;\n }\n const reason = options.signal?.reason;\n this.updateTaskStatus(\n taskId,\n 'aborted',\n undefined,\n reason instanceof Error ? reason.message : reason == null ? 'The operation was aborted' : String(reason)\n );\n }\n }\n : undefined;\n if (taskAbortListener) options.signal!.addEventListener('abort', taskAbortListener, { once: true });\n\n // Emit task creation event\n this.emitTaskEvent(\n {\n taskId,\n status: 'submitted',\n taskType: taskName,\n createdAt: startTime,\n updatedAt: startTime,\n },\n agent.id\n );\n\n // Start streaming connection\n const debugLogs: any[] = [];\n\n // Generate webhook URL if template is configured\n const webhookUrl = this.generateWebhookUrl(taskName, taskId, options);\n\n // Governance state (scoped outside try so catch can access)\n let governanceCheckId: string | undefined;\n let governanceResult: GovernanceCheckResult | undefined;\n let effectiveParams = params;\n let governanceAdjusted = false;\n let dispatchCommitted = false;\n let dispatchSettlement:\n | Pick<\n Extract<BeforeProtocolDispatchHookResult<T>, { action: 'dispatch_committed' }>,\n 'onResult' | 'onError' | 'requireDeferredSettlementResumeAuthorization' | 'persistPausedContinuation'\n >\n | undefined;\n let dispatchSettlementStarted = false;\n\n try {\n // Emit protocol_request activity. The activity payload is the boundary\n // callers typically pipe into external observability stacks, so redact\n // the idempotency key — it's a retry-pattern oracle within the seller's\n // TTL. Full logging is opt-in via ADCP_LOG_IDEMPOTENCY_KEYS=1.\n await this.config.onActivity?.({\n type: 'protocol_request',\n operation_id: taskId,\n agent_id: agent.id,\n context_id: options.contextId,\n task_id: taskId,\n task_type: taskName,\n status: 'pending',\n payload: { params: redactIdempotencyKeyInArgs(params) },\n timestamp: new Date().toISOString(),\n });\n throwIfAborted(options.signal);\n\n // Run governance check if configured for this tool\n const governanceMiddleware = this.governanceMiddleware;\n if (governanceMiddleware) {\n const modernGovernance =\n targetCapabilities !== undefined && targetDeclaresGovernanceEnforcement(targetCapabilities, taskName);\n // Modern authorization binds the exact argument object the seller\n // receives, including protocol-owned fields and MCP webhook\n // registration. Legacy governance retains its historical application\n // payload and must not receive SDK-injected callback credentials.\n const governableParams = modernGovernance\n ? prepareProtocolToolCall(agent, params, {\n toolName: taskName,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n adcpVersion: this.config.adcpVersion,\n wireAdcpVersion: this.config.wireAdcpVersion,\n versionEnvelope: this.config.versionEnvelope,\n }).args\n : params;\n if (await governanceMiddleware.shouldCheck(taskName, governableParams, targetCapabilities)) {\n const sdkInjectedPushConfig =\n modernGovernance && webhookUrl !== undefined && this.config.webhookSecret !== undefined;\n assertGovernedPayloadHasNoCallbackCredentials(taskName, governableParams, { sdkInjectedPushConfig });\n const { result: govResult, params: adjustedParams } = await governanceMiddleware.checkProposed(\n agent,\n targetCapabilities!,\n taskName,\n governableParams,\n debugLogs,\n options.signal\n );\n throwIfAborted(options.signal);\n assertGovernedPayloadHasNoCallbackCredentials(taskName, adjustedParams, { sdkInjectedPushConfig });\n governanceAdjusted = canonicalize(adjustedParams) !== canonicalize(governableParams);\n\n // Governance always blocks on denial/unapplied conditions.\n const isBlocking = true;\n\n if (govResult.status === 'denied' && isBlocking) {\n const denied = this.buildGovernanceResult<T>(govResult, taskId, taskName, agent, startTime, debugLogs);\n this.updateTaskStatus(taskId, 'governance-denied', undefined, denied.error);\n return attachMatch(denied);\n }\n\n if (govResult.status === 'conditions' && !govResult.conditionsApplied && isBlocking) {\n const denied = this.buildGovernanceResult<T>(govResult, taskId, taskName, agent, startTime, debugLogs);\n this.updateTaskStatus(taskId, 'governance-denied', undefined, denied.error);\n return attachMatch(denied);\n }\n\n // Approved, or non-blocking mode (advisory/audit) allows execution to proceed\n governanceCheckId = govResult.checkId;\n governanceResult = govResult;\n if (governanceCheckId) {\n // Preserve the approved check identity as soon as the seller may be\n // dispatched. If the deadline fires during response processing,\n // callers can still reconcile the seller mutation against the\n // original governance decision after restart.\n attachTaskDeadlineGovernanceRecovery(options, { checkId: governanceCheckId });\n }\n effectiveParams = adjustedParams;\n }\n }\n\n // Detach the final request graph before the durable claim boundary. The\n // caller may still hold and mutate nested account/brand/targeting values;\n // validation, claim verification, the prepared wire call, and dispatch\n // must all observe one immutable-by-ownership snapshot.\n const dispatchParams = structuredClone(effectiveParams);\n\n // Create initial message (uses dispatchParams which may have governance-applied conditions)\n const initialMessage: Message = {\n id: randomUUID(),\n role: 'user',\n content: { tool: taskName, params: dispatchParams },\n timestamp: new Date().toISOString(),\n metadata: { toolName: taskName, type: 'request' },\n };\n\n // Materialize once, persist callback provenance, and dispatch this same\n // prepared object. A seller can post immediately after receiving the\n // request, so the registration write must complete before the network\n // boundary is crossed.\n const preparedCall = prepareProtocolToolCall(agent, dispatchParams, {\n toolName: taskName,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n adcpVersion: this.config.adcpVersion,\n wireAdcpVersion: this.config.wireAdcpVersion,\n versionEnvelope: this.config.versionEnvelope,\n });\n let webhookRegistrationPersisted = false;\n if (webhookUrl && this.config.onWebhookRegistration) {\n const registration = webhookRegistrationFromPreparedCall(agent, preparedCall);\n if (registration) {\n await this.config.onWebhookRegistration({\n agent,\n taskType: taskName,\n operationId: taskId,\n ...registration,\n });\n webhookRegistrationPersisted = true;\n }\n }\n\n // This is the final awaited preflight boundary. A durable mutation claim\n // made by the hook must be followed immediately by the official protocol\n // call; callers can therefore distinguish deterministic preflight failure\n // from transport uncertainty after the commit point.\n throwIfAborted(options.signal);\n if (beforeProtocolDispatch) {\n let decision: BeforeProtocolDispatchHookResult<T>;\n dispatchBoundaryOwnsTerminalState = true;\n try {\n this.compactClosedExternalTaskSettlementFences();\n if (\n this.liveExternalTaskSettlementCount() + this.settlementCapacityReservations.size >=\n COMPACTED_TASK_STATE_LIMIT\n ) {\n throw new Error('The durable task-settlement capacity is exhausted; no mutation claim was attempted.');\n }\n this.settlementCapacityReservations.add(taskId);\n if (webhookRegistrationPersisted) {\n await this.config.onDurableSettlementRequired?.(taskId);\n throwIfAborted(options.signal);\n }\n decision = await beforeProtocolDispatch(preparedCall.args, {\n operationId: taskId,\n governanceAdjusted,\n publishSettledTaskStatus: (status, data, error) =>\n this.publishSettledTaskStatus(taskId, status, data, error),\n registerExternalTaskSettlement: handler => this.registerExternalTaskSettlement(taskId, handler),\n });\n if (decision.action === 'dispatch_committed') {\n if (\n decision.requireDeferredSettlementResumeAuthorization === true &&\n this.config.deferredStorage !== undefined\n ) {\n this.requireDeferredSettlementOperationRouting(this.config.deferredStorage);\n }\n this.deferredTerminalPublicationTaskIds.add(taskId);\n this.retainExternalTaskSettlementState(taskId);\n }\n } catch (error) {\n throw new BeforeProtocolDispatchHookError(error);\n } finally {\n this.settlementCapacityReservations.delete(taskId);\n }\n if (decision.action === 'return') {\n const earlyResult = decision.result;\n if (\n ['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(earlyResult.status)\n ) {\n this.updateTaskStatus(taskId, earlyResult.status as TaskStatus, earlyResult.data, earlyResult.error);\n } else if (\n ['working', 'submitted', 'input-required', 'auth-required', 'deferred'].includes(earlyResult.status)\n ) {\n this.compactIntermediateTaskState(\n taskId,\n earlyResult.status as 'working' | 'submitted' | 'input-required' | 'auth-required' | 'deferred'\n );\n }\n return attachMatch(earlyResult);\n }\n dispatchCommitted = true;\n dispatchSettlement = decision;\n }\n\n // A claim that completes after the caller deadline must be fenced, not\n // turned into a hidden seller mutation after the caller has already\n // received a timeout and may have replanned. The catch path invokes the\n // committed hook's onError settlement before any protocol call begins.\n throwIfAborted(options.signal);\n\n // Once a durable claim commits, the caller-facing signal may already be\n // aborted after seller dispatch begins. Never let that abandoned\n // observer prevent response parsing or durable settlement.\n const postDispatchOptions = dispatchCommitted ? { ...options, signal: undefined } : options;\n\n // Send initial request and get streaming response with webhook URL.\n // Pass the caller's A2A session ids (contextId for conversation binding,\n // taskId for resuming a non-terminal server-side task). The adapter\n // drops these on the wire for MCP (no session concept there).\n const callOptions = {\n debugLogs,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n session: { contextId: options.contextId, taskId: options.taskId },\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: options.transport ?? this.config.transport,\n // Once dispatch begins for a live committed claim, post-call handling\n // owns durable settlement even if the caller's deadline fires later.\n signal: postDispatchOptions.signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n operationId: taskId,\n taskId: options.taskId ?? taskId,\n contextId: options.contextId,\n idempotencyKey,\n },\n };\n const response = await withPreparedProtocolToolCall(\n { agent, toolName: taskName, args: dispatchParams, preparedCall },\n () => ProtocolClient.callTool(agent, taskName, dispatchParams, callOptions)\n );\n throwIfAborted(postDispatchOptions.signal);\n\n // Emit protocol_response activity\n const respStatus = this.responseParser.getStatus(response) as string | undefined;\n await this.config.onActivity?.({\n type: 'protocol_response',\n operation_id: taskId,\n agent_id: agent.id,\n context_id: options.contextId,\n task_id: taskId,\n task_type: taskName,\n status: respStatus,\n payload: response,\n timestamp: new Date().toISOString(),\n });\n throwIfAborted(postDispatchOptions.signal);\n\n // Add initial response message\n const responseMessage: Message = {\n id: randomUUID(),\n role: 'agent',\n content: response,\n timestamp: new Date().toISOString(),\n metadata: { toolName: taskName, type: 'response' },\n };\n\n const messages = [initialMessage, responseMessage];\n\n // Handle response based on status\n let result = await this.handleAsyncResponse<T>(\n agent,\n taskId,\n taskName,\n dispatchParams,\n response,\n messages,\n inputHandler,\n postDispatchOptions,\n debugLogs,\n startTime,\n dispatchCommitted,\n dispatchSettlement?.persistPausedContinuation ?? true,\n effectiveServerVersion,\n deferredClientContext,\n dispatchSettlement?.requireDeferredSettlementResumeAuthorization === true\n );\n throwIfAborted(postDispatchOptions.signal);\n\n // Attach governance check result to the task result\n if (governanceResult) {\n result.governance = governanceResult;\n }\n\n if (dispatchSettlement?.onResult) {\n dispatchSettlementStarted = true;\n try {\n result = await dispatchSettlement.onResult(attachMatch(result));\n } catch (error) {\n // A committed mutation is not terminal from the SDK's perspective\n // until its durable settlement succeeds. Publish only the failed\n // local coordinator state here; never leak the seller's earlier\n // completed response through task events or retained task state.\n this.closeExternalTaskSettlement(taskId, error);\n this.updateTaskStatus(taskId, 'failed', undefined, 'An SDK post-dispatch settlement hook failed.');\n throw new AfterProtocolDispatchHookError(error);\n }\n }\n\n // Report governance only after a committed compatibility mutation has\n // durably settled. A seller terminal response is not authoritative if\n // the coordinator subsequently fails to persist it.\n // For async tasks (submitted/working), outcome reporting is deferred —\n // the caller reports via client.reportGovernanceOutcome() when the\n // task resolves through polling or webhooks.\n if (governanceCheckId && this.governanceMiddleware) {\n const govCtx = governanceResult?.governanceContext;\n if (result.status === 'completed' && govCtx) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(\n governanceCheckId,\n 'completed'\n );\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'completed',\n outcomeIdempotencyKey,\n });\n result.governanceOutcome = await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'completed',\n result.data as Record<string, unknown> | undefined,\n undefined,\n debugLogs,\n govCtx,\n postDispatchOptions.signal,\n outcomeIdempotencyKey\n );\n throwIfAborted(postDispatchOptions.signal);\n if (!result.governanceOutcome) {\n result.governanceOutcomeError = 'Outcome reporting to governance agent failed';\n }\n } else if (result.error && govCtx) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(governanceCheckId, 'failed');\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'failed',\n outcomeIdempotencyKey,\n });\n result.governanceOutcome = await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'failed',\n undefined,\n { message: result.error },\n debugLogs,\n govCtx,\n postDispatchOptions.signal,\n outcomeIdempotencyKey\n );\n throwIfAborted(postDispatchOptions.signal);\n if (!result.governanceOutcome) {\n result.governanceOutcomeError = 'Outcome reporting to governance agent failed';\n }\n } else if (result.status === 'submitted' || result.status === 'working') {\n // Attach the check ID so callers can report outcome after async resolution\n result.governance = { ...(result.governance ?? {}), checkId: governanceCheckId } as GovernanceCheckResult;\n }\n }\n\n if (dispatchCommitted) {\n result = this.attachSettledContinuationTaskStatus(taskId, result);\n if (TERMINAL_TASK_STATUSES.has(result.status as TaskStatus)) {\n this.publishSettledTaskStatus(taskId, result.status as TaskStatus, result.data, result.error);\n }\n }\n\n if (\n ['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(result.status) &&\n this.activeTasks.get(taskId)?.status !== result.status\n ) {\n this.updateTaskStatus(taskId, result.status as TaskStatus, result.data, result.error);\n }\n return attachMatch(result);\n } catch (error) {\n if (error instanceof BeforeProtocolDispatchHookError) {\n // Hook failures happen before seller dispatch. Preserve the original\n // exception for the compatibility coordinator, but terminalize the\n // local task so repeated invalid redemption attempts cannot retain\n // full request payloads and options in activeTasks.\n this.updateTaskStatus(taskId, 'failed', undefined, error.message);\n throw error;\n }\n if (error instanceof AfterProtocolDispatchHookError) throw error;\n if (dispatchCommitted && dispatchSettlement?.onError && !dispatchSettlementStarted) {\n try {\n await dispatchSettlement.onError(error);\n } catch (settlementError) {\n this.closeExternalTaskSettlement(taskId, settlementError);\n this.updateTaskStatus(taskId, 'failed', undefined, 'An SDK post-dispatch settlement hook failed.');\n throw new AfterProtocolDispatchHookError(settlementError);\n }\n this.closeExternalTaskSettlement(taskId, error);\n }\n if (isAbortOrTimeoutError(error)) {\n if (idempotencyKey && error && typeof error === 'object') {\n (error as Error & { idempotency_key?: string; idempotencyKey?: string }).idempotency_key = idempotencyKey;\n (error as Error & { idempotency_key?: string; idempotencyKey?: string }).idempotencyKey = idempotencyKey;\n }\n const currentStatus = this.activeTasks.get(taskId)?.status;\n if (currentStatus && !TERMINAL_TASK_STATUSES.has(currentStatus)) {\n this.updateTaskStatus(taskId, 'aborted', undefined, error instanceof Error ? error.message : String(error));\n }\n throw error;\n }\n\n // Report failed outcome on error\n if (governanceCheckId && this.governanceMiddleware && governanceResult?.governanceContext) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(governanceCheckId, 'failed');\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'failed',\n outcomeIdempotencyKey,\n });\n await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'failed',\n undefined,\n { message: (error as Error).message },\n debugLogs,\n governanceResult.governanceContext,\n options.signal,\n outcomeIdempotencyKey\n );\n }\n const failed = this.createErrorResult<T>(taskId, agent, error, debugLogs, startTime);\n this.updateTaskStatus(taskId, 'failed', undefined, failed.error);\n return attachMatch(failed);\n } finally {\n if (taskAbortListener) options.signal!.removeEventListener('abort', taskAbortListener);\n }\n }\n\n /**\n * Handle agent response based on ADCP status (PR #78)\n */\n private buildGovernanceResult<T>(\n govResult: GovernanceCheckResult,\n taskId: string,\n taskName: string,\n agent: AgentConfig,\n startTime: number,\n debugLogs: any[]\n ): TaskResult<T> {\n return {\n success: false,\n status: 'governance-denied',\n error: govResult.explanation || 'Governance governance-denied',\n governance: govResult,\n metadata: this.buildMetadata({ taskId, taskName, agent, startTime, status: 'governance-denied' }),\n conversation: [],\n debug_logs: debugLogs,\n };\n }\n\n private async handleAsyncResponse<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n response: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n const status = this.responseParser.getStatus(response) as ADCPStatus;\n\n switch (status) {\n case ADCP_STATUS.COMPLETED:\n // Task completed immediately\n const completedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n // Ordinary calls retain the historical behavior of publishing seller\n // completion before optional governance postflight work. A committed\n // compatibility mutation defers this until durable settlement.\n if (!deferTerminalTaskStatus) this.updateTaskStatus(taskId, 'completed', completedData);\n\n const operationSuccess = this.isOperationSuccess(completedData, taskName, serverVersion);\n\n // Validate response against AdCP schema - validate extracted data, not protocol wrapper\n const validationResult = this.validateResponseSchema(completedData, taskName, debugLogs, serverVersion);\n\n // In strict mode, schema validation failures cause task to fail\n const finalSuccess = operationSuccess && validationResult.valid;\n const finalError = !finalSuccess\n ? validationResult.errors.length > 0\n ? `Schema validation failed: ${validationResult.errors.join('; ')}`\n : this.extractOperationError(completedData)\n : undefined;\n\n if (finalSuccess) {\n return {\n success: true as const,\n status: 'completed' as const,\n data: completedData,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'completed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n const completedAdcpError = extractAdcpErrorInfo(completedData);\n return {\n success: false as const,\n status: 'failed' as const,\n data: completedData,\n error: finalError ?? 'Unknown error',\n adcpError: completedAdcpError,\n errorInstance: this.buildErrorInstance(taskId, completedAdcpError),\n correlationId: extractCorrelationId(completedData),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n\n case ADCP_STATUS.WORKING:\n // Server is processing - keep connection open for up to 120s\n return this.waitForWorkingCompletion<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n serverVersion\n );\n\n case ADCP_STATUS.SUBMITTED:\n // Long-running task - set up webhook\n return this.setupSubmittedTask<T>(\n agent,\n taskId,\n taskName,\n response,\n messages,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n serverVersion\n );\n\n case ADCP_STATUS.INPUT_REQUIRED:\n case ADCP_STATUS.AUTH_REQUIRED:\n // Server needs caller action. Preserve the same server-side task so\n // handler-less HITL and credential-refresh flows can resume safely.\n return this.handleInputRequired<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n status,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n\n case ADCP_STATUS.FAILED:\n case ADCP_STATUS.REJECTED:\n case ADCP_STATUS.CANCELED: {\n const failedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n // Raw/in-process protocol clients may wrap the tool payload under\n // `data` while carrying the task lifecycle status at the top level.\n // The generic unwrapper intentionally preserves that wrapper, so\n // select its nested payload here before extracting business errors.\n const failedPayload =\n response?.structuredContent === undefined &&\n response?.content === undefined &&\n response?.result === undefined &&\n response?.data != null &&\n typeof response.data === 'object'\n ? response.data\n : failedData;\n const adcpErrorInfo = extractAdcpErrorInfo(failedPayload);\n const hasStructuredError = !!adcpErrorInfo;\n // Preserve failedData whenever the server returned a structured\n // payload — not just when extractAdcpErrorInfo recognizes an\n // `adcp_error`/`errors` envelope. Tool-level error shapes like\n // `comply_test_controller`'s `{ success: false, error: 'UNKNOWN_SCENARIO' }`\n // don't match that extractor but still carry the information\n // storyboard validators read (`success`, `error_code`, etc.).\n // Only drop `data` when there's literally no structured payload —\n // i.e. falsy or an empty object.\n const hasStructuredPayload =\n failedPayload != null &&\n typeof failedPayload === 'object' &&\n (Array.isArray(failedPayload) || Object.keys(failedPayload).length > 0);\n const structuredMessage = hasStructuredPayload ? this.extractOperationError(failedPayload) : undefined;\n const failedError =\n structuredMessage && structuredMessage !== 'Operation failed'\n ? structuredMessage\n : response.error || response.message || structuredMessage || `Task ${status}`;\n return {\n success: false as const,\n status: 'failed' as const,\n data: hasStructuredError || hasStructuredPayload ? failedPayload : undefined,\n error: typeof failedError === 'string' ? failedError : `Task ${status}`,\n adcpError: adcpErrorInfo,\n errorInstance: this.buildErrorInstance(taskId, adcpErrorInfo),\n correlationId: extractCorrelationId(failedPayload),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n default:\n // Unknown status - treat as completed if we have data\n const defaultData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n if (\n defaultData &&\n (defaultData !== response || response.structuredContent || response.result || response.data)\n ) {\n const defaultSuccess = this.isOperationSuccess(defaultData, taskName, serverVersion);\n\n // Validate response against AdCP schema - validate extracted data, not protocol wrapper\n const defaultValidation = this.validateResponseSchema(defaultData, taskName, debugLogs, serverVersion);\n\n // In strict mode, schema validation failures cause task to fail\n const defaultFinalSuccess = defaultSuccess && defaultValidation.valid;\n const defaultFinalError = !defaultFinalSuccess\n ? defaultValidation.errors.length > 0\n ? `Schema validation failed: ${defaultValidation.errors.join('; ')}`\n : this.extractOperationError(defaultData)\n : undefined;\n\n if (defaultFinalSuccess) {\n return {\n success: true as const,\n status: 'completed' as const,\n data: defaultData,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'completed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n const defaultAdcpError = extractAdcpErrorInfo(defaultData);\n return {\n success: false as const,\n status: 'failed' as const,\n data: defaultData,\n error: defaultFinalError!,\n adcpError: defaultAdcpError,\n errorInstance: this.buildErrorInstance(taskId, defaultAdcpError),\n correlationId: extractCorrelationId(defaultData),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n } else {\n throw new Error(`Unknown status: ${status || 'undefined'}`);\n }\n }\n }\n\n /**\n * Extract response data from different protocol formats\n *\n * @internal Exposed for testing purposes\n */\n public extractResponseData(response: any, debugLogs?: any[], toolName?: string, serverVersion?: 'v2' | 'v3'): any {\n // MCP error responses (isError: true) flow through here — the response unwrapper\n // extracts structured data (adcp_error, context, ext) from structuredContent or text\n\n // Paused A2A tasks intentionally carry the AdCP pause arm on\n // `Task.status.message` rather than an artifact: artifacts represent\n // completed transport output, while input/auth-required leaves the A2A\n // task resumable. The general unwrapper rejects intermediate tasks, so\n // normalize this one standard location before artifact extraction.\n const a2aState = response?.result?.status?.state;\n if (a2aState === 'input-required' || a2aState === 'auth-required') {\n const statusParts = response?.result?.status?.message?.parts;\n const statusDataPart = (Array.isArray(statusParts) ? [...statusParts].reverse() : []).find(\n (part: unknown): part is { kind: 'data'; data: Record<string, unknown> } =>\n !!part &&\n typeof part === 'object' &&\n (part as { kind?: unknown }).kind === 'data' &&\n !!(part as { data?: unknown }).data &&\n typeof (part as { data?: unknown }).data === 'object' &&\n !Array.isArray((part as { data?: unknown }).data)\n );\n if (statusDataPart) {\n this.logDebug(debugLogs, 'info', 'Extracted A2A pause data from Task.status.message', { state: a2aState });\n return statusDataPart.data;\n }\n }\n\n // Use the shared response unwrapper utility\n // This handles MCP structuredContent, A2A artifacts (including HITL multi-artifact responses),\n // and various edge cases consistently\n try {\n // Log what type of response we're processing BEFORE unwrapping\n // This ensures we have debug visibility even if unwrapping fails\n if (response?.structuredContent) {\n this.logDebug(debugLogs, 'info', 'Processing MCP structuredContent response');\n } else if (response?.result?.artifacts) {\n const artifacts = response.result.artifacts;\n if (artifacts.length === 0) {\n this.logDebug(debugLogs, 'info', 'Processing A2A response with empty artifacts array');\n } else {\n // Calculate total part count across all artifacts\n const totalParts = artifacts.reduce((sum: number, artifact: any) => {\n return sum + (artifact.parts?.length || 0);\n }, 0);\n\n // Extract canonical DataPart keys for debugging.\n const latestDataPart = getLatestA2ADataPartFromResponse(response);\n const dataKeys = latestDataPart?.data ? Object.keys(latestDataPart.data) : [];\n\n this.logDebug(debugLogs, 'info', 'Processing A2A artifact structure', {\n artifactCount: artifacts.length,\n partCount: totalParts,\n extractedFrom: artifacts.length > 1 ? 'multi-artifact (HITL)' : 'single-artifact',\n dataKeys,\n });\n }\n } else if (response?.data) {\n this.logDebug(debugLogs, 'info', 'Processing response.data field');\n } else {\n this.logDebug(debugLogs, 'info', 'Processing response without standard structure', {\n responseKeys: Object.keys(response || {}),\n });\n }\n\n // Now unwrap the response\n const unwrapped = unwrapProtocolResponse(response, toolName, undefined, {\n filterInvalidProducts: this.config.filterInvalidProducts,\n responseAdcpVersion: this.effectiveResponseAdcpVersion(serverVersion),\n });\n\n // Log successful extraction with result details\n if (response?.structuredContent) {\n this.logDebug(debugLogs, 'info', 'Successfully extracted MCP data', {\n dataKeys: Object.keys(unwrapped || {}),\n });\n } else if (response?.result?.artifacts && response.result.artifacts.length > 0) {\n this.logDebug(debugLogs, 'info', 'Successfully extracted A2A data', {\n dataKeys: Object.keys(unwrapped || {}),\n });\n }\n\n return unwrapped;\n } catch (error) {\n this.logDebug(debugLogs, 'warning', 'Response unwrapper failed', {\n error: error instanceof Error ? error.message : String(error),\n toolName,\n responseKeys: Object.keys(response || {}),\n });\n\n // If toolName was provided, schema validation may have caused the failure.\n // Retry without toolName to extract the payload without schema checks.\n if (toolName) {\n try {\n return unwrapProtocolResponse(response);\n } catch {\n // Unwrapping itself failed — fall through to raw response\n }\n }\n\n return response;\n }\n }\n\n /**\n * Check if extracted response data represents a successful operation.\n * Handles singular `error`, plural `errors` (AdCP schema), and `success: false`.\n */\n private isOperationSuccess(data: any, taskName?: string, serverVersion?: 'v2' | 'v3'): boolean {\n return isAdcpOperationSuccess(data, taskName, this.effectiveResponseAdcpVersion(serverVersion));\n }\n\n /**\n * Extract a human-readable error message from response data.\n * Handles singular `error`, plural `errors` array, and `message` field.\n */\n private extractOperationError(data: any): string {\n if (data?.adcp_error) {\n const ae = data.adcp_error;\n return ae.message ? `${ae.code}: ${ae.message}` : ae.code;\n }\n const pluralError = Array.isArray(data?.errors)\n ? data.errors\n .map((error: any) => error?.message || error?.code)\n .filter((value: unknown): value is string => typeof value === 'string' && value.length > 0)\n .join('; ')\n : undefined;\n return (\n data?.error ||\n pluralError ||\n data?.error_detail ||\n data?.reason ||\n data?.rejection_reason ||\n data?.message ||\n 'Operation failed'\n );\n }\n\n /**\n * Helper to add debug logs safely\n */\n private logDebug(debugLogs: any[] | undefined, type: string, message: string, details?: any) {\n if (debugLogs && Array.isArray(debugLogs)) {\n debugLogs.push({\n type,\n message,\n timestamp: new Date().toISOString(),\n details,\n });\n }\n }\n\n /**\n * Handle 'working' status - return as valid intermediate state\n */\n private async waitForWorkingCompletion<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n initialResponse: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n serverVersion: 'v2' | 'v3' = 'v3'\n ): Promise<TaskResult<T>> {\n // Extract any data that came with the working response\n const partialData = this.extractResponseData(initialResponse, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'working',\n response: initialResponse,\n });\n this.compactIntermediateTaskState(taskId, 'working');\n\n // Return working status immediately - this is a valid intermediate state\n // Callers can use the taskId to poll for completion or set up webhooks\n return {\n success: true, // The task is progressing, not failed\n status: 'working',\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n /**\n * Set up submitted task with webhook\n */\n private async setupSubmittedTask<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n response: any,\n messages: Message[],\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n serverVersion: 'v2' | 'v3' = 'v3'\n ): Promise<TaskResult<T>> {\n // Extract any data that came with the submitted response\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n\n let webhookUrl = response.webhookUrl;\n\n // If no webhook URL provided by server, generate one. The webhook URL\n // macro path uses the local `taskId` (the runner-side correlation id\n // that doubles as the `{operation_id}` macro value), not the server\n // handle — webhook URLs identify the buyer-side request, not the\n // seller-side task.\n if (!webhookUrl && this.config.webhookManager) {\n webhookUrl = this.config.webhookManager.generateUrl(taskId);\n await this.config.webhookManager.registerWebhook(agent, taskId, webhookUrl);\n }\n\n // Polling and the buyer-facing `SubmittedContinuation.taskId` use the\n // SERVER-assigned task handle, not the runner's local UUID. The local\n // UUID is the `activeTasks` map key and the `{operation_id}` webhook\n // macro value — it never reaches the seller. The server handle comes\n // from `response.task_id` / `response.data.task_id` (AdCP submitted-arm\n // wire fields) or, for A2A responses, the same handle surfaced via\n // metadata (`adcp_task_id` / `serverTaskId`). The A2A transport `Task.id`\n // is retained separately as `metadata.a2aTaskId`; it is never a\n // `tasks/get` work handle. `responseParser.getTaskId` walks the AdCP\n // handle shapes.\n //\n // When the seller violated the spec and didn't include a task handle\n // we fall back to the local UUID so the buyer at least gets a\n // non-undefined `taskId` field. The polling cycle won't be able to\n // locate the work in this state — log an advisory so operators\n // grepping debug logs can pinpoint the seller-side spec violation.\n const extractedServerTaskId = this.responseParser.getTaskId(response);\n const serverTaskId = extractedServerTaskId ?? taskId;\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'submitted',\n response,\n });\n // Snapshot only what continuations need. Referencing `options.transport`\n // inside either closure would retain the entire per-call options object,\n // including unrelated adopter metadata, for as long as the continuation\n // remains reachable.\n const pollingTransport = options.transport;\n if (!extractedServerTaskId) {\n debugLogs.push({\n type: 'warning',\n message:\n 'Submitted-arm response omitted task_id (spec violation). Polling will use the runner-side ' +\n 'correlation id as a fallback; the seller will not recognize it. ' +\n 'Expected: response.task_id / response.data.task_id (AdCP), A2A metadata.serverTaskId, ' +\n 'or A2A metadata.adcp_task_id.',\n timestamp: new Date().toISOString(),\n taskName,\n runnerTaskId: taskId,\n });\n }\n\n const submitted = this.createSubmittedContinuation<T>(\n agent,\n taskId,\n taskName,\n serverTaskId,\n webhookUrl,\n pollingTransport,\n metadata,\n deferTerminalTaskStatus,\n serverVersion\n );\n\n this.compactIntermediateTaskState(taskId, 'submitted');\n\n return {\n success: true, // The task is progressing, not failed\n status: 'submitted',\n submitted,\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n /** Build polling closures around one authoritative seller work handle. */\n private createSubmittedContinuation<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n serverTaskId: string,\n webhookUrl: string | undefined,\n pollingTransport: import('../protocols').TransportOptions | undefined,\n metadata: TaskResultMetadata,\n deferTerminalTaskStatus: boolean,\n serverVersion: 'v2' | 'v3'\n ): SubmittedContinuation<T> {\n return {\n taskId: serverTaskId,\n webhookUrl,\n track: async (transport?: import('../protocols').TransportOptions) => {\n const transportSnapshot = snapshotTransportOptions(transport ?? pollingTransport ?? this.config.transport);\n const task = (\n await this.getTaskStatusWithRawResponse(\n agent,\n serverTaskId,\n transportSnapshot,\n undefined,\n taskName,\n serverVersion\n )\n ).task;\n if (!deferTerminalTaskStatus && ['completed', 'failed', 'rejected', 'canceled'].includes(task.status)) {\n this.updateTaskStatus(taskId, task.status as TaskStatus, task.result, task.error);\n }\n return task;\n },\n waitForCompletion: async (pollInterval = 60000, signal?: AbortSignal, requireExactTaskIdentity = false) => {\n void requireExactTaskIdentity;\n const completed = await this.pollTaskCompletion<T>(\n agent,\n serverTaskId,\n pollInterval,\n pollingTransport,\n signal,\n metadata.a2aTaskId,\n taskName,\n taskId,\n serverVersion\n );\n // `pollTaskCompletion` also returns nonresumable paused\n // input-required/auth-required states. Preserve that status so callers\n // can select an explicit application/protocol-specific recovery path;\n // only genuinely terminal statuses trigger delayed state eviction.\n if (!deferTerminalTaskStatus || !TERMINAL_TASK_STATUSES.has(completed.status as TaskStatus)) {\n this.updateTaskStatus(taskId, completed.status as TaskStatus, completed.data, completed.error);\n }\n return completed;\n },\n };\n }\n\n /**\n * A committed compatibility hook may replace resumable continuations with\n * wrappers that validate and durably persist their terminal result. Attach\n * local task publication only after those final wrappers return.\n */\n private attachSettledContinuationTaskStatus<T>(taskId: string, result: TaskResult<T>): TaskResult<T> {\n const publish = (\n status: TaskStatus,\n data?: unknown,\n error?: string,\n identity?: { serverTaskId?: string; taskType?: string }\n ) => {\n this.publishSettledTaskStatus(taskId, status, data, error, false, identity);\n };\n\n if (result.submitted) {\n const submitted = result.submitted;\n result.submitted = {\n ...submitted,\n track: async transport => {\n const task = await submitted.track(transport);\n publish(task.status as TaskStatus, task.result, task.error, {\n serverTaskId: task.taskId,\n taskType: task.taskType,\n });\n return task;\n },\n waitForCompletion: async (pollInterval, signal) => {\n const completion = this.attachSettledContinuationTaskStatus(\n taskId,\n await submitted.waitForCompletion(pollInterval, signal)\n );\n publish(completion.status as TaskStatus, completion.data, completion.error, {\n serverTaskId: completion.metadata.serverTaskId ?? submitted.taskId,\n taskType: completion.metadata.taskName,\n });\n return completion;\n },\n };\n }\n\n if (result.deferred) {\n const deferred = result.deferred;\n result.deferred = {\n ...deferred,\n resume: async input => {\n const completion = this.attachSettledContinuationTaskStatus(taskId, await deferred.resume(input));\n if (!(DEFERRED_SETTLEMENT_ACK in completion)) {\n publish(completion.status as TaskStatus, completion.data, completion.error, {\n serverTaskId: completion.metadata.serverTaskId,\n taskType: completion.metadata.taskName,\n });\n }\n return completion;\n },\n };\n }\n\n return result;\n }\n\n private publishSettledTaskStatus(\n taskId: string,\n status: TaskStatus,\n data?: unknown,\n error?: string,\n fromExternalObservation = false,\n identity: { serverTaskId?: string; taskType?: string } = {}\n ): void {\n if (!TERMINAL_TASK_STATUSES.has(status)) return;\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n if (!fromExternalObservation) {\n if (identity.serverTaskId !== undefined && identity.taskType !== undefined) {\n const observation: ExternalTaskSettlementObservation = { status, result: data, ...identity };\n this.settledExternalTaskObservationKeys.set(taskId, {\n key: this.externalTaskObservationKey(observation),\n status,\n ...(error !== undefined && { error: error.slice(0, MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS) }),\n });\n }\n this.closeExternalTaskSettlement(\n taskId,\n new Error('The task settled through its direct response; a racing pushed result was not accepted.')\n );\n }\n if (task.status !== status) this.updateTaskStatus(taskId, status, data, error);\n }\n\n private rejectPendingExternalTaskObservations(taskId: string, _error: unknown): void {\n this.pendingExternalTaskObservations.delete(taskId);\n }\n\n private liveExternalTaskSettlementCount(): number {\n let count = 0;\n for (const taskId of this.deferredTerminalPublicationTaskIds) {\n if (!this.closedExternalTaskSettlementTaskIds.has(taskId)) count += 1;\n }\n return count;\n }\n\n private compactClosedExternalTaskSettlementFences(): void {\n while (\n this.deferredTerminalPublicationTaskIds.size + this.settlementCapacityReservations.size >=\n COMPACTED_TASK_STATE_LIMIT\n ) {\n const oldestClosed = [...this.deferredTerminalPublicationTaskIds].find(taskId =>\n this.closedExternalTaskSettlementTaskIds.has(taskId)\n );\n if (oldestClosed === undefined) return;\n // The durable registration/recovery layer remains the authoritative\n // fail-closed route after this bounded exact-retry cache is evicted.\n this.deferredTerminalPublicationTaskIds.delete(oldestClosed);\n this.closedExternalTaskSettlementTaskIds.delete(oldestClosed);\n this.settledExternalTaskObservationKeys.delete(oldestClosed);\n this.externalTaskSettlementExpiry.delete(oldestClosed);\n const timer = this.externalTaskSettlementTimers.get(oldestClosed);\n if (timer) clearTimeout(timer);\n this.externalTaskSettlementTimers.delete(oldestClosed);\n }\n }\n\n private closeExternalTaskSettlement(taskId: string, error: unknown): void {\n this.externalTaskSettlementHandlers.delete(taskId);\n this.externalTaskSettlementInFlight.delete(taskId);\n this.closedExternalTaskSettlementTaskIds.add(taskId);\n this.rejectPendingExternalTaskObservations(taskId, error);\n }\n\n private clearExternalTaskSettlementState(taskId: string): void {\n this.deferredTerminalPublicationTaskIds.delete(taskId);\n this.closedExternalTaskSettlementTaskIds.delete(taskId);\n this.externalTaskSettlementHandlers.delete(taskId);\n this.externalTaskSettlementInFlight.delete(taskId);\n this.settledExternalTaskObservationKeys.delete(taskId);\n this.externalTaskSettlementExpiry.delete(taskId);\n const timer = this.externalTaskSettlementTimers.get(taskId);\n if (timer) clearTimeout(timer);\n this.externalTaskSettlementTimers.delete(taskId);\n this.rejectPendingExternalTaskObservations(\n taskId,\n new Error('The durable push-settlement retention window expired before the observation was accepted.')\n );\n }\n\n private retainExternalTaskSettlementState(taskId: string): void {\n const retentionMs = this.config.externalTaskSettlementRetentionMs ?? DEFAULT_EXTERNAL_TASK_SETTLEMENT_RETENTION_MS;\n const expiry = Date.now() + retentionMs;\n if ((this.externalTaskSettlementExpiry.get(taskId) ?? 0) >= expiry) return;\n const priorTimer = this.externalTaskSettlementTimers.get(taskId);\n if (priorTimer) clearTimeout(priorTimer);\n this.externalTaskSettlementExpiry.set(taskId, expiry);\n const expire = () => {\n if (this.externalTaskSettlementExpiry.get(taskId) !== expiry) return;\n const remaining = expiry - Date.now();\n if (remaining > 0) {\n const timer = setTimeout(expire, Math.min(remaining, MAX_TIMER_DELAY_MS));\n timer.unref?.();\n this.externalTaskSettlementTimers.set(taskId, timer);\n return;\n }\n this.externalTaskSettlementTimers.delete(taskId);\n this.clearExternalTaskSettlementState(taskId);\n };\n const timer = setTimeout(expire, Math.min(retentionMs, MAX_TIMER_DELAY_MS));\n timer.unref?.();\n this.externalTaskSettlementTimers.set(taskId, timer);\n }\n\n /** Release short-lived task inspection state without dropping a live durable push fence. */\n private cleanupTerminalTaskInspectionState(taskId: string): void {\n this.activeTasks.delete(taskId);\n this.compactedTaskIds.delete(taskId);\n if (\n this.deferredTerminalPublicationTaskIds.has(taskId) ||\n this.closedExternalTaskSettlementTaskIds.has(taskId) ||\n this.externalTaskSettlementHandlers.has(taskId)\n ) {\n if (this.externalTaskSettlementExpiry.has(taskId)) return;\n }\n this.clearExternalTaskSettlementState(taskId);\n }\n\n private registerExternalTaskSettlement(taskId: string, handler: ExternalTaskSettlementHandler): void {\n this.externalTaskSettlementHandlers.set(taskId, handler);\n const pending = this.pendingExternalTaskObservations.get(taskId);\n if (!pending) return;\n this.pendingExternalTaskObservations.delete(taskId);\n for (const observation of pending) {\n // The HTTP delivery has already been acknowledged. Durable failure stays\n // fenced locally and is surfaced by subsequent reconciliation/retries.\n void this.settleExternalTaskStatus(taskId, handler, observation).catch(() => undefined);\n }\n }\n\n private externalTaskObservationKey(observation: ExternalTaskSettlementObservation): string {\n return createHmac('sha256', EXTERNAL_TASK_OBSERVATION_HMAC_KEY)\n .update(\n canonicalize({\n status: observation.status,\n serverTaskId: observation.serverTaskId ?? null,\n taskType: observation.taskType ?? null,\n result: observation.result ?? null,\n })\n )\n .digest('base64url');\n }\n\n private async settleExternalTaskStatus(\n taskId: string,\n handler: ExternalTaskSettlementHandler,\n observation: ExternalTaskSettlementObservation\n ): Promise<ExternalTaskStatusResult> {\n const observationKey = this.externalTaskObservationKey(observation);\n const existing = this.externalTaskSettlementInFlight.get(taskId);\n if (existing) {\n if (existing.waiterCount >= MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS) {\n throw new Error('Too many terminal push notifications are undergoing durable task settlement.');\n }\n existing.waiterCount += 1;\n try {\n const accepted = await existing.settlement;\n if (existing.observationKey !== observationKey) {\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n return { ...accepted, duplicate: true };\n } finally {\n existing.waiterCount -= 1;\n }\n }\n const settlement = (async () => {\n const settled = await handler(observation);\n const settledStatus = settled.status as TaskStatus;\n if (this.closedExternalTaskSettlementTaskIds.has(taskId)) {\n throw new Error('The task settled through its direct response; the racing pushed result was not accepted.');\n }\n if (this.settledExternalTaskObservationKeys.has(taskId)) {\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n this.publishSettledTaskStatus(taskId, settledStatus, settled.data, settled.error, true);\n this.settledExternalTaskObservationKeys.set(taskId, {\n key: observationKey,\n status: settledStatus,\n ...(settled.error !== undefined && {\n error: settled.error.slice(0, MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS),\n }),\n });\n this.closeExternalTaskSettlement(\n taskId,\n new Error('The task already completed durable external settlement; a later pushed result was not accepted.')\n );\n return {\n settled: true,\n result: settled.data,\n status: settled.status as TaskStatus,\n ...(settled.error !== undefined && { error: settled.error }),\n };\n })();\n const inFlight = { observationKey, settlement, waiterCount: 1 };\n this.externalTaskSettlementInFlight.set(taskId, inFlight);\n try {\n return await settlement;\n } finally {\n if (this.externalTaskSettlementInFlight.get(taskId) === inFlight) {\n this.externalTaskSettlementInFlight.delete(taskId);\n }\n }\n }\n\n /** Release abandoned caller data without publishing a premature terminal state. */\n private compactAbandonedObserverTaskState(taskId: string): void {\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n }\n\n /**\n * A working/submitted response carries everything needed to poll externally.\n * Keeping the original request in activeTasks after dispatch would pin\n * inline assets, webhook credentials, conversation payloads, and per-call\n * options for an unbounded amount of time while the seller works. Retain\n * only lifecycle metadata and the separately tracked idempotency key.\n */\n private compactIntermediateTaskState(\n taskId: string,\n status: 'working' | 'submitted' | 'input-required' | 'auth-required' | 'deferred'\n ): void {\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n task.status = status;\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n this.compactedTaskIds.delete(taskId);\n this.compactedTaskIds.set(taskId, true);\n while (this.compactedTaskIds.size > COMPACTED_TASK_STATE_LIMIT) {\n const oldest = [...this.compactedTaskIds.keys()].find(\n candidate =>\n !this.deferredTerminalPublicationTaskIds.has(candidate) &&\n !this.externalTaskSettlementHandlers.has(candidate) &&\n !this.externalTaskSettlementInFlight.has(candidate)\n );\n if (oldest === undefined) break;\n this.compactedTaskIds.delete(oldest);\n this.activeTasks.delete(oldest);\n this.closeExternalTaskSettlement(oldest, new Error('The compacted task was evicted before push settlement.'));\n this.closedExternalTaskSettlementTaskIds.delete(oldest);\n }\n }\n\n /**\n * Handle input-required status\n *\n * Some agents (like Yahoo) return input-required status. THIS IS TOTALLY VALID AND IS AN INTERMEDIATE STATE.\n * IT SHOULD NOT BE THROWING AN ERROR. IT DOES NOT ALWAYS REQUIRE an input handler.\n * This is common for HITL (human-in-the-loop) workflows where the agent has already processed\n * the request and is just signaling that async approval may be needed.\n */\n private async handleInputRequired<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n response: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n pauseStatus: 'input-required' | 'auth-required' = 'input-required',\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n const inputRequest = this.responseParser.parseInputRequest(response);\n const serverContextId = this.responseParser.getContextId(response) ?? response.contextId;\n const a2aTaskId = this.responseParser.getA2AContinuationTaskId(response);\n const settlementServerTaskId = deferTerminalTaskStatus ? this.responseParser.getTaskId(response) : undefined;\n\n // MCP has no standard continuation after a returned pause. A2A can resume\n // only when the seller supplied an official task ID; without one, a same-\n // tool `{ input }` call would be a fresh mutation rather than an exact-task\n // continuation. In either case, return the nonresumable pause without\n // invoking a handler or inventing a continuation call.\n if (agent.protocol === 'mcp' || !a2aTaskId) {\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: pauseStatus,\n response,\n inputRequest,\n });\n this.compactIntermediateTaskState(taskId, pauseStatus);\n return {\n success: true,\n status: pauseStatus,\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n // If no handler is provided, return the pause as a valid intermediate\n // state so callers can collect input or refresh credentials themselves.\n if (!inputHandler) {\n // Extract any data that came with the response (some agents include partial results)\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: pauseStatus,\n response,\n inputRequest,\n });\n this.compactIntermediateTaskState(taskId, pauseStatus);\n\n // Preserve a safe same-process resume path for callers that choose to\n // collect HITL input themselves. This continues the existing seller task\n // and never replays the original mutation as a fresh dispatch.\n const token = randomUUID();\n const deferredStorage = this.config.deferredStorage;\n const usesDurableStorage = deferredStorage !== undefined && persistPausedContinuation;\n if (usesDurableStorage) {\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const continuationVersion = randomUUID();\n this.deferredAgents.set(agent.id, agent);\n const deferredState: DeferredTaskState = {\n continuationVersion,\n taskId,\n ...(serverContextId !== undefined && { contextId: serverContextId }),\n a2aTaskId,\n serverVersion,\n agentId: agent.id,\n taskName,\n params: durableDeferredSnapshot(params),\n messages: durableDeferredSnapshot(messages),\n pauseStatus,\n pauseQuestion: inputRequest.question,\n ...(deferredClientContext !== undefined && {\n clientContext: durableDeferredSnapshot(deferredClientContext),\n }),\n ...(deferTerminalTaskStatus && {\n settlementOperationId: taskId,\n settlementOperationRouteRequired: true as const,\n }),\n ...(deferTerminalTaskStatus &&\n requireDeferredSettlementResumeAuthorization && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(settlementServerTaskId !== undefined && { settlementServerTaskId }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n if (deferTerminalTaskStatus) this.requireDeferredSettlementOperationRouting(deferredStorage);\n const stored = deferTerminalTaskStatus\n ? await deferredStorage.putForSettlementOperationIfAbsent(taskId, token, deferredState, ttlSeconds)\n : await deferredStorage.putIfAbsent(token, deferredState, ttlSeconds);\n if (!stored) {\n throw new Error('Deferred continuation token already exists; refusing to replace another task.');\n }\n try {\n throwIfAborted(options.signal);\n } catch (error) {\n await deferredStorage.takeIfVersion(token, continuationVersion);\n throw error;\n }\n }\n let inProcessResumeConsumed = false;\n const resumeInProcess = async (input: unknown): Promise<TaskResult<T>> => {\n const inputSnapshot = structuredClone(input);\n if (inProcessResumeConsumed) throw new Error('Deferred continuation token has already been consumed.');\n inProcessResumeConsumed = true;\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n inputSnapshot,\n messages,\n undefined,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n };\n const deferred: DeferredContinuation<T> = {\n token,\n question: inputRequest.question,\n resume: usesDurableStorage\n ? input => this.resumeDeferredTaskFromLiveClosure<T>(token, input, !deferTerminalTaskStatus)\n : resumeInProcess,\n };\n\n return {\n success: true, // The task is progressing, not failed\n status: pauseStatus,\n data: partialData,\n deferred,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n const discussedField = (content: unknown): string | undefined => {\n if (content == null || typeof content !== 'object' || Array.isArray(content)) return undefined;\n const direct = (content as Record<string, unknown>).field;\n if (typeof direct === 'string') return direct;\n return this.responseParser.isInputRequest(content)\n ? this.responseParser.parseInputRequest(content).field\n : undefined;\n };\n\n // Build context for handler\n const context: ConversationContext = {\n messages,\n inputRequest,\n taskId,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n attempt: 1,\n maxAttempts: options.maxClarifications || 3,\n deferToHuman: async () => ({ defer: true, token: randomUUID() }),\n abort: reason => {\n throw new Error(reason || 'Task aborted');\n },\n getSummary: () => messages.map(m => `${m.role}: ${JSON.stringify(m.content)}`).join('\\n'),\n wasFieldDiscussed: field =>\n // Check if any agent message requested this field via input-required\n messages.some(m => m.role === 'agent' && discussedField(m.content) === field),\n getPreviousResponse: field => {\n // Find the agent message that requested this field\n const fieldRequestIndex = messages.findIndex(m => m.role === 'agent' && discussedField(m.content) === field);\n // The response is the next user message after the field request\n if (fieldRequestIndex >= 0) {\n const responseMsg = messages\n .slice(fieldRequestIndex + 1)\n .find(m => m.role === 'user' && m.metadata?.type === 'input_response');\n return responseMsg?.content;\n }\n return undefined;\n },\n };\n\n // Call handler\n const handlerResponse = await inputHandler(context);\n throwIfAborted(options.signal);\n\n // Check if handler wants to defer\n if (isDeferResponse(handlerResponse)) {\n const token = handlerResponse.token;\n const deferredStorage = this.config.deferredStorage;\n const usesDurableStorage = deferredStorage !== undefined && persistPausedContinuation;\n\n // Save deferred state for later resumption\n if (usesDurableStorage) {\n assertDeferredContinuationToken(token);\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const continuationVersion = randomUUID();\n this.deferredAgents.set(agent.id, agent);\n const deferredState: DeferredTaskState = {\n continuationVersion,\n taskId,\n ...(serverContextId !== undefined && { contextId: serverContextId }),\n a2aTaskId,\n serverVersion,\n agentId: agent.id,\n taskName,\n params: durableDeferredSnapshot(params),\n messages: durableDeferredSnapshot(messages),\n pauseStatus: 'deferred',\n pauseQuestion: inputRequest.question,\n ...(deferredClientContext !== undefined && {\n clientContext: durableDeferredSnapshot(deferredClientContext),\n }),\n ...(deferTerminalTaskStatus && {\n settlementOperationId: taskId,\n settlementOperationRouteRequired: true as const,\n }),\n ...(deferTerminalTaskStatus &&\n requireDeferredSettlementResumeAuthorization && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(settlementServerTaskId !== undefined && { settlementServerTaskId }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n if (deferTerminalTaskStatus) this.requireDeferredSettlementOperationRouting(deferredStorage);\n const stored = deferTerminalTaskStatus\n ? await deferredStorage.putForSettlementOperationIfAbsent(taskId, token, deferredState, ttlSeconds)\n : await deferredStorage.putIfAbsent(token, deferredState, ttlSeconds);\n if (!stored) {\n throw new Error('Deferred continuation token already exists; refusing to replace another task.');\n }\n try {\n throwIfAborted(options.signal);\n } catch (error) {\n // Cancellation may race a storage adapter that ignores the signal.\n // Remove only the exact generation just written. A concurrent resume\n // may already have claimed and advanced a newer generation.\n await deferredStorage.takeIfVersion(token, continuationVersion);\n throw error;\n }\n }\n // Deferred storage is the resume source of truth. Avoid retaining a\n // duplicate full request (including assets/credentials) in activeTasks.\n this.compactIntermediateTaskState(taskId, 'deferred');\n\n let inProcessResumeConsumed = false;\n const resumeInProcess = async (input: unknown): Promise<TaskResult<T>> => {\n const inputSnapshot = structuredClone(input);\n if (inProcessResumeConsumed) throw new Error('Deferred continuation token has already been consumed.');\n inProcessResumeConsumed = true;\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n inputSnapshot,\n messages,\n undefined,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n };\n const deferred: DeferredContinuation<T> = {\n token,\n question: inputRequest.question,\n resume: usesDurableStorage\n ? input => this.resumeDeferredTaskFromLiveClosure<T>(token, input, !deferTerminalTaskStatus)\n : resumeInProcess,\n };\n\n return {\n success: true, // The task is progressing, not failed\n status: 'deferred',\n deferred,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'deferred',\n clarificationRounds: 1,\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n // Handler provided input - continue with the task\n throwIfAborted(options.signal);\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n handlerResponse,\n messages,\n inputHandler, // Pass handler for multi-round clarification\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n }\n\n /**\n * List tasks for an agent, preferring MCP Tasks protocol when available.\n */\n private async listTasksForAgent(\n agent: AgentConfig,\n transport?: import('../protocols').TransportOptions\n ): Promise<TaskInfo[]> {\n // Try MCP Tasks protocol method first\n if (agent.protocol === 'mcp') {\n const authToken = getAuthToken(agent);\n try {\n return await listMCPTasks(agent.agent_uri, authToken, undefined, {\n transport: transport ?? this.config.transport,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n agentId: agent.id,\n },\n });\n } catch (err) {\n if (is401Error(err)) throw err;\n // Fall through to tool call if protocol method is not supported\n }\n }\n const response = (await ProtocolClient.callTool(\n agent,\n 'tasks/list',\n {},\n {\n serverVersion: this.lastKnownServerVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: transport ?? this.config.transport,\n onTransportActivity: this.config.onTransportActivity,\n }\n )) as Record<string, unknown>;\n return (response.tasks as TaskInfo[]) || [];\n }\n\n /**\n * Task tracking methods (PR #78)\n */\n async listTasks(agent: AgentConfig, transport?: import('../protocols').TransportOptions): Promise<TaskInfo[]> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n try {\n return await this.listTasksForAgent(agent, transportSnapshot);\n } catch {\n // Static message only — CodeQL's taint analysis treats `error` and\n // every property of it as sensitive once it originates from an\n // operation that touched `agent.oauth_client_credentials`. Surfaces\n // the failure occurred; full detail is available via DEBUG=adcp:*.\n console.warn('Failed to list tasks (see DEBUG=adcp:* logs for detail)');\n return [];\n }\n }\n\n private async getTaskStatusWithRawResponse(\n agent: AgentConfig,\n taskId: string,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal,\n expectedTaskType?: string,\n serverVersion?: 'v2' | 'v3'\n ): Promise<TaskStatusPollResult> {\n // AdCP `tasks/get` is the cross-protocol work-status interface\n // (`schemas/cache/<v>/bundled/core/tasks-get-{request,response}.json`).\n // MCP tool names cannot contain `/`, so MCP servers advertise the\n // SDK-owned `tasks_get` alias; A2A continues to use the spec slash name.\n //\n // The previous implementation tried MCP's `experimental.tasks.getTask`\n // first for MCP agents and fell through to the AdCP tool path on\n // capability-missing. The native MCP path tracks the TRANSPORT-call\n // lifecycle (MCP analog of A2A `Task.state`) — not AdCP work\n // lifecycle. For submitted-arm polling we need work status; the\n // two interfaces are not substitutes, so we always use the AdCP\n // tool here. MCP sellers that haven't registered `tasks_get` as\n // an AdCP tool will surface a tool-not-found error rather than\n // silently polling the wrong lifecycle.\n //\n // The request param is `task_id` (snake_case per AdCP 3.0); the\n // response is the spec's flat shape, mapped to `TaskInfo` via\n // {@link mapTasksGetResponseToTaskInfo}.\n //\n //\n // Request includes `include_result: true` so spec-conformant\n // sellers (AdCP 3.1.0+) populate the typed `result` field on\n // `completed` responses (per adcontextprotocol/adcp#3126). Older\n // sellers ignore the unknown request field; the response mapper\n // falls back to the informal `additionalProperties` passthrough\n // for those.\n const toolName = agent.protocol === 'mcp' ? 'tasks_get' : 'tasks/get';\n const response = (await ProtocolClient.callTool(\n agent,\n toolName,\n { task_id: taskId, include_result: true },\n {\n serverVersion: serverVersion ?? this.lastKnownServerVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: transport ?? this.config.transport,\n signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n taskId,\n },\n }\n )) as Record<string, unknown>;\n // We don't run `extractResponseData` here: that helper's\n // generic AdCP-error-arm detection treats any top-level\n // `error: { code, message }` as an error envelope and shreds the\n // response into `{ errors: [...] }`. For `tasks/get` the `error`\n // block is informational (the failed task's reason, not a\n // request rejection), so we map the raw response directly. The\n // mapper handles the AdCP-spec flat shape, the legacy\n // `{ task: ... }` nested wrapper, and MCP `structuredContent` /\n // A2A latest structured DataPart envelopes.\n const task = mapTasksGetResponseToTaskInfo(response);\n if (!task.taskId || task.taskId !== taskId) {\n throw new TaskBindingMismatchError(\n 'tasks/get returned a task identity that does not match the requested task.',\n response\n );\n }\n if (expectedTaskType !== undefined && task.taskType !== expectedTaskType) {\n throw new TaskBindingMismatchError(\n 'tasks/get returned a task type that does not match the submitted operation.',\n response\n );\n }\n return { task, rawResponse: response };\n }\n\n async getTaskStatus(\n agent: AgentConfig,\n taskId: string,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal\n ): Promise<TaskInfo> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n return (await this.getTaskStatusWithRawResponse(agent, taskId, transportSnapshot, signal)).task;\n }\n\n async pollTaskCompletion<T>(\n agent: AgentConfig,\n taskId: string,\n pollInterval = 60000,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal,\n a2aCancellationTaskId?: string,\n expectedTaskType?: string,\n metadataTaskId = taskId,\n serverVersion?: 'v2' | 'v3'\n ): Promise<TaskResult<T>> {\n // Transport policy is a request trust boundary. Own one shallow snapshot\n // for the entire polling lifetime so caller mutation cannot substitute a\n // fetch implementation or private-address policy between polls/cancel.\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n if (!Number.isFinite(pollInterval) || pollInterval < 0 || pollInterval > MAX_TIMER_DELAY_MS) {\n throw new RangeError(`pollInterval must be a finite non-negative number <= ${MAX_TIMER_DELAY_MS}`);\n }\n const pollStartTime = Date.now();\n const withServerTaskId = (metadata: TaskResultMetadata): TaskResultMetadata => ({\n ...metadata,\n serverTaskId: taskId,\n });\n while (true) {\n // adcp-client#1612: When the outer storyboard race timer fires, the\n // caller's AbortSignal is already aborted. Exit cleanly rather than\n // continuing to send `tasks/get` requests that nobody is waiting for.\n if (signal?.aborted) {\n const reason =\n signal.reason instanceof Error ? signal.reason.message : String(signal.reason ?? 'polling cancelled');\n // adcp-client#1617: Phase 1 — notify the seller so it can stop doing\n // work for a buyer that has already given up. A2A 0.3.0 §7.4 defines\n // tasks/cancel for exactly this case. Fire-and-forget: cancel failure\n // (TaskNotCancelable, network error, terminal-state race) is non-fatal.\n // TODO(adcp-client#1617-phase2): upgrade to awaited cancel once AdCP\n // spec defines a cross-protocol cancel verb.\n //\n // SECURITY: silent on rejection. The orphan rejection's `Error.message`\n // can carry an echoed transport response body — same trust-boundary\n // concern as `raceWithSignal` in `src/lib/testing/client.ts`. A buyer\n // who has already aborted MUST NOT see seller-controlled text leak\n // into their logs/telemetry. The outer try AND the `.catch(() => {})`\n // are both intentional: a malformed `agent_uri` could throw\n // synchronously from `fetch(...)` before the promise chain catches\n // it, so the try guards the dispatch path; the `.catch()` guards the\n // async settlement path.\n if (agent.protocol === 'a2a' && a2aCancellationTaskId && agent.agent_uri) {\n try {\n // adcp-client#1617 Phase 2: pass the full agent so cancelA2ATask\n // can sign the POST when agent.request_signing is configured.\n // signed-requests sellers no longer 401 the cancel.\n const cancelTransport = normalizeTransportOptions(transportSnapshot);\n void cancelA2ATask(\n agent,\n a2aCancellationTaskId,\n cancelTransport?.trustedFetchFn,\n cancelTransport?.allowPrivateIp\n ).catch(() => {\n /* see SECURITY note above */\n });\n } catch {\n /* see SECURITY note above */\n }\n }\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: `tasks/get polling was cancelled before a terminal state was observed: ${reason}`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n })\n ),\n });\n }\n\n // adcp-client#1585: A2A 0.3.x defines no minimum retention TTL for\n // completed tasks. A seller may evict a task between the buyer\n // observing the working-state response and the first explicit\n // `tasks/get` poll firing — `getTaskStatus` then throws with a\n // \"Task <id> not found\" message. Surface a descriptive `failed`\n // `TaskResult` so the caller sees an actionable error instead of an\n // opaque uncaught exception escaping from the polling loop.\n let status: TaskInfo;\n let rawResponse: Record<string, unknown> | undefined;\n try {\n const pollResult = await this.getTaskStatusWithRawResponse(\n agent,\n taskId,\n transportSnapshot,\n signal,\n expectedTaskType,\n serverVersion\n );\n status = pollResult.task;\n rawResponse = pollResult.rawResponse;\n } catch (err) {\n if (err instanceof TaskBindingMismatchError) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: err.message,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n response: err.rawResponse,\n })\n ),\n });\n }\n const msg = err instanceof Error ? err.message : String(err);\n // Bounded `\\S{1,128}` task-id segment (no `.*`) keeps the match\n // linear-time on adversarial inputs — CodeQL flags unbounded\n // polynomial regex on uncontrolled error strings.\n if (/\\btask\\s+\\S{1,128}\\s+not found\\b/i.test(msg)) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: `Task ${taskId} is no longer queryable — it may have been completed and evicted by the seller before this poll arrived. Consider using push notifications (reporting_webhook) instead of polling, or configuring a longer task retention TTL on the seller.`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n })\n ),\n });\n }\n throw err;\n }\n\n if (expectedTaskType !== undefined && (status.taskId !== taskId || status.taskType !== expectedTaskType)) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: 'The seller returned a task outside the requested durable task identity.',\n metadata: this.buildMetadata({\n taskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n }),\n });\n }\n\n if (status.status === ADCP_STATUS.COMPLETED) {\n const pollSuccess = this.isOperationSuccess(status.result, status.taskType, serverVersion);\n\n if (pollSuccess) {\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: true as const,\n status: 'completed' as const,\n data: status.result,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'completed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n const asyncResultErr = extractAdcpErrorInfo(status.result);\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: false as const,\n status: 'failed' as const,\n data: status.result,\n error: this.extractOperationError(status.result),\n adcpError: asyncResultErr,\n errorInstance: this.buildErrorInstance(metadataTaskId, asyncResultErr),\n correlationId: extractCorrelationId(status.result),\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'failed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n\n if (\n status.status === ADCP_STATUS.FAILED ||\n status.status === ADCP_STATUS.CANCELED ||\n status.status === ADCP_STATUS.REJECTED\n ) {\n const asyncFailedErr = extractAdcpErrorInfo(status.result);\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: false as const,\n status: 'failed' as const,\n data: status.result,\n error: status.error || status.message || `Task ${status.status}`,\n adcpError: asyncFailedErr,\n errorInstance: this.buildErrorInstance(metadataTaskId, asyncFailedErr),\n correlationId: extractCorrelationId(status.result),\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'failed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n\n // Paused states: `input-required` and `auth-required`. Polling\n // alone can't advance these. Return a `TaskResultIntermediate` so the\n // caller can branch on `result.status` and select an explicit\n // application/protocol-specific recovery path; this mirrors the\n // synchronous `handleInputRequired` no-handler path\n // (`success: true` because the task is progressing, not failed).\n // Without this branch the loop would spin until timeout — the\n // paused-state regression class flagged by adcp-client#977.\n if (status.status === ADCP_STATUS.INPUT_REQUIRED || status.status === ADCP_STATUS.AUTH_REQUIRED) {\n return attachMatch({\n success: true as const,\n status: status.status,\n data: status.result as T,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: status.status,\n response: rawResponse,\n })\n ),\n });\n }\n\n // adcp-client#1612: `status: 'unknown'` means `mapTasksGetResponseToTaskInfo`\n // could not extract a recognizable status string from the response — the\n // seller's `tasks/get` response did not conform to any expected envelope\n // shape (flat AdCP, MCP structuredContent, or A2A DataPart artifact).\n // Continuing to poll would spin forever since the shape won't change.\n // Surface a descriptive failure so the storyboard runner reports the\n // seller's non-conformance rather than burning the outer timeout budget.\n if (status.status === 'unknown') {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error:\n `tasks/get returned an unrecognizable response (parsed status: \"unknown\", taskId: \"${status.taskId}\"). ` +\n `The seller may not implement tasks/get as an AdCP skill, or its response did not match any ` +\n `supported envelope shape (flat AdCP, MCP structuredContent, or A2A DataPart artifact).`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n response: rawResponse,\n })\n ),\n });\n }\n\n await this.sleep(pollInterval);\n // Re-check after sleep so a signal that fired mid-sleep exits at the top\n // of the next iteration rather than issuing one more `getTaskStatus` call.\n if (signal?.aborted) continue;\n }\n }\n\n /**\n * Resume a deferred task (client deferral)\n */\n async resumeDeferredTask<T>(token: string, input: any, publishTerminalTaskStatus = true): Promise<TaskResult<T>> {\n const result = (await this.resumeDeferredTaskWithContext<T>(token, input, publishTerminalTaskStatus)).result;\n await acknowledgeDeferredSettlement(result);\n return result;\n }\n\n /** Whether this exact continuation currently has a durable SDK checkpoint. @internal */\n async hasDurablyStoredDeferredTask(token: string): Promise<boolean> {\n if (!this.config.deferredStorage) return false;\n assertDeferredContinuationToken(token);\n return (await this.config.deferredStorage.has(token)) === true;\n }\n\n private requireDeferredSettlementOperationRouting(storage: DeferredTaskStorage): void {\n if (\n typeof storage.putForSettlementOperationIfAbsent !== 'function' ||\n typeof storage.getBySettlementOperationId !== 'function' ||\n typeof storage.replaceForSettlementOperationIfVersion !== 'function'\n ) {\n throw new ConfigurationError(\n 'Committed deferred settlement requires atomic operation routing so paused mutations remain discoverable across crashes. ' +\n 'Use MemoryStorage or implement the DeferredTaskStorage operation-route contract.'\n );\n }\n }\n\n private async loadDeferredSettlementOperationRoute(\n storage: DeferredTaskStorage,\n operationId: string\n ): Promise<{ token: string; state: DeferredTaskState } | undefined> {\n try {\n return await storage.getBySettlementOperationId(operationId);\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed continuation operation routing could not be loaded safely.',\n { cause: error }\n );\n }\n }\n\n private replaceDeferredState(\n storage: DeferredTaskStorage,\n token: string,\n expectedVersion: string,\n state: DeferredTaskState,\n ttlSeconds: number\n ): Promise<boolean> {\n if (state.settlementOperationId === undefined || state.settlementOperationRouteRequired !== true) {\n return storage.replaceIfVersion(token, expectedVersion, state, ttlSeconds);\n }\n this.requireDeferredSettlementOperationRouting(storage);\n return storage.replaceForSettlementOperationIfVersion(\n state.settlementOperationId,\n token,\n expectedVersion,\n token,\n state,\n ttlSeconds\n );\n }\n\n /** Recover the current pause generation through its committed operation route. @internal */\n async recoverDeferredTaskForOperation<T>(\n operationId: string,\n recoveryKey: string,\n publishTerminalTaskStatus = true\n ): Promise<{ token: string; result: TaskResult<T> } | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) return undefined;\n this.requireDeferredSettlementOperationRouting(storage);\n let authorized = false;\n try {\n authorized =\n (await this.config.authorizeDeferredSettlementOperationRecovery?.(\n operationId,\n recoveryKey,\n 'pause-recovery'\n )) === true;\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed continuation operation recovery could not be authorized safely.',\n { cause: error }\n );\n }\n if (!authorized) {\n throw new DeferredSettlementOwnershipError('Committed continuation operation recovery is not authorized.');\n }\n const routed = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!routed) return undefined;\n return this.recoverRoutedDeferredTask<T>(operationId, routed, publishTerminalTaskStatus);\n }\n\n private async recoverRoutedDeferredTask<T>(\n operationId: string,\n routed: { token: string; state: DeferredTaskState },\n publishTerminalTaskStatus: boolean\n ): Promise<{ token: string; result: TaskResult<T> } | undefined> {\n const { token, state } = routed;\n if (\n state.settlementOperationId !== operationId ||\n state.settlementOperationRouteRequired !== true ||\n state.expiresAt <= Date.now()\n ) {\n return undefined;\n }\n\n // Terminal/pending checkpoints already have exact replay logic and never\n // consume the supplied input before reaching it.\n if (\n state.settlementFinalizedResult !== undefined ||\n state.settlementTerminalResult !== undefined ||\n state.settlementPendingTaskId !== undefined\n ) {\n return {\n token,\n result: (await this.resumeDeferredTaskCore<T>(token, undefined, publishTerminalTaskStatus, false)).result,\n };\n }\n if (state.continuationClaimed) {\n return undefined;\n }\n if (!state.pauseStatus || !state.pauseQuestion) {\n throw new DeferredSettlementOwnershipError(\n 'The current committed continuation is missing its durable pause descriptor.'\n );\n }\n const agent = this.deferredAgents.get(state.agentId) ?? (await this.config.resolveDeferredAgent?.(state.agentId));\n if (!agent || agent.id !== state.agentId || agent.protocol !== 'a2a') {\n throw new DeferredSettlementOwnershipError(\n 'The trusted agent for the current committed continuation could not be resolved safely.'\n );\n }\n this.deferredAgents.set(agent.id, agent);\n const status = state.pauseStatus;\n const result = attachMatch({\n success: true,\n status,\n deferred: {\n token,\n question: state.pauseQuestion,\n resume: (input: unknown) =>\n this.resumeDeferredTaskFromClientClosure<T>(token, input, publishTerminalTaskStatus),\n },\n metadata: {\n taskId: state.taskId,\n taskName: state.taskName,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status,\n a2aTaskId: state.a2aTaskId,\n ...(state.contextId !== undefined && { contextId: state.contextId }),\n ...(state.settlementServerTaskId !== undefined && { serverTaskId: state.settlementServerTaskId }),\n },\n conversation: durableDeferredSnapshot(state.messages),\n } as TaskResult<T>);\n return { token, result };\n }\n\n /** Bridge a store-recovered callback into the same deferred terminal checkpoint. @internal */\n async checkpointExternalDeferredSettlement<T>(\n token: string,\n operationId: string,\n terminalResult: TaskResult<T>\n ): Promise<TaskResult<T> | undefined> {\n assertDeferredContinuationToken(token);\n const storage = this.config.deferredStorage;\n if (!storage) throw new Error('Deferred storage is unavailable for the linked callback checkpoint.');\n let state: DeferredTaskState | undefined;\n try {\n state = await storage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred callback checkpoint state could not be loaded safely.', {\n cause: error,\n });\n }\n if (!state) throw new Error('The linked deferred callback checkpoint is unavailable.');\n if (state.settlementOperationId !== operationId) {\n throw new Error('The deferred callback token is bound to a different committed operation.');\n }\n if (state.settlementOperationRouteRequired === true) {\n this.requireDeferredSettlementOperationRouting(storage);\n const currentRoute = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!currentRoute || currentRoute.token !== token) {\n throw new DeferredSettlementOwnershipError(\n 'The deferred callback token is not the current generation for its committed operation.'\n );\n }\n }\n const trustedServerTaskId = trustedDeferredServerTaskId(state);\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(terminalResult, trustedServerTaskId);\n const normalizedSavedTerminal =\n state.settlementTerminalResult === undefined\n ? undefined\n : normalizeDeferredTerminalServerTaskId(\n state.settlementTerminalResult as TaskResult<unknown>,\n trustedServerTaskId\n ).result;\n if (state.settlementFinalizedResult !== undefined) {\n if (\n normalizedSavedTerminal === undefined ||\n normalizedTerminal.serverTaskId === undefined ||\n normalizedTerminal.serverTaskId !== trustedServerTaskId ||\n !sameDeferredTerminal(normalizedSavedTerminal, normalizedTerminal.result)\n ) {\n throw new Error('The durable callback conflicts with the finalized deferred settlement.');\n }\n return undefined;\n }\n\n let lease: DeferredFinalizationLease;\n if (normalizedSavedTerminal !== undefined) {\n if (\n normalizedTerminal.serverTaskId === undefined ||\n normalizedTerminal.serverTaskId !== trustedServerTaskId ||\n !sameDeferredTerminal(normalizedSavedTerminal, normalizedTerminal.result)\n ) {\n throw new Error('The durable callback conflicts with the saved deferred terminal observation.');\n }\n lease = await this.acquireDeferredFinalizationLease(token, state);\n } else {\n const expectedTaskId = trustedServerTaskId;\n const observedTaskId = normalizedTerminal.serverTaskId;\n if (!expectedTaskId || !observedTaskId || observedTaskId !== expectedTaskId) {\n throw new Error('The durable callback task identity does not match the linked deferred seller task.');\n }\n const acquired = await this.checkpointDeferredPendingTerminal(token, state, normalizedTerminal.result, true);\n if (!acquired) throw new Error('Committed deferred callback finalization lease was not acquired.');\n lease = acquired;\n }\n\n return this.attachDeferredSettlementAcknowledgement(\n normalizedTerminal.result,\n state.taskId,\n true,\n undefined,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n }\n\n /** Resolve and checkpoint the current generation using a separate owner capability. @internal */\n async checkpointExternalDeferredSettlementForOperation<T>(\n operationId: string,\n recoveryKey: string,\n terminalResult: TaskResult<T>\n ): Promise<{ token: string; result?: TaskResult<T> } | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) return undefined;\n this.requireDeferredSettlementOperationRouting(storage);\n let authorized = false;\n try {\n authorized =\n (await this.config.authorizeDeferredSettlementOperationRecovery?.(\n operationId,\n recoveryKey,\n 'callback-checkpoint'\n )) === true;\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed callback operation recovery could not be authorized safely.',\n { cause: error }\n );\n }\n if (!authorized) {\n throw new DeferredSettlementOwnershipError('Committed callback operation recovery is not authorized.');\n }\n const currentRoute = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!currentRoute) return undefined;\n if (currentRoute.state.settlementOperationRouteRequired !== true) {\n throw new DeferredSettlementOwnershipError('The callback operation route is not a current-format checkpoint.');\n }\n const result = await this.checkpointExternalDeferredSettlement(currentRoute.token, operationId, terminalResult);\n return { token: currentRoute.token, ...(result !== undefined && { result }) };\n }\n\n /** A live owner closure may carry its committed settlement wrapper in process. */\n private async resumeDeferredTaskFromLiveClosure<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean\n ): Promise<TaskResult<T>> {\n return (await this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, true)).result;\n }\n\n /** Preserve higher-level client finalization before settlement acknowledgement. */\n private async resumeDeferredTaskFromClientClosure<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean\n ): Promise<TaskResult<T>> {\n return (await this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, false)).result;\n }\n\n /** Resume and return the opaque owner context needed by higher-level clients. @internal */\n async resumeDeferredTaskWithContext<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus = true\n ): Promise<{\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }> {\n return this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, false);\n }\n\n private async resumeDeferredTaskCore<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean,\n liveSettlementOwner: boolean\n ): Promise<{\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }> {\n // Caller-owned nested input must not remain live across the storage or\n // trusted-agent resolution awaits below.\n const inputSnapshot = structuredClone(input);\n assertDeferredContinuationToken(token);\n if (!this.config.deferredStorage) {\n throw new Error('Deferred storage not configured');\n }\n\n // Read first, then atomically transition the exact record generation to a\n // claimed fence below. The key is never physically absent during seller\n // dispatch, so neither a replica nor a reused handler token can create an\n // ABA replacement while settlement is pending.\n let state: DeferredTaskState | undefined;\n try {\n state = await this.config.deferredStorage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be loaded safely.', {\n cause: error,\n });\n }\n if (!state) {\n throw new Error('Deferred task not found.');\n }\n if (state.expiresAt <= Date.now()) {\n throw new Error('Deferred task expired.');\n }\n\n const committedOperationId = state.settlementOperationId;\n const requiresSettlement = committedOperationId !== undefined;\n const requiresRecoveredSettlement = requiresSettlement && !liveSettlementOwner;\n if (requiresSettlement && state.settlementOperationRouteRequired === true) {\n this.requireDeferredSettlementOperationRouting(this.config.deferredStorage);\n }\n // Once durable settlement and public-client finalization both succeeded,\n // replay the exact finalized value without re-running application handlers\n // or settlement recovery.\n if (requiresSettlement && state.settlementFinalizedResult !== undefined) {\n const normalizedFinalized = normalizeDeferredTerminalServerTaskId(\n structuredClone(state.settlementFinalizedResult) as TaskResult<T>,\n trustedDeferredServerTaskId(state)\n );\n if (normalizedFinalized.serverTaskId === undefined) {\n throw new Error('The finalized deferred settlement does not contain its trusted seller task identity.');\n }\n const finalized = attachMatch(normalizedFinalized.result);\n if (state.settlementCompletionHandlerPublished === true) {\n markCompletionHandlerAlreadyPublished(finalized);\n }\n return {\n result: finalized,\n settlementOperationId: committedOperationId,\n ...(state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: state.settlementServerTaskId,\n }),\n };\n }\n if (requiresRecoveredSettlement) {\n let recoveryAvailable = false;\n try {\n recoveryAvailable =\n this.config.recoverDeferredSettlement !== undefined &&\n this.config.canRecoverDeferredSettlement !== undefined &&\n (await this.config.canRecoverDeferredSettlement(committedOperationId));\n } catch (error) {\n throw error;\n }\n if (!recoveryAvailable) {\n throw new Error(\n 'This deferred task crossed a committed mutation boundary, but durable settlement recovery is unavailable.'\n );\n }\n }\n\n // A crash may occur after the seller consumed input for A and the atomic\n // SDK operation route moved to pause B, but before the coordinator CAS or\n // caller response completed. Possession of A plus the matching committed\n // operation is sufficient to recover B; never redispatch A's input.\n if (requiresSettlement && state.settlementOperationRouteRequired === true) {\n const currentRoute = await this.loadDeferredSettlementOperationRoute(\n this.config.deferredStorage,\n committedOperationId\n );\n if (currentRoute && currentRoute.token !== token) {\n if (currentRoute.state.settlementOperationId !== committedOperationId) {\n throw new DeferredSettlementOwnershipError(\n 'The committed continuation operation route does not match its stored generation.'\n );\n }\n if (state.settlementResumeAuthorizationRequired === true) {\n let replacementAuthorized =\n (await this.config.authorizeDeferredSettlementResume?.(committedOperationId, currentRoute.token)) === true;\n if (!replacementAuthorized) {\n const replaced = await this.config.replaceDeferredSettlementResumeToken?.(\n committedOperationId,\n token,\n currentRoute.token\n );\n replacementAuthorized =\n replaced === true ||\n (await this.config.authorizeDeferredSettlementResume?.(committedOperationId, currentRoute.token)) ===\n true;\n }\n if (!replacementAuthorized) {\n throw new DeferredSettlementOwnershipError(\n 'The recovered continuation generation could not be linked to its durable coordinator.'\n );\n }\n }\n const recovered = await this.recoverRoutedDeferredTask<T>(\n committedOperationId,\n currentRoute,\n publishTerminalTaskStatus\n );\n if (!recovered || recovered.token !== currentRoute.token) {\n throw new DeferredSettlementOwnershipError(\n 'The recovered continuation generation changed before it could be returned safely.'\n );\n }\n return {\n result: recovered.result,\n ...(currentRoute.state.clientContext !== undefined && {\n clientContext: structuredClone(currentRoute.state.clientContext),\n }),\n settlementOperationId: committedOperationId,\n ...(currentRoute.state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: currentRoute.state.settlementServerTaskId,\n }),\n };\n }\n }\n\n // A previous committed resume advanced the seller into working/submitted\n // state. Reconstruct polling from the durable seller work handle instead\n // of redispatching the human input after a process restart.\n if (requiresSettlement && state.settlementPendingTaskId !== undefined) {\n let pendingAgent = this.deferredAgents.get(state.agentId);\n if (!pendingAgent) {\n try {\n pendingAgent = await this.config.resolveDeferredAgent?.(state.agentId);\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'The trusted agent for a pending deferred settlement could not be resolved safely.',\n { cause: error }\n );\n }\n }\n if (!pendingAgent || pendingAgent.id !== state.agentId) {\n throw new Error('Deferred task agent could not be resolved from trusted configuration.');\n }\n if (pendingAgent.protocol !== 'a2a' || !state.a2aTaskId) {\n throw new Error('A persisted pending deferred task can only poll its exact A2A seller task.');\n }\n this.deferredAgents.set(pendingAgent.id, pendingAgent);\n const pending = await this.setupSubmittedTask<T>(\n pendingAgent,\n state.taskId,\n state.taskName,\n {\n status: ADCP_STATUS.SUBMITTED,\n task_id: state.settlementPendingTaskId,\n },\n state.messages,\n {},\n [],\n Date.now(),\n true,\n state.serverVersion\n );\n const recoveredPending = this.wrapDeferredPendingSettlementContinuations(\n token,\n state,\n pending,\n publishTerminalTaskStatus,\n true\n );\n return {\n result: attachMatch(recoveredPending),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n settlementOperationId: committedOperationId,\n settlementServerTaskId: state.settlementPendingTaskId,\n };\n }\n\n // A prior seller continuation reached a terminal result but recovery did\n // not finish. Retry the saved observation without contacting the seller.\n if (requiresSettlement && state.settlementTerminalResult !== undefined) {\n const finalizationLease = await this.acquireDeferredFinalizationLease(token, state);\n try {\n const normalizedCheckpoint = normalizeDeferredTerminalServerTaskId(\n structuredClone(state.settlementTerminalResult) as TaskResult<T>,\n trustedDeferredServerTaskId(state)\n );\n if (normalizedCheckpoint.serverTaskId === undefined) {\n throw new Error('The deferred terminal checkpoint does not contain its trusted seller task identity.');\n }\n const checkpointed = attachMatch(normalizedCheckpoint.result);\n const settlement = requiresRecoveredSettlement\n ? await this.config.recoverDeferredSettlement!(\n checkpointed,\n committedOperationId,\n normalizedCheckpoint.serverTaskId\n )\n : { result: checkpointed };\n const recovered = this.attachDeferredSettlementAcknowledgement(\n settlement.result as TaskResult<T>,\n state.taskId,\n publishTerminalTaskStatus,\n settlement.afterFinalize,\n finalized => finalizationLease.finalize(finalized),\n completionHandlerPublished => finalizationLease.release(completionHandlerPublished)\n );\n if (state.settlementCompletionHandlerPublished === true) {\n markCompletionHandlerAlreadyPublished(recovered);\n }\n return {\n result: attachMatch(recovered),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n settlementOperationId: committedOperationId,\n ...(state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: state.settlementServerTaskId,\n }),\n };\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(finalizationLease, error);\n }\n }\n\n if (state.continuationClaimed) {\n const dispatchLease = state.settlementResumeDispatchLease;\n const reclaimableAdmission =\n requiresSettlement &&\n dispatchLease?.phase === 'admission' &&\n Number.isFinite(dispatchLease.expiresAt) &&\n dispatchLease.expiresAt <= Date.now();\n if (!reclaimableAdmission) {\n throw new DeferredSettlementOwnershipError('Deferred task is already being resumed.');\n }\n }\n if (typeof state.continuationVersion !== 'string' || state.continuationVersion.length === 0) {\n throw new Error('Deferred task state does not contain the atomic continuation version required for resumption.');\n }\n const remainingTtlSeconds = Math.ceil((state.expiresAt - Date.now()) / 1000);\n if (remainingTtlSeconds < 1) throw new Error('Deferred task expired.');\n // Admission is governed by the original human-input deadline above. Once\n // admitted, keep the exact claim generation alive for a fresh dispatch\n // horizon so a slow seller cannot outlive the fence or defeat checkpoint\n // persistence after it has already advanced the mutation.\n const claimTtlSeconds = this.deferredSafetyRetentionSeconds();\n const claimedVersion = randomUUID();\n const claimedAt = Date.now();\n const dispatchOwnerId = requiresSettlement ? randomUUID() : undefined;\n // MemoryStorage retains object references. Keep the durable claim and the\n // mutable in-flight conversation on independent sanitized graphs so a\n // transport failure cannot leave raw resume input in the retained fence.\n const claimedMessages = durableDeferredSnapshot(state.messages);\n const resumedMessages = durableDeferredSnapshot(state.messages);\n const claimedState: DeferredTaskState = {\n ...state,\n continuationVersion: claimedVersion,\n continuationClaimed: true,\n messages: claimedMessages,\n ...(dispatchOwnerId !== undefined && {\n settlementResumeDispatchLease: {\n ownerId: dispatchOwnerId,\n phase: 'admission' as const,\n expiresAt: claimedAt + DEFERRED_DISPATCH_ADMISSION_LEASE_MS,\n },\n }),\n createdAt: claimedAt,\n expiresAt: claimedAt + claimTtlSeconds * 1000,\n };\n let claimed: boolean;\n try {\n claimed = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n state.continuationVersion,\n claimedState,\n claimTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred dispatch admission could not be claimed safely.', {\n cause: error,\n });\n }\n if (!claimed) {\n throw new DeferredSettlementOwnershipError('Deferred task was already consumed or replaced.');\n }\n\n const admissionLease =\n dispatchOwnerId === undefined\n ? undefined\n : this.startDeferredDispatchAdmissionLease(token, claimedVersion, claimedState, dispatchOwnerId);\n let dispatchVersion = claimedVersion;\n let dispatchCommitted = false;\n let preDispatchStateConsumed = false;\n let agent: AgentConfig | undefined;\n let terminalObservationPersisted = false;\n let finalizationLease: DeferredFinalizationLease | undefined;\n let pendingCheckpointState: DeferredTaskState | undefined;\n try {\n // Authorization belongs after the atomic claim. A callback that wins the\n // previous generation makes this owner lose its final dispatch CAS.\n if (requiresSettlement && state.settlementResumeAuthorizationRequired) {\n await this.requireDeferredDispatchAuthorization(\n committedOperationId,\n token,\n 'This deferred continuation is not the current durable route for its committed operation.'\n );\n }\n agent = this.deferredAgents.get(state.agentId) ?? (await this.config.resolveDeferredAgent?.(state.agentId));\n if (!agent || agent.id !== state.agentId) {\n throw new Error('Deferred task agent could not be resolved from trusted configuration.');\n }\n if (state.expiresAt <= Date.now()) {\n const owned = admissionLease ? await admissionLease.stop() : { version: dispatchVersion, state: claimedState };\n const removed = await this.config.deferredStorage.takeIfVersion(token, owned.version);\n if (!removed) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation ownership changed while its trusted agent was being resolved.'\n );\n }\n preDispatchStateConsumed = true;\n throw new DeferredSettlementOwnershipError('Deferred task expired during trusted-agent resolution.');\n }\n if (agent.protocol !== 'a2a') {\n throw new Error('A persisted deferred task can only resume an exact A2A seller task.');\n }\n if (!state.a2aTaskId) {\n throw new Error('A persisted A2A deferred task requires a seller task ID.');\n }\n this.deferredAgents.set(agent.id, agent);\n\n // Re-authorize at the last await boundary, then atomically publish the\n // dispatch linearization point. A callback may still win authoritatively;\n // if it does, this CAS fails and no protocol call is issued.\n if (requiresSettlement && state.settlementResumeAuthorizationRequired) {\n await this.requireDeferredDispatchAuthorization(\n committedOperationId,\n token,\n 'This deferred continuation is no longer the current route for its committed operation.'\n );\n }\n if (admissionLease) {\n const owned = await admissionLease.stop();\n const committedAt = Date.now();\n dispatchVersion = randomUUID();\n const dispatchState: DeferredTaskState = {\n ...owned.state,\n continuationVersion: dispatchVersion,\n settlementResumeDispatchLease: {\n ownerId: dispatchOwnerId!,\n phase: 'dispatch-committed',\n expiresAt: committedAt + claimTtlSeconds * 1000,\n },\n createdAt: committedAt,\n expiresAt: committedAt + claimTtlSeconds * 1000,\n };\n let committed: boolean;\n try {\n committed = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n owned.version,\n dispatchState,\n claimTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission could not be committed safely before seller dispatch.',\n { cause: error }\n );\n }\n if (!committed) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation ownership changed before seller dispatch; no input was sent.'\n );\n }\n }\n dispatchCommitted = true;\n } catch (error) {\n if (!dispatchCommitted && !preDispatchStateConsumed) {\n const owned = admissionLease ? await admissionLease.stop() : { version: dispatchVersion, state: claimedState };\n await this.restoreUnadvancedDeferredState(token, owned.version, state);\n if (!(error instanceof DeferredSettlementOwnershipError)) {\n throw new DeferredSettlementOwnershipError(\n error instanceof Error ? error.message : 'Deferred continuation failed safely before seller dispatch.',\n { cause: error }\n );\n }\n }\n throw error;\n }\n\n const { settlementResumeDispatchLease: _dispatchLease, ...checkpointBaseState } = state;\n void _dispatchLease;\n try {\n // Continue task with the provided input (no handler for resumed deferred tasks)\n let resumed = await this.continueTaskWithInput<T>(\n agent,\n state.taskId,\n state.taskName,\n state.params,\n state.contextId,\n state.a2aTaskId,\n inputSnapshot,\n resumedMessages,\n undefined, // No handler for deferred tasks - input was provided by human\n {},\n [],\n Date.now(),\n !publishTerminalTaskStatus || requiresSettlement,\n false,\n state.serverVersion,\n state.clientContext,\n state.settlementResumeAuthorizationRequired === true\n );\n const observedResumedServerTaskId = resumed.metadata.serverTaskId;\n if (requiresSettlement && !TERMINAL_TASK_STATUSES.has(resumed.status as TaskStatus)) {\n resumed = attachMatch(\n normalizeDeferredTerminalServerTaskId(resumed, trustedDeferredServerTaskId(state)).result\n );\n }\n const remainsPaused = ['input-required', 'auth-required', 'deferred'].includes(resumed.status);\n // A resumed seller may pause again with a replacement continuation.\n // Persist that exact new task identity before returning it; otherwise\n // only the in-process closure can resume and a restart falls back to the\n // already-consumed token.\n if (remainsPaused && resumed.deferred !== undefined) {\n const nextA2ATaskId = resumed.metadata.a2aTaskId;\n if (!nextA2ATaskId) {\n throw new Error('A resumable A2A pause did not expose the seller task ID required for durable storage.');\n }\n const nextToken = resumed.deferred.token;\n assertDeferredContinuationToken(nextToken);\n const replacementServerTaskId = requiresSettlement\n ? reconcileDeferredServerTaskId(trustedDeferredServerTaskId(state), [resumed.metadata.serverTaskId])\n : resumed.metadata.serverTaskId;\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const replacementState: DeferredTaskState = {\n continuationVersion: randomUUID(),\n taskId: state.taskId,\n ...(resumed.metadata.contextId !== undefined\n ? { contextId: resumed.metadata.contextId }\n : state.contextId !== undefined\n ? { contextId: state.contextId }\n : {}),\n a2aTaskId: nextA2ATaskId,\n serverVersion: state.serverVersion,\n agentId: state.agentId,\n taskName: state.taskName,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(resumed.conversation ?? state.messages),\n pauseStatus: resumed.status as 'input-required' | 'auth-required' | 'deferred',\n pauseQuestion: resumed.deferred.question,\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n ...(state.settlementOperationId !== undefined && {\n settlementOperationId: state.settlementOperationId,\n }),\n ...(state.settlementOperationRouteRequired === true && {\n settlementOperationRouteRequired: true as const,\n }),\n ...(state.settlementResumeAuthorizationRequired === true && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(replacementServerTaskId !== undefined && {\n settlementServerTaskId: replacementServerTaskId,\n }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n const stored =\n requiresSettlement && state.settlementOperationRouteRequired === true\n ? await this.config.deferredStorage.replaceForSettlementOperationIfVersion(\n committedOperationId,\n token,\n dispatchVersion,\n nextToken,\n replacementState,\n ttlSeconds\n )\n : await this.config.deferredStorage.putIfAbsent(nextToken, replacementState, ttlSeconds);\n if (!stored) {\n if (requiresSettlement) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n replacementServerTaskId ?? trustedDeferredServerTaskId(state),\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n }\n throw new Error('Replacement deferred continuation token already exists; refusing unsafe overwrite.');\n }\n if (requiresSettlement && state.settlementResumeAuthorizationRequired === true) {\n const replaced = await this.config.replaceDeferredSettlementResumeToken?.(\n committedOperationId,\n token,\n nextToken\n );\n if (replaced !== true) {\n // A terminal callback may have won after the SDK atomically moved\n // the operation route to B but before the coordinator completed\n // its A -> B CAS. Replay that exact B winner instead of reporting\n // an ownership failure to the originating resume.\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n nextToken,\n replacementState,\n replacementServerTaskId ?? trustedDeferredServerTaskId(state),\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n throw new DeferredSettlementOwnershipError(\n 'The committed deferred continuation advanced, but its coordinator route still needs recovery.'\n );\n }\n }\n resumed.deferred.resume = nextInput =>\n liveSettlementOwner\n ? this.resumeDeferredTaskFromLiveClosure<T>(nextToken, nextInput, publishTerminalTaskStatus)\n : this.resumeDeferredTaskFromClientClosure<T>(nextToken, nextInput, publishTerminalTaskStatus);\n }\n\n let settledResult = attachMatch(resumed) as TaskResult<T>;\n let settledServerTaskId = trustedDeferredServerTaskId(state);\n let afterFinalize: (() => Promise<void>) | undefined;\n if (requiresSettlement) {\n if (TERMINAL_TASK_STATUSES.has(resumed.status as TaskStatus)) {\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(resumed, trustedDeferredServerTaskId(state));\n if (normalizedTerminal.serverTaskId === undefined) {\n throw new Error('The committed deferred terminal response did not provide a seller task identity.');\n }\n settledResult = attachMatch(normalizedTerminal.result);\n const terminalSettlementServerTaskId = normalizedTerminal.serverTaskId;\n settledServerTaskId = terminalSettlementServerTaskId;\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedTerminal.result as any;\n const checkpointCreatedAt = Date.now();\n const checkpointTtlSeconds = this.deferredSafetyRetentionSeconds();\n const checkpointVersion = randomUUID();\n const checkpointState: DeferredTaskState = {\n ...checkpointBaseState,\n continuationVersion: checkpointVersion,\n continuationClaimed: true,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(normalizedTerminal.result.conversation ?? state.messages),\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n ...(terminalSettlementServerTaskId !== undefined && {\n settlementServerTaskId: terminalSettlementServerTaskId,\n }),\n settlementTerminalResult: durableDeferredSnapshot(serializableResult),\n createdAt: checkpointCreatedAt,\n expiresAt: checkpointCreatedAt + checkpointTtlSeconds * 1000,\n };\n const saved = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n dispatchVersion,\n checkpointState,\n checkpointTtlSeconds\n );\n if (!saved) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n terminalSettlementServerTaskId,\n normalizedTerminal.result,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) {\n // An immediate authoritative callback may finish while the seller\n // holds its response for webhook acknowledgement. Re-enter the\n // durable terminal/finalized route; never redispatch the input.\n return winner;\n }\n throw new Error('Committed deferred terminal observation could not be saved without overwriting state.');\n }\n terminalObservationPersisted = true;\n finalizationLease = await this.acquireDeferredFinalizationLease(token, checkpointState);\n } else if (!remainsPaused) {\n // `setupSubmittedTask()` exposes the runner correlation ID as a\n // compatibility fallback when the seller omitted task_id. That value\n // is useful to callers but is never authoritative durable seller\n // identity. Treat a submitted handle as observed only when metadata\n // proves it came from the seller, or when it differs from the local\n // operation ID used by the fallback.\n const observedSubmittedTaskId =\n resumed.submitted?.taskId !== undefined &&\n (observedResumedServerTaskId !== undefined || resumed.submitted.taskId !== state.taskId)\n ? resumed.submitted.taskId\n : undefined;\n const pendingTaskId = reconcileDeferredServerTaskId(trustedDeferredServerTaskId(state), [\n observedResumedServerTaskId,\n observedSubmittedTaskId,\n ]);\n if (!pendingTaskId) {\n throw new Error(\n 'A committed deferred continuation became nonterminal without the seller work handle required for recovery.'\n );\n }\n if (resumed.submitted) {\n resumed.submitted = this.createSubmittedContinuation<T>(\n agent,\n state.taskId,\n state.taskName,\n pendingTaskId,\n resumed.submitted.webhookUrl,\n undefined,\n resumed.metadata,\n true,\n state.serverVersion\n );\n settledResult = resumed;\n }\n const pendingCreatedAt = Date.now();\n const pendingTtlSeconds = this.deferredSafetyRetentionSeconds();\n const pendingState: DeferredTaskState = {\n ...checkpointBaseState,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n settlementPendingTaskId: pendingTaskId,\n settlementServerTaskId: pendingTaskId,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(resumed.conversation ?? state.messages),\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n createdAt: pendingCreatedAt,\n expiresAt: pendingCreatedAt + pendingTtlSeconds * 1000,\n };\n const saved = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n dispatchVersion,\n pendingState,\n pendingTtlSeconds\n );\n if (!saved) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n pendingTaskId,\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n throw new Error('Committed deferred pending task could not be saved without overwriting state.');\n }\n terminalObservationPersisted = true;\n pendingCheckpointState = pendingState;\n settledServerTaskId = pendingTaskId;\n }\n if (requiresRecoveredSettlement && !pendingCheckpointState) {\n const settlement = await this.config.recoverDeferredSettlement!(\n settledResult,\n committedOperationId,\n settledServerTaskId\n );\n settledResult = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n }\n if (\n publishTerminalTaskStatus &&\n !requiresSettlement &&\n TERMINAL_TASK_STATUSES.has(settledResult.status as TaskStatus) &&\n this.activeTasks.get(state.taskId)?.status !== settledResult.status\n ) {\n this.updateTaskStatus(\n state.taskId,\n settledResult.status as TaskStatus,\n settledResult.data,\n settledResult.error\n );\n }\n if (requiresSettlement && TERMINAL_TASK_STATUSES.has(settledResult.status as TaskStatus)) {\n const activeFinalizationLease = finalizationLease;\n settledResult = this.attachDeferredSettlementAcknowledgement(\n settledResult,\n state.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n activeFinalizationLease ? finalized => activeFinalizationLease.finalize(finalized) : undefined,\n activeFinalizationLease ? () => activeFinalizationLease.release() : undefined\n );\n }\n if (pendingCheckpointState) {\n settledResult = this.wrapDeferredPendingSettlementContinuations(\n token,\n pendingCheckpointState,\n settledResult,\n publishTerminalTaskStatus,\n requiresRecoveredSettlement\n );\n }\n if (!terminalObservationPersisted) {\n const consumedFence = await this.config.deferredStorage.takeIfVersion(token, dispatchVersion);\n if (!consumedFence) {\n if (requiresSettlement) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n settledServerTaskId,\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n }\n throw new Error('Deferred continuation claim was replaced before version-fenced completion.');\n }\n }\n return {\n result: attachMatch(settledResult),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n ...(state.settlementOperationId !== undefined && {\n settlementOperationId: state.settlementOperationId,\n }),\n ...(settledServerTaskId !== undefined && {\n settlementServerTaskId: settledServerTaskId,\n }),\n };\n } catch (error) {\n let propagatedError = error;\n if (finalizationLease) {\n propagatedError = await this.releaseDeferredFinalizationAfterFailure(finalizationLease, error);\n }\n // A thrown continuation failure is terminal for this deferred token.\n // Release both persistence and the in-memory request payload before the\n // error escapes to the caller.\n if (\n publishTerminalTaskStatus &&\n !terminalObservationPersisted &&\n !(propagatedError instanceof DeferredSettlementOwnershipError)\n ) {\n this.updateTaskStatus(\n state.taskId,\n 'failed',\n undefined,\n propagatedError instanceof Error ? propagatedError.message : String(propagatedError)\n );\n }\n // The versioned claim fence stays in storage after uncertain dispatch:\n // the seller may have advanced even when its response did not reach\n // this process, so the human continuation must not become resumable.\n throw propagatedError;\n }\n }\n\n private wrapDeferredPendingSettlementContinuations<T>(\n token: string,\n pendingState: DeferredTaskState,\n result: TaskResult<T>,\n publishTerminalTaskStatus: boolean,\n recoverTerminal: boolean\n ): TaskResult<T> {\n const markPendingSettlement = (marked: TaskResult<T>): TaskResult<T> => {\n Object.defineProperty(marked, DEFERRED_PENDING_SETTLEMENT, {\n value: async (terminal: TaskResult<T>) => {\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(\n terminal,\n trustedDeferredServerTaskId(pendingState)\n );\n const lease = await this.checkpointDeferredPendingTerminal(\n token,\n pendingState,\n normalizedTerminal.result,\n true\n );\n if (!lease) throw new Error('Committed deferred terminal finalization lease was not acquired.');\n let checkpointed = normalizedTerminal.result;\n let afterFinalize: (() => Promise<void>) | undefined;\n try {\n if (recoverTerminal) {\n const settlement = await this.config.recoverDeferredSettlement!(\n normalizedTerminal.result,\n pendingState.settlementOperationId!,\n normalizedTerminal.serverTaskId\n );\n checkpointed = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n checkpointed = this.attachDeferredSettlementAcknowledgement(\n checkpointed,\n pendingState.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(lease, error);\n }\n if (pendingState.clientContext === undefined) await acknowledgeDeferredSettlement(checkpointed);\n return checkpointed;\n },\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return marked;\n };\n if (!result.submitted) return markPendingSettlement(result);\n const submitted = result.submitted;\n const wrapped = attachMatch({\n ...result,\n submitted: {\n ...submitted,\n track: async transport => {\n const task = await submitted.track(transport);\n if (TERMINAL_TASK_STATUSES.has(task.status as TaskStatus)) {\n const status = task.status === 'completed' ? 'completed' : (task.status as TaskStatus);\n const terminal = attachMatch({\n success: status === 'completed',\n status,\n ...(task.result !== undefined && { data: task.result }),\n ...(task.error !== undefined && { error: task.error }),\n metadata: {\n taskId: pendingState.taskId,\n taskName: task.taskType,\n agent: { id: pendingState.agentId, name: pendingState.agentId, protocol: 'a2a' },\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status,\n serverTaskId: task.taskId,\n },\n } as TaskResult<unknown>);\n await this.checkpointDeferredPendingTerminal(token, pendingState, terminal, false);\n if (!recoverTerminal) return task;\n throw new Error(\n 'The terminal seller observation was saved; resume the durable token to finalize committed settlement.'\n );\n }\n return task;\n },\n waitForCompletion: async (pollInterval, signal) => {\n const completion = await submitted.waitForCompletion(pollInterval, signal);\n if (\n !TERMINAL_TASK_STATUSES.has(completion.status as TaskStatus) ||\n !(AUTHORITATIVE_POLLED_TERMINAL in completion)\n ) {\n return completion;\n }\n const normalizedCompletion = normalizeDeferredTerminalServerTaskId(\n completion,\n trustedDeferredServerTaskId(pendingState)\n );\n const lease = await this.checkpointDeferredPendingTerminal(\n token,\n pendingState,\n normalizedCompletion.result,\n true\n );\n if (!lease) throw new Error('Committed deferred terminal finalization lease was not acquired.');\n let checkpointed: TaskResult<T> = normalizedCompletion.result;\n let afterFinalize: (() => Promise<void>) | undefined;\n try {\n if (recoverTerminal) {\n const settlement = await this.config.recoverDeferredSettlement!(\n normalizedCompletion.result,\n pendingState.settlementOperationId!,\n normalizedCompletion.serverTaskId\n );\n checkpointed = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n checkpointed = this.attachDeferredSettlementAcknowledgement(\n checkpointed,\n pendingState.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(lease, error);\n }\n if (pendingState.clientContext === undefined) {\n await acknowledgeDeferredSettlement(checkpointed);\n }\n return checkpointed;\n },\n },\n } as TaskResult<T>);\n return markPendingSettlement(wrapped);\n }\n\n private async resumeExactDeferredSettlementWinner<T>(\n token: string,\n expectedState: DeferredTaskState,\n expectedServerTaskId: string | undefined,\n expectedTerminal: TaskResult<T> | undefined,\n inputSnapshot: unknown,\n publishTerminalTaskStatus: boolean,\n liveSettlementOwner: boolean\n ): Promise<\n | {\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }\n | undefined\n > {\n const winner = await this.config.deferredStorage?.get(token);\n if (\n !winner ||\n winner.settlementOperationId === undefined ||\n winner.settlementOperationId !== expectedState.settlementOperationId ||\n expectedServerTaskId === undefined ||\n winner.settlementServerTaskId !== expectedServerTaskId ||\n (winner.settlementTerminalResult === undefined && winner.settlementFinalizedResult === undefined)\n ) {\n return undefined;\n }\n\n if (winner.settlementTerminalResult !== undefined) {\n const normalizedWinner = normalizeDeferredTerminalServerTaskId(\n winner.settlementTerminalResult as TaskResult<unknown>,\n winner.settlementServerTaskId\n ).result;\n if (expectedTerminal !== undefined) {\n const normalizedExpected = normalizeDeferredTerminalServerTaskId(expectedTerminal, expectedServerTaskId).result;\n if (!sameDeferredTerminal(normalizedWinner, normalizedExpected)) return undefined;\n }\n } else if (expectedTerminal !== undefined) {\n // A direct terminal response needs the raw seller observation to prove\n // equality; a finalized-only legacy record is not enough.\n return undefined;\n } else {\n normalizeDeferredTerminalServerTaskId(\n winner.settlementFinalizedResult as TaskResult<unknown>,\n winner.settlementServerTaskId\n );\n }\n\n return this.resumeDeferredTaskCore<T>(token, inputSnapshot, publishTerminalTaskStatus, liveSettlementOwner);\n }\n\n private async checkpointDeferredPendingTerminal<T>(\n token: string,\n pendingState: DeferredTaskState,\n terminalResult: TaskResult<T>,\n acquireLease: boolean\n ): Promise<DeferredFinalizationLease | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) throw new Error('Deferred storage not configured');\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(\n terminalResult,\n trustedDeferredServerTaskId(pendingState)\n );\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedTerminal.result as any;\n void _match;\n void _submitted;\n void _deferred;\n const {\n settlementPendingTaskId: _pending,\n settlementResumeDispatchLease: _dispatchLease,\n ...checkpointBase\n } = pendingState;\n void _pending;\n void _dispatchLease;\n const checkpointCreatedAt = Date.now();\n const ttlSeconds = this.deferredSafetyRetentionSeconds();\n const checkpointState: DeferredTaskState = {\n ...checkpointBase,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n ...(normalizedTerminal.serverTaskId !== undefined && {\n settlementServerTaskId: normalizedTerminal.serverTaskId,\n }),\n settlementTerminalResult: durableDeferredSnapshot(serializableResult),\n createdAt: checkpointCreatedAt,\n expiresAt: checkpointCreatedAt + ttlSeconds * 1000,\n };\n const saved =\n pendingState.settlementOperationId && pendingState.settlementOperationRouteRequired === true\n ? await storage.replaceForSettlementOperationIfVersion(\n pendingState.settlementOperationId,\n token,\n pendingState.continuationVersion,\n token,\n checkpointState,\n ttlSeconds\n )\n : await this.replaceDeferredState(\n storage,\n token,\n pendingState.continuationVersion,\n checkpointState,\n ttlSeconds\n );\n if (!saved) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred terminal observation could not replace its pending checkpoint.'\n );\n }\n return acquireLease ? this.acquireDeferredFinalizationLease(token, checkpointState) : undefined;\n }\n\n private startDeferredDispatchAdmissionLease(\n token: string,\n initialVersion: string,\n initialState: DeferredTaskState,\n ownerId: string\n ): DeferredDispatchAdmissionLease {\n const storage = this.config.deferredStorage!;\n const safetyTtlSeconds = this.deferredSafetyRetentionSeconds();\n let currentVersion = initialVersion;\n let currentState = initialState;\n let stopped = false;\n let lostError: Error | undefined;\n let renewal = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const scheduleRenewal = (): void => {\n if (stopped || lostError) return;\n timer = setTimeout(() => {\n renewal = renewal.then(async () => {\n if (stopped || lostError) return;\n try {\n const renewedAt = Date.now();\n const nextVersion = randomUUID();\n const nextState: DeferredTaskState = {\n ...currentState,\n continuationVersion: nextVersion,\n settlementResumeDispatchLease: {\n ownerId,\n phase: 'admission',\n expiresAt: renewedAt + DEFERRED_DISPATCH_ADMISSION_LEASE_MS,\n },\n expiresAt: renewedAt + safetyTtlSeconds * 1000,\n };\n const renewed = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n nextState,\n safetyTtlSeconds\n );\n if (!renewed) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission ownership changed before seller dispatch.'\n );\n return;\n }\n currentVersion = nextVersion;\n currentState = nextState;\n scheduleRenewal();\n } catch (error) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission lease could not be renewed safely before seller dispatch.',\n { cause: error }\n );\n }\n });\n }, DEFERRED_DISPATCH_ADMISSION_RENEW_MS);\n timer.unref?.();\n };\n scheduleRenewal();\n\n let stoppedState: { version: string; state: DeferredTaskState } | undefined;\n return {\n stop: async () => {\n if (stoppedState) return stoppedState;\n if (!stopped) {\n stopped = true;\n if (timer) clearTimeout(timer);\n }\n await renewal;\n if (lostError) throw lostError;\n stoppedState = { version: currentVersion, state: currentState };\n return stoppedState;\n },\n };\n }\n\n private async requireDeferredDispatchAuthorization(\n operationId: string,\n token: string,\n message: string\n ): Promise<void> {\n try {\n if ((await this.config.authorizeDeferredSettlementResume?.(operationId, token)) !== true) {\n throw new DeferredSettlementOwnershipError(message);\n }\n } catch (error) {\n if (error instanceof DeferredSettlementOwnershipError) throw error;\n throw new DeferredSettlementOwnershipError(message, { cause: error });\n }\n }\n\n private async acquireDeferredFinalizationLease(\n token: string,\n checkpoint: DeferredTaskState\n ): Promise<DeferredFinalizationLease> {\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization could not be claimed because deferred storage is unavailable.'\n );\n }\n const now = Date.now();\n if (checkpoint.settlementFinalizationLease && checkpoint.settlementFinalizationLease.expiresAt > now) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization is already in progress.');\n }\n\n const ownerId = randomUUID();\n const safetyTtlSeconds = this.deferredSafetyRetentionSeconds();\n let currentVersion = randomUUID();\n let currentState: DeferredTaskState = {\n ...checkpoint,\n continuationVersion: currentVersion,\n settlementFinalizationLease: {\n ownerId,\n expiresAt: now + DEFERRED_FINALIZATION_LEASE_MS,\n },\n expiresAt: now + safetyTtlSeconds * 1000,\n };\n let acquired: boolean;\n try {\n acquired = await this.replaceDeferredState(\n storage,\n token,\n checkpoint.continuationVersion,\n currentState,\n safetyTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization could not be claimed safely.', {\n cause: error,\n });\n }\n if (!acquired) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization was claimed by another replica.');\n }\n\n let stopped = false;\n let lostError: Error | undefined;\n let renewal = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n const scheduleRenewal = (): void => {\n if (stopped || lostError) return;\n timer = setTimeout(() => {\n renewal = renewal.then(async () => {\n if (stopped || lostError) return;\n try {\n const renewedAt = Date.now();\n const nextVersion = randomUUID();\n const nextState: DeferredTaskState = {\n ...currentState,\n continuationVersion: nextVersion,\n settlementFinalizationLease: {\n ownerId,\n expiresAt: renewedAt + DEFERRED_FINALIZATION_LEASE_MS,\n },\n expiresAt: renewedAt + safetyTtlSeconds * 1000,\n };\n const renewed = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n nextState,\n safetyTtlSeconds\n );\n if (!renewed) {\n lostError = new DeferredSettlementOwnershipError('Deferred settlement finalization lease was lost.');\n return;\n }\n currentVersion = nextVersion;\n currentState = nextState;\n scheduleRenewal();\n } catch (error) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease could not be renewed.',\n { cause: error }\n );\n }\n });\n }, DEFERRED_FINALIZATION_RENEW_MS);\n timer.unref?.();\n };\n scheduleRenewal();\n\n const stop = async (): Promise<void> => {\n if (!stopped) {\n stopped = true;\n if (timer) clearTimeout(timer);\n }\n await renewal;\n if (lostError) throw lostError;\n };\n\n let completed = false;\n return {\n finalize: async <T>(result: TaskResult<T>): Promise<void> => {\n if (completed) return;\n await stop();\n await this.markDeferredSettlementFinalized(token, currentVersion, result);\n completed = true;\n },\n release: async (completionHandlerPublished = false): Promise<void> => {\n if (completed) return;\n await stop();\n const { settlementFinalizationLease: _lease, ...retryableCheckpoint } = currentState;\n void _lease;\n const releasedAt = Date.now();\n let released: boolean;\n try {\n released = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n {\n ...retryableCheckpoint,\n continuationVersion: randomUUID(),\n ...((retryableCheckpoint.settlementCompletionHandlerPublished === true || completionHandlerPublished) && {\n settlementCompletionHandlerPublished: true,\n }),\n createdAt: releasedAt,\n expiresAt: releasedAt + safetyTtlSeconds * 1000,\n },\n safetyTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease could not be released safely.',\n { cause: error }\n );\n }\n if (!released) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease ownership changed before it could be released.'\n );\n }\n completed = true;\n },\n };\n }\n\n private async releaseDeferredFinalizationAfterFailure(\n lease: DeferredFinalizationLease,\n originalFailure: unknown\n ): Promise<unknown> {\n try {\n await lease.release();\n return originalFailure;\n } catch (releaseFailure) {\n return new DeferredSettlementOwnershipError(\n 'Deferred settlement failed and its finalization lease could not be released safely.',\n {\n cause: new AggregateError(\n [originalFailure, releaseFailure],\n 'Deferred settlement failure and finalization lease release both failed.'\n ),\n }\n );\n }\n }\n\n private attachDeferredSettlementAcknowledgement<T>(\n result: TaskResult<T>,\n taskId: string,\n publishTerminalTaskStatus: boolean,\n afterFinalize?: () => Promise<void>,\n persistFinalized?: (finalizedResult: TaskResult<T>) => Promise<void>,\n rejectFinalization?: (completionHandlerPublished: boolean) => Promise<void>\n ): TaskResult<T> {\n let acknowledged = false;\n let rejected = false;\n const acknowledge = async (finalizedResult: TaskResult<T> = result): Promise<void> => {\n if (acknowledged) return;\n if (rejected) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization was released; reacquire the durable checkpoint before acknowledging.'\n );\n }\n try {\n await afterFinalize?.();\n await persistFinalized?.(finalizedResult);\n if (\n publishTerminalTaskStatus &&\n TERMINAL_TASK_STATUSES.has(finalizedResult.status as TaskStatus) &&\n this.activeTasks.get(taskId)?.status !== finalizedResult.status\n ) {\n this.updateTaskStatus(\n taskId,\n finalizedResult.status as TaskStatus,\n finalizedResult.data,\n finalizedResult.error\n );\n }\n acknowledged = true;\n } catch (error) {\n if (!rejected) {\n try {\n await rejectFinalization?.(\n hasCompletionHandlerAlreadyPublished(finalizedResult) || hasCompletionHandlerAlreadyPublished(result)\n );\n rejected = true;\n } catch (releaseFailure) {\n rejected = true;\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement acknowledgement failed and its finalization lease could not be released safely.',\n {\n cause: new AggregateError(\n [error, releaseFailure],\n 'Deferred settlement acknowledgement and finalization lease release both failed.'\n ),\n }\n );\n }\n }\n throw error;\n }\n };\n const reject = async (): Promise<void> => {\n if (acknowledged || rejected) return;\n await rejectFinalization?.(hasCompletionHandlerAlreadyPublished(result));\n rejected = true;\n };\n Object.defineProperty(result, DEFERRED_SETTLEMENT_ACK, {\n value: acknowledge,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n Object.defineProperty(result, DEFERRED_SETTLEMENT_NACK, {\n value: reject,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n return result;\n }\n\n private async markDeferredSettlementFinalized<T>(\n token: string,\n expectedVersion: string,\n finalizedResult: TaskResult<T>\n ): Promise<void> {\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because deferred storage is unavailable.'\n );\n }\n let current: DeferredTaskState | undefined;\n try {\n current = await storage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Committed deferred completion ownership could not be verified.', {\n cause: error,\n });\n }\n if (!current || current.continuationVersion !== expectedVersion) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because ownership changed.'\n );\n }\n const normalizedFinalized = normalizeDeferredTerminalServerTaskId(\n finalizedResult,\n trustedDeferredServerTaskId(current)\n );\n if (normalizedFinalized.serverTaskId === undefined) {\n throw new Error('The finalized deferred settlement does not contain its trusted seller task identity.');\n }\n if (normalizedFinalized.result !== finalizedResult) {\n finalizedResult.metadata = normalizedFinalized.result.metadata;\n }\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedFinalized.result as any;\n void _match;\n void _submitted;\n void _deferred;\n const acknowledgedAt = Date.now();\n const ttlSeconds = this.deferredSafetyRetentionSeconds();\n const { settlementFinalizationLease: _lease, ...finalizedCheckpoint } = current;\n void _lease;\n let saved: boolean;\n try {\n saved = await this.replaceDeferredState(\n storage,\n token,\n expectedVersion,\n {\n ...finalizedCheckpoint,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n params: durableDeferredSnapshot(current.params),\n messages: durableDeferredSnapshot(current.messages),\n ...(current.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(current.clientContext),\n }),\n settlementFinalizedResult: durableDeferredSnapshot(serializableResult),\n ...((current.settlementCompletionHandlerPublished === true ||\n hasCompletionHandlerAlreadyPublished(finalizedResult)) && {\n settlementCompletionHandlerPublished: true,\n }),\n createdAt: acknowledgedAt,\n expiresAt: acknowledgedAt + ttlSeconds * 1000,\n },\n ttlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Committed deferred completion could not be durably acknowledged.', {\n cause: error,\n });\n }\n if (!saved) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because ownership changed.'\n );\n }\n }\n\n private deferredSafetyRetentionSeconds(): number {\n const configuredWorkingMs = this.config.workingTimeout ?? 120_000;\n const workingMs =\n Number.isFinite(configuredWorkingMs) && configuredWorkingMs > 0\n ? Math.min(configuredWorkingMs, MAX_TIMER_DELAY_MS)\n : 120_000;\n const configuredRequestMs = this.config.transport?.requestTimeoutMs;\n const requestMs =\n configuredRequestMs === 0\n ? MAX_TIMER_DELAY_MS\n : configuredRequestMs !== undefined && Number.isFinite(configuredRequestMs) && configuredRequestMs > 0\n ? Math.min(configuredRequestMs, MAX_TIMER_DELAY_MS)\n : 0;\n const configuredOperationHorizonSeconds =\n Math.ceil((workingMs + requestMs) / 1000) + DEFERRED_SAFETY_MARGIN_SECONDS;\n return Math.max(\n DEFAULT_DEFERRED_SAFETY_RETENTION_SECONDS,\n this.config.deferredTaskTtlSeconds ?? 0,\n configuredOperationHorizonSeconds\n );\n }\n\n /** Restore a consumed token only when no seller continuation was dispatched. */\n private async restoreUnadvancedDeferredState(\n token: string,\n claimedVersion: string,\n state: DeferredTaskState\n ): Promise<void> {\n const remainingTtlSeconds = Math.ceil((state.expiresAt - Date.now()) / 1000);\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be restored safely.');\n }\n if (remainingTtlSeconds < 1) {\n let removed: DeferredTaskState | undefined;\n try {\n removed = await storage.takeIfVersion(token, claimedVersion);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Expired deferred dispatch admission could not be removed safely.', {\n cause: error,\n });\n }\n if (!removed) {\n throw new DeferredSettlementOwnershipError(\n 'Expired deferred dispatch admission ownership changed before cleanup.'\n );\n }\n return;\n }\n let restored: boolean;\n try {\n restored = await this.replaceDeferredState(storage, token, claimedVersion, state, remainingTtlSeconds);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be restored safely.', {\n cause: error,\n });\n }\n if (!restored) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation token was reused during trusted-agent resolution; original state was not restored.'\n );\n }\n }\n\n /**\n * Continue a task after receiving input\n */\n private async continueTaskWithInput<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n contextId: string | undefined,\n a2aTaskId: string | undefined,\n input: any,\n messages: Message[],\n inputHandler: InputHandler | undefined,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n // This is also the direct same-process continuation when durable storage\n // is absent. Snapshot before the first await so nested caller-owned input\n // cannot change after the user selects it.\n const inputSnapshot = structuredClone(input);\n if (agent.protocol !== 'a2a') {\n throw new Error('MCP does not define a standard continuation for a returned input-required task.');\n }\n if (!a2aTaskId) {\n throw new Error(\n 'A2A continuation requires a seller task ID; refusing to issue a fresh same-tool call from identity-less state.'\n );\n }\n // Add user input message\n const inputMessage: Message = {\n id: randomUUID(),\n role: 'user',\n content: inputSnapshot,\n timestamp: new Date().toISOString(),\n metadata: { type: 'input_response' },\n };\n messages.push(inputMessage);\n\n // Continue the task with input\n const response = await ProtocolClient.callTool(\n agent,\n taskName,\n { input: inputSnapshot },\n {\n debugLogs,\n serverVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: options.transport ?? this.config.transport,\n session: { contextId, taskId: a2aTaskId },\n signal: options.signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n operationId: taskId,\n taskId,\n contextId,\n },\n }\n );\n\n // Add response message\n const responseMessage: Message = {\n id: randomUUID(),\n role: 'agent',\n content: response,\n timestamp: new Date().toISOString(),\n metadata: { type: 'continued_response' },\n };\n messages.push(responseMessage);\n\n // Handle the continued response (pass inputHandler for multi-round clarification)\n return this.handleAsyncResponse<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n }\n\n /**\n * Utility methods\n */\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private createErrorResult<T>(\n taskId: string,\n agent: AgentConfig,\n error: any,\n debugLogs: any[] = [],\n startTime: number = Date.now()\n ): TaskResult<T> {\n // Try to extract structured error info from transport exceptions\n // (e.g., JSON-RPC errors with data.adcp_error)\n const transportData = error?.data || error?.response?.data;\n const adcpErrorInfo = extractAdcpErrorInfo(transportData);\n const correlationId = extractCorrelationId(transportData);\n\n return {\n success: false as const,\n status: 'failed' as const,\n error: error.message || String(error),\n adcpError: adcpErrorInfo,\n errorInstance: this.buildErrorInstance(taskId, adcpErrorInfo),\n correlationId,\n metadata: this.buildMetadata({\n taskId,\n taskName: 'unknown',\n agent,\n startTime,\n status: 'failed',\n }),\n debug_logs: debugLogs,\n };\n }\n\n /**\n * Legacy methods for backward compatibility\n */\n getConversationHistory(taskId: string): Message[] | undefined {\n return this.conversationStorage?.get(taskId);\n }\n\n clearConversationHistory(taskId: string): void {\n this.conversationStorage?.delete(taskId);\n }\n\n getActiveTasks(): TaskState[] {\n return Array.from(this.activeTasks.values());\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATION METHODS ======\n\n private taskEventListeners = new Map<\n string,\n {\n callback: (task: TaskInfo) => void;\n agentId?: string;\n }[]\n >();\n\n private webhookRegistrations = new Map<\n string,\n {\n agent: AgentConfig;\n webhookUrl: string;\n taskTypes?: string[];\n }\n >();\n\n /**\n * Get task list for a specific agent\n */\n async getTaskList(agentId: string, transport?: import('../protocols').TransportOptions): Promise<TaskInfo[]> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n // First try to get from agent via protocol\n const agent = this.findAgentById(agentId);\n if (agent) {\n try {\n return await this.listTasksForAgent(agent, transportSnapshot);\n } catch {\n // Static message — see comment on listTasks above.\n console.warn('Failed to get remote task list (see DEBUG=adcp:* logs for detail)');\n }\n }\n\n // Fall back to local active tasks\n return Array.from(this.activeTasks.values())\n .filter(task => task.agent.id === agentId)\n .map(task => ({\n taskId: task.taskId,\n status: task.status,\n taskType: task.taskName,\n createdAt: task.startTime,\n updatedAt: task.startTime, // TODO: track updates\n }));\n }\n\n /**\n * Get detailed information about a specific task\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n const localTask = this.activeTasks.get(taskId);\n if (localTask) {\n if (this.compactedTaskIds.has(taskId)) {\n this.compactedTaskIds.delete(taskId);\n this.compactedTaskIds.set(taskId, true);\n }\n return {\n taskId: localTask.taskId,\n status: localTask.status,\n taskType: localTask.taskName,\n createdAt: localTask.startTime,\n updatedAt: localTask.startTime,\n };\n }\n\n // Try to get from agent\n // Note: Would need to know which agent to query\n return null;\n }\n\n /**\n * Subscribe to task updates for a specific agent\n */\n onTaskUpdate(agentId: string, callback: (task: TaskInfo) => void): () => void {\n const listenerId = randomUUID();\n const listeners = this.taskEventListeners.get(listenerId) || [];\n listeners.push({ callback, agentId });\n this.taskEventListeners.set(listenerId, listeners);\n\n return () => {\n this.taskEventListeners.delete(listenerId);\n };\n }\n\n /**\n * Subscribe to task events with detailed callbacks\n */\n onTaskEvents(\n agentId: string,\n callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }\n ): () => void {\n const unsubscribeFns: (() => void)[] = [];\n\n // Create combined handler that routes to specific callbacks\n const handler = (task: TaskInfo) => {\n switch (task.status) {\n case 'submitted':\n case 'working':\n callbacks.onTaskCreated?.(task);\n break;\n case 'input-required':\n callbacks.onTaskUpdated?.(task);\n break;\n case 'completed':\n callbacks.onTaskCompleted?.(task);\n break;\n case 'failed':\n case 'rejected':\n case 'canceled':\n callbacks.onTaskFailed?.(task, task.error || `Task ${task.status}`);\n break;\n default:\n callbacks.onTaskUpdated?.(task);\n }\n };\n\n unsubscribeFns.push(this.onTaskUpdate(agentId, handler));\n\n return () => {\n unsubscribeFns.forEach(fn => fn());\n };\n }\n\n /**\n * Register webhook for task notifications\n */\n async registerWebhook(agent: AgentConfig, webhookUrl: string, taskTypes?: string[]): Promise<void> {\n this.webhookRegistrations.set(agent.id, {\n agent,\n webhookUrl,\n taskTypes,\n });\n\n // TODO: Register with remote agent if it supports webhooks\n console.log(`Webhook registered for agent ${agent.id}: ${webhookUrl}`);\n }\n\n /**\n * Unregister webhook notifications\n */\n async unregisterWebhook(agent: AgentConfig): Promise<void> {\n this.webhookRegistrations.delete(agent.id);\n console.log(`Webhook unregistered for agent ${agent.id}`);\n }\n\n /**\n * Emit task event to listeners\n */\n private emitTaskEvent(task: TaskInfo, agentId?: string): void {\n this.taskEventListeners.forEach(listeners => {\n listeners.forEach(({ callback, agentId: listenerAgentId }) => {\n if (!listenerAgentId || listenerAgentId === agentId) {\n try {\n callback(task);\n } catch (error) {\n console.error('Error in task event callback:', error instanceof Error ? error.message : 'unknown error');\n }\n }\n });\n });\n }\n\n /**\n * Normalize response data for schema validation\n *\n * Converts v2-style responses to v3 format before validation.\n * This ensures validation passes for both v2 and v3 server responses.\n */\n private normalizeResponseForValidation(response: any, taskName: string, legacyWire = false): any {\n if (!response) return response;\n\n // Strip underscore-prefixed client-side annotations (`_message` is added\n // by the response unwrapper, others may follow). Schemas with\n // `additionalProperties: false` (create-property-list-response, etc.)\n // would otherwise reject every response that reaches the grader's\n // schema check — the annotation is not part of the wire protocol.\n const stripped: Record<string, unknown> = {};\n if (typeof response === 'object' && !Array.isArray(response)) {\n for (const [k, v] of Object.entries(response)) {\n if (!k.startsWith('_')) stripped[k] = v;\n }\n } else {\n return taskName === 'get_products' && !legacyWire ? normalizeGetProductsResponse(response) : response;\n }\n\n // Validate v2.5 against the exact response that crossed the wire. Public\n // canonicalization happens later in SingleAgentClient; applying it here\n // would compare canonical `fixed_price`/`format_options` fields to the\n // legacy schema that correctly requires `rate`/`is_fixed`/`format_ids`.\n if (legacyWire) return stripped;\n\n switch (taskName) {\n case 'get_products':\n return normalizeGetProductsResponse(stripped);\n default:\n return stripped;\n }\n }\n\n /**\n * Validate an incoming response against the bundled AdCP JSON schema for\n * `taskName`. Strict mode fails the task; warn mode logs and returns\n * valid so the caller can continue. Off mode short-circuits before\n * AJV runs.\n */\n private validateResponseSchema(\n response: any,\n taskName: string,\n debugLogs: any[],\n serverVersion?: 'v2' | 'v3'\n ): { valid: boolean; errors: string[] } {\n const mode = this.responseValidationMode;\n const logViolations = this.config.logSchemaViolations !== false;\n\n try {\n // Validate against the version the agent actually spoke. Without\n // this, v2.5 sellers (e.g. Wonderstruck) return valid v2.5-shaped\n // responses and the SDK rejects them as malformed v3 — surfaces as\n // `pricing_options must NOT have fewer than 1 items` and similar\n // shape mismatches that don't exist in v2.5. The v3 → v2 path is\n // Normal dispatch uses lastKnownServerVersion; restart recovery passes\n // the persisted continuation version explicitly so concurrent or fresh\n // executors cannot validate the seller's response against another wire.\n const validationVersion =\n (serverVersion ?? this.lastKnownServerVersion) === 'v2'\n ? 'v2.5'\n : (this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? ADCP_VERSION);\n const normalizedResponse = this.normalizeResponseForValidation(response, taskName, validationVersion === 'v2.5');\n // TaskExecutor owns the user-facing log entry below. Passing debugLogs\n // into the lower-level hook would emit a second, unversioned duplicate.\n const outcome = validateIncomingResponse(taskName, normalizedResponse, mode, undefined, validationVersion);\n if (outcome.valid) return { valid: true, errors: [] };\n\n const errorStrings = outcome.issues.map(i => `${i.pointer}: ${i.message}`);\n\n if (logViolations) {\n debugLogs.push({\n timestamp: new Date().toISOString(),\n type: mode === 'strict' ? 'error' : 'warning',\n message: `Schema validation ${mode === 'strict' ? 'failed' : 'warning'} for ${taskName}: ${formatIssues(\n outcome.issues\n )}`,\n errors: errorStrings,\n issues: outcome.issues,\n schemaVariant: outcome.variant,\n schemaVersion: validationVersion,\n mode,\n });\n }\n\n if (mode === 'warn') {\n if (logViolations) {\n console.warn(\n `Schema validation failed for ${taskName} against AdCP ${validationVersion} (non-blocking):`,\n errorStrings\n );\n }\n return { valid: true, errors: [] };\n }\n\n if (logViolations) {\n console.error(`Schema validation failed for ${taskName} against AdCP ${validationVersion}:`, errorStrings);\n }\n return { valid: false, errors: errorStrings };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'unknown error';\n console.error('Error during schema validation:', errorMessage);\n return {\n valid: mode !== 'strict',\n errors: mode === 'strict' ? [`Validation error: ${errorMessage}`] : [],\n };\n }\n }\n\n private responseAdcpVersionForValidation(): string | undefined {\n if (this.config.versionEnvelope === 'major-only') return '3.0';\n return undefined;\n }\n\n private effectiveResponseAdcpVersion(serverVersion?: 'v2' | 'v3'): string {\n if ((serverVersion ?? this.lastKnownServerVersion) === 'v2') return 'v2.5';\n return this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? ADCP_VERSION;\n }\n\n /**\n * Update task status and emit events\n */\n private updateTaskStatus(taskId: string, status: TaskStatus, result?: any, error?: string): void {\n const task = this.activeTasks.get(taskId);\n if (task) {\n // Once cancellation has released request state, late work must not\n // resurrect the task or emit completion after the caller has retried.\n if (task.status === 'aborted' && status !== 'aborted') return;\n const previousStatus = task.status;\n task.status = status;\n\n const taskInfo: TaskInfo = {\n taskId: task.taskId,\n status: status,\n taskType: task.taskName,\n createdAt: task.startTime,\n updatedAt: Date.now(),\n result,\n error,\n };\n\n this.emitTaskEvent(taskInfo, task.agent.id);\n\n this.config.onActivity?.({\n type: 'status_change',\n operation_id: task.taskId,\n agent_id: task.agent.id,\n context_id: undefined,\n task_id: task.taskId,\n task_type: task.taskName,\n status: status,\n payload: result ?? (error ? { error } : undefined),\n timestamp: new Date().toISOString(),\n });\n\n if (status === 'input-required' || status === 'auth-required') {\n this.compactIntermediateTaskState(taskId, status);\n }\n\n // If task is finished, remove from active tasks after a delay.\n // unref() ensures this timer doesn't prevent the process from exiting.\n if (TERMINAL_TASK_STATUSES.has(status)) {\n // Keep lifecycle metadata briefly for status inspection, but release\n // request/conversation/options immediately. These may contain inline\n // creative assets and webhook or transport credentials.\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n setTimeout(() => {\n this.cleanupTerminalTaskInspectionState(taskId);\n }, 30000).unref(); // Keep for 30 seconds for final status checks\n }\n }\n }\n\n /**\n * Helper to find agent config by ID\n */\n private findAgentById(agentId: string): AgentConfig | undefined {\n // This would ideally be passed in or stored in the executor\n // For now, return undefined and fall back to local tasks\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_errors","timer","finalizationLease"]}
1
+ {"version":3,"sources":["../../../src/lib/core/TaskExecutor.ts"],"sourcesContent":["// Core task execution engine for ADCP conversation flow\n// Implements PR #78 async patterns: working/submitted/input-required/completed\n\nimport { createHmac, randomBytes, randomUUID } from 'crypto';\nimport type { AgentConfig } from '../types';\nimport {\n ProtocolClient,\n normalizeTransportOptions,\n prepareProtocolToolCall,\n type PreparedProtocolToolCall,\n} from '../protocols';\nimport { listMCPTasks } from '../protocols/mcp-tasks';\nimport { withPreparedProtocolToolCall } from '../protocols/prepared-call-context';\nimport { getAuthToken } from '../auth';\nimport { is401Error, adcpErrorToTypedError, ConfigurationError } from '../errors';\nimport type { ADCPError } from '../errors';\nimport type { DeferredTaskState, DeferredTaskStorage } from '../storage/interfaces';\nimport {\n validateOutgoingRequest,\n validateIncomingResponse,\n resolveValidationModes,\n type ValidationHookConfig,\n type ValidationMode,\n} from '../validation/client-hooks';\nimport { formatIssues } from '../validation/schema-validator';\nimport { ADCP_VERSION } from '../version';\nimport { unwrapProtocolResponse, isAdcpOperationSuccess } from '../utils/response-unwrapper';\nimport { extractAdcpErrorInfo, extractCorrelationId } from '../utils/error-extraction';\nimport { generateIdempotencyKey, requestUsesIdempotency, redactIdempotencyKeyInArgs } from '../utils/idempotency';\nimport { normalizeGetProductsResponse } from '../utils/pricing-adapter';\nimport { normalizeLegacyMediaBuyStatusForReturn } from '../utils/envelope-status-compat';\nimport { canonicalize } from '../utils/jcs';\nimport { SECRET_KEY_PATTERN, secretKeyPatternMatches } from '../utils/redact-secrets';\nimport { MAX_JSON_DEPTH } from '../utils/json-depth';\nimport { getLatestA2ADataPartFromResponse } from '../utils/a2a-artifacts';\nimport type { AdcpCapabilities } from '../utils/capabilities';\nimport { cancelA2ATask } from '../protocols/a2a';\nimport { isAbortOrTimeoutError, throwIfAborted } from '../protocols/abort';\nimport type {\n Message,\n InputRequest,\n InputHandler,\n ConversationContext,\n TaskOptions,\n TaskResult,\n TaskResultMetadata,\n TaskState,\n TaskStatus,\n TaskInfo,\n DeferredContinuation,\n SubmittedContinuation,\n WebhookUrlTemplate,\n} from './ConversationTypes';\nimport { normalizeHandlerResponse, isDeferResponse, isAbortResponse } from '../handlers/types';\nimport { ProtocolResponseParser, ADCP_STATUS, type ADCPStatus } from './ProtocolResponseParser';\nimport type { Activity } from './AsyncHandler';\nimport { GovernanceMiddleware } from './GovernanceMiddleware';\nimport type { GovernanceConfig, GovernanceCheckResult } from './GovernanceTypes';\nimport { targetDeclaresGovernanceEnforcement } from '../governance';\nimport { attachMatch } from './match';\nimport { resolveWebhookUrl } from './webhook-url';\nimport {\n attachTaskDeadlineGovernanceRecovery,\n attachTaskDeadlineIdempotencyKey,\n getTaskOperationId,\n withTaskDeadline,\n} from './task-deadline';\n\n// Keep the direct `core/TaskExecutor` export identical to the package-level\n// typed timeout error thrown by the deadline wrapper.\nexport { TaskTimeoutError } from '../errors';\n\n/**\n * Custom errors for task execution\n */\nexport class MaxClarificationError extends Error {\n constructor(taskId: string, maxAttempts: number) {\n super(`Task ${taskId} exceeded maximum clarification attempts: ${maxAttempts}`);\n this.name = 'MaxClarificationError';\n }\n}\n\nexport class DeferredTaskError extends Error {\n readonly token!: string;\n\n constructor(token: string) {\n super('Task deferred with an opaque continuation token.');\n this.name = 'DeferredTaskError';\n Object.defineProperty(this, 'token', {\n value: token,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n }\n}\n\nexport class InputRequiredError extends Error {\n constructor(question: string) {\n super(`Server requires input but no handler provided. Question: ${question}`);\n this.name = 'InputRequiredError';\n }\n}\n\n/** Internal settlement acknowledgement carried through higher-level result projection. */\nexport const DEFERRED_SETTLEMENT_ACK = Symbol('adcp.deferredSettlementAck');\nconst DEFERRED_SETTLEMENT_NACK = Symbol('adcp.deferredSettlementNack');\nconst AUTHORITATIVE_POLLED_TERMINAL = Symbol('adcp.authoritativePolledTerminal');\nconst DEFERRED_PENDING_SETTLEMENT = Symbol('adcp.deferredPendingSettlement');\nconst COMPLETION_HANDLER_ALREADY_PUBLISHED = Symbol('adcp.completionHandlerAlreadyPublished');\n// Observation fingerprints live only in process-local settlement maps. A\n// process-private HMAC keeps equality stable for those maps without retaining\n// a reusable digest of credential-bearing seller result data.\nconst EXTERNAL_TASK_OBSERVATION_HMAC_KEY = randomBytes(32);\n\nexport class DeferredSettlementOwnershipError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = 'DeferredSettlementOwnershipError';\n }\n}\n\n/** Carry only the SDK's private settlement controls across an internal result projection. */\nexport function transferDeferredSettlementAcknowledgement<T extends object>(source: object, target: T): T {\n for (const symbol of [DEFERRED_SETTLEMENT_ACK, DEFERRED_SETTLEMENT_NACK]) {\n const descriptor = Object.getOwnPropertyDescriptor(source, symbol);\n if (descriptor) Object.defineProperty(target, symbol, descriptor);\n }\n return target;\n}\n\n/** Identify the internal submitted continuation that owns a durable pending checkpoint. */\nexport function hasDeferredPendingSettlement(result: TaskResult<any>): boolean {\n return DEFERRED_PENDING_SETTLEMENT in result;\n}\n\nexport function isAuthoritativePolledTerminal(result: TaskResult<any>): boolean {\n return AUTHORITATIVE_POLLED_TERMINAL in result;\n}\n\n/** Mark a result whose configured completion handler was already invoked by durable callback publication. @internal */\nexport function markCompletionHandlerAlreadyPublished<T extends object>(result: T): T {\n Object.defineProperty(result, COMPLETION_HANDLER_ALREADY_PUBLISHED, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return result;\n}\n\n/** Avoid invoking an application completion handler twice for the same durable publication. @internal */\nexport function hasCompletionHandlerAlreadyPublished(result: object): boolean {\n return COMPLETION_HANDLER_ALREADY_PUBLISHED in result;\n}\n\nconst DEFERRED_CONTINUATION_TOKEN_PATTERN = /^[A-Za-z0-9_-]{43,256}$/;\nconst UUID_V4_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nfunction assertDeferredContinuationToken(token: unknown): asserts token is string {\n if (typeof token !== 'string' || (!DEFERRED_CONTINUATION_TOKEN_PATTERN.test(token) && !UUID_V4_PATTERN.test(token))) {\n throw new Error('Deferred continuation token has an invalid shape.');\n }\n}\n\nexport async function checkpointDeferredPendingSettlement<T>(\n owner: TaskResult<any>,\n terminal: TaskResult<T>\n): Promise<TaskResult<T>> {\n const checkpoint = (\n owner as TaskResult<any> & {\n [DEFERRED_PENDING_SETTLEMENT]?: (result: TaskResult<T>) => Promise<TaskResult<T>>;\n }\n )[DEFERRED_PENDING_SETTLEMENT];\n if (!checkpoint) throw new Error('Durable pending settlement checkpoint is unavailable.');\n return checkpoint(terminal);\n}\n\nfunction markAuthoritativePolledTerminal<T>(result: TaskResult<T>): TaskResult<T> {\n Object.defineProperty(result, AUTHORITATIVE_POLLED_TERMINAL, {\n value: true,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return result;\n}\n\nexport async function acknowledgeDeferredSettlement(result: TaskResult<any>): Promise<void> {\n const acknowledge = (\n result as TaskResult<any> & {\n [DEFERRED_SETTLEMENT_ACK]?: (finalizedResult?: TaskResult<any>) => Promise<void>;\n }\n )[DEFERRED_SETTLEMENT_ACK];\n await acknowledge?.(result);\n}\n\nexport async function rejectDeferredSettlement(result: TaskResult<any>): Promise<void> {\n const reject = (\n result as TaskResult<any> & {\n [DEFERRED_SETTLEMENT_NACK]?: () => Promise<void>;\n }\n )[DEFERRED_SETTLEMENT_NACK];\n await reject?.();\n}\n\n/** Supporting contract for the internal pre-dispatch boundary. */\nexport type BeforeProtocolDispatchHookResult<T> =\n | {\n action: 'dispatch_committed';\n /** Require the owning durable coordinator to authorize every seller-input continuation. */\n requireDeferredSettlementResumeAuthorization?: boolean;\n /** Persist returned pauses for restart/public-token recovery. Defaults to true. */\n persistPausedContinuation?: boolean;\n /** Persist or otherwise settle the seller result inside the executor-owned dispatch lifetime. */\n onResult?: (result: TaskResult<T>) => Promise<TaskResult<T>>;\n /** Fence transport/parser uncertainty inside the executor-owned dispatch lifetime. */\n onError?: (error: unknown) => Promise<never>;\n }\n | { action: 'return'; result: TaskResult<T> };\n\n/** Context supplied to the internal pre-dispatch boundary. */\nexport interface BeforeProtocolDispatchContext {\n /** Client-minted operation id embedded in the callback route. */\n operationId: string;\n /** True when governance changed the payload rather than approving it unchanged. */\n governanceAdjusted: boolean;\n /** Publish a terminal continuation result after its durable settlement succeeds. */\n publishSettledTaskStatus: (status: TaskStatus, data?: unknown, error?: string) => void;\n /** Register durable settlement for an authoritative terminal push notification. */\n registerExternalTaskSettlement: (handler: ExternalTaskSettlementHandler) => void;\n}\n\nexport interface ExternalTaskSettlementObservation {\n status: TaskStatus;\n result?: unknown;\n serverTaskId?: string;\n taskType?: string;\n idempotencyKey?: string;\n /** True when the caller already owns the deferred terminal finalization lease. @internal */\n deferredCheckpointOwned?: boolean;\n}\n\nexport type ExternalTaskSettlementHandler = (\n observation: ExternalTaskSettlementObservation\n) => Promise<TaskResult<unknown>>;\n\nexport interface ExternalTaskStatusResult {\n settled: boolean;\n /** Accepted for deferred settlement once the response supplies trusted task identity. */\n queued?: boolean;\n /** Exact retry of a terminal observation that already completed durable settlement. */\n duplicate?: boolean;\n result?: unknown;\n status?: TaskStatus;\n error?: string;\n /** Durable acknowledgement to run only after application dispatch succeeds. @internal */\n afterDispatch?: () => Promise<void>;\n /** Release an acquired durable-finalization owner when application dispatch fails. @internal */\n onDispatchError?: () => Promise<void>;\n}\n\ninterface SettledExternalTaskObservation {\n key: string;\n status: TaskStatus;\n error?: string;\n}\n\ninterface ExternalTaskSettlementInFlight {\n observationKey: string;\n settlement: Promise<ExternalTaskStatusResult>;\n waiterCount: number;\n}\n\n/** Hook used by higher-level SDK coordinators at the final dispatch boundary. */\nexport type BeforeProtocolDispatchHook<T> = (\n effectiveParams: any,\n context: BeforeProtocolDispatchContext\n) => Promise<BeforeProtocolDispatchHookResult<T>>;\n\n/** Keeps internal dispatch-boundary failures out of the normal TaskResult error projection. */\n/** @internal */\nexport class BeforeProtocolDispatchHookError extends Error {\n constructor(readonly original: unknown) {\n super('An SDK pre-dispatch hook failed.', { cause: original });\n this.name = 'BeforeProtocolDispatchHookError';\n }\n}\n\n/** Keeps internal post-dispatch settlement failures out of normal TaskResult error projection. */\n/** @internal */\nexport class AfterProtocolDispatchHookError extends Error {\n constructor(readonly original: unknown) {\n super('An SDK post-dispatch settlement hook failed.', { cause: original });\n this.name = 'AfterProtocolDispatchHookError';\n }\n}\n\nconst GOVERNED_CREDENTIAL_SCAN_MAX_NODES = 10_000;\nconst GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH = 64;\nconst GOVERNED_CALLBACK_FIELDS = new Set(['push_notification_config', 'reporting_webhook', 'artifact_webhook']);\n\ntype GovernedCredentialScanResult =\n | { kind: 'credential'; path: string; callbackField: string }\n | { kind: 'limit'; limit: 'nodes' | 'depth' };\n\nfunction webhookRegistrationFromPreparedCall(\n _agent: AgentConfig,\n preparedCall: PreparedProtocolToolCall\n): { callbackUrl: string; mode: 'rfc9421' | 'hmac-sha256' } | undefined {\n const candidate =\n preparedCall.args.push_notification_config &&\n typeof preparedCall.args.push_notification_config === 'object' &&\n !Array.isArray(preparedCall.args.push_notification_config)\n ? (preparedCall.args.push_notification_config as Record<string, unknown>)\n : _agent.protocol === 'a2a'\n ? preparedCall.pushNotificationConfig\n : undefined;\n if (!candidate) return undefined;\n if (typeof candidate.url !== 'string') {\n throw new ConfigurationError('push_notification_config.url must be a string.', 'push_notification_config.url');\n }\n\n if (!Object.prototype.hasOwnProperty.call(candidate, 'authentication')) {\n return { callbackUrl: candidate.url, mode: 'rfc9421' };\n }\n const authentication = candidate.authentication;\n if (!authentication || typeof authentication !== 'object' || Array.isArray(authentication)) {\n throw new ConfigurationError(\n 'push_notification_config.authentication selects legacy verification and must be a supported object.',\n 'push_notification_config.authentication'\n );\n }\n const schemes = (authentication as Record<string, unknown>).schemes;\n const credentials = (authentication as Record<string, unknown>).credentials;\n if (\n !Array.isArray(schemes) ||\n schemes.length !== 1 ||\n schemes[0] !== 'HMAC-SHA256' ||\n typeof credentials !== 'string' ||\n credentials.length === 0\n ) {\n throw new ConfigurationError(\n 'This receiver supports legacy HMAC-SHA256 or RFC 9421 push notifications; Bearer and mixed schemes are not supported.',\n 'push_notification_config.authentication.schemes'\n );\n }\n return {\n callbackUrl: candidate.url,\n mode: 'hmac-sha256',\n };\n}\n\n/**\n * Find callback authentication credentials before an exact downstream payload\n * crosses the governance-agent boundary. AdCP 3.2 requires intent payloads to\n * match the seller arguments byte-for-byte at the JSON-data-model level, so\n * the SDK cannot safely redact a credential and reinsert it after approval:\n * doing so would invalidate the seller's authorized_payload_hash check.\n */\nfunction findGovernedAuthenticationCredential(value: unknown): GovernedCredentialScanResult | undefined {\n const stack: Array<{ value: unknown; depth: number }> = [{ value, depth: 0 }];\n const visited = new WeakSet<object>();\n let visitedNodes = 0;\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (!current.value || typeof current.value !== 'object') continue;\n if (current.depth > GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH) return { kind: 'limit', limit: 'depth' };\n if (visited.has(current.value)) continue;\n visited.add(current.value);\n if (++visitedNodes > GOVERNED_CREDENTIAL_SCAN_MAX_NODES) return { kind: 'limit', limit: 'nodes' };\n\n if (!Array.isArray(current.value)) {\n const record = current.value as Record<string, unknown>;\n for (const callbackField of GOVERNED_CALLBACK_FIELDS) {\n const callback = record[callbackField];\n if (!callback || typeof callback !== 'object' || Array.isArray(callback)) continue;\n const authentication = (callback as Record<string, unknown>).authentication;\n if (\n authentication &&\n typeof authentication === 'object' &&\n !Array.isArray(authentication) &&\n (authentication as Record<string, unknown>).credentials !== undefined\n ) {\n return {\n kind: 'credential',\n path: `${callbackField}.authentication.credentials`,\n callbackField,\n };\n }\n }\n }\n\n for (const key in current.value) {\n if (!Object.prototype.hasOwnProperty.call(current.value, key)) continue;\n const child = (current.value as Record<string, unknown>)[key];\n if (!child || typeof child !== 'object') continue;\n if (visitedNodes + stack.length >= GOVERNED_CREDENTIAL_SCAN_MAX_NODES) {\n return { kind: 'limit', limit: 'nodes' };\n }\n stack.push({ value: child, depth: current.depth + 1 });\n }\n }\n return undefined;\n}\n\nfunction assertGovernedPayloadHasNoCallbackCredentials(\n taskName: string,\n payload: Record<string, unknown>,\n options: { sdkInjectedPushConfig?: boolean } = {}\n): void {\n const scanResult = findGovernedAuthenticationCredential(payload);\n if (!scanResult) return;\n if (scanResult.kind === 'limit') {\n const limitDescription =\n scanResult.limit === 'nodes'\n ? `${GOVERNED_CREDENTIAL_SCAN_MAX_NODES.toLocaleString('en-US')} nested objects`\n : `${GOVERNED_CREDENTIAL_SCAN_MAX_DEPTH} object levels`;\n throw new ConfigurationError(\n `The SDK could not safely inspect the governed ${taskName} payload for callback credentials because it ` +\n `exceeds the ${limitDescription} safety limit. Simplify the payload or move deeply nested extension data ` +\n `out of the governed request before retrying.`,\n 'governance.payload'\n );\n }\n const remedy =\n scanResult.callbackField === 'push_notification_config'\n ? options.sdkInjectedPushConfig\n ? 'Retry with task options `{ disableWebhook: true }` and poll for completion, or use A2A task-status notifications.'\n : 'Remove the credential-bearing push notification config and poll for completion, or use A2A task-status notifications.'\n : `Remove the credential-bearing ${scanResult.callbackField} from this governed request and use a ` +\n `non-webhook delivery path.`;\n throw new ConfigurationError(\n `Governed ${taskName} cannot forward ${scanResult.path} to the governance agent. ` +\n `The SDK will not disclose receiver authentication credentials, and redacting modern AdCP 3.2 payloads ` +\n `would invalidate seller authorization. ${remedy}`,\n scanResult.path\n );\n}\n\n/**\n * Map an AdCP `tasks/get` response (post-unwrap) to the SDK's internal\n * `TaskInfo` shape. The AdCP 3.0 schema\n * (`schemas/cache/3.0.0/bundled/core/tasks-get-response.json`) is flat\n * snake_case: `{ task_id, task_type, protocol, status, created_at,\n * updated_at, error?, progress?, history?, completed_at?, has_webhook?,\n * context?, ext? }`. The internal `TaskInfo` is camelCase with a\n * superset of legacy fields some pre-3.0 sellers still emit.\n *\n * **Result-data extraction.** AdCP 3.1.0 defines a typed `result`\n * field on `tasks/get` responses (per adcontextprotocol/adcp#3126,\n * which closed adcp#3123). Sellers populate it when the buyer's\n * request set `include_result: true` and the task reached\n * `completed`. The mapper reads it directly into `TaskInfo.result`\n * so `pollTaskCompletion` surfaces it on the resolved\n * `TaskResult.data`. Pre-3.1.0 sellers that emitted `result` via\n * `additionalProperties: true` continue to work — the typed and\n * informal paths share the same field name.\n *\n * **Legacy nested shape.** Some pre-3.0 sellers and existing test\n * mocks emit `{ task: { ...TaskInfo } }` — a non-spec wrapper. We\n * unwrap it before the spec-shape mapping so the SDK stays\n * compatible with both surfaces during the transition.\n */\nfunction mapTasksGetResponseToTaskInfo(payload: unknown): TaskInfo {\n if (payload == null || typeof payload !== 'object') {\n return { taskId: '', status: 'unknown', taskType: 'unknown', createdAt: Date.now(), updatedAt: Date.now() };\n }\n const obj = payload as Record<string, unknown>;\n // Walk the transport-level wrappers in priority order:\n // 1. MCP `structuredContent` — the typed AdCP payload from `tools/call`\n // 2. A2A latest structured DataPart — the AdCP payload\n // surfaced via the artifact (per #899)\n // 3. Legacy nested `{ task: TaskInfo }` — pre-3.0 sellers and\n // existing test mocks\n // 4. Flat AdCP-spec shape — what AdCP 3.0 sellers emit directly\n const flat = unwrapTasksGetEnvelope(obj);\n const errorRaw = flat.error;\n const errorMessage =\n typeof errorRaw === 'string'\n ? errorRaw\n : errorRaw != null &&\n typeof errorRaw === 'object' &&\n typeof (errorRaw as { message?: unknown }).message === 'string'\n ? (errorRaw as { message: string }).message\n : undefined;\n const taskInfo: TaskInfo = {\n taskId: stringField(flat.task_id) ?? stringField(flat.taskId) ?? '',\n status: stringField(flat.status) ?? 'unknown',\n taskType: stringField(flat.task_type) ?? stringField(flat.taskType) ?? 'unknown',\n createdAt: parseTimestamp(flat.created_at ?? flat.createdAt),\n updatedAt: parseTimestamp(flat.updated_at ?? flat.updatedAt),\n };\n if (errorMessage !== undefined) taskInfo.error = errorMessage;\n // Top-level `message` field: the AdCP envelope's human-readable\n // status descriptor (advisory string accompanying any status —\n // e.g. \"Budget cap exceeded — task not started\" on a `rejected`\n // task). `pollTaskCompletion` falls back to this when the\n // `error.message` block is absent on a terminal failure. Distinct\n // from `error.message` (which lives under the structured `error`\n // object).\n const messageField = stringField(flat.message);\n if (messageField !== undefined) taskInfo.message = messageField;\n // Result extraction — see JSDoc. AdCP 3.1.0 defines `result` as\n // the canonical typed field; pre-3.1.0 sellers using\n // `additionalProperties: true` shared the same field name, so the\n // mapping is unchanged across versions.\n if (flat.result !== undefined) {\n taskInfo.result =\n flat.result != null && typeof flat.result === 'object' && !Array.isArray(flat.result)\n ? normalizeLegacyMediaBuyStatusForReturn(flat.result as Record<string, unknown>, {\n toolName: taskInfo.taskType,\n })\n : flat.result;\n }\n return taskInfo;\n}\n\nfunction stringField(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\n/**\n * Cap on the wrapper-unwrap recursion depth. Real-world responses\n * have at most two layers (MCP `structuredContent` OR A2A JSON-RPC →\n * Task → artifact → DataPart). The cap is a defense against a\n * malformed or hostile seller emitting a deeply-nested wrapper that\n * would otherwise stack-overflow the buyer.\n */\nconst TASKS_GET_UNWRAP_MAX_DEPTH = 8;\n\nfunction unwrapTasksGetEnvelope(obj: Record<string, unknown>, depth = 0, allowRawData = true): Record<string, unknown> {\n if (depth >= TASKS_GET_UNWRAP_MAX_DEPTH) return obj;\n // MCP: `tools/call` response carries the typed payload at\n // `structuredContent`.\n const sc = obj.structuredContent;\n if (sc != null && typeof sc === 'object' && !Array.isArray(sc)) {\n return unwrapTasksGetEnvelope(sc as Record<string, unknown>, depth + 1, false);\n }\n // A2A: `message/send` response is a JSON-RPC envelope wrapping a\n // Task; the AdCP payload sits on the latest structured DataPart.\n const result = obj.result;\n if (result != null && typeof result === 'object' && !Array.isArray(result)) {\n const r = result as Record<string, unknown>;\n if (r.kind === 'task') {\n const extracted = getLatestA2ADataPartFromResponse(obj);\n if (extracted) {\n return unwrapTasksGetEnvelope(extracted.data, depth + 1, false);\n }\n // adcp-client#1612: When the A2A Task has no DataPart artifacts (e.g. the\n // seller returns an A2A transport-level state without an AdCP DataPart\n // payload), surface the transport-layer status as a last-resort hint so\n // `mapTasksGetResponseToTaskInfo` can map terminal states to `failed` /\n // `completed` rather than falling through to `'unknown'`. The transport\n // state overlaps with AdCP status strings for all A2A-native values\n // (`completed`, `failed`, `rejected`, `canceled`, `working`, `submitted`).\n // Note: `auth-required` is an AdCP-layer concept; it won't surface via\n // this path (no A2A-native transport state carries that label) — those\n // responses reach the `unknown` exit branch instead. Also include the A2A\n // task handle (`result.id`) so polling error messages carry the real id.\n const transportStatus = (r.status as Record<string, unknown> | undefined)?.state;\n if (typeof transportStatus === 'string') {\n return { status: transportStatus, task_id: typeof r.id === 'string' ? r.id : undefined };\n }\n }\n }\n // Raw/in-process MCP wrappers sometimes carry the AdCP payload under\n // `data` rather than the official CallToolResult `structuredContent`.\n // Unwrap only when it looks like a task envelope and no official payload\n // has already been selected.\n const data = obj.data;\n if (allowRawData && data != null && typeof data === 'object' && !Array.isArray(data)) {\n const d = data as Record<string, unknown>;\n if ('status' in d || 'task_id' in d || 'taskId' in d) {\n return unwrapTasksGetEnvelope(d, depth + 1, true);\n }\n }\n // Legacy nested wrapper from pre-3.0 sellers and existing mocks.\n // TODO(adcp-client#967): remove once mock fixtures in\n // `test/lib/task-executor*.test.js` migrate to the AdCP-spec flat\n // shape. No real seller emits this; verified at PR review time.\n if (obj.task != null && typeof obj.task === 'object' && !Array.isArray(obj.task)) {\n return obj.task as Record<string, unknown>;\n }\n // Flat AdCP-spec shape — return as-is.\n return obj;\n}\n\nfunction parseTimestamp(value: unknown): number {\n if (typeof value === 'string') {\n const parsed = Date.parse(value);\n if (!Number.isNaN(parsed)) return parsed;\n }\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n return Date.now();\n}\n\n/**\n * Return the idempotency_key this task should use: the caller's value if\n * present, otherwise a fresh UUID v4 for mutating tasks, otherwise undefined.\n */\nfunction resolveIdempotencyKey(taskName: string, params: any, serverVersion?: 'v2' | 'v3'): string | undefined {\n const callerSupplied =\n params && typeof params === 'object' && typeof params.idempotency_key === 'string'\n ? params.idempotency_key\n : undefined;\n if (callerSupplied) return callerSupplied;\n // v2.5 mutations use buyer_ref as their stable replay identity. Request\n // adaptation has already derived it from the caller's canonical key. Do\n // not inject a fresh v3-only idempotency_key after adaptation: that makes\n // identical retries differ on the wire and can defeat legacy dedupe.\n if (serverVersion === 'v2') {\n return params && typeof params === 'object' && typeof params.buyer_ref === 'string' ? params.buyer_ref : undefined;\n }\n if (requestUsesIdempotency(taskName, params)) return generateIdempotencyKey();\n return undefined;\n}\n\n/**\n * Webhook manager for submitted tasks\n */\ninterface WebhookManager {\n generateUrl(taskId: string): string;\n registerWebhook(agent: AgentConfig, taskId: string, webhookUrl: string): Promise<void>;\n processWebhook(token: string, body: any): Promise<void>;\n}\n\ninterface TaskStatusPollResult {\n task: TaskInfo;\n rawResponse: Record<string, unknown>;\n}\n\nclass TaskBindingMismatchError extends Error {\n constructor(\n message: string,\n readonly rawResponse: Record<string, unknown>\n ) {\n super(message);\n this.name = 'TaskBindingMismatchError';\n }\n}\n\nconst COMPACTED_TASK_STATE_LIMIT = 10_000;\nconst DEFAULT_EXTERNAL_TASK_SETTLEMENT_RETENTION_MS = 7 * 24 * 60 * 60 * 1000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\nconst TERMINAL_TASK_STATUSES = new Set<TaskStatus>([\n 'completed',\n 'failed',\n 'rejected',\n 'canceled',\n 'governance-denied',\n 'aborted',\n]);\nconst MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS = 8;\nconst MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS = 1_024;\nconst DEFAULT_DEFERRED_TASK_TTL_SECONDS = 7 * 24 * 60 * 60;\n// Human continuation tokens may intentionally be short-lived. Once seller\n// dispatch is admitted, mutation fencing and terminal recovery need their own\n// substantially longer horizon that cannot be shortened by that option.\nconst DEFAULT_DEFERRED_SAFETY_RETENTION_SECONDS = 7 * 24 * 60 * 60;\nconst DEFERRED_SAFETY_MARGIN_SECONDS = 60;\nconst DEFERRED_FINALIZATION_LEASE_MS = 30_000;\nconst DEFERRED_FINALIZATION_RENEW_MS = 10_000;\nconst DEFERRED_DISPATCH_ADMISSION_LEASE_MS = 30_000;\nconst DEFERRED_DISPATCH_ADMISSION_RENEW_MS = 10_000;\nconst DEFERRED_SECRET_KEY_PATTERN = new RegExp(\n `(?:${SECRET_KEY_PATTERN.source})|^(?:auth|oauth)[_-]?token$`,\n SECRET_KEY_PATTERN.flags\n);\n\nfunction snapshotTaskOptions(options: TaskOptions): TaskOptions {\n return {\n ...options,\n ...(options.transport !== undefined && { transport: snapshotTransportOptions(options.transport) }),\n ...(options.metadata !== undefined && { metadata: structuredClone(options.metadata) }),\n };\n}\n\nfunction snapshotTransportOptions(\n transport?: import('../protocols').TransportOptions\n): import('../protocols').TransportOptions | undefined {\n return transport === undefined ? undefined : { ...transport };\n}\n\nfunction durableDeferredSnapshot<T>(value: T): T {\n const snapshot = (current: unknown, depth: number, seen: WeakSet<object>): unknown => {\n // Durable continuations must never preserve an unvisited subtree. The\n // shared recorder redactor relies on a later depth assertion, whereas\n // this path writes the clone directly to adopter-controlled storage.\n if (depth > MAX_JSON_DEPTH) return '[Truncated]';\n if (Array.isArray(current)) {\n if (seen.has(current)) return '[Circular]';\n seen.add(current);\n const result = current.map(item => snapshot(item, depth + 1, seen));\n seen.delete(current);\n return result;\n }\n if (current && typeof current === 'object') {\n if (seen.has(current)) return '[Circular]';\n seen.add(current);\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(current as Record<string, unknown>)) {\n // Secret-shaped containers (for example service-account\n // `credentials`) are opaque. Redact the entire value rather than\n // assuming its vendor-specific child keys also match our pattern.\n const retained = secretKeyPatternMatches(DEFERRED_SECRET_KEY_PATTERN, key)\n ? '[redacted]'\n : snapshot(item, depth + 1, seen);\n Object.defineProperty(result, key, {\n value: retained,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n seen.delete(current);\n return result;\n }\n return current;\n };\n\n return snapshot(value, 0, new WeakSet()) as T;\n}\n\nfunction comparableDeferredTerminal(result: unknown): unknown {\n const snapshot = durableDeferredSnapshot(result) as Partial<TaskResult<unknown>> | undefined;\n if (!snapshot || typeof snapshot !== 'object') return snapshot;\n return {\n success: snapshot.success,\n status: snapshot.status,\n data: snapshot.data,\n error: snapshot.error,\n adcpError: snapshot.adcpError,\n correlationId: snapshot.correlationId,\n serverTaskId: snapshot.metadata?.serverTaskId,\n };\n}\n\nfunction sameDeferredTerminal(left: unknown, right: unknown): boolean {\n return canonicalize(comparableDeferredTerminal(left)) === canonicalize(comparableDeferredTerminal(right));\n}\n\nfunction reconcileDeferredServerTaskId(\n trustedServerTaskId: string | undefined,\n observedServerTaskIds: readonly (string | undefined)[],\n mismatchMessage = 'The committed deferred continuation changed its bound seller task identity.'\n): string | undefined {\n const identities = [trustedServerTaskId, ...observedServerTaskIds].filter(\n (identity): identity is string => identity !== undefined\n );\n for (const identity of identities) {\n if (identity.length === 0) {\n throw new Error('The committed deferred continuation contains an invalid empty seller task identity.');\n }\n }\n const serverTaskId = trustedServerTaskId ?? observedServerTaskIds.find(identity => identity !== undefined);\n if (serverTaskId !== undefined && identities.some(identity => identity !== serverTaskId)) {\n throw new Error(mismatchMessage);\n }\n return serverTaskId;\n}\n\nfunction normalizeDeferredTerminalServerTaskId<T>(\n result: TaskResult<T>,\n trustedServerTaskId?: string\n): { result: TaskResult<T>; serverTaskId?: string } {\n const observedServerTaskId = result.metadata?.serverTaskId;\n const serverTaskId = reconcileDeferredServerTaskId(trustedServerTaskId, [observedServerTaskId]);\n if (serverTaskId === undefined || observedServerTaskId === serverTaskId) {\n return { result, ...(serverTaskId !== undefined && { serverTaskId }) };\n }\n return {\n result: {\n ...result,\n metadata: {\n ...result.metadata,\n serverTaskId,\n },\n },\n serverTaskId,\n };\n}\n\nfunction trustedDeferredServerTaskId(state: DeferredTaskState): string | undefined {\n return reconcileDeferredServerTaskId(\n state.settlementServerTaskId,\n [state.settlementPendingTaskId],\n 'The durable deferred checkpoint contains conflicting seller task identities.'\n );\n}\n\nfunction attachDeferredServerVersion<T>(result: TaskResult<T>, state: DeferredTaskState): TaskResult<T> {\n result.metadata = {\n ...result.metadata,\n serverVersion: state.serverVersion,\n ...(state.serverVersionSynthetic !== undefined && {\n serverVersionSynthetic: state.serverVersionSynthetic,\n }),\n };\n return attachMatch(result);\n}\n\ninterface DeferredFinalizationLease {\n finalize<T>(result: TaskResult<T>): Promise<void>;\n release(completionHandlerPublished?: boolean): Promise<void>;\n}\n\ninterface DeferredDispatchAdmissionLease {\n stop(): Promise<{ version: string; state: DeferredTaskState }>;\n}\n\n/**\n * Core task execution engine that handles the conversation loop with agents\n */\nexport class TaskExecutor {\n private readonly deferredTerminalPublicationTaskIds = new Set<string>();\n private readonly settlementCapacityReservations = new Set<string>();\n private readonly closedExternalTaskSettlementTaskIds = new Set<string>();\n private readonly externalTaskSettlementHandlers = new Map<string, ExternalTaskSettlementHandler>();\n private readonly externalTaskSettlementInFlight = new Map<string, ExternalTaskSettlementInFlight>();\n private readonly settledExternalTaskObservationKeys = new Map<string, SettledExternalTaskObservation>();\n private readonly externalTaskSettlementExpiry = new Map<string, number>();\n private readonly externalTaskSettlementTimers = new Map<string, ReturnType<typeof setTimeout>>();\n private readonly pendingExternalTaskObservations = new Map<string, ExternalTaskSettlementObservation[]>();\n private readonly deferredAgents = new Map<string, AgentConfig>();\n private responseParser: ProtocolResponseParser;\n private activeTasks = new Map<string, TaskState>();\n private compactedTaskIds = new Map<string, true>();\n private conversationStorage?: Map<string, Message[]>;\n private governanceMiddleware?: GovernanceMiddleware;\n private lastKnownServerVersion?: 'v2' | 'v3';\n private requestValidationMode!: ValidationMode;\n private responseValidationMode!: ValidationMode;\n\n constructor(\n private config: {\n /** Default timeout for 'working' status (max 120s per PR #78) */\n workingTimeout?: number;\n /** Polling interval for 'working' status in milliseconds (default: 2000ms) */\n pollingInterval?: number;\n /** Default max clarification attempts */\n defaultMaxClarifications?: number;\n /** Enable conversation storage */\n enableConversationStorage?: boolean;\n /** Webhook manager for submitted tasks */\n webhookManager?: WebhookManager;\n /** Storage for deferred task state */\n deferredStorage?: DeferredTaskStorage;\n /** Resolve current trusted agent configuration after a process restart. */\n resolveDeferredAgent?: (agentId: string) => AgentConfig | undefined | Promise<AgentConfig | undefined>;\n /** Lifetime of a durable human-continuation token. Defaults to seven days. */\n deferredTaskTtlSeconds?: number;\n /** Check whether the owning client can recover a committed deferred settlement. */\n canRecoverDeferredSettlement?: (operationId: string) => boolean | Promise<boolean>;\n /** Verify that this is still the coordinator's current committed continuation token. */\n authorizeDeferredSettlementResume?: (operationId: string, token: string) => boolean | Promise<boolean>;\n /** Verify a separate owner capability before revealing a route's opaque continuation token. */\n authorizeDeferredSettlementOperationRecovery?: (\n operationId: string,\n recoveryKey: string,\n purpose: 'pause-recovery' | 'callback-checkpoint'\n ) => boolean | Promise<boolean>;\n /** Atomically hand a committed coordinator route from one persisted token generation to the next. */\n replaceDeferredSettlementResumeToken?: (\n operationId: string,\n currentToken: string,\n replacementToken: string\n ) => boolean | Promise<boolean>;\n /** Settle a committed deferred result before it can be published or returned. */\n recoverDeferredSettlement?: (\n result: TaskResult<any>,\n operationId: string,\n serverTaskId?: string\n ) => Promise<{ result: TaskResult<any>; afterFinalize?: () => Promise<void> }>;\n /** Webhook URL template for protocol-level webhook support */\n webhookUrlTemplate?: WebhookUrlTemplate;\n /** Agent ID for webhook URL generation */\n agentId?: string;\n /** Webhook secret for legacy HMAC authentication. */\n webhookSecret?: string;\n /** Persist sanitized callback mode provenance before dispatch. */\n onWebhookRegistration?: (registration: {\n agent: AgentConfig;\n taskType: string;\n operationId: string;\n callbackUrl: string;\n mode: 'rfc9421' | 'hmac-sha256';\n }) => void | Promise<void>;\n /** Persist fail-closed routing provenance before a durable mutation claim can run. */\n onDurableSettlementRequired?: (operationId: string) => void | Promise<void>;\n /** Retain durable push-settlement fences for at least the callback registration lifetime. */\n externalTaskSettlementRetentionMs?: number;\n /** Fail tasks when response schema validation fails (default: true) */\n strictSchemaValidation?: boolean;\n /** Emit schema validation violations to debug logs and the console (default: true) */\n logSchemaViolations?: boolean;\n /**\n * Schema-driven validation using the bundled AdCP JSON schemas.\n * Controls outgoing request and incoming response checks independently.\n * Defaults: strict in dev/test, warn in prod. Set a mode to `off` to\n * skip the validator entirely on that side (zero overhead).\n */\n validation?: ValidationHookConfig;\n /** Filter out invalid products from get_products responses instead of rejecting the entire response (default: false) */\n filterInvalidProducts?: boolean;\n /** Global activity callback for observability */\n onActivity?: (activity: Activity) => void | Promise<void>;\n /** Transport-level diagnostics callback for outbound HTTP requests. */\n onTransportActivity?: import('../protocols').TransportActivityHandler;\n /** Governance configuration for buyer-side campaign governance */\n governance?: GovernanceConfig;\n /**\n * AdCP version this executor speaks. Selects which schema bundle\n * `validateIncomingResponse` / `validateOutgoingRequest` validate\n * against, and which `adcp_major_version` value goes on the wire.\n * Defaults to the SDK-pinned `ADCP_VERSION` when omitted.\n *\n * Plumbed from `SingleAgentClient.resolvedAdcpVersion` so the\n * client/agent's `getAdcpVersion()` value is the single source of\n * truth for both validation and wire-level major.\n */\n adcpVersion?: string;\n wireAdcpVersion?: string;\n versionEnvelope?: import('../protocols').VersionEnvelopeMode;\n /**\n * Transport-level safeguards applied to every call this executor\n * dispatches. Per-call options can override individual fields.\n */\n transport?: import('../protocols').TransportOptions;\n } = {}\n ) {\n if (\n config.externalTaskSettlementRetentionMs !== undefined &&\n (!Number.isSafeInteger(config.externalTaskSettlementRetentionMs) || config.externalTaskSettlementRetentionMs < 1)\n ) {\n throw new ConfigurationError('externalTaskSettlementRetentionMs must be a positive safe integer.');\n }\n if (\n config.deferredTaskTtlSeconds !== undefined &&\n (!Number.isSafeInteger(config.deferredTaskTtlSeconds) || config.deferredTaskTtlSeconds < 1)\n ) {\n throw new ConfigurationError('deferredTaskTtlSeconds must be a positive safe integer.');\n }\n if (config.deferredStorage && typeof config.deferredStorage.putIfAbsent !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic putIfAbsent() creation so replicas cannot overwrite a continuation. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n if (config.deferredStorage && typeof config.deferredStorage.replaceIfVersion !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic replaceIfVersion() fencing so only one replica can dispatch a resume. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n if (config.deferredStorage && typeof config.deferredStorage.takeIfVersion !== 'function') {\n throw new ConfigurationError(\n 'Deferred storage must implement atomic takeIfVersion() cleanup so stale owners cannot delete newer state. ' +\n 'Use MemoryStorage for single-process tests or implement the DeferredTaskStorage atomic contract.'\n );\n }\n this.responseParser = new ProtocolResponseParser();\n if (config.enableConversationStorage) {\n this.conversationStorage = new Map();\n }\n if (config.governance) {\n this.governanceMiddleware = new GovernanceMiddleware(\n config.governance,\n config.onActivity,\n config.adcpVersion,\n config.versionEnvelope,\n config.onTransportActivity\n );\n }\n const modes = resolveValidationModes(config.validation);\n this.requestValidationMode = modes.requests;\n // Legacy `strictSchemaValidation: false` flips response-side enforcement\n // to warn mode — preserve that behaviour unless `validation.responses`\n // was set explicitly.\n if (config.validation?.responses !== undefined) {\n this.responseValidationMode = config.validation.responses;\n } else if (config.strictSchemaValidation === false) {\n this.responseValidationMode = 'warn';\n } else {\n this.responseValidationMode = modes.responses;\n }\n }\n\n /**\n * Access the governance middleware for direct outcome reporting (async tasks).\n */\n getGovernanceMiddleware(): GovernanceMiddleware | undefined {\n return this.governanceMiddleware;\n }\n\n getRequestParams(taskId: string): Record<string, unknown> | undefined {\n const params = this.activeTasks.get(taskId)?.params;\n return params && typeof params === 'object' && !Array.isArray(params)\n ? (params as Record<string, unknown>)\n : undefined;\n }\n\n /**\n * Reconcile a push-delivered terminal status with the local runner task.\n * Submitted task state is already compacted after dispatch; this schedules\n * the same short final-status retention used by synchronous completions.\n *\n * @internal\n */\n async observeExternalTaskStatus(\n taskId: string,\n status: TaskStatus,\n result?: unknown,\n identity: { serverTaskId?: string; taskType?: string } = {}\n ): Promise<ExternalTaskStatusResult> {\n if (!['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(status)) {\n return { settled: false, result };\n }\n const observation: ExternalTaskSettlementObservation = { status, result, ...identity };\n const observationKey = this.externalTaskObservationKey(observation);\n if (this.closedExternalTaskSettlementTaskIds.has(taskId)) {\n const accepted = this.settledExternalTaskObservationKeys.get(taskId);\n if (accepted?.key === observationKey) {\n return {\n settled: true,\n duplicate: true,\n status: accepted.status,\n ...(accepted.error !== undefined && { error: accepted.error }),\n };\n }\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n if (this.deferredTerminalPublicationTaskIds.has(taskId)) {\n const handler = this.externalTaskSettlementHandlers.get(taskId);\n if (handler) return this.settleExternalTaskStatus(taskId, handler, observation);\n const pending = this.pendingExternalTaskObservations.get(taskId) ?? [];\n if (pending.length >= MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS) {\n throw new Error('Too many terminal push notifications are awaiting durable task settlement.');\n }\n pending.push(observation);\n this.pendingExternalTaskObservations.set(taskId, pending);\n // The seller may wait for callback acknowledgement before returning the\n // response that carries its task id. Do not couple that acknowledgement\n // to the settlement handler that can only be registered from the response.\n return { settled: false, queued: true };\n }\n this.updateTaskStatus(taskId, status, result);\n return { settled: false, result };\n }\n\n /** Whether this process can safely settle or reject a durable callback for the operation. */\n hasExternalTaskSettlementRoute(taskId: string): boolean {\n return (\n this.deferredTerminalPublicationTaskIds.has(taskId) ||\n this.closedExternalTaskSettlementTaskIds.has(taskId) ||\n this.externalTaskSettlementHandlers.has(taskId)\n );\n }\n\n /** Whether durable settlement can run immediately without an in-memory queue. */\n hasExternalTaskSettlementHandler(taskId: string): boolean {\n return this.externalTaskSettlementHandlers.has(taskId);\n }\n\n /**\n * Run the configured pre-send schema check against the user-facing request\n * shape. Callers invoke this on the unadapted (v3) params before any wire\n * adaptation runs, so the validator sees the same object the caller wrote.\n * Throws in strict, logs to `debugLogs` in warn, no-ops in off.\n */\n validateRequest(taskName: string, params: unknown, debugLogs?: any[]): void {\n validateOutgoingRequest(taskName, params, this.requestValidationMode, debugLogs, this.config.adcpVersion);\n }\n\n /**\n * After `adaptRequestForServerVersion` has rewritten a v3 request into v2\n * wire format, validate the adapted shape against the cached v2.5 schema\n * bundle. Always warn-only — adapter bugs shouldn't break user requests,\n * and the v3 pre-send pass already vouched for the user-facing input.\n * This pass exists to surface drift between what the adapter emits and\n * what a v2.5 server expects on the wire (primarily as CI signal via the\n * adapter-conformance test suite).\n *\n * Skips silently for tasks without a v2.5 schema or when the v2.5 bundle\n * isn't cached. Caller is responsible for gating on `serverVersion === 'v2'`\n * so v3-targeted traffic doesn't pay the validation cost.\n */\n validateAdaptedRequestAgainstV2(taskName: string, adaptedParams: unknown, debugLogs?: any[]): void {\n validateOutgoingRequest(taskName, adaptedParams, 'warn', debugLogs, 'v2.5');\n }\n\n /**\n * Generate webhook URL for protocol-level webhook support\n */\n /**\n * Build TaskResultMetadata, including the idempotency fields. The key is\n * pulled from the tracked task state so every result reports the key that\n * was actually sent (auto-generated or caller-supplied); `replayed` is\n * extracted from the response envelope when a response is available.\n */\n private buildMetadata(args: {\n taskId: string;\n taskName: string;\n agent: AgentConfig | { id: string; name: string; protocol: 'mcp' | 'a2a' };\n startTime?: number;\n responseTimeMs?: number;\n status: TaskStatus;\n clarificationRounds?: number;\n response?: any;\n inputRequest?: InputRequest;\n }): TaskResultMetadata {\n const meta: TaskResultMetadata = {\n taskId: args.taskId,\n taskName: args.taskName,\n agent: { id: args.agent.id, name: args.agent.name, protocol: args.agent.protocol },\n responseTimeMs: args.responseTimeMs ?? (args.startTime !== undefined ? Date.now() - args.startTime : 0),\n timestamp: new Date().toISOString(),\n clarificationRounds: args.clarificationRounds ?? 0,\n status: args.status,\n };\n const taskState = this.activeTasks.get(args.taskId);\n if (taskState?.serverVersion !== undefined) meta.serverVersion = taskState.serverVersion;\n if (taskState?.serverVersionSynthetic !== undefined) {\n meta.serverVersionSynthetic = taskState.serverVersionSynthetic;\n }\n if (args.inputRequest) meta.inputRequest = args.inputRequest;\n const key = this.activeTasks.get(args.taskId)?.idempotencyKey;\n if (key) meta.idempotency_key = key;\n if (args.response !== undefined) {\n const replayed = this.responseParser.getReplayed(args.response);\n if (replayed !== undefined) meta.replayed = replayed;\n const adcpVersion = this.responseParser.getAdcpVersion(args.response);\n if (adcpVersion) meta.adcpVersion = adcpVersion;\n const serverContextId = this.responseParser.getContextId(args.response);\n if (serverContextId) meta.contextId = serverContextId;\n const serverTaskId = this.responseParser.getTaskId(args.response);\n if (serverTaskId) meta.serverTaskId = serverTaskId;\n const a2aTaskId = this.responseParser.getA2APendingTaskId(args.response);\n if (a2aTaskId) meta.a2aTaskId = a2aTaskId;\n }\n return meta;\n }\n\n /**\n * Map a task's structured AdCP error to a typed `ADCPError` subclass when\n * the code has a dedicated class (e.g., `IDEMPOTENCY_CONFLICT` →\n * `IdempotencyConflictError`). The idempotency key is pulled from tracked\n * task state because the server intentionally omits it from error bodies\n * (it's a read-oracle).\n */\n private buildErrorInstance(\n taskId: string,\n adcpError: ReturnType<typeof extractAdcpErrorInfo>\n ): ADCPError | undefined {\n if (!adcpError) return undefined;\n const key = this.activeTasks.get(taskId)?.idempotencyKey;\n return adcpErrorToTypedError(adcpError, key);\n }\n\n private generateWebhookUrl(taskName: string, operationId: string, options?: TaskOptions): string | undefined {\n return resolveWebhookUrl(this.config.webhookUrlTemplate, this.config.agentId, taskName, operationId, options);\n }\n\n /**\n * Execute a task with an agent using PR #78 async patterns\n * Handles: working (keep SSE open), submitted (webhook), input-required (handler), completed\n */\n async executeTask<T = any>(\n agent: AgentConfig,\n taskName: string,\n params: any,\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n serverVersion?: 'v2' | 'v3',\n targetCapabilities?: AdcpCapabilities,\n beforeProtocolDispatch?: BeforeProtocolDispatchHook<T>,\n deferredClientContext?: unknown\n ): Promise<TaskResult<T>> {\n // The configured transport is the same SSRF/custom-fetch trust boundary as\n // a per-call override. Own the effective value before activity, governance,\n // or protocol discovery can yield to code that still holds the config.\n const optionsSnapshot = snapshotTaskOptions({\n ...options,\n ...(options.transport === undefined && this.config.transport !== undefined\n ? { transport: this.config.transport }\n : {}),\n });\n return withTaskDeadline(optionsSnapshot, effectiveOptions =>\n this.executeTaskWithinDeadline<T>(\n agent,\n taskName,\n params,\n inputHandler,\n effectiveOptions,\n serverVersion,\n targetCapabilities,\n beforeProtocolDispatch,\n deferredClientContext\n )\n );\n }\n\n private async executeTaskWithinDeadline<T = any>(\n agent: AgentConfig,\n taskName: string,\n params: any,\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n serverVersion?: 'v2' | 'v3',\n targetCapabilities?: AdcpCapabilities,\n beforeProtocolDispatch?: BeforeProtocolDispatchHook<T>,\n deferredClientContext?: unknown\n ): Promise<TaskResult<T>> {\n const effectiveServerVersion = serverVersion ?? 'v3';\n this.lastKnownServerVersion = effectiveServerVersion;\n // Own the request graph before the first awaited activity/governance\n // boundary. This executor is internal, but direct callers and higher\n // layers may still retain the original nested objects.\n params = structuredClone(params);\n // The client-minted `taskId` is a local correlation id for tracking this\n // call's lifecycle (activeTasks map, metadata, webhook URL macros). It is\n // NOT the same thing as the A2A `taskId` that the server assigns — that\n // flows in on the response and is surfaced via metadata.serverTaskId.\n // `options.contextId` / `options.taskId` ride on the A2A message envelope\n // and are threaded straight to the protocol adapter below.\n const taskId = getTaskOperationId(options) ?? randomUUID();\n const startTime = Date.now();\n const workingTimeout = this.config.workingTimeout || 120000; // 120s max per PR #78\n\n // Auto-generate idempotency_key for mutating tasks when the caller didn't\n // supply one. The key lives on TaskState so internal retries reuse it —\n // re-generating on retry defeats the whole point of the envelope.\n // `options.skipIdempotencyAutoInject` disables this for compliance testing\n // that needs to exercise server-side missing-key behavior.\n const idempotencyKey = options.skipIdempotencyAutoInject\n ? undefined\n : resolveIdempotencyKey(taskName, params, serverVersion);\n if (idempotencyKey) attachTaskDeadlineIdempotencyKey(options, idempotencyKey);\n if (serverVersion !== 'v2' && idempotencyKey && params && typeof params === 'object' && !params.idempotency_key) {\n params = { ...params, idempotency_key: idempotencyKey };\n }\n\n // Register task in active tasks\n const taskState: TaskState = {\n taskId,\n taskName,\n params,\n status: 'pending',\n messages: [],\n startTime,\n attempt: 0,\n maxAttempts: options.maxClarifications || this.config.defaultMaxClarifications || 3,\n options,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n serverVersion: effectiveServerVersion,\n serverVersionSynthetic: targetCapabilities?._synthetic ?? serverVersion === undefined,\n idempotencyKey,\n };\n this.activeTasks.set(taskId, taskState);\n\n // Once the final compatibility boundary starts, an abort may race a\n // durable claim that has committed but whose hook has not returned yet.\n // In that window the boundary, not the caller signal, owns publication of\n // terminal state. The abort listener still compacts retained request data.\n let dispatchBoundaryOwnsTerminalState = false;\n\n // Compact task state as soon as cancellation fires, even if a protocol\n // adapter or caller callback never settles after receiving the signal.\n // The outer deadline race guarantees prompt rejection; this listener is\n // the matching resource-retention boundary for activeTasks.\n const taskAbortListener = options.signal\n ? () => {\n const currentStatus = this.activeTasks.get(taskId)?.status;\n if (currentStatus && !TERMINAL_TASK_STATUSES.has(currentStatus)) {\n if (dispatchBoundaryOwnsTerminalState) {\n this.compactAbandonedObserverTaskState(taskId);\n return;\n }\n const reason = options.signal?.reason;\n this.updateTaskStatus(\n taskId,\n 'aborted',\n undefined,\n reason instanceof Error ? reason.message : reason == null ? 'The operation was aborted' : String(reason)\n );\n }\n }\n : undefined;\n if (taskAbortListener) options.signal!.addEventListener('abort', taskAbortListener, { once: true });\n\n // Emit task creation event\n this.emitTaskEvent(\n {\n taskId,\n status: 'submitted',\n taskType: taskName,\n createdAt: startTime,\n updatedAt: startTime,\n },\n agent.id\n );\n\n // Start streaming connection\n const debugLogs: any[] = [];\n\n // Generate webhook URL if template is configured\n const webhookUrl = this.generateWebhookUrl(taskName, taskId, options);\n\n // Governance state (scoped outside try so catch can access)\n let governanceCheckId: string | undefined;\n let governanceResult: GovernanceCheckResult | undefined;\n let effectiveParams = params;\n let governanceAdjusted = false;\n let dispatchCommitted = false;\n let dispatchSettlement:\n | Pick<\n Extract<BeforeProtocolDispatchHookResult<T>, { action: 'dispatch_committed' }>,\n 'onResult' | 'onError' | 'requireDeferredSettlementResumeAuthorization' | 'persistPausedContinuation'\n >\n | undefined;\n let dispatchSettlementStarted = false;\n\n try {\n // Emit protocol_request activity. The activity payload is the boundary\n // callers typically pipe into external observability stacks, so redact\n // the idempotency key — it's a retry-pattern oracle within the seller's\n // TTL. Full logging is opt-in via ADCP_LOG_IDEMPOTENCY_KEYS=1.\n await this.config.onActivity?.({\n type: 'protocol_request',\n operation_id: taskId,\n agent_id: agent.id,\n context_id: options.contextId,\n task_id: taskId,\n task_type: taskName,\n status: 'pending',\n payload: { params: redactIdempotencyKeyInArgs(params) },\n timestamp: new Date().toISOString(),\n });\n throwIfAborted(options.signal);\n\n // Run governance check if configured for this tool\n const governanceMiddleware = this.governanceMiddleware;\n if (governanceMiddleware) {\n const modernGovernance =\n targetCapabilities !== undefined && targetDeclaresGovernanceEnforcement(targetCapabilities, taskName);\n // Modern authorization binds the exact argument object the seller\n // receives, including protocol-owned fields and MCP webhook\n // registration. Legacy governance retains its historical application\n // payload and must not receive SDK-injected callback credentials.\n const governableParams = modernGovernance\n ? prepareProtocolToolCall(agent, params, {\n toolName: taskName,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n adcpVersion: this.config.adcpVersion,\n wireAdcpVersion: this.config.wireAdcpVersion,\n versionEnvelope: this.config.versionEnvelope,\n }).args\n : params;\n if (await governanceMiddleware.shouldCheck(taskName, governableParams, targetCapabilities)) {\n const sdkInjectedPushConfig =\n modernGovernance && webhookUrl !== undefined && this.config.webhookSecret !== undefined;\n assertGovernedPayloadHasNoCallbackCredentials(taskName, governableParams, { sdkInjectedPushConfig });\n const { result: govResult, params: adjustedParams } = await governanceMiddleware.checkProposed(\n agent,\n targetCapabilities!,\n taskName,\n governableParams,\n debugLogs,\n options.signal\n );\n throwIfAborted(options.signal);\n assertGovernedPayloadHasNoCallbackCredentials(taskName, adjustedParams, { sdkInjectedPushConfig });\n governanceAdjusted = canonicalize(adjustedParams) !== canonicalize(governableParams);\n\n // Governance always blocks on denial/unapplied conditions.\n const isBlocking = true;\n\n if (govResult.status === 'denied' && isBlocking) {\n const denied = this.buildGovernanceResult<T>(govResult, taskId, taskName, agent, startTime, debugLogs);\n this.updateTaskStatus(taskId, 'governance-denied', undefined, denied.error);\n return attachMatch(denied);\n }\n\n if (govResult.status === 'conditions' && !govResult.conditionsApplied && isBlocking) {\n const denied = this.buildGovernanceResult<T>(govResult, taskId, taskName, agent, startTime, debugLogs);\n this.updateTaskStatus(taskId, 'governance-denied', undefined, denied.error);\n return attachMatch(denied);\n }\n\n // Approved, or non-blocking mode (advisory/audit) allows execution to proceed\n governanceCheckId = govResult.checkId;\n governanceResult = govResult;\n if (governanceCheckId) {\n // Preserve the approved check identity as soon as the seller may be\n // dispatched. If the deadline fires during response processing,\n // callers can still reconcile the seller mutation against the\n // original governance decision after restart.\n attachTaskDeadlineGovernanceRecovery(options, { checkId: governanceCheckId });\n }\n effectiveParams = adjustedParams;\n }\n }\n\n // Detach the final request graph before the durable claim boundary. The\n // caller may still hold and mutate nested account/brand/targeting values;\n // validation, claim verification, the prepared wire call, and dispatch\n // must all observe one immutable-by-ownership snapshot.\n const dispatchParams = structuredClone(effectiveParams);\n\n // Create initial message (uses dispatchParams which may have governance-applied conditions)\n const initialMessage: Message = {\n id: randomUUID(),\n role: 'user',\n content: { tool: taskName, params: dispatchParams },\n timestamp: new Date().toISOString(),\n metadata: { toolName: taskName, type: 'request' },\n };\n\n // Materialize once, persist callback provenance, and dispatch this same\n // prepared object. A seller can post immediately after receiving the\n // request, so the registration write must complete before the network\n // boundary is crossed.\n const preparedCall = prepareProtocolToolCall(agent, dispatchParams, {\n toolName: taskName,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n adcpVersion: this.config.adcpVersion,\n wireAdcpVersion: this.config.wireAdcpVersion,\n versionEnvelope: this.config.versionEnvelope,\n });\n let webhookRegistrationPersisted = false;\n if (webhookUrl && this.config.onWebhookRegistration) {\n const registration = webhookRegistrationFromPreparedCall(agent, preparedCall);\n if (registration) {\n await this.config.onWebhookRegistration({\n agent,\n taskType: taskName,\n operationId: taskId,\n ...registration,\n });\n webhookRegistrationPersisted = true;\n }\n }\n\n // This is the final awaited preflight boundary. A durable mutation claim\n // made by the hook must be followed immediately by the official protocol\n // call; callers can therefore distinguish deterministic preflight failure\n // from transport uncertainty after the commit point.\n throwIfAborted(options.signal);\n if (beforeProtocolDispatch) {\n let decision: BeforeProtocolDispatchHookResult<T>;\n dispatchBoundaryOwnsTerminalState = true;\n try {\n this.compactClosedExternalTaskSettlementFences();\n if (\n this.liveExternalTaskSettlementCount() + this.settlementCapacityReservations.size >=\n COMPACTED_TASK_STATE_LIMIT\n ) {\n throw new Error('The durable task-settlement capacity is exhausted; no mutation claim was attempted.');\n }\n this.settlementCapacityReservations.add(taskId);\n if (webhookRegistrationPersisted) {\n await this.config.onDurableSettlementRequired?.(taskId);\n throwIfAborted(options.signal);\n }\n decision = await beforeProtocolDispatch(preparedCall.args, {\n operationId: taskId,\n governanceAdjusted,\n publishSettledTaskStatus: (status, data, error) =>\n this.publishSettledTaskStatus(taskId, status, data, error),\n registerExternalTaskSettlement: handler => this.registerExternalTaskSettlement(taskId, handler),\n });\n if (decision.action === 'dispatch_committed') {\n if (\n decision.requireDeferredSettlementResumeAuthorization === true &&\n this.config.deferredStorage !== undefined\n ) {\n this.requireDeferredSettlementOperationRouting(this.config.deferredStorage);\n }\n this.deferredTerminalPublicationTaskIds.add(taskId);\n this.retainExternalTaskSettlementState(taskId);\n }\n } catch (error) {\n throw new BeforeProtocolDispatchHookError(error);\n } finally {\n this.settlementCapacityReservations.delete(taskId);\n }\n if (decision.action === 'return') {\n const earlyResult = decision.result;\n if (\n ['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(earlyResult.status)\n ) {\n this.updateTaskStatus(taskId, earlyResult.status as TaskStatus, earlyResult.data, earlyResult.error);\n } else if (\n ['working', 'submitted', 'input-required', 'auth-required', 'deferred'].includes(earlyResult.status)\n ) {\n this.compactIntermediateTaskState(\n taskId,\n earlyResult.status as 'working' | 'submitted' | 'input-required' | 'auth-required' | 'deferred'\n );\n }\n return attachMatch(earlyResult);\n }\n dispatchCommitted = true;\n dispatchSettlement = decision;\n }\n\n // A claim that completes after the caller deadline must be fenced, not\n // turned into a hidden seller mutation after the caller has already\n // received a timeout and may have replanned. The catch path invokes the\n // committed hook's onError settlement before any protocol call begins.\n throwIfAborted(options.signal);\n\n // Once a durable claim commits, the caller-facing signal may already be\n // aborted after seller dispatch begins. Never let that abandoned\n // observer prevent response parsing or durable settlement.\n const postDispatchOptions = dispatchCommitted ? { ...options, signal: undefined } : options;\n\n // Send initial request and get streaming response with webhook URL.\n // Pass the caller's A2A session ids (contextId for conversation binding,\n // taskId for resuming a non-terminal server-side task). The adapter\n // drops these on the wire for MCP (no session concept there).\n const callOptions = {\n debugLogs,\n webhookUrl,\n webhookSecret: this.config.webhookSecret,\n operationId: taskId,\n serverVersion: effectiveServerVersion,\n session: { contextId: options.contextId, taskId: options.taskId },\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: options.transport ?? this.config.transport,\n // Once dispatch begins for a live committed claim, post-call handling\n // owns durable settlement even if the caller's deadline fires later.\n signal: postDispatchOptions.signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n operationId: taskId,\n taskId: options.taskId ?? taskId,\n contextId: options.contextId,\n idempotencyKey,\n },\n };\n const response = await withPreparedProtocolToolCall(\n { agent, toolName: taskName, args: dispatchParams, preparedCall },\n () => ProtocolClient.callTool(agent, taskName, dispatchParams, callOptions)\n );\n throwIfAborted(postDispatchOptions.signal);\n\n // Emit protocol_response activity\n const respStatus = this.responseParser.getStatus(response) as string | undefined;\n await this.config.onActivity?.({\n type: 'protocol_response',\n operation_id: taskId,\n agent_id: agent.id,\n context_id: options.contextId,\n task_id: taskId,\n task_type: taskName,\n status: respStatus,\n payload: response,\n timestamp: new Date().toISOString(),\n });\n throwIfAborted(postDispatchOptions.signal);\n\n // Add initial response message\n const responseMessage: Message = {\n id: randomUUID(),\n role: 'agent',\n content: response,\n timestamp: new Date().toISOString(),\n metadata: { toolName: taskName, type: 'response' },\n };\n\n const messages = [initialMessage, responseMessage];\n\n // Handle response based on status\n let result = await this.handleAsyncResponse<T>(\n agent,\n taskId,\n taskName,\n dispatchParams,\n response,\n messages,\n inputHandler,\n postDispatchOptions,\n debugLogs,\n startTime,\n dispatchCommitted,\n dispatchSettlement?.persistPausedContinuation ?? true,\n effectiveServerVersion,\n deferredClientContext,\n dispatchSettlement?.requireDeferredSettlementResumeAuthorization === true\n );\n throwIfAborted(postDispatchOptions.signal);\n\n // Attach governance check result to the task result\n if (governanceResult) {\n result.governance = governanceResult;\n }\n\n if (dispatchSettlement?.onResult) {\n dispatchSettlementStarted = true;\n try {\n result = await dispatchSettlement.onResult(attachMatch(result));\n } catch (error) {\n // A committed mutation is not terminal from the SDK's perspective\n // until its durable settlement succeeds. Publish only the failed\n // local coordinator state here; never leak the seller's earlier\n // completed response through task events or retained task state.\n this.closeExternalTaskSettlement(taskId, error);\n this.updateTaskStatus(taskId, 'failed', undefined, 'An SDK post-dispatch settlement hook failed.');\n throw new AfterProtocolDispatchHookError(error);\n }\n }\n\n // Report governance only after a committed compatibility mutation has\n // durably settled. A seller terminal response is not authoritative if\n // the coordinator subsequently fails to persist it.\n // For async tasks (submitted/working), outcome reporting is deferred —\n // the caller reports via client.reportGovernanceOutcome() when the\n // task resolves through polling or webhooks.\n if (governanceCheckId && this.governanceMiddleware) {\n const govCtx = governanceResult?.governanceContext;\n if (result.status === 'completed' && govCtx) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(\n governanceCheckId,\n 'completed'\n );\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'completed',\n outcomeIdempotencyKey,\n });\n result.governanceOutcome = await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'completed',\n result.data as Record<string, unknown> | undefined,\n undefined,\n debugLogs,\n govCtx,\n postDispatchOptions.signal,\n outcomeIdempotencyKey\n );\n throwIfAborted(postDispatchOptions.signal);\n if (!result.governanceOutcome) {\n result.governanceOutcomeError = 'Outcome reporting to governance agent failed';\n }\n } else if (result.error && govCtx) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(governanceCheckId, 'failed');\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'failed',\n outcomeIdempotencyKey,\n });\n result.governanceOutcome = await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'failed',\n undefined,\n { message: result.error },\n debugLogs,\n govCtx,\n postDispatchOptions.signal,\n outcomeIdempotencyKey\n );\n throwIfAborted(postDispatchOptions.signal);\n if (!result.governanceOutcome) {\n result.governanceOutcomeError = 'Outcome reporting to governance agent failed';\n }\n } else if (result.status === 'submitted' || result.status === 'working') {\n // Attach the check ID so callers can report outcome after async resolution\n result.governance = { ...(result.governance ?? {}), checkId: governanceCheckId } as GovernanceCheckResult;\n }\n }\n\n if (dispatchCommitted) {\n result = this.attachSettledContinuationTaskStatus(taskId, result);\n if (TERMINAL_TASK_STATUSES.has(result.status as TaskStatus)) {\n this.publishSettledTaskStatus(taskId, result.status as TaskStatus, result.data, result.error);\n }\n }\n\n if (\n ['completed', 'failed', 'rejected', 'canceled', 'governance-denied', 'aborted'].includes(result.status) &&\n this.activeTasks.get(taskId)?.status !== result.status\n ) {\n this.updateTaskStatus(taskId, result.status as TaskStatus, result.data, result.error);\n }\n return attachMatch(result);\n } catch (error) {\n if (error instanceof BeforeProtocolDispatchHookError) {\n // Hook failures happen before seller dispatch. Preserve the original\n // exception for the compatibility coordinator, but terminalize the\n // local task so repeated invalid redemption attempts cannot retain\n // full request payloads and options in activeTasks.\n this.updateTaskStatus(taskId, 'failed', undefined, error.message);\n throw error;\n }\n if (error instanceof AfterProtocolDispatchHookError) throw error;\n if (dispatchCommitted && dispatchSettlement?.onError && !dispatchSettlementStarted) {\n try {\n await dispatchSettlement.onError(error);\n } catch (settlementError) {\n this.closeExternalTaskSettlement(taskId, settlementError);\n this.updateTaskStatus(taskId, 'failed', undefined, 'An SDK post-dispatch settlement hook failed.');\n throw new AfterProtocolDispatchHookError(settlementError);\n }\n this.closeExternalTaskSettlement(taskId, error);\n }\n if (isAbortOrTimeoutError(error)) {\n if (idempotencyKey && error && typeof error === 'object') {\n (error as Error & { idempotency_key?: string; idempotencyKey?: string }).idempotency_key = idempotencyKey;\n (error as Error & { idempotency_key?: string; idempotencyKey?: string }).idempotencyKey = idempotencyKey;\n }\n const currentStatus = this.activeTasks.get(taskId)?.status;\n if (currentStatus && !TERMINAL_TASK_STATUSES.has(currentStatus)) {\n this.updateTaskStatus(taskId, 'aborted', undefined, error instanceof Error ? error.message : String(error));\n }\n throw error;\n }\n\n // Report failed outcome on error\n if (governanceCheckId && this.governanceMiddleware && governanceResult?.governanceContext) {\n const outcomeIdempotencyKey = this.governanceMiddleware.getOutcomeIdempotencyKey(governanceCheckId, 'failed');\n attachTaskDeadlineGovernanceRecovery(options, {\n checkId: governanceCheckId,\n outcome: 'failed',\n outcomeIdempotencyKey,\n });\n await this.governanceMiddleware.reportOutcome(\n governanceCheckId,\n 'failed',\n undefined,\n { message: (error as Error).message },\n debugLogs,\n governanceResult.governanceContext,\n options.signal,\n outcomeIdempotencyKey\n );\n }\n const failed = this.createErrorResult<T>(taskId, agent, error, debugLogs, startTime);\n this.updateTaskStatus(taskId, 'failed', undefined, failed.error);\n return attachMatch(failed);\n } finally {\n if (taskAbortListener) options.signal!.removeEventListener('abort', taskAbortListener);\n }\n }\n\n /**\n * Handle agent response based on ADCP status (PR #78)\n */\n private buildGovernanceResult<T>(\n govResult: GovernanceCheckResult,\n taskId: string,\n taskName: string,\n agent: AgentConfig,\n startTime: number,\n debugLogs: any[]\n ): TaskResult<T> {\n return {\n success: false,\n status: 'governance-denied',\n error: govResult.explanation || 'Governance governance-denied',\n governance: govResult,\n metadata: this.buildMetadata({ taskId, taskName, agent, startTime, status: 'governance-denied' }),\n conversation: [],\n debug_logs: debugLogs,\n };\n }\n\n private async handleAsyncResponse<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n response: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n const status = this.responseParser.getStatus(response) as ADCPStatus;\n\n switch (status) {\n case ADCP_STATUS.COMPLETED:\n // Task completed immediately\n const completedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n // Ordinary calls retain the historical behavior of publishing seller\n // completion before optional governance postflight work. A committed\n // compatibility mutation defers this until durable settlement.\n if (!deferTerminalTaskStatus) this.updateTaskStatus(taskId, 'completed', completedData);\n\n const operationSuccess = this.isOperationSuccess(completedData, taskName, serverVersion);\n\n // Validate response against AdCP schema - validate extracted data, not protocol wrapper\n const validationResult = this.validateResponseSchema(completedData, taskName, debugLogs, serverVersion);\n\n // In strict mode, schema validation failures cause task to fail\n const finalSuccess = operationSuccess && validationResult.valid;\n const finalError = !finalSuccess\n ? validationResult.errors.length > 0\n ? `Schema validation failed: ${validationResult.errors.join('; ')}`\n : this.extractOperationError(completedData)\n : undefined;\n\n if (finalSuccess) {\n return {\n success: true as const,\n status: 'completed' as const,\n data: completedData,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'completed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n const completedAdcpError = extractAdcpErrorInfo(completedData);\n return {\n success: false as const,\n status: 'failed' as const,\n data: completedData,\n error: finalError ?? 'Unknown error',\n adcpError: completedAdcpError,\n errorInstance: this.buildErrorInstance(taskId, completedAdcpError),\n correlationId: extractCorrelationId(completedData),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n\n case ADCP_STATUS.WORKING:\n // Server is processing - keep connection open for up to 120s\n return this.waitForWorkingCompletion<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n serverVersion\n );\n\n case ADCP_STATUS.SUBMITTED:\n // Long-running task - set up webhook\n return this.setupSubmittedTask<T>(\n agent,\n taskId,\n taskName,\n response,\n messages,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n serverVersion\n );\n\n case ADCP_STATUS.INPUT_REQUIRED:\n case ADCP_STATUS.AUTH_REQUIRED:\n // Server needs caller action. Preserve the same server-side task so\n // handler-less HITL and credential-refresh flows can resume safely.\n return this.handleInputRequired<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n status,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n\n case ADCP_STATUS.FAILED:\n case ADCP_STATUS.REJECTED:\n case ADCP_STATUS.CANCELED: {\n const failedData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n // Raw/in-process protocol clients may wrap the tool payload under\n // `data` while carrying the task lifecycle status at the top level.\n // The generic unwrapper intentionally preserves that wrapper, so\n // select its nested payload here before extracting business errors.\n const failedPayload =\n response?.structuredContent === undefined &&\n response?.content === undefined &&\n response?.result === undefined &&\n response?.data != null &&\n typeof response.data === 'object'\n ? response.data\n : failedData;\n const adcpErrorInfo = extractAdcpErrorInfo(failedPayload);\n const hasStructuredError = !!adcpErrorInfo;\n // Preserve failedData whenever the server returned a structured\n // payload — not just when extractAdcpErrorInfo recognizes an\n // `adcp_error`/`errors` envelope. Tool-level error shapes like\n // `comply_test_controller`'s `{ success: false, error: 'UNKNOWN_SCENARIO' }`\n // don't match that extractor but still carry the information\n // storyboard validators read (`success`, `error_code`, etc.).\n // Only drop `data` when there's literally no structured payload —\n // i.e. falsy or an empty object.\n const hasStructuredPayload =\n failedPayload != null &&\n typeof failedPayload === 'object' &&\n (Array.isArray(failedPayload) || Object.keys(failedPayload).length > 0);\n const structuredMessage = hasStructuredPayload ? this.extractOperationError(failedPayload) : undefined;\n const failedError =\n structuredMessage && structuredMessage !== 'Operation failed'\n ? structuredMessage\n : response.error || response.message || structuredMessage || `Task ${status}`;\n return {\n success: false as const,\n status: 'failed' as const,\n data: hasStructuredError || hasStructuredPayload ? failedPayload : undefined,\n error: typeof failedError === 'string' ? failedError : `Task ${status}`,\n adcpError: adcpErrorInfo,\n errorInstance: this.buildErrorInstance(taskId, adcpErrorInfo),\n correlationId: extractCorrelationId(failedPayload),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n default:\n // Unknown status - treat as completed if we have data\n const defaultData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n if (\n defaultData &&\n (defaultData !== response || response.structuredContent || response.result || response.data)\n ) {\n const defaultSuccess = this.isOperationSuccess(defaultData, taskName, serverVersion);\n\n // Validate response against AdCP schema - validate extracted data, not protocol wrapper\n const defaultValidation = this.validateResponseSchema(defaultData, taskName, debugLogs, serverVersion);\n\n // In strict mode, schema validation failures cause task to fail\n const defaultFinalSuccess = defaultSuccess && defaultValidation.valid;\n const defaultFinalError = !defaultFinalSuccess\n ? defaultValidation.errors.length > 0\n ? `Schema validation failed: ${defaultValidation.errors.join('; ')}`\n : this.extractOperationError(defaultData)\n : undefined;\n\n if (defaultFinalSuccess) {\n return {\n success: true as const,\n status: 'completed' as const,\n data: defaultData,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'completed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n const defaultAdcpError = extractAdcpErrorInfo(defaultData);\n return {\n success: false as const,\n status: 'failed' as const,\n data: defaultData,\n error: defaultFinalError!,\n adcpError: defaultAdcpError,\n errorInstance: this.buildErrorInstance(taskId, defaultAdcpError),\n correlationId: extractCorrelationId(defaultData),\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'failed',\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n } else {\n throw new Error(`Unknown status: ${status || 'undefined'}`);\n }\n }\n }\n\n /**\n * Extract response data from different protocol formats\n *\n * @internal Exposed for testing purposes\n */\n public extractResponseData(response: any, debugLogs?: any[], toolName?: string, serverVersion?: 'v2' | 'v3'): any {\n // MCP error responses (isError: true) flow through here — the response unwrapper\n // extracts structured data (adcp_error, context, ext) from structuredContent or text\n\n // Paused A2A tasks intentionally carry the AdCP pause arm on\n // `Task.status.message` rather than an artifact: artifacts represent\n // completed transport output, while input/auth-required leaves the A2A\n // task resumable. The general unwrapper rejects intermediate tasks, so\n // normalize this one standard location before artifact extraction.\n const a2aState = response?.result?.status?.state;\n if (a2aState === 'input-required' || a2aState === 'auth-required') {\n const statusParts = response?.result?.status?.message?.parts;\n const statusDataPart = (Array.isArray(statusParts) ? [...statusParts].reverse() : []).find(\n (part: unknown): part is { kind: 'data'; data: Record<string, unknown> } =>\n !!part &&\n typeof part === 'object' &&\n (part as { kind?: unknown }).kind === 'data' &&\n !!(part as { data?: unknown }).data &&\n typeof (part as { data?: unknown }).data === 'object' &&\n !Array.isArray((part as { data?: unknown }).data)\n );\n if (statusDataPart) {\n this.logDebug(debugLogs, 'info', 'Extracted A2A pause data from Task.status.message', { state: a2aState });\n return statusDataPart.data;\n }\n }\n\n // Use the shared response unwrapper utility\n // This handles MCP structuredContent, A2A artifacts (including HITL multi-artifact responses),\n // and various edge cases consistently\n try {\n // Log what type of response we're processing BEFORE unwrapping\n // This ensures we have debug visibility even if unwrapping fails\n if (response?.structuredContent) {\n this.logDebug(debugLogs, 'info', 'Processing MCP structuredContent response');\n } else if (response?.result?.artifacts) {\n const artifacts = response.result.artifacts;\n if (artifacts.length === 0) {\n this.logDebug(debugLogs, 'info', 'Processing A2A response with empty artifacts array');\n } else {\n // Calculate total part count across all artifacts\n const totalParts = artifacts.reduce((sum: number, artifact: any) => {\n return sum + (artifact.parts?.length || 0);\n }, 0);\n\n // Extract canonical DataPart keys for debugging.\n const latestDataPart = getLatestA2ADataPartFromResponse(response);\n const dataKeys = latestDataPart?.data ? Object.keys(latestDataPart.data) : [];\n\n this.logDebug(debugLogs, 'info', 'Processing A2A artifact structure', {\n artifactCount: artifacts.length,\n partCount: totalParts,\n extractedFrom: artifacts.length > 1 ? 'multi-artifact (HITL)' : 'single-artifact',\n dataKeys,\n });\n }\n } else if (response?.data) {\n this.logDebug(debugLogs, 'info', 'Processing response.data field');\n } else {\n this.logDebug(debugLogs, 'info', 'Processing response without standard structure', {\n responseKeys: Object.keys(response || {}),\n });\n }\n\n // Now unwrap the response\n const unwrapped = unwrapProtocolResponse(response, toolName, undefined, {\n filterInvalidProducts: this.config.filterInvalidProducts,\n responseAdcpVersion: this.effectiveResponseAdcpVersion(serverVersion),\n });\n\n // Log successful extraction with result details\n if (response?.structuredContent) {\n this.logDebug(debugLogs, 'info', 'Successfully extracted MCP data', {\n dataKeys: Object.keys(unwrapped || {}),\n });\n } else if (response?.result?.artifacts && response.result.artifacts.length > 0) {\n this.logDebug(debugLogs, 'info', 'Successfully extracted A2A data', {\n dataKeys: Object.keys(unwrapped || {}),\n });\n }\n\n return unwrapped;\n } catch (error) {\n this.logDebug(debugLogs, 'warning', 'Response unwrapper failed', {\n error: error instanceof Error ? error.message : String(error),\n toolName,\n responseKeys: Object.keys(response || {}),\n });\n\n // If toolName was provided, schema validation may have caused the failure.\n // Retry without toolName to extract the payload without schema checks.\n if (toolName) {\n try {\n return unwrapProtocolResponse(response);\n } catch {\n // Unwrapping itself failed — fall through to raw response\n }\n }\n\n return response;\n }\n }\n\n /**\n * Check if extracted response data represents a successful operation.\n * Handles singular `error`, plural `errors` (AdCP schema), and `success: false`.\n */\n private isOperationSuccess(data: any, taskName?: string, serverVersion?: 'v2' | 'v3'): boolean {\n return isAdcpOperationSuccess(data, taskName, this.effectiveResponseAdcpVersion(serverVersion));\n }\n\n /**\n * Extract a human-readable error message from response data.\n * Handles singular `error`, plural `errors` array, and `message` field.\n */\n private extractOperationError(data: any): string {\n if (data?.adcp_error) {\n const ae = data.adcp_error;\n return ae.message ? `${ae.code}: ${ae.message}` : ae.code;\n }\n const pluralError = Array.isArray(data?.errors)\n ? data.errors\n .map((error: any) => error?.message || error?.code)\n .filter((value: unknown): value is string => typeof value === 'string' && value.length > 0)\n .join('; ')\n : undefined;\n return (\n data?.error ||\n pluralError ||\n data?.error_detail ||\n data?.reason ||\n data?.rejection_reason ||\n data?.message ||\n 'Operation failed'\n );\n }\n\n /**\n * Helper to add debug logs safely\n */\n private logDebug(debugLogs: any[] | undefined, type: string, message: string, details?: any) {\n if (debugLogs && Array.isArray(debugLogs)) {\n debugLogs.push({\n type,\n message,\n timestamp: new Date().toISOString(),\n details,\n });\n }\n }\n\n /**\n * Handle 'working' status - return as valid intermediate state\n */\n private async waitForWorkingCompletion<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n initialResponse: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n serverVersion: 'v2' | 'v3' = 'v3'\n ): Promise<TaskResult<T>> {\n // Extract any data that came with the working response\n const partialData = this.extractResponseData(initialResponse, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'working',\n response: initialResponse,\n });\n this.compactIntermediateTaskState(taskId, 'working');\n\n // Return working status immediately - this is a valid intermediate state\n // Callers can use the taskId to poll for completion or set up webhooks\n return {\n success: true, // The task is progressing, not failed\n status: 'working',\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n /**\n * Set up submitted task with webhook\n */\n private async setupSubmittedTask<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n response: any,\n messages: Message[],\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n serverVersion: 'v2' | 'v3' = 'v3'\n ): Promise<TaskResult<T>> {\n // Extract any data that came with the submitted response\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n\n let webhookUrl = response.webhookUrl;\n\n // If no webhook URL provided by server, generate one. The webhook URL\n // macro path uses the local `taskId` (the runner-side correlation id\n // that doubles as the `{operation_id}` macro value), not the server\n // handle — webhook URLs identify the buyer-side request, not the\n // seller-side task.\n if (!webhookUrl && this.config.webhookManager) {\n webhookUrl = this.config.webhookManager.generateUrl(taskId);\n await this.config.webhookManager.registerWebhook(agent, taskId, webhookUrl);\n }\n\n // Polling and the buyer-facing `SubmittedContinuation.taskId` use the\n // SERVER-assigned task handle, not the runner's local UUID. The local\n // UUID is the `activeTasks` map key and the `{operation_id}` webhook\n // macro value — it never reaches the seller. The server handle comes\n // from `response.task_id` / `response.data.task_id` (AdCP submitted-arm\n // wire fields) or, for A2A responses, the same handle surfaced via\n // metadata (`adcp_task_id` / `serverTaskId`). The A2A transport `Task.id`\n // is retained separately as `metadata.a2aTaskId`; it is never a\n // `tasks/get` work handle. `responseParser.getTaskId` walks the AdCP\n // handle shapes.\n //\n // When the seller violated the spec and didn't include a task handle\n // we fall back to the local UUID so the buyer at least gets a\n // non-undefined `taskId` field. The polling cycle won't be able to\n // locate the work in this state — log an advisory so operators\n // grepping debug logs can pinpoint the seller-side spec violation.\n const extractedServerTaskId = this.responseParser.getTaskId(response);\n const serverTaskId = extractedServerTaskId ?? taskId;\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'submitted',\n response,\n });\n // Snapshot only what continuations need. Referencing `options.transport`\n // inside either closure would retain the entire per-call options object,\n // including unrelated adopter metadata, for as long as the continuation\n // remains reachable.\n const pollingTransport = options.transport;\n if (!extractedServerTaskId) {\n debugLogs.push({\n type: 'warning',\n message:\n 'Submitted-arm response omitted task_id (spec violation). Polling will use the runner-side ' +\n 'correlation id as a fallback; the seller will not recognize it. ' +\n 'Expected: response.task_id / response.data.task_id (AdCP), A2A metadata.serverTaskId, ' +\n 'or A2A metadata.adcp_task_id.',\n timestamp: new Date().toISOString(),\n taskName,\n runnerTaskId: taskId,\n });\n }\n\n const submitted = this.createSubmittedContinuation<T>(\n agent,\n taskId,\n taskName,\n serverTaskId,\n webhookUrl,\n pollingTransport,\n metadata,\n deferTerminalTaskStatus,\n serverVersion\n );\n\n this.compactIntermediateTaskState(taskId, 'submitted');\n\n return {\n success: true, // The task is progressing, not failed\n status: 'submitted',\n submitted,\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n /** Build polling closures around one authoritative seller work handle. */\n private createSubmittedContinuation<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n serverTaskId: string,\n webhookUrl: string | undefined,\n pollingTransport: import('../protocols').TransportOptions | undefined,\n metadata: TaskResultMetadata,\n deferTerminalTaskStatus: boolean,\n serverVersion: 'v2' | 'v3'\n ): SubmittedContinuation<T> {\n return {\n taskId: serverTaskId,\n webhookUrl,\n track: async (transport?: import('../protocols').TransportOptions) => {\n const transportSnapshot = snapshotTransportOptions(transport ?? pollingTransport ?? this.config.transport);\n const task = (\n await this.getTaskStatusWithRawResponse(\n agent,\n serverTaskId,\n transportSnapshot,\n undefined,\n taskName,\n serverVersion\n )\n ).task;\n if (!deferTerminalTaskStatus && ['completed', 'failed', 'rejected', 'canceled'].includes(task.status)) {\n this.updateTaskStatus(taskId, task.status as TaskStatus, task.result, task.error);\n }\n return task;\n },\n waitForCompletion: async (pollInterval = 60000, signal?: AbortSignal, requireExactTaskIdentity = false) => {\n void requireExactTaskIdentity;\n const completed = await this.pollTaskCompletion<T>(\n agent,\n serverTaskId,\n pollInterval,\n pollingTransport,\n signal,\n metadata.a2aTaskId,\n taskName,\n taskId,\n serverVersion\n );\n // `pollTaskCompletion` also returns nonresumable paused\n // input-required/auth-required states. Preserve that status so callers\n // can select an explicit application/protocol-specific recovery path;\n // only genuinely terminal statuses trigger delayed state eviction.\n if (!deferTerminalTaskStatus || !TERMINAL_TASK_STATUSES.has(completed.status as TaskStatus)) {\n this.updateTaskStatus(taskId, completed.status as TaskStatus, completed.data, completed.error);\n }\n return completed;\n },\n };\n }\n\n /**\n * A committed compatibility hook may replace resumable continuations with\n * wrappers that validate and durably persist their terminal result. Attach\n * local task publication only after those final wrappers return.\n */\n private attachSettledContinuationTaskStatus<T>(taskId: string, result: TaskResult<T>): TaskResult<T> {\n const publish = (\n status: TaskStatus,\n data?: unknown,\n error?: string,\n identity?: { serverTaskId?: string; taskType?: string }\n ) => {\n this.publishSettledTaskStatus(taskId, status, data, error, false, identity);\n };\n\n if (result.submitted) {\n const submitted = result.submitted;\n result.submitted = {\n ...submitted,\n track: async transport => {\n const task = await submitted.track(transport);\n publish(task.status as TaskStatus, task.result, task.error, {\n serverTaskId: task.taskId,\n taskType: task.taskType,\n });\n return task;\n },\n waitForCompletion: async (pollInterval, signal) => {\n const completion = this.attachSettledContinuationTaskStatus(\n taskId,\n await submitted.waitForCompletion(pollInterval, signal)\n );\n publish(completion.status as TaskStatus, completion.data, completion.error, {\n serverTaskId: completion.metadata.serverTaskId ?? submitted.taskId,\n taskType: completion.metadata.taskName,\n });\n return completion;\n },\n };\n }\n\n if (result.deferred) {\n const deferred = result.deferred;\n result.deferred = {\n ...deferred,\n resume: async input => {\n const completion = this.attachSettledContinuationTaskStatus(taskId, await deferred.resume(input));\n if (!(DEFERRED_SETTLEMENT_ACK in completion)) {\n publish(completion.status as TaskStatus, completion.data, completion.error, {\n serverTaskId: completion.metadata.serverTaskId,\n taskType: completion.metadata.taskName,\n });\n }\n return completion;\n },\n };\n }\n\n return result;\n }\n\n private publishSettledTaskStatus(\n taskId: string,\n status: TaskStatus,\n data?: unknown,\n error?: string,\n fromExternalObservation = false,\n identity: { serverTaskId?: string; taskType?: string } = {}\n ): void {\n if (!TERMINAL_TASK_STATUSES.has(status)) return;\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n if (!fromExternalObservation) {\n if (identity.serverTaskId !== undefined && identity.taskType !== undefined) {\n const observation: ExternalTaskSettlementObservation = { status, result: data, ...identity };\n this.settledExternalTaskObservationKeys.set(taskId, {\n key: this.externalTaskObservationKey(observation),\n status,\n ...(error !== undefined && { error: error.slice(0, MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS) }),\n });\n }\n this.closeExternalTaskSettlement(\n taskId,\n new Error('The task settled through its direct response; a racing pushed result was not accepted.')\n );\n }\n if (task.status !== status) this.updateTaskStatus(taskId, status, data, error);\n }\n\n private rejectPendingExternalTaskObservations(taskId: string, _error: unknown): void {\n this.pendingExternalTaskObservations.delete(taskId);\n }\n\n private liveExternalTaskSettlementCount(): number {\n let count = 0;\n for (const taskId of this.deferredTerminalPublicationTaskIds) {\n if (!this.closedExternalTaskSettlementTaskIds.has(taskId)) count += 1;\n }\n return count;\n }\n\n private compactClosedExternalTaskSettlementFences(): void {\n while (\n this.deferredTerminalPublicationTaskIds.size + this.settlementCapacityReservations.size >=\n COMPACTED_TASK_STATE_LIMIT\n ) {\n const oldestClosed = [...this.deferredTerminalPublicationTaskIds].find(taskId =>\n this.closedExternalTaskSettlementTaskIds.has(taskId)\n );\n if (oldestClosed === undefined) return;\n // The durable registration/recovery layer remains the authoritative\n // fail-closed route after this bounded exact-retry cache is evicted.\n this.deferredTerminalPublicationTaskIds.delete(oldestClosed);\n this.closedExternalTaskSettlementTaskIds.delete(oldestClosed);\n this.settledExternalTaskObservationKeys.delete(oldestClosed);\n this.externalTaskSettlementExpiry.delete(oldestClosed);\n const timer = this.externalTaskSettlementTimers.get(oldestClosed);\n if (timer) clearTimeout(timer);\n this.externalTaskSettlementTimers.delete(oldestClosed);\n }\n }\n\n private closeExternalTaskSettlement(taskId: string, error: unknown): void {\n this.externalTaskSettlementHandlers.delete(taskId);\n this.externalTaskSettlementInFlight.delete(taskId);\n this.closedExternalTaskSettlementTaskIds.add(taskId);\n this.rejectPendingExternalTaskObservations(taskId, error);\n }\n\n private clearExternalTaskSettlementState(taskId: string): void {\n this.deferredTerminalPublicationTaskIds.delete(taskId);\n this.closedExternalTaskSettlementTaskIds.delete(taskId);\n this.externalTaskSettlementHandlers.delete(taskId);\n this.externalTaskSettlementInFlight.delete(taskId);\n this.settledExternalTaskObservationKeys.delete(taskId);\n this.externalTaskSettlementExpiry.delete(taskId);\n const timer = this.externalTaskSettlementTimers.get(taskId);\n if (timer) clearTimeout(timer);\n this.externalTaskSettlementTimers.delete(taskId);\n this.rejectPendingExternalTaskObservations(\n taskId,\n new Error('The durable push-settlement retention window expired before the observation was accepted.')\n );\n }\n\n private retainExternalTaskSettlementState(taskId: string): void {\n const retentionMs = this.config.externalTaskSettlementRetentionMs ?? DEFAULT_EXTERNAL_TASK_SETTLEMENT_RETENTION_MS;\n const expiry = Date.now() + retentionMs;\n if ((this.externalTaskSettlementExpiry.get(taskId) ?? 0) >= expiry) return;\n const priorTimer = this.externalTaskSettlementTimers.get(taskId);\n if (priorTimer) clearTimeout(priorTimer);\n this.externalTaskSettlementExpiry.set(taskId, expiry);\n const expire = () => {\n if (this.externalTaskSettlementExpiry.get(taskId) !== expiry) return;\n const remaining = expiry - Date.now();\n if (remaining > 0) {\n const timer = setTimeout(expire, Math.min(remaining, MAX_TIMER_DELAY_MS));\n timer.unref?.();\n this.externalTaskSettlementTimers.set(taskId, timer);\n return;\n }\n this.externalTaskSettlementTimers.delete(taskId);\n this.clearExternalTaskSettlementState(taskId);\n };\n const timer = setTimeout(expire, Math.min(retentionMs, MAX_TIMER_DELAY_MS));\n timer.unref?.();\n this.externalTaskSettlementTimers.set(taskId, timer);\n }\n\n /** Release short-lived task inspection state without dropping a live durable push fence. */\n private cleanupTerminalTaskInspectionState(taskId: string): void {\n this.activeTasks.delete(taskId);\n this.compactedTaskIds.delete(taskId);\n if (\n this.deferredTerminalPublicationTaskIds.has(taskId) ||\n this.closedExternalTaskSettlementTaskIds.has(taskId) ||\n this.externalTaskSettlementHandlers.has(taskId)\n ) {\n if (this.externalTaskSettlementExpiry.has(taskId)) return;\n }\n this.clearExternalTaskSettlementState(taskId);\n }\n\n private registerExternalTaskSettlement(taskId: string, handler: ExternalTaskSettlementHandler): void {\n this.externalTaskSettlementHandlers.set(taskId, handler);\n const pending = this.pendingExternalTaskObservations.get(taskId);\n if (!pending) return;\n this.pendingExternalTaskObservations.delete(taskId);\n for (const observation of pending) {\n // The HTTP delivery has already been acknowledged. Durable failure stays\n // fenced locally and is surfaced by subsequent reconciliation/retries.\n void this.settleExternalTaskStatus(taskId, handler, observation).catch(() => undefined);\n }\n }\n\n private externalTaskObservationKey(observation: ExternalTaskSettlementObservation): string {\n return createHmac('sha256', EXTERNAL_TASK_OBSERVATION_HMAC_KEY)\n .update(\n canonicalize({\n status: observation.status,\n serverTaskId: observation.serverTaskId ?? null,\n taskType: observation.taskType ?? null,\n result: observation.result ?? null,\n })\n )\n .digest('base64url');\n }\n\n private async settleExternalTaskStatus(\n taskId: string,\n handler: ExternalTaskSettlementHandler,\n observation: ExternalTaskSettlementObservation\n ): Promise<ExternalTaskStatusResult> {\n const observationKey = this.externalTaskObservationKey(observation);\n const existing = this.externalTaskSettlementInFlight.get(taskId);\n if (existing) {\n if (existing.waiterCount >= MAX_PENDING_EXTERNAL_TASK_OBSERVATIONS) {\n throw new Error('Too many terminal push notifications are undergoing durable task settlement.');\n }\n existing.waiterCount += 1;\n try {\n const accepted = await existing.settlement;\n if (existing.observationKey !== observationKey) {\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n return { ...accepted, duplicate: true };\n } finally {\n existing.waiterCount -= 1;\n }\n }\n const settlement = (async () => {\n const settled = await handler(observation);\n const settledStatus = settled.status as TaskStatus;\n if (this.closedExternalTaskSettlementTaskIds.has(taskId)) {\n throw new Error('The task settled through its direct response; the racing pushed result was not accepted.');\n }\n if (this.settledExternalTaskObservationKeys.has(taskId)) {\n throw new Error('This task already completed durable settlement; the pushed result was not accepted.');\n }\n this.publishSettledTaskStatus(taskId, settledStatus, settled.data, settled.error, true);\n this.settledExternalTaskObservationKeys.set(taskId, {\n key: observationKey,\n status: settledStatus,\n ...(settled.error !== undefined && {\n error: settled.error.slice(0, MAX_RETAINED_EXTERNAL_TASK_ERROR_CHARS),\n }),\n });\n this.closeExternalTaskSettlement(\n taskId,\n new Error('The task already completed durable external settlement; a later pushed result was not accepted.')\n );\n return {\n settled: true,\n result: settled.data,\n status: settled.status as TaskStatus,\n ...(settled.error !== undefined && { error: settled.error }),\n };\n })();\n const inFlight = { observationKey, settlement, waiterCount: 1 };\n this.externalTaskSettlementInFlight.set(taskId, inFlight);\n try {\n return await settlement;\n } finally {\n if (this.externalTaskSettlementInFlight.get(taskId) === inFlight) {\n this.externalTaskSettlementInFlight.delete(taskId);\n }\n }\n }\n\n /** Release abandoned caller data without publishing a premature terminal state. */\n private compactAbandonedObserverTaskState(taskId: string): void {\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n }\n\n /**\n * A working/submitted response carries everything needed to poll externally.\n * Keeping the original request in activeTasks after dispatch would pin\n * inline assets, webhook credentials, conversation payloads, and per-call\n * options for an unbounded amount of time while the seller works. Retain\n * only lifecycle metadata and the separately tracked idempotency key.\n */\n private compactIntermediateTaskState(\n taskId: string,\n status: 'working' | 'submitted' | 'input-required' | 'auth-required' | 'deferred'\n ): void {\n const task = this.activeTasks.get(taskId);\n if (!task) return;\n task.status = status;\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n this.compactedTaskIds.delete(taskId);\n this.compactedTaskIds.set(taskId, true);\n while (this.compactedTaskIds.size > COMPACTED_TASK_STATE_LIMIT) {\n const oldest = [...this.compactedTaskIds.keys()].find(\n candidate =>\n !this.deferredTerminalPublicationTaskIds.has(candidate) &&\n !this.externalTaskSettlementHandlers.has(candidate) &&\n !this.externalTaskSettlementInFlight.has(candidate)\n );\n if (oldest === undefined) break;\n this.compactedTaskIds.delete(oldest);\n this.activeTasks.delete(oldest);\n this.closeExternalTaskSettlement(oldest, new Error('The compacted task was evicted before push settlement.'));\n this.closedExternalTaskSettlementTaskIds.delete(oldest);\n }\n }\n\n /**\n * Handle input-required status\n *\n * Some agents (like Yahoo) return input-required status. THIS IS TOTALLY VALID AND IS AN INTERMEDIATE STATE.\n * IT SHOULD NOT BE THROWING AN ERROR. IT DOES NOT ALWAYS REQUIRE an input handler.\n * This is common for HITL (human-in-the-loop) workflows where the agent has already processed\n * the request and is just signaling that async approval may be needed.\n */\n private async handleInputRequired<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n response: any,\n messages: Message[],\n inputHandler?: InputHandler,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n pauseStatus: 'input-required' | 'auth-required' = 'input-required',\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n const inputRequest = this.responseParser.parseInputRequest(response);\n const serverContextId = this.responseParser.getContextId(response) ?? response.contextId;\n const a2aTaskId = this.responseParser.getA2AContinuationTaskId(response);\n const settlementServerTaskId = deferTerminalTaskStatus ? this.responseParser.getTaskId(response) : undefined;\n\n // MCP has no standard continuation after a returned pause. A2A can resume\n // only when the seller supplied an official task ID; without one, a same-\n // tool `{ input }` call would be a fresh mutation rather than an exact-task\n // continuation. In either case, return the nonresumable pause without\n // invoking a handler or inventing a continuation call.\n if (agent.protocol === 'mcp' || !a2aTaskId) {\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: pauseStatus,\n response,\n inputRequest,\n });\n this.compactIntermediateTaskState(taskId, pauseStatus);\n return {\n success: true,\n status: pauseStatus,\n data: partialData,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n // If no handler is provided, return the pause as a valid intermediate\n // state so callers can collect input or refresh credentials themselves.\n if (!inputHandler) {\n // Extract any data that came with the response (some agents include partial results)\n const partialData = this.extractResponseData(response, debugLogs, taskName, serverVersion);\n const metadata = this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: pauseStatus,\n response,\n inputRequest,\n });\n this.compactIntermediateTaskState(taskId, pauseStatus);\n\n // Preserve a safe same-process resume path for callers that choose to\n // collect HITL input themselves. This continues the existing seller task\n // and never replays the original mutation as a fresh dispatch.\n const token = randomUUID();\n const deferredStorage = this.config.deferredStorage;\n const usesDurableStorage = deferredStorage !== undefined && persistPausedContinuation;\n if (usesDurableStorage) {\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const continuationVersion = randomUUID();\n this.deferredAgents.set(agent.id, agent);\n const deferredState: DeferredTaskState = {\n continuationVersion,\n taskId,\n ...(serverContextId !== undefined && { contextId: serverContextId }),\n a2aTaskId,\n serverVersion,\n serverVersionSynthetic: this.activeTasks.get(taskId)?.serverVersionSynthetic,\n agentId: agent.id,\n taskName,\n params: durableDeferredSnapshot(params),\n messages: durableDeferredSnapshot(messages),\n pauseStatus,\n pauseQuestion: inputRequest.question,\n ...(deferredClientContext !== undefined && {\n clientContext: durableDeferredSnapshot(deferredClientContext),\n }),\n ...(deferTerminalTaskStatus && {\n settlementOperationId: taskId,\n settlementOperationRouteRequired: true as const,\n }),\n ...(deferTerminalTaskStatus &&\n requireDeferredSettlementResumeAuthorization && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(settlementServerTaskId !== undefined && { settlementServerTaskId }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n if (deferTerminalTaskStatus) this.requireDeferredSettlementOperationRouting(deferredStorage);\n const stored = deferTerminalTaskStatus\n ? await deferredStorage.putForSettlementOperationIfAbsent(taskId, token, deferredState, ttlSeconds)\n : await deferredStorage.putIfAbsent(token, deferredState, ttlSeconds);\n if (!stored) {\n throw new Error('Deferred continuation token already exists; refusing to replace another task.');\n }\n try {\n throwIfAborted(options.signal);\n } catch (error) {\n await deferredStorage.takeIfVersion(token, continuationVersion);\n throw error;\n }\n }\n let inProcessResumeConsumed = false;\n const resumeInProcess = async (input: unknown): Promise<TaskResult<T>> => {\n const inputSnapshot = structuredClone(input);\n if (inProcessResumeConsumed) throw new Error('Deferred continuation token has already been consumed.');\n inProcessResumeConsumed = true;\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n inputSnapshot,\n messages,\n undefined,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n };\n const deferred: DeferredContinuation<T> = {\n token,\n question: inputRequest.question,\n resume: usesDurableStorage\n ? input => this.resumeDeferredTaskFromLiveClosure<T>(token, input, !deferTerminalTaskStatus)\n : resumeInProcess,\n };\n\n return {\n success: true, // The task is progressing, not failed\n status: pauseStatus,\n data: partialData,\n deferred,\n metadata,\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n const discussedField = (content: unknown): string | undefined => {\n if (content == null || typeof content !== 'object' || Array.isArray(content)) return undefined;\n const direct = (content as Record<string, unknown>).field;\n if (typeof direct === 'string') return direct;\n return this.responseParser.isInputRequest(content)\n ? this.responseParser.parseInputRequest(content).field\n : undefined;\n };\n\n // Build context for handler\n const context: ConversationContext = {\n messages,\n inputRequest,\n taskId,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n attempt: 1,\n maxAttempts: options.maxClarifications || 3,\n deferToHuman: async () => ({ defer: true, token: randomUUID() }),\n abort: reason => {\n throw new Error(reason || 'Task aborted');\n },\n getSummary: () => messages.map(m => `${m.role}: ${JSON.stringify(m.content)}`).join('\\n'),\n wasFieldDiscussed: field =>\n // Check if any agent message requested this field via input-required\n messages.some(m => m.role === 'agent' && discussedField(m.content) === field),\n getPreviousResponse: field => {\n // Find the agent message that requested this field\n const fieldRequestIndex = messages.findIndex(m => m.role === 'agent' && discussedField(m.content) === field);\n // The response is the next user message after the field request\n if (fieldRequestIndex >= 0) {\n const responseMsg = messages\n .slice(fieldRequestIndex + 1)\n .find(m => m.role === 'user' && m.metadata?.type === 'input_response');\n return responseMsg?.content;\n }\n return undefined;\n },\n };\n\n // Call handler\n const handlerResponse = await inputHandler(context);\n throwIfAborted(options.signal);\n\n // Check if handler wants to defer\n if (isDeferResponse(handlerResponse)) {\n const token = handlerResponse.token;\n const deferredStorage = this.config.deferredStorage;\n const usesDurableStorage = deferredStorage !== undefined && persistPausedContinuation;\n\n // Save deferred state for later resumption\n if (usesDurableStorage) {\n assertDeferredContinuationToken(token);\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const continuationVersion = randomUUID();\n this.deferredAgents.set(agent.id, agent);\n const deferredState: DeferredTaskState = {\n continuationVersion,\n taskId,\n ...(serverContextId !== undefined && { contextId: serverContextId }),\n a2aTaskId,\n serverVersion,\n serverVersionSynthetic: this.activeTasks.get(taskId)?.serverVersionSynthetic,\n agentId: agent.id,\n taskName,\n params: durableDeferredSnapshot(params),\n messages: durableDeferredSnapshot(messages),\n pauseStatus: 'deferred',\n pauseQuestion: inputRequest.question,\n ...(deferredClientContext !== undefined && {\n clientContext: durableDeferredSnapshot(deferredClientContext),\n }),\n ...(deferTerminalTaskStatus && {\n settlementOperationId: taskId,\n settlementOperationRouteRequired: true as const,\n }),\n ...(deferTerminalTaskStatus &&\n requireDeferredSettlementResumeAuthorization && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(settlementServerTaskId !== undefined && { settlementServerTaskId }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n if (deferTerminalTaskStatus) this.requireDeferredSettlementOperationRouting(deferredStorage);\n const stored = deferTerminalTaskStatus\n ? await deferredStorage.putForSettlementOperationIfAbsent(taskId, token, deferredState, ttlSeconds)\n : await deferredStorage.putIfAbsent(token, deferredState, ttlSeconds);\n if (!stored) {\n throw new Error('Deferred continuation token already exists; refusing to replace another task.');\n }\n try {\n throwIfAborted(options.signal);\n } catch (error) {\n // Cancellation may race a storage adapter that ignores the signal.\n // Remove only the exact generation just written. A concurrent resume\n // may already have claimed and advanced a newer generation.\n await deferredStorage.takeIfVersion(token, continuationVersion);\n throw error;\n }\n }\n // Deferred storage is the resume source of truth. Avoid retaining a\n // duplicate full request (including assets/credentials) in activeTasks.\n this.compactIntermediateTaskState(taskId, 'deferred');\n\n let inProcessResumeConsumed = false;\n const resumeInProcess = async (input: unknown): Promise<TaskResult<T>> => {\n const inputSnapshot = structuredClone(input);\n if (inProcessResumeConsumed) throw new Error('Deferred continuation token has already been consumed.');\n inProcessResumeConsumed = true;\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n inputSnapshot,\n messages,\n undefined,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n };\n const deferred: DeferredContinuation<T> = {\n token,\n question: inputRequest.question,\n resume: usesDurableStorage\n ? input => this.resumeDeferredTaskFromLiveClosure<T>(token, input, !deferTerminalTaskStatus)\n : resumeInProcess,\n };\n\n return {\n success: true, // The task is progressing, not failed\n status: 'deferred',\n deferred,\n metadata: this.buildMetadata({\n taskId,\n taskName,\n agent,\n startTime,\n status: 'deferred',\n clarificationRounds: 1,\n response,\n }),\n conversation: messages,\n debug_logs: debugLogs,\n };\n }\n\n // Handler provided input - continue with the task\n throwIfAborted(options.signal);\n return this.continueTaskWithInput<T>(\n agent,\n taskId,\n taskName,\n params,\n serverContextId,\n a2aTaskId,\n handlerResponse,\n messages,\n inputHandler, // Pass handler for multi-round clarification\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n }\n\n /**\n * List tasks for an agent, preferring MCP Tasks protocol when available.\n */\n private async listTasksForAgent(\n agent: AgentConfig,\n transport?: import('../protocols').TransportOptions\n ): Promise<TaskInfo[]> {\n // Try MCP Tasks protocol method first\n if (agent.protocol === 'mcp') {\n const authToken = getAuthToken(agent);\n try {\n return await listMCPTasks(agent.agent_uri, authToken, undefined, {\n transport: transport ?? this.config.transport,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n agentId: agent.id,\n },\n });\n } catch (err) {\n if (is401Error(err)) throw err;\n // Fall through to tool call if protocol method is not supported\n }\n }\n const response = (await ProtocolClient.callTool(\n agent,\n 'tasks/list',\n {},\n {\n serverVersion: this.lastKnownServerVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: transport ?? this.config.transport,\n onTransportActivity: this.config.onTransportActivity,\n }\n )) as Record<string, unknown>;\n return (response.tasks as TaskInfo[]) || [];\n }\n\n /**\n * Task tracking methods (PR #78)\n */\n async listTasks(agent: AgentConfig, transport?: import('../protocols').TransportOptions): Promise<TaskInfo[]> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n try {\n return await this.listTasksForAgent(agent, transportSnapshot);\n } catch {\n // Static message only — CodeQL's taint analysis treats `error` and\n // every property of it as sensitive once it originates from an\n // operation that touched `agent.oauth_client_credentials`. Surfaces\n // the failure occurred; full detail is available via DEBUG=adcp:*.\n console.warn('Failed to list tasks (see DEBUG=adcp:* logs for detail)');\n return [];\n }\n }\n\n private async getTaskStatusWithRawResponse(\n agent: AgentConfig,\n taskId: string,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal,\n expectedTaskType?: string,\n serverVersion?: 'v2' | 'v3'\n ): Promise<TaskStatusPollResult> {\n // AdCP `tasks/get` is the cross-protocol work-status interface\n // (`schemas/cache/<v>/bundled/core/tasks-get-{request,response}.json`).\n // MCP tool names cannot contain `/`, so MCP servers advertise the\n // SDK-owned `tasks_get` alias; A2A continues to use the spec slash name.\n //\n // The previous implementation tried MCP's `experimental.tasks.getTask`\n // first for MCP agents and fell through to the AdCP tool path on\n // capability-missing. The native MCP path tracks the TRANSPORT-call\n // lifecycle (MCP analog of A2A `Task.state`) — not AdCP work\n // lifecycle. For submitted-arm polling we need work status; the\n // two interfaces are not substitutes, so we always use the AdCP\n // tool here. MCP sellers that haven't registered `tasks_get` as\n // an AdCP tool will surface a tool-not-found error rather than\n // silently polling the wrong lifecycle.\n //\n // The request param is `task_id` (snake_case per AdCP 3.0); the\n // response is the spec's flat shape, mapped to `TaskInfo` via\n // {@link mapTasksGetResponseToTaskInfo}.\n //\n //\n // Request includes `include_result: true` so spec-conformant\n // sellers (AdCP 3.1.0+) populate the typed `result` field on\n // `completed` responses (per adcontextprotocol/adcp#3126). Older\n // sellers ignore the unknown request field; the response mapper\n // falls back to the informal `additionalProperties` passthrough\n // for those.\n const toolName = agent.protocol === 'mcp' ? 'tasks_get' : 'tasks/get';\n const response = (await ProtocolClient.callTool(\n agent,\n toolName,\n { task_id: taskId, include_result: true },\n {\n serverVersion: serverVersion ?? this.lastKnownServerVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: transport ?? this.config.transport,\n signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n taskId,\n },\n }\n )) as Record<string, unknown>;\n // We don't run `extractResponseData` here: that helper's\n // generic AdCP-error-arm detection treats any top-level\n // `error: { code, message }` as an error envelope and shreds the\n // response into `{ errors: [...] }`. For `tasks/get` the `error`\n // block is informational (the failed task's reason, not a\n // request rejection), so we map the raw response directly. The\n // mapper handles the AdCP-spec flat shape, the legacy\n // `{ task: ... }` nested wrapper, and MCP `structuredContent` /\n // A2A latest structured DataPart envelopes.\n const task = mapTasksGetResponseToTaskInfo(response);\n if (!task.taskId || task.taskId !== taskId) {\n throw new TaskBindingMismatchError(\n 'tasks/get returned a task identity that does not match the requested task.',\n response\n );\n }\n if (expectedTaskType !== undefined && task.taskType !== expectedTaskType) {\n throw new TaskBindingMismatchError(\n 'tasks/get returned a task type that does not match the submitted operation.',\n response\n );\n }\n return { task, rawResponse: response };\n }\n\n async getTaskStatus(\n agent: AgentConfig,\n taskId: string,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal\n ): Promise<TaskInfo> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n return (await this.getTaskStatusWithRawResponse(agent, taskId, transportSnapshot, signal)).task;\n }\n\n async pollTaskCompletion<T>(\n agent: AgentConfig,\n taskId: string,\n pollInterval = 60000,\n transport?: import('../protocols').TransportOptions,\n signal?: AbortSignal,\n a2aCancellationTaskId?: string,\n expectedTaskType?: string,\n metadataTaskId = taskId,\n serverVersion?: 'v2' | 'v3'\n ): Promise<TaskResult<T>> {\n // Transport policy is a request trust boundary. Own one shallow snapshot\n // for the entire polling lifetime so caller mutation cannot substitute a\n // fetch implementation or private-address policy between polls/cancel.\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n if (!Number.isFinite(pollInterval) || pollInterval < 0 || pollInterval > MAX_TIMER_DELAY_MS) {\n throw new RangeError(`pollInterval must be a finite non-negative number <= ${MAX_TIMER_DELAY_MS}`);\n }\n const pollStartTime = Date.now();\n const withServerTaskId = (metadata: TaskResultMetadata): TaskResultMetadata => ({\n ...metadata,\n serverTaskId: taskId,\n });\n while (true) {\n // adcp-client#1612: When the outer storyboard race timer fires, the\n // caller's AbortSignal is already aborted. Exit cleanly rather than\n // continuing to send `tasks/get` requests that nobody is waiting for.\n if (signal?.aborted) {\n const reason =\n signal.reason instanceof Error ? signal.reason.message : String(signal.reason ?? 'polling cancelled');\n // adcp-client#1617: Phase 1 — notify the seller so it can stop doing\n // work for a buyer that has already given up. A2A 0.3.0 §7.4 defines\n // tasks/cancel for exactly this case. Fire-and-forget: cancel failure\n // (TaskNotCancelable, network error, terminal-state race) is non-fatal.\n // TODO(adcp-client#1617-phase2): upgrade to awaited cancel once AdCP\n // spec defines a cross-protocol cancel verb.\n //\n // SECURITY: silent on rejection. The orphan rejection's `Error.message`\n // can carry an echoed transport response body — same trust-boundary\n // concern as `raceWithSignal` in `src/lib/testing/client.ts`. A buyer\n // who has already aborted MUST NOT see seller-controlled text leak\n // into their logs/telemetry. The outer try AND the `.catch(() => {})`\n // are both intentional: a malformed `agent_uri` could throw\n // synchronously from `fetch(...)` before the promise chain catches\n // it, so the try guards the dispatch path; the `.catch()` guards the\n // async settlement path.\n if (agent.protocol === 'a2a' && a2aCancellationTaskId && agent.agent_uri) {\n try {\n // adcp-client#1617 Phase 2: pass the full agent so cancelA2ATask\n // can sign the POST when agent.request_signing is configured.\n // signed-requests sellers no longer 401 the cancel.\n const cancelTransport = normalizeTransportOptions(transportSnapshot);\n void cancelA2ATask(\n agent,\n a2aCancellationTaskId,\n cancelTransport?.trustedFetchFn,\n cancelTransport?.allowPrivateIp\n ).catch(() => {\n /* see SECURITY note above */\n });\n } catch {\n /* see SECURITY note above */\n }\n }\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: `tasks/get polling was cancelled before a terminal state was observed: ${reason}`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n })\n ),\n });\n }\n\n // adcp-client#1585: A2A 0.3.x defines no minimum retention TTL for\n // completed tasks. A seller may evict a task between the buyer\n // observing the working-state response and the first explicit\n // `tasks/get` poll firing — `getTaskStatus` then throws with a\n // \"Task <id> not found\" message. Surface a descriptive `failed`\n // `TaskResult` so the caller sees an actionable error instead of an\n // opaque uncaught exception escaping from the polling loop.\n let status: TaskInfo;\n let rawResponse: Record<string, unknown> | undefined;\n try {\n const pollResult = await this.getTaskStatusWithRawResponse(\n agent,\n taskId,\n transportSnapshot,\n signal,\n expectedTaskType,\n serverVersion\n );\n status = pollResult.task;\n rawResponse = pollResult.rawResponse;\n } catch (err) {\n if (err instanceof TaskBindingMismatchError) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: err.message,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n response: err.rawResponse,\n })\n ),\n });\n }\n const msg = err instanceof Error ? err.message : String(err);\n // Bounded `\\S{1,128}` task-id segment (no `.*`) keeps the match\n // linear-time on adversarial inputs — CodeQL flags unbounded\n // polynomial regex on uncontrolled error strings.\n if (/\\btask\\s+\\S{1,128}\\s+not found\\b/i.test(msg)) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: `Task ${taskId} is no longer queryable — it may have been completed and evicted by the seller before this poll arrived. Consider using push notifications (reporting_webhook) instead of polling, or configuring a longer task retention TTL on the seller.`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n })\n ),\n });\n }\n throw err;\n }\n\n if (expectedTaskType !== undefined && (status.taskId !== taskId || status.taskType !== expectedTaskType)) {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error: 'The seller returned a task outside the requested durable task identity.',\n metadata: this.buildMetadata({\n taskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n }),\n });\n }\n\n if (status.status === ADCP_STATUS.COMPLETED) {\n const pollSuccess = this.isOperationSuccess(status.result, status.taskType, serverVersion);\n\n if (pollSuccess) {\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: true as const,\n status: 'completed' as const,\n data: status.result,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'completed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n const asyncResultErr = extractAdcpErrorInfo(status.result);\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: false as const,\n status: 'failed' as const,\n data: status.result,\n error: this.extractOperationError(status.result),\n adcpError: asyncResultErr,\n errorInstance: this.buildErrorInstance(metadataTaskId, asyncResultErr),\n correlationId: extractCorrelationId(status.result),\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'failed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n\n if (\n status.status === ADCP_STATUS.FAILED ||\n status.status === ADCP_STATUS.CANCELED ||\n status.status === ADCP_STATUS.REJECTED\n ) {\n const asyncFailedErr = extractAdcpErrorInfo(status.result);\n return markAuthoritativePolledTerminal(\n attachMatch({\n success: false as const,\n status: 'failed' as const,\n data: status.result,\n error: status.error || status.message || `Task ${status.status}`,\n adcpError: asyncFailedErr,\n errorInstance: this.buildErrorInstance(metadataTaskId, asyncFailedErr),\n correlationId: extractCorrelationId(status.result),\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: 'failed',\n response: rawResponse,\n })\n ),\n })\n );\n }\n\n // Paused states: `input-required` and `auth-required`. Polling\n // alone can't advance these. Return a `TaskResultIntermediate` so the\n // caller can branch on `result.status` and select an explicit\n // application/protocol-specific recovery path; this mirrors the\n // synchronous `handleInputRequired` no-handler path\n // (`success: true` because the task is progressing, not failed).\n // Without this branch the loop would spin until timeout — the\n // paused-state regression class flagged by adcp-client#977.\n if (status.status === ADCP_STATUS.INPUT_REQUIRED || status.status === ADCP_STATUS.AUTH_REQUIRED) {\n return attachMatch({\n success: true as const,\n status: status.status,\n data: status.result as T,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: status.taskType,\n agent,\n responseTimeMs: Date.now() - status.createdAt,\n status: status.status,\n response: rawResponse,\n })\n ),\n });\n }\n\n // adcp-client#1612: `status: 'unknown'` means `mapTasksGetResponseToTaskInfo`\n // could not extract a recognizable status string from the response — the\n // seller's `tasks/get` response did not conform to any expected envelope\n // shape (flat AdCP, MCP structuredContent, or A2A DataPart artifact).\n // Continuing to poll would spin forever since the shape won't change.\n // Surface a descriptive failure so the storyboard runner reports the\n // seller's non-conformance rather than burning the outer timeout budget.\n if (status.status === 'unknown') {\n return attachMatch({\n success: false as const,\n status: 'failed' as const,\n error:\n `tasks/get returned an unrecognizable response (parsed status: \"unknown\", taskId: \"${status.taskId}\"). ` +\n `The seller may not implement tasks/get as an AdCP skill, or its response did not match any ` +\n `supported envelope shape (flat AdCP, MCP structuredContent, or A2A DataPart artifact).`,\n metadata: withServerTaskId(\n this.buildMetadata({\n taskId: metadataTaskId,\n taskName: 'unknown',\n agent,\n startTime: pollStartTime,\n status: 'failed',\n response: rawResponse,\n })\n ),\n });\n }\n\n await this.sleep(pollInterval);\n // Re-check after sleep so a signal that fired mid-sleep exits at the top\n // of the next iteration rather than issuing one more `getTaskStatus` call.\n if (signal?.aborted) continue;\n }\n }\n\n /**\n * Resume a deferred task (client deferral)\n */\n async resumeDeferredTask<T>(token: string, input: any, publishTerminalTaskStatus = true): Promise<TaskResult<T>> {\n const result = (await this.resumeDeferredTaskWithContext<T>(token, input, publishTerminalTaskStatus)).result;\n await acknowledgeDeferredSettlement(result);\n return result;\n }\n\n /** Whether this exact continuation currently has a durable SDK checkpoint. @internal */\n async hasDurablyStoredDeferredTask(token: string): Promise<boolean> {\n if (!this.config.deferredStorage) return false;\n assertDeferredContinuationToken(token);\n return (await this.config.deferredStorage.has(token)) === true;\n }\n\n private requireDeferredSettlementOperationRouting(storage: DeferredTaskStorage): void {\n if (\n typeof storage.putForSettlementOperationIfAbsent !== 'function' ||\n typeof storage.getBySettlementOperationId !== 'function' ||\n typeof storage.replaceForSettlementOperationIfVersion !== 'function'\n ) {\n throw new ConfigurationError(\n 'Committed deferred settlement requires atomic operation routing so paused mutations remain discoverable across crashes. ' +\n 'Use MemoryStorage or implement the DeferredTaskStorage operation-route contract.'\n );\n }\n }\n\n private async loadDeferredSettlementOperationRoute(\n storage: DeferredTaskStorage,\n operationId: string\n ): Promise<{ token: string; state: DeferredTaskState } | undefined> {\n try {\n return await storage.getBySettlementOperationId(operationId);\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed continuation operation routing could not be loaded safely.',\n { cause: error }\n );\n }\n }\n\n private replaceDeferredState(\n storage: DeferredTaskStorage,\n token: string,\n expectedVersion: string,\n state: DeferredTaskState,\n ttlSeconds: number\n ): Promise<boolean> {\n if (state.settlementOperationId === undefined || state.settlementOperationRouteRequired !== true) {\n return storage.replaceIfVersion(token, expectedVersion, state, ttlSeconds);\n }\n this.requireDeferredSettlementOperationRouting(storage);\n return storage.replaceForSettlementOperationIfVersion(\n state.settlementOperationId,\n token,\n expectedVersion,\n token,\n state,\n ttlSeconds\n );\n }\n\n /** Recover the current pause generation through its committed operation route. @internal */\n async recoverDeferredTaskForOperation<T>(\n operationId: string,\n recoveryKey: string,\n publishTerminalTaskStatus = true\n ): Promise<{ token: string; result: TaskResult<T> } | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) return undefined;\n this.requireDeferredSettlementOperationRouting(storage);\n let authorized = false;\n try {\n authorized =\n (await this.config.authorizeDeferredSettlementOperationRecovery?.(\n operationId,\n recoveryKey,\n 'pause-recovery'\n )) === true;\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed continuation operation recovery could not be authorized safely.',\n { cause: error }\n );\n }\n if (!authorized) {\n throw new DeferredSettlementOwnershipError('Committed continuation operation recovery is not authorized.');\n }\n const routed = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!routed) return undefined;\n return this.recoverRoutedDeferredTask<T>(operationId, routed, publishTerminalTaskStatus);\n }\n\n private async recoverRoutedDeferredTask<T>(\n operationId: string,\n routed: { token: string; state: DeferredTaskState },\n publishTerminalTaskStatus: boolean\n ): Promise<{ token: string; result: TaskResult<T> } | undefined> {\n const { token, state } = routed;\n if (\n state.settlementOperationId !== operationId ||\n state.settlementOperationRouteRequired !== true ||\n state.expiresAt <= Date.now()\n ) {\n return undefined;\n }\n\n // Terminal/pending checkpoints already have exact replay logic and never\n // consume the supplied input before reaching it.\n if (\n state.settlementFinalizedResult !== undefined ||\n state.settlementTerminalResult !== undefined ||\n state.settlementPendingTaskId !== undefined\n ) {\n return {\n token,\n result: (await this.resumeDeferredTaskCore<T>(token, undefined, publishTerminalTaskStatus, false)).result,\n };\n }\n if (state.continuationClaimed) {\n return undefined;\n }\n if (!state.pauseStatus || !state.pauseQuestion) {\n throw new DeferredSettlementOwnershipError(\n 'The current committed continuation is missing its durable pause descriptor.'\n );\n }\n const agent = this.deferredAgents.get(state.agentId) ?? (await this.config.resolveDeferredAgent?.(state.agentId));\n if (!agent || agent.id !== state.agentId || agent.protocol !== 'a2a') {\n throw new DeferredSettlementOwnershipError(\n 'The trusted agent for the current committed continuation could not be resolved safely.'\n );\n }\n this.deferredAgents.set(agent.id, agent);\n const status = state.pauseStatus;\n const result = attachMatch({\n success: true,\n status,\n deferred: {\n token,\n question: state.pauseQuestion,\n resume: (input: unknown) =>\n this.resumeDeferredTaskFromClientClosure<T>(token, input, publishTerminalTaskStatus),\n },\n metadata: {\n taskId: state.taskId,\n taskName: state.taskName,\n agent: { id: agent.id, name: agent.name, protocol: agent.protocol },\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status,\n a2aTaskId: state.a2aTaskId,\n serverVersion: state.serverVersion,\n ...(state.serverVersionSynthetic !== undefined && {\n serverVersionSynthetic: state.serverVersionSynthetic,\n }),\n ...(state.contextId !== undefined && { contextId: state.contextId }),\n ...(state.settlementServerTaskId !== undefined && { serverTaskId: state.settlementServerTaskId }),\n },\n conversation: durableDeferredSnapshot(state.messages),\n } as TaskResult<T>);\n return { token, result };\n }\n\n /** Bridge a store-recovered callback into the same deferred terminal checkpoint. @internal */\n async checkpointExternalDeferredSettlement<T>(\n token: string,\n operationId: string,\n terminalResult: TaskResult<T>\n ): Promise<TaskResult<T> | undefined> {\n assertDeferredContinuationToken(token);\n const storage = this.config.deferredStorage;\n if (!storage) throw new Error('Deferred storage is unavailable for the linked callback checkpoint.');\n let state: DeferredTaskState | undefined;\n try {\n state = await storage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred callback checkpoint state could not be loaded safely.', {\n cause: error,\n });\n }\n if (!state) throw new Error('The linked deferred callback checkpoint is unavailable.');\n if (state.settlementOperationId !== operationId) {\n throw new Error('The deferred callback token is bound to a different committed operation.');\n }\n if (state.settlementOperationRouteRequired === true) {\n this.requireDeferredSettlementOperationRouting(storage);\n const currentRoute = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!currentRoute || currentRoute.token !== token) {\n throw new DeferredSettlementOwnershipError(\n 'The deferred callback token is not the current generation for its committed operation.'\n );\n }\n }\n const trustedServerTaskId = trustedDeferredServerTaskId(state);\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(terminalResult, trustedServerTaskId);\n const normalizedSavedTerminal =\n state.settlementTerminalResult === undefined\n ? undefined\n : normalizeDeferredTerminalServerTaskId(\n state.settlementTerminalResult as TaskResult<unknown>,\n trustedServerTaskId\n ).result;\n if (state.settlementFinalizedResult !== undefined) {\n if (\n normalizedSavedTerminal === undefined ||\n normalizedTerminal.serverTaskId === undefined ||\n normalizedTerminal.serverTaskId !== trustedServerTaskId ||\n !sameDeferredTerminal(normalizedSavedTerminal, normalizedTerminal.result)\n ) {\n throw new Error('The durable callback conflicts with the finalized deferred settlement.');\n }\n return undefined;\n }\n\n let lease: DeferredFinalizationLease;\n if (normalizedSavedTerminal !== undefined) {\n if (\n normalizedTerminal.serverTaskId === undefined ||\n normalizedTerminal.serverTaskId !== trustedServerTaskId ||\n !sameDeferredTerminal(normalizedSavedTerminal, normalizedTerminal.result)\n ) {\n throw new Error('The durable callback conflicts with the saved deferred terminal observation.');\n }\n lease = await this.acquireDeferredFinalizationLease(token, state);\n } else {\n const expectedTaskId = trustedServerTaskId;\n const observedTaskId = normalizedTerminal.serverTaskId;\n if (!expectedTaskId || !observedTaskId || observedTaskId !== expectedTaskId) {\n throw new Error('The durable callback task identity does not match the linked deferred seller task.');\n }\n const acquired = await this.checkpointDeferredPendingTerminal(token, state, normalizedTerminal.result, true);\n if (!acquired) throw new Error('Committed deferred callback finalization lease was not acquired.');\n lease = acquired;\n }\n\n return this.attachDeferredSettlementAcknowledgement(\n normalizedTerminal.result,\n state.taskId,\n true,\n undefined,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n }\n\n /** Resolve and checkpoint the current generation using a separate owner capability. @internal */\n async checkpointExternalDeferredSettlementForOperation<T>(\n operationId: string,\n recoveryKey: string,\n terminalResult: TaskResult<T>\n ): Promise<{ token: string; result?: TaskResult<T> } | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) return undefined;\n this.requireDeferredSettlementOperationRouting(storage);\n let authorized = false;\n try {\n authorized =\n (await this.config.authorizeDeferredSettlementOperationRecovery?.(\n operationId,\n recoveryKey,\n 'callback-checkpoint'\n )) === true;\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Committed callback operation recovery could not be authorized safely.',\n { cause: error }\n );\n }\n if (!authorized) {\n throw new DeferredSettlementOwnershipError('Committed callback operation recovery is not authorized.');\n }\n const currentRoute = await this.loadDeferredSettlementOperationRoute(storage, operationId);\n if (!currentRoute) return undefined;\n if (currentRoute.state.settlementOperationRouteRequired !== true) {\n throw new DeferredSettlementOwnershipError('The callback operation route is not a current-format checkpoint.');\n }\n const result = await this.checkpointExternalDeferredSettlement(currentRoute.token, operationId, terminalResult);\n return { token: currentRoute.token, ...(result !== undefined && { result }) };\n }\n\n /** A live owner closure may carry its committed settlement wrapper in process. */\n private async resumeDeferredTaskFromLiveClosure<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean\n ): Promise<TaskResult<T>> {\n return (await this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, true)).result;\n }\n\n /** Preserve higher-level client finalization before settlement acknowledgement. */\n private async resumeDeferredTaskFromClientClosure<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean\n ): Promise<TaskResult<T>> {\n return (await this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, false)).result;\n }\n\n /** Resume and return the opaque owner context needed by higher-level clients. @internal */\n async resumeDeferredTaskWithContext<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus = true\n ): Promise<{\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }> {\n return this.resumeDeferredTaskCore<T>(token, input, publishTerminalTaskStatus, false);\n }\n\n private async resumeDeferredTaskCore<T>(\n token: string,\n input: any,\n publishTerminalTaskStatus: boolean,\n liveSettlementOwner: boolean\n ): Promise<{\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }> {\n // Caller-owned nested input must not remain live across the storage or\n // trusted-agent resolution awaits below.\n const inputSnapshot = structuredClone(input);\n assertDeferredContinuationToken(token);\n if (!this.config.deferredStorage) {\n throw new Error('Deferred storage not configured');\n }\n\n // Read first, then atomically transition the exact record generation to a\n // claimed fence below. The key is never physically absent during seller\n // dispatch, so neither a replica nor a reused handler token can create an\n // ABA replacement while settlement is pending.\n let state: DeferredTaskState | undefined;\n try {\n state = await this.config.deferredStorage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be loaded safely.', {\n cause: error,\n });\n }\n if (!state) {\n throw new Error('Deferred task not found.');\n }\n if (state.expiresAt <= Date.now()) {\n throw new Error('Deferred task expired.');\n }\n\n const committedOperationId = state.settlementOperationId;\n const requiresSettlement = committedOperationId !== undefined;\n const requiresRecoveredSettlement = requiresSettlement && !liveSettlementOwner;\n if (requiresSettlement && state.settlementOperationRouteRequired === true) {\n this.requireDeferredSettlementOperationRouting(this.config.deferredStorage);\n }\n // Once durable settlement and public-client finalization both succeeded,\n // replay the exact finalized value without re-running application handlers\n // or settlement recovery.\n if (requiresSettlement && state.settlementFinalizedResult !== undefined) {\n const normalizedFinalized = normalizeDeferredTerminalServerTaskId(\n structuredClone(state.settlementFinalizedResult) as TaskResult<T>,\n trustedDeferredServerTaskId(state)\n );\n if (normalizedFinalized.serverTaskId === undefined) {\n throw new Error('The finalized deferred settlement does not contain its trusted seller task identity.');\n }\n const finalized = attachDeferredServerVersion(normalizedFinalized.result, state);\n if (state.settlementCompletionHandlerPublished === true) {\n markCompletionHandlerAlreadyPublished(finalized);\n }\n return {\n result: finalized,\n settlementOperationId: committedOperationId,\n ...(state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: state.settlementServerTaskId,\n }),\n };\n }\n if (requiresRecoveredSettlement) {\n let recoveryAvailable = false;\n try {\n recoveryAvailable =\n this.config.recoverDeferredSettlement !== undefined &&\n this.config.canRecoverDeferredSettlement !== undefined &&\n (await this.config.canRecoverDeferredSettlement(committedOperationId));\n } catch (error) {\n throw error;\n }\n if (!recoveryAvailable) {\n throw new Error(\n 'This deferred task crossed a committed mutation boundary, but durable settlement recovery is unavailable.'\n );\n }\n }\n\n // A crash may occur after the seller consumed input for A and the atomic\n // SDK operation route moved to pause B, but before the coordinator CAS or\n // caller response completed. Possession of A plus the matching committed\n // operation is sufficient to recover B; never redispatch A's input.\n if (requiresSettlement && state.settlementOperationRouteRequired === true) {\n const currentRoute = await this.loadDeferredSettlementOperationRoute(\n this.config.deferredStorage,\n committedOperationId\n );\n if (currentRoute && currentRoute.token !== token) {\n if (currentRoute.state.settlementOperationId !== committedOperationId) {\n throw new DeferredSettlementOwnershipError(\n 'The committed continuation operation route does not match its stored generation.'\n );\n }\n if (state.settlementResumeAuthorizationRequired === true) {\n let replacementAuthorized =\n (await this.config.authorizeDeferredSettlementResume?.(committedOperationId, currentRoute.token)) === true;\n if (!replacementAuthorized) {\n const replaced = await this.config.replaceDeferredSettlementResumeToken?.(\n committedOperationId,\n token,\n currentRoute.token\n );\n replacementAuthorized =\n replaced === true ||\n (await this.config.authorizeDeferredSettlementResume?.(committedOperationId, currentRoute.token)) ===\n true;\n }\n if (!replacementAuthorized) {\n throw new DeferredSettlementOwnershipError(\n 'The recovered continuation generation could not be linked to its durable coordinator.'\n );\n }\n }\n const recovered = await this.recoverRoutedDeferredTask<T>(\n committedOperationId,\n currentRoute,\n publishTerminalTaskStatus\n );\n if (!recovered || recovered.token !== currentRoute.token) {\n throw new DeferredSettlementOwnershipError(\n 'The recovered continuation generation changed before it could be returned safely.'\n );\n }\n return {\n result: attachDeferredServerVersion(recovered.result, currentRoute.state),\n ...(currentRoute.state.clientContext !== undefined && {\n clientContext: structuredClone(currentRoute.state.clientContext),\n }),\n settlementOperationId: committedOperationId,\n ...(currentRoute.state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: currentRoute.state.settlementServerTaskId,\n }),\n };\n }\n }\n\n // A previous committed resume advanced the seller into working/submitted\n // state. Reconstruct polling from the durable seller work handle instead\n // of redispatching the human input after a process restart.\n if (requiresSettlement && state.settlementPendingTaskId !== undefined) {\n let pendingAgent = this.deferredAgents.get(state.agentId);\n if (!pendingAgent) {\n try {\n pendingAgent = await this.config.resolveDeferredAgent?.(state.agentId);\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'The trusted agent for a pending deferred settlement could not be resolved safely.',\n { cause: error }\n );\n }\n }\n if (!pendingAgent || pendingAgent.id !== state.agentId) {\n throw new Error('Deferred task agent could not be resolved from trusted configuration.');\n }\n if (pendingAgent.protocol !== 'a2a' || !state.a2aTaskId) {\n throw new Error('A persisted pending deferred task can only poll its exact A2A seller task.');\n }\n this.deferredAgents.set(pendingAgent.id, pendingAgent);\n const pending = await this.setupSubmittedTask<T>(\n pendingAgent,\n state.taskId,\n state.taskName,\n {\n status: ADCP_STATUS.SUBMITTED,\n task_id: state.settlementPendingTaskId,\n },\n state.messages,\n {},\n [],\n Date.now(),\n true,\n state.serverVersion\n );\n const recoveredPending = this.wrapDeferredPendingSettlementContinuations(\n token,\n state,\n pending,\n publishTerminalTaskStatus,\n true\n );\n return {\n result: attachDeferredServerVersion(recoveredPending, state),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n settlementOperationId: committedOperationId,\n settlementServerTaskId: state.settlementPendingTaskId,\n };\n }\n\n // A prior seller continuation reached a terminal result but recovery did\n // not finish. Retry the saved observation without contacting the seller.\n if (requiresSettlement && state.settlementTerminalResult !== undefined) {\n const finalizationLease = await this.acquireDeferredFinalizationLease(token, state);\n try {\n const normalizedCheckpoint = normalizeDeferredTerminalServerTaskId(\n structuredClone(state.settlementTerminalResult) as TaskResult<T>,\n trustedDeferredServerTaskId(state)\n );\n if (normalizedCheckpoint.serverTaskId === undefined) {\n throw new Error('The deferred terminal checkpoint does not contain its trusted seller task identity.');\n }\n const checkpointed = attachMatch(normalizedCheckpoint.result);\n const settlement = requiresRecoveredSettlement\n ? await this.config.recoverDeferredSettlement!(\n checkpointed,\n committedOperationId,\n normalizedCheckpoint.serverTaskId\n )\n : { result: checkpointed };\n const recovered = this.attachDeferredSettlementAcknowledgement(\n settlement.result as TaskResult<T>,\n state.taskId,\n publishTerminalTaskStatus,\n settlement.afterFinalize,\n finalized => finalizationLease.finalize(finalized),\n completionHandlerPublished => finalizationLease.release(completionHandlerPublished)\n );\n if (state.settlementCompletionHandlerPublished === true) {\n markCompletionHandlerAlreadyPublished(recovered);\n }\n return {\n result: attachDeferredServerVersion(recovered, state),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n settlementOperationId: committedOperationId,\n ...(state.settlementServerTaskId !== undefined && {\n settlementServerTaskId: state.settlementServerTaskId,\n }),\n };\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(finalizationLease, error);\n }\n }\n\n if (state.continuationClaimed) {\n const dispatchLease = state.settlementResumeDispatchLease;\n const reclaimableAdmission =\n requiresSettlement &&\n dispatchLease?.phase === 'admission' &&\n Number.isFinite(dispatchLease.expiresAt) &&\n dispatchLease.expiresAt <= Date.now();\n if (!reclaimableAdmission) {\n throw new DeferredSettlementOwnershipError('Deferred task is already being resumed.');\n }\n }\n if (typeof state.continuationVersion !== 'string' || state.continuationVersion.length === 0) {\n throw new Error('Deferred task state does not contain the atomic continuation version required for resumption.');\n }\n const remainingTtlSeconds = Math.ceil((state.expiresAt - Date.now()) / 1000);\n if (remainingTtlSeconds < 1) throw new Error('Deferred task expired.');\n // Admission is governed by the original human-input deadline above. Once\n // admitted, keep the exact claim generation alive for a fresh dispatch\n // horizon so a slow seller cannot outlive the fence or defeat checkpoint\n // persistence after it has already advanced the mutation.\n const claimTtlSeconds = this.deferredSafetyRetentionSeconds();\n const claimedVersion = randomUUID();\n const claimedAt = Date.now();\n const dispatchOwnerId = requiresSettlement ? randomUUID() : undefined;\n // MemoryStorage retains object references. Keep the durable claim and the\n // mutable in-flight conversation on independent sanitized graphs so a\n // transport failure cannot leave raw resume input in the retained fence.\n const claimedMessages = durableDeferredSnapshot(state.messages);\n const resumedMessages = durableDeferredSnapshot(state.messages);\n const claimedState: DeferredTaskState = {\n ...state,\n continuationVersion: claimedVersion,\n continuationClaimed: true,\n messages: claimedMessages,\n ...(dispatchOwnerId !== undefined && {\n settlementResumeDispatchLease: {\n ownerId: dispatchOwnerId,\n phase: 'admission' as const,\n expiresAt: claimedAt + DEFERRED_DISPATCH_ADMISSION_LEASE_MS,\n },\n }),\n createdAt: claimedAt,\n expiresAt: claimedAt + claimTtlSeconds * 1000,\n };\n let claimed: boolean;\n try {\n claimed = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n state.continuationVersion,\n claimedState,\n claimTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred dispatch admission could not be claimed safely.', {\n cause: error,\n });\n }\n if (!claimed) {\n throw new DeferredSettlementOwnershipError('Deferred task was already consumed or replaced.');\n }\n\n const admissionLease =\n dispatchOwnerId === undefined\n ? undefined\n : this.startDeferredDispatchAdmissionLease(token, claimedVersion, claimedState, dispatchOwnerId);\n let dispatchVersion = claimedVersion;\n let dispatchCommitted = false;\n let preDispatchStateConsumed = false;\n let agent: AgentConfig | undefined;\n let terminalObservationPersisted = false;\n let finalizationLease: DeferredFinalizationLease | undefined;\n let pendingCheckpointState: DeferredTaskState | undefined;\n try {\n // Authorization belongs after the atomic claim. A callback that wins the\n // previous generation makes this owner lose its final dispatch CAS.\n if (requiresSettlement && state.settlementResumeAuthorizationRequired) {\n await this.requireDeferredDispatchAuthorization(\n committedOperationId,\n token,\n 'This deferred continuation is not the current durable route for its committed operation.'\n );\n }\n agent = this.deferredAgents.get(state.agentId) ?? (await this.config.resolveDeferredAgent?.(state.agentId));\n if (!agent || agent.id !== state.agentId) {\n throw new Error('Deferred task agent could not be resolved from trusted configuration.');\n }\n if (state.expiresAt <= Date.now()) {\n const owned = admissionLease ? await admissionLease.stop() : { version: dispatchVersion, state: claimedState };\n const removed = await this.config.deferredStorage.takeIfVersion(token, owned.version);\n if (!removed) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation ownership changed while its trusted agent was being resolved.'\n );\n }\n preDispatchStateConsumed = true;\n throw new DeferredSettlementOwnershipError('Deferred task expired during trusted-agent resolution.');\n }\n if (agent.protocol !== 'a2a') {\n throw new Error('A persisted deferred task can only resume an exact A2A seller task.');\n }\n if (!state.a2aTaskId) {\n throw new Error('A persisted A2A deferred task requires a seller task ID.');\n }\n this.deferredAgents.set(agent.id, agent);\n\n // Re-authorize at the last await boundary, then atomically publish the\n // dispatch linearization point. A callback may still win authoritatively;\n // if it does, this CAS fails and no protocol call is issued.\n if (requiresSettlement && state.settlementResumeAuthorizationRequired) {\n await this.requireDeferredDispatchAuthorization(\n committedOperationId,\n token,\n 'This deferred continuation is no longer the current route for its committed operation.'\n );\n }\n if (admissionLease) {\n const owned = await admissionLease.stop();\n const committedAt = Date.now();\n dispatchVersion = randomUUID();\n const dispatchState: DeferredTaskState = {\n ...owned.state,\n continuationVersion: dispatchVersion,\n settlementResumeDispatchLease: {\n ownerId: dispatchOwnerId!,\n phase: 'dispatch-committed',\n expiresAt: committedAt + claimTtlSeconds * 1000,\n },\n createdAt: committedAt,\n expiresAt: committedAt + claimTtlSeconds * 1000,\n };\n let committed: boolean;\n try {\n committed = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n owned.version,\n dispatchState,\n claimTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission could not be committed safely before seller dispatch.',\n { cause: error }\n );\n }\n if (!committed) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation ownership changed before seller dispatch; no input was sent.'\n );\n }\n }\n dispatchCommitted = true;\n } catch (error) {\n if (!dispatchCommitted && !preDispatchStateConsumed) {\n const owned = admissionLease ? await admissionLease.stop() : { version: dispatchVersion, state: claimedState };\n await this.restoreUnadvancedDeferredState(token, owned.version, state);\n if (!(error instanceof DeferredSettlementOwnershipError)) {\n throw new DeferredSettlementOwnershipError(\n error instanceof Error ? error.message : 'Deferred continuation failed safely before seller dispatch.',\n { cause: error }\n );\n }\n }\n throw error;\n }\n\n const { settlementResumeDispatchLease: _dispatchLease, ...checkpointBaseState } = state;\n void _dispatchLease;\n try {\n // Continue task with the provided input (no handler for resumed deferred tasks)\n let resumed = await this.continueTaskWithInput<T>(\n agent,\n state.taskId,\n state.taskName,\n state.params,\n state.contextId,\n state.a2aTaskId,\n inputSnapshot,\n resumedMessages,\n undefined, // No handler for deferred tasks - input was provided by human\n {},\n [],\n Date.now(),\n !publishTerminalTaskStatus || requiresSettlement,\n false,\n state.serverVersion,\n state.clientContext,\n state.settlementResumeAuthorizationRequired === true\n );\n resumed = attachDeferredServerVersion(resumed, state);\n const observedResumedServerTaskId = resumed.metadata.serverTaskId;\n if (requiresSettlement && !TERMINAL_TASK_STATUSES.has(resumed.status as TaskStatus)) {\n resumed = attachMatch(\n normalizeDeferredTerminalServerTaskId(resumed, trustedDeferredServerTaskId(state)).result\n );\n }\n const remainsPaused = ['input-required', 'auth-required', 'deferred'].includes(resumed.status);\n // A resumed seller may pause again with a replacement continuation.\n // Persist that exact new task identity before returning it; otherwise\n // only the in-process closure can resume and a restart falls back to the\n // already-consumed token.\n if (remainsPaused && resumed.deferred !== undefined) {\n const nextA2ATaskId = resumed.metadata.a2aTaskId;\n if (!nextA2ATaskId) {\n throw new Error('A resumable A2A pause did not expose the seller task ID required for durable storage.');\n }\n const nextToken = resumed.deferred.token;\n assertDeferredContinuationToken(nextToken);\n const replacementServerTaskId = requiresSettlement\n ? reconcileDeferredServerTaskId(trustedDeferredServerTaskId(state), [resumed.metadata.serverTaskId])\n : resumed.metadata.serverTaskId;\n const createdAt = Date.now();\n const ttlSeconds = this.config.deferredTaskTtlSeconds ?? DEFAULT_DEFERRED_TASK_TTL_SECONDS;\n const replacementState: DeferredTaskState = {\n continuationVersion: randomUUID(),\n taskId: state.taskId,\n ...(resumed.metadata.contextId !== undefined\n ? { contextId: resumed.metadata.contextId }\n : state.contextId !== undefined\n ? { contextId: state.contextId }\n : {}),\n a2aTaskId: nextA2ATaskId,\n serverVersion: state.serverVersion,\n ...(state.serverVersionSynthetic !== undefined && {\n serverVersionSynthetic: state.serverVersionSynthetic,\n }),\n agentId: state.agentId,\n taskName: state.taskName,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(resumed.conversation ?? state.messages),\n pauseStatus: resumed.status as 'input-required' | 'auth-required' | 'deferred',\n pauseQuestion: resumed.deferred.question,\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n ...(state.settlementOperationId !== undefined && {\n settlementOperationId: state.settlementOperationId,\n }),\n ...(state.settlementOperationRouteRequired === true && {\n settlementOperationRouteRequired: true as const,\n }),\n ...(state.settlementResumeAuthorizationRequired === true && {\n settlementResumeAuthorizationRequired: true,\n }),\n ...(replacementServerTaskId !== undefined && {\n settlementServerTaskId: replacementServerTaskId,\n }),\n createdAt,\n expiresAt: createdAt + ttlSeconds * 1000,\n };\n const stored =\n requiresSettlement && state.settlementOperationRouteRequired === true\n ? await this.config.deferredStorage.replaceForSettlementOperationIfVersion(\n committedOperationId,\n token,\n dispatchVersion,\n nextToken,\n replacementState,\n ttlSeconds\n )\n : await this.config.deferredStorage.putIfAbsent(nextToken, replacementState, ttlSeconds);\n if (!stored) {\n if (requiresSettlement) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n replacementServerTaskId ?? trustedDeferredServerTaskId(state),\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n }\n throw new Error('Replacement deferred continuation token already exists; refusing unsafe overwrite.');\n }\n if (requiresSettlement && state.settlementResumeAuthorizationRequired === true) {\n const replaced = await this.config.replaceDeferredSettlementResumeToken?.(\n committedOperationId,\n token,\n nextToken\n );\n if (replaced !== true) {\n // A terminal callback may have won after the SDK atomically moved\n // the operation route to B but before the coordinator completed\n // its A -> B CAS. Replay that exact B winner instead of reporting\n // an ownership failure to the originating resume.\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n nextToken,\n replacementState,\n replacementServerTaskId ?? trustedDeferredServerTaskId(state),\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n throw new DeferredSettlementOwnershipError(\n 'The committed deferred continuation advanced, but its coordinator route still needs recovery.'\n );\n }\n }\n resumed.deferred.resume = nextInput =>\n liveSettlementOwner\n ? this.resumeDeferredTaskFromLiveClosure<T>(nextToken, nextInput, publishTerminalTaskStatus)\n : this.resumeDeferredTaskFromClientClosure<T>(nextToken, nextInput, publishTerminalTaskStatus);\n }\n\n let settledResult = attachMatch(resumed) as TaskResult<T>;\n let settledServerTaskId = trustedDeferredServerTaskId(state);\n let afterFinalize: (() => Promise<void>) | undefined;\n if (requiresSettlement) {\n if (TERMINAL_TASK_STATUSES.has(resumed.status as TaskStatus)) {\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(resumed, trustedDeferredServerTaskId(state));\n if (normalizedTerminal.serverTaskId === undefined) {\n throw new Error('The committed deferred terminal response did not provide a seller task identity.');\n }\n settledResult = attachMatch(normalizedTerminal.result);\n const terminalSettlementServerTaskId = normalizedTerminal.serverTaskId;\n settledServerTaskId = terminalSettlementServerTaskId;\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedTerminal.result as any;\n const checkpointCreatedAt = Date.now();\n const checkpointTtlSeconds = this.deferredSafetyRetentionSeconds();\n const checkpointVersion = randomUUID();\n const checkpointState: DeferredTaskState = {\n ...checkpointBaseState,\n continuationVersion: checkpointVersion,\n continuationClaimed: true,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(normalizedTerminal.result.conversation ?? state.messages),\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n ...(terminalSettlementServerTaskId !== undefined && {\n settlementServerTaskId: terminalSettlementServerTaskId,\n }),\n settlementTerminalResult: durableDeferredSnapshot(serializableResult),\n createdAt: checkpointCreatedAt,\n expiresAt: checkpointCreatedAt + checkpointTtlSeconds * 1000,\n };\n const saved = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n dispatchVersion,\n checkpointState,\n checkpointTtlSeconds\n );\n if (!saved) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n terminalSettlementServerTaskId,\n normalizedTerminal.result,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) {\n // An immediate authoritative callback may finish while the seller\n // holds its response for webhook acknowledgement. Re-enter the\n // durable terminal/finalized route; never redispatch the input.\n return winner;\n }\n throw new Error('Committed deferred terminal observation could not be saved without overwriting state.');\n }\n terminalObservationPersisted = true;\n finalizationLease = await this.acquireDeferredFinalizationLease(token, checkpointState);\n } else if (!remainsPaused) {\n // `setupSubmittedTask()` exposes the runner correlation ID as a\n // compatibility fallback when the seller omitted task_id. That value\n // is useful to callers but is never authoritative durable seller\n // identity. Treat a submitted handle as observed only when metadata\n // proves it came from the seller, or when it differs from the local\n // operation ID used by the fallback.\n const observedSubmittedTaskId =\n resumed.submitted?.taskId !== undefined &&\n (observedResumedServerTaskId !== undefined || resumed.submitted.taskId !== state.taskId)\n ? resumed.submitted.taskId\n : undefined;\n const pendingTaskId = reconcileDeferredServerTaskId(trustedDeferredServerTaskId(state), [\n observedResumedServerTaskId,\n observedSubmittedTaskId,\n ]);\n if (!pendingTaskId) {\n throw new Error(\n 'A committed deferred continuation became nonterminal without the seller work handle required for recovery.'\n );\n }\n if (resumed.submitted) {\n resumed.submitted = this.createSubmittedContinuation<T>(\n agent,\n state.taskId,\n state.taskName,\n pendingTaskId,\n resumed.submitted.webhookUrl,\n undefined,\n resumed.metadata,\n true,\n state.serverVersion\n );\n settledResult = resumed;\n }\n const pendingCreatedAt = Date.now();\n const pendingTtlSeconds = this.deferredSafetyRetentionSeconds();\n const pendingState: DeferredTaskState = {\n ...checkpointBaseState,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n settlementPendingTaskId: pendingTaskId,\n settlementServerTaskId: pendingTaskId,\n params: durableDeferredSnapshot(state.params),\n messages: durableDeferredSnapshot(resumed.conversation ?? state.messages),\n ...(state.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(state.clientContext),\n }),\n createdAt: pendingCreatedAt,\n expiresAt: pendingCreatedAt + pendingTtlSeconds * 1000,\n };\n const saved = await this.replaceDeferredState(\n this.config.deferredStorage,\n token,\n dispatchVersion,\n pendingState,\n pendingTtlSeconds\n );\n if (!saved) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n pendingTaskId,\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n throw new Error('Committed deferred pending task could not be saved without overwriting state.');\n }\n terminalObservationPersisted = true;\n pendingCheckpointState = pendingState;\n settledServerTaskId = pendingTaskId;\n }\n if (requiresRecoveredSettlement && !pendingCheckpointState) {\n const settlement = await this.config.recoverDeferredSettlement!(\n settledResult,\n committedOperationId,\n settledServerTaskId\n );\n settledResult = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n }\n if (\n publishTerminalTaskStatus &&\n !requiresSettlement &&\n TERMINAL_TASK_STATUSES.has(settledResult.status as TaskStatus) &&\n this.activeTasks.get(state.taskId)?.status !== settledResult.status\n ) {\n this.updateTaskStatus(\n state.taskId,\n settledResult.status as TaskStatus,\n settledResult.data,\n settledResult.error\n );\n }\n if (requiresSettlement && TERMINAL_TASK_STATUSES.has(settledResult.status as TaskStatus)) {\n const activeFinalizationLease = finalizationLease;\n settledResult = this.attachDeferredSettlementAcknowledgement(\n settledResult,\n state.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n activeFinalizationLease ? finalized => activeFinalizationLease.finalize(finalized) : undefined,\n activeFinalizationLease ? () => activeFinalizationLease.release() : undefined\n );\n }\n if (pendingCheckpointState) {\n settledResult = this.wrapDeferredPendingSettlementContinuations(\n token,\n pendingCheckpointState,\n settledResult,\n publishTerminalTaskStatus,\n requiresRecoveredSettlement\n );\n }\n if (!terminalObservationPersisted) {\n const consumedFence = await this.config.deferredStorage.takeIfVersion(token, dispatchVersion);\n if (!consumedFence) {\n if (requiresSettlement) {\n const winner = await this.resumeExactDeferredSettlementWinner<T>(\n token,\n state,\n settledServerTaskId,\n undefined,\n inputSnapshot,\n publishTerminalTaskStatus,\n liveSettlementOwner\n );\n if (winner) return winner;\n }\n throw new Error('Deferred continuation claim was replaced before version-fenced completion.');\n }\n }\n return {\n result: attachDeferredServerVersion(settledResult, state),\n ...(state.clientContext !== undefined && { clientContext: structuredClone(state.clientContext) }),\n ...(state.settlementOperationId !== undefined && {\n settlementOperationId: state.settlementOperationId,\n }),\n ...(settledServerTaskId !== undefined && {\n settlementServerTaskId: settledServerTaskId,\n }),\n };\n } catch (error) {\n let propagatedError = error;\n if (finalizationLease) {\n propagatedError = await this.releaseDeferredFinalizationAfterFailure(finalizationLease, error);\n }\n // A thrown continuation failure is terminal for this deferred token.\n // Release both persistence and the in-memory request payload before the\n // error escapes to the caller.\n if (\n publishTerminalTaskStatus &&\n !terminalObservationPersisted &&\n !(propagatedError instanceof DeferredSettlementOwnershipError)\n ) {\n this.updateTaskStatus(\n state.taskId,\n 'failed',\n undefined,\n propagatedError instanceof Error ? propagatedError.message : String(propagatedError)\n );\n }\n // The versioned claim fence stays in storage after uncertain dispatch:\n // the seller may have advanced even when its response did not reach\n // this process, so the human continuation must not become resumable.\n throw propagatedError;\n }\n }\n\n private wrapDeferredPendingSettlementContinuations<T>(\n token: string,\n pendingState: DeferredTaskState,\n result: TaskResult<T>,\n publishTerminalTaskStatus: boolean,\n recoverTerminal: boolean\n ): TaskResult<T> {\n const markPendingSettlement = (marked: TaskResult<T>): TaskResult<T> => {\n Object.defineProperty(marked, DEFERRED_PENDING_SETTLEMENT, {\n value: async (terminal: TaskResult<T>) => {\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(\n terminal,\n trustedDeferredServerTaskId(pendingState)\n );\n const lease = await this.checkpointDeferredPendingTerminal(\n token,\n pendingState,\n normalizedTerminal.result,\n true\n );\n if (!lease) throw new Error('Committed deferred terminal finalization lease was not acquired.');\n let checkpointed = normalizedTerminal.result;\n let afterFinalize: (() => Promise<void>) | undefined;\n try {\n if (recoverTerminal) {\n const settlement = await this.config.recoverDeferredSettlement!(\n normalizedTerminal.result,\n pendingState.settlementOperationId!,\n normalizedTerminal.serverTaskId\n );\n checkpointed = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n checkpointed = this.attachDeferredSettlementAcknowledgement(\n checkpointed,\n pendingState.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(lease, error);\n }\n if (pendingState.clientContext === undefined) await acknowledgeDeferredSettlement(checkpointed);\n return checkpointed;\n },\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return marked;\n };\n if (!result.submitted) return markPendingSettlement(result);\n const submitted = result.submitted;\n const wrapped = attachMatch({\n ...result,\n submitted: {\n ...submitted,\n track: async transport => {\n const task = await submitted.track(transport);\n if (TERMINAL_TASK_STATUSES.has(task.status as TaskStatus)) {\n const status = task.status === 'completed' ? 'completed' : (task.status as TaskStatus);\n const terminal = attachMatch({\n success: status === 'completed',\n status,\n ...(task.result !== undefined && { data: task.result }),\n ...(task.error !== undefined && { error: task.error }),\n metadata: {\n taskId: pendingState.taskId,\n taskName: task.taskType,\n agent: { id: pendingState.agentId, name: pendingState.agentId, protocol: 'a2a' },\n responseTimeMs: 0,\n timestamp: new Date().toISOString(),\n clarificationRounds: 0,\n status,\n serverTaskId: task.taskId,\n },\n } as TaskResult<unknown>);\n await this.checkpointDeferredPendingTerminal(token, pendingState, terminal, false);\n if (!recoverTerminal) return task;\n throw new Error(\n 'The terminal seller observation was saved; resume the durable token to finalize committed settlement.'\n );\n }\n return task;\n },\n waitForCompletion: async (pollInterval, signal) => {\n const completion = await submitted.waitForCompletion(pollInterval, signal);\n if (\n !TERMINAL_TASK_STATUSES.has(completion.status as TaskStatus) ||\n !(AUTHORITATIVE_POLLED_TERMINAL in completion)\n ) {\n return completion;\n }\n const normalizedCompletion = normalizeDeferredTerminalServerTaskId(\n completion,\n trustedDeferredServerTaskId(pendingState)\n );\n const lease = await this.checkpointDeferredPendingTerminal(\n token,\n pendingState,\n normalizedCompletion.result,\n true\n );\n if (!lease) throw new Error('Committed deferred terminal finalization lease was not acquired.');\n let checkpointed: TaskResult<T> = normalizedCompletion.result;\n let afterFinalize: (() => Promise<void>) | undefined;\n try {\n if (recoverTerminal) {\n const settlement = await this.config.recoverDeferredSettlement!(\n normalizedCompletion.result,\n pendingState.settlementOperationId!,\n normalizedCompletion.serverTaskId\n );\n checkpointed = settlement.result as TaskResult<T>;\n afterFinalize = settlement.afterFinalize;\n }\n checkpointed = this.attachDeferredSettlementAcknowledgement(\n checkpointed,\n pendingState.taskId,\n publishTerminalTaskStatus,\n afterFinalize,\n finalized => lease.finalize(finalized),\n () => lease.release()\n );\n } catch (error) {\n throw await this.releaseDeferredFinalizationAfterFailure(lease, error);\n }\n if (pendingState.clientContext === undefined) {\n await acknowledgeDeferredSettlement(checkpointed);\n }\n return checkpointed;\n },\n },\n } as TaskResult<T>);\n return markPendingSettlement(wrapped);\n }\n\n private async resumeExactDeferredSettlementWinner<T>(\n token: string,\n expectedState: DeferredTaskState,\n expectedServerTaskId: string | undefined,\n expectedTerminal: TaskResult<T> | undefined,\n inputSnapshot: unknown,\n publishTerminalTaskStatus: boolean,\n liveSettlementOwner: boolean\n ): Promise<\n | {\n result: TaskResult<T>;\n clientContext?: unknown;\n settlementOperationId?: string;\n settlementServerTaskId?: string;\n }\n | undefined\n > {\n const winner = await this.config.deferredStorage?.get(token);\n if (\n !winner ||\n winner.settlementOperationId === undefined ||\n winner.settlementOperationId !== expectedState.settlementOperationId ||\n expectedServerTaskId === undefined ||\n winner.settlementServerTaskId !== expectedServerTaskId ||\n (winner.settlementTerminalResult === undefined && winner.settlementFinalizedResult === undefined)\n ) {\n return undefined;\n }\n\n if (winner.settlementTerminalResult !== undefined) {\n const normalizedWinner = normalizeDeferredTerminalServerTaskId(\n winner.settlementTerminalResult as TaskResult<unknown>,\n winner.settlementServerTaskId\n ).result;\n if (expectedTerminal !== undefined) {\n const normalizedExpected = normalizeDeferredTerminalServerTaskId(expectedTerminal, expectedServerTaskId).result;\n if (!sameDeferredTerminal(normalizedWinner, normalizedExpected)) return undefined;\n }\n } else if (expectedTerminal !== undefined) {\n // A direct terminal response needs the raw seller observation to prove\n // equality; a finalized-only legacy record is not enough.\n return undefined;\n } else {\n normalizeDeferredTerminalServerTaskId(\n winner.settlementFinalizedResult as TaskResult<unknown>,\n winner.settlementServerTaskId\n );\n }\n\n return this.resumeDeferredTaskCore<T>(token, inputSnapshot, publishTerminalTaskStatus, liveSettlementOwner);\n }\n\n private async checkpointDeferredPendingTerminal<T>(\n token: string,\n pendingState: DeferredTaskState,\n terminalResult: TaskResult<T>,\n acquireLease: boolean\n ): Promise<DeferredFinalizationLease | undefined> {\n const storage = this.config.deferredStorage;\n if (!storage) throw new Error('Deferred storage not configured');\n const normalizedTerminal = normalizeDeferredTerminalServerTaskId(\n terminalResult,\n trustedDeferredServerTaskId(pendingState)\n );\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedTerminal.result as any;\n void _match;\n void _submitted;\n void _deferred;\n const {\n settlementPendingTaskId: _pending,\n settlementResumeDispatchLease: _dispatchLease,\n ...checkpointBase\n } = pendingState;\n void _pending;\n void _dispatchLease;\n const checkpointCreatedAt = Date.now();\n const ttlSeconds = this.deferredSafetyRetentionSeconds();\n const checkpointState: DeferredTaskState = {\n ...checkpointBase,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n ...(normalizedTerminal.serverTaskId !== undefined && {\n settlementServerTaskId: normalizedTerminal.serverTaskId,\n }),\n settlementTerminalResult: durableDeferredSnapshot(serializableResult),\n createdAt: checkpointCreatedAt,\n expiresAt: checkpointCreatedAt + ttlSeconds * 1000,\n };\n const saved =\n pendingState.settlementOperationId && pendingState.settlementOperationRouteRequired === true\n ? await storage.replaceForSettlementOperationIfVersion(\n pendingState.settlementOperationId,\n token,\n pendingState.continuationVersion,\n token,\n checkpointState,\n ttlSeconds\n )\n : await this.replaceDeferredState(\n storage,\n token,\n pendingState.continuationVersion,\n checkpointState,\n ttlSeconds\n );\n if (!saved) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred terminal observation could not replace its pending checkpoint.'\n );\n }\n return acquireLease ? this.acquireDeferredFinalizationLease(token, checkpointState) : undefined;\n }\n\n private startDeferredDispatchAdmissionLease(\n token: string,\n initialVersion: string,\n initialState: DeferredTaskState,\n ownerId: string\n ): DeferredDispatchAdmissionLease {\n const storage = this.config.deferredStorage!;\n const safetyTtlSeconds = this.deferredSafetyRetentionSeconds();\n let currentVersion = initialVersion;\n let currentState = initialState;\n let stopped = false;\n let lostError: Error | undefined;\n let renewal = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const scheduleRenewal = (): void => {\n if (stopped || lostError) return;\n timer = setTimeout(() => {\n renewal = renewal.then(async () => {\n if (stopped || lostError) return;\n try {\n const renewedAt = Date.now();\n const nextVersion = randomUUID();\n const nextState: DeferredTaskState = {\n ...currentState,\n continuationVersion: nextVersion,\n settlementResumeDispatchLease: {\n ownerId,\n phase: 'admission',\n expiresAt: renewedAt + DEFERRED_DISPATCH_ADMISSION_LEASE_MS,\n },\n expiresAt: renewedAt + safetyTtlSeconds * 1000,\n };\n const renewed = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n nextState,\n safetyTtlSeconds\n );\n if (!renewed) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission ownership changed before seller dispatch.'\n );\n return;\n }\n currentVersion = nextVersion;\n currentState = nextState;\n scheduleRenewal();\n } catch (error) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred dispatch admission lease could not be renewed safely before seller dispatch.',\n { cause: error }\n );\n }\n });\n }, DEFERRED_DISPATCH_ADMISSION_RENEW_MS);\n timer.unref?.();\n };\n scheduleRenewal();\n\n let stoppedState: { version: string; state: DeferredTaskState } | undefined;\n return {\n stop: async () => {\n if (stoppedState) return stoppedState;\n if (!stopped) {\n stopped = true;\n if (timer) clearTimeout(timer);\n }\n await renewal;\n if (lostError) throw lostError;\n stoppedState = { version: currentVersion, state: currentState };\n return stoppedState;\n },\n };\n }\n\n private async requireDeferredDispatchAuthorization(\n operationId: string,\n token: string,\n message: string\n ): Promise<void> {\n try {\n if ((await this.config.authorizeDeferredSettlementResume?.(operationId, token)) !== true) {\n throw new DeferredSettlementOwnershipError(message);\n }\n } catch (error) {\n if (error instanceof DeferredSettlementOwnershipError) throw error;\n throw new DeferredSettlementOwnershipError(message, { cause: error });\n }\n }\n\n private async acquireDeferredFinalizationLease(\n token: string,\n checkpoint: DeferredTaskState\n ): Promise<DeferredFinalizationLease> {\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization could not be claimed because deferred storage is unavailable.'\n );\n }\n const now = Date.now();\n if (checkpoint.settlementFinalizationLease && checkpoint.settlementFinalizationLease.expiresAt > now) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization is already in progress.');\n }\n\n const ownerId = randomUUID();\n const safetyTtlSeconds = this.deferredSafetyRetentionSeconds();\n let currentVersion = randomUUID();\n let currentState: DeferredTaskState = {\n ...checkpoint,\n continuationVersion: currentVersion,\n settlementFinalizationLease: {\n ownerId,\n expiresAt: now + DEFERRED_FINALIZATION_LEASE_MS,\n },\n expiresAt: now + safetyTtlSeconds * 1000,\n };\n let acquired: boolean;\n try {\n acquired = await this.replaceDeferredState(\n storage,\n token,\n checkpoint.continuationVersion,\n currentState,\n safetyTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization could not be claimed safely.', {\n cause: error,\n });\n }\n if (!acquired) {\n throw new DeferredSettlementOwnershipError('Deferred settlement finalization was claimed by another replica.');\n }\n\n let stopped = false;\n let lostError: Error | undefined;\n let renewal = Promise.resolve();\n let timer: ReturnType<typeof setTimeout> | undefined;\n const scheduleRenewal = (): void => {\n if (stopped || lostError) return;\n timer = setTimeout(() => {\n renewal = renewal.then(async () => {\n if (stopped || lostError) return;\n try {\n const renewedAt = Date.now();\n const nextVersion = randomUUID();\n const nextState: DeferredTaskState = {\n ...currentState,\n continuationVersion: nextVersion,\n settlementFinalizationLease: {\n ownerId,\n expiresAt: renewedAt + DEFERRED_FINALIZATION_LEASE_MS,\n },\n expiresAt: renewedAt + safetyTtlSeconds * 1000,\n };\n const renewed = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n nextState,\n safetyTtlSeconds\n );\n if (!renewed) {\n lostError = new DeferredSettlementOwnershipError('Deferred settlement finalization lease was lost.');\n return;\n }\n currentVersion = nextVersion;\n currentState = nextState;\n scheduleRenewal();\n } catch (error) {\n lostError = new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease could not be renewed.',\n { cause: error }\n );\n }\n });\n }, DEFERRED_FINALIZATION_RENEW_MS);\n timer.unref?.();\n };\n scheduleRenewal();\n\n const stop = async (): Promise<void> => {\n if (!stopped) {\n stopped = true;\n if (timer) clearTimeout(timer);\n }\n await renewal;\n if (lostError) throw lostError;\n };\n\n let completed = false;\n return {\n finalize: async <T>(result: TaskResult<T>): Promise<void> => {\n if (completed) return;\n await stop();\n await this.markDeferredSettlementFinalized(token, currentVersion, result);\n completed = true;\n },\n release: async (completionHandlerPublished = false): Promise<void> => {\n if (completed) return;\n await stop();\n const { settlementFinalizationLease: _lease, ...retryableCheckpoint } = currentState;\n void _lease;\n const releasedAt = Date.now();\n let released: boolean;\n try {\n released = await this.replaceDeferredState(\n storage,\n token,\n currentVersion,\n {\n ...retryableCheckpoint,\n continuationVersion: randomUUID(),\n ...((retryableCheckpoint.settlementCompletionHandlerPublished === true || completionHandlerPublished) && {\n settlementCompletionHandlerPublished: true,\n }),\n createdAt: releasedAt,\n expiresAt: releasedAt + safetyTtlSeconds * 1000,\n },\n safetyTtlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease could not be released safely.',\n { cause: error }\n );\n }\n if (!released) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization lease ownership changed before it could be released.'\n );\n }\n completed = true;\n },\n };\n }\n\n private async releaseDeferredFinalizationAfterFailure(\n lease: DeferredFinalizationLease,\n originalFailure: unknown\n ): Promise<unknown> {\n try {\n await lease.release();\n return originalFailure;\n } catch (releaseFailure) {\n return new DeferredSettlementOwnershipError(\n 'Deferred settlement failed and its finalization lease could not be released safely.',\n {\n cause: new AggregateError(\n [originalFailure, releaseFailure],\n 'Deferred settlement failure and finalization lease release both failed.'\n ),\n }\n );\n }\n }\n\n private attachDeferredSettlementAcknowledgement<T>(\n result: TaskResult<T>,\n taskId: string,\n publishTerminalTaskStatus: boolean,\n afterFinalize?: () => Promise<void>,\n persistFinalized?: (finalizedResult: TaskResult<T>) => Promise<void>,\n rejectFinalization?: (completionHandlerPublished: boolean) => Promise<void>\n ): TaskResult<T> {\n let acknowledged = false;\n let rejected = false;\n const acknowledge = async (finalizedResult: TaskResult<T> = result): Promise<void> => {\n if (acknowledged) return;\n if (rejected) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement finalization was released; reacquire the durable checkpoint before acknowledging.'\n );\n }\n try {\n await afterFinalize?.();\n await persistFinalized?.(finalizedResult);\n if (\n publishTerminalTaskStatus &&\n TERMINAL_TASK_STATUSES.has(finalizedResult.status as TaskStatus) &&\n this.activeTasks.get(taskId)?.status !== finalizedResult.status\n ) {\n this.updateTaskStatus(\n taskId,\n finalizedResult.status as TaskStatus,\n finalizedResult.data,\n finalizedResult.error\n );\n }\n acknowledged = true;\n } catch (error) {\n if (!rejected) {\n try {\n await rejectFinalization?.(\n hasCompletionHandlerAlreadyPublished(finalizedResult) || hasCompletionHandlerAlreadyPublished(result)\n );\n rejected = true;\n } catch (releaseFailure) {\n rejected = true;\n throw new DeferredSettlementOwnershipError(\n 'Deferred settlement acknowledgement failed and its finalization lease could not be released safely.',\n {\n cause: new AggregateError(\n [error, releaseFailure],\n 'Deferred settlement acknowledgement and finalization lease release both failed.'\n ),\n }\n );\n }\n }\n throw error;\n }\n };\n const reject = async (): Promise<void> => {\n if (acknowledged || rejected) return;\n await rejectFinalization?.(hasCompletionHandlerAlreadyPublished(result));\n rejected = true;\n };\n Object.defineProperty(result, DEFERRED_SETTLEMENT_ACK, {\n value: acknowledge,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n Object.defineProperty(result, DEFERRED_SETTLEMENT_NACK, {\n value: reject,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n return result;\n }\n\n private async markDeferredSettlementFinalized<T>(\n token: string,\n expectedVersion: string,\n finalizedResult: TaskResult<T>\n ): Promise<void> {\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because deferred storage is unavailable.'\n );\n }\n let current: DeferredTaskState | undefined;\n try {\n current = await storage.get(token);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Committed deferred completion ownership could not be verified.', {\n cause: error,\n });\n }\n if (!current || current.continuationVersion !== expectedVersion) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because ownership changed.'\n );\n }\n const normalizedFinalized = normalizeDeferredTerminalServerTaskId(\n finalizedResult,\n trustedDeferredServerTaskId(current)\n );\n if (normalizedFinalized.serverTaskId === undefined) {\n throw new Error('The finalized deferred settlement does not contain its trusted seller task identity.');\n }\n if (normalizedFinalized.result !== finalizedResult) {\n finalizedResult.metadata = normalizedFinalized.result.metadata;\n }\n const {\n match: _match,\n submitted: _submitted,\n deferred: _deferred,\n ...serializableResult\n } = normalizedFinalized.result as any;\n void _match;\n void _submitted;\n void _deferred;\n const acknowledgedAt = Date.now();\n const ttlSeconds = this.deferredSafetyRetentionSeconds();\n const { settlementFinalizationLease: _lease, ...finalizedCheckpoint } = current;\n void _lease;\n let saved: boolean;\n try {\n saved = await this.replaceDeferredState(\n storage,\n token,\n expectedVersion,\n {\n ...finalizedCheckpoint,\n continuationVersion: randomUUID(),\n continuationClaimed: true,\n params: durableDeferredSnapshot(current.params),\n messages: durableDeferredSnapshot(current.messages),\n ...(current.clientContext !== undefined && {\n clientContext: durableDeferredSnapshot(current.clientContext),\n }),\n settlementFinalizedResult: durableDeferredSnapshot(serializableResult),\n ...((current.settlementCompletionHandlerPublished === true ||\n hasCompletionHandlerAlreadyPublished(finalizedResult)) && {\n settlementCompletionHandlerPublished: true,\n }),\n createdAt: acknowledgedAt,\n expiresAt: acknowledgedAt + ttlSeconds * 1000,\n },\n ttlSeconds\n );\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Committed deferred completion could not be durably acknowledged.', {\n cause: error,\n });\n }\n if (!saved) {\n throw new DeferredSettlementOwnershipError(\n 'Committed deferred completion could not be durably acknowledged because ownership changed.'\n );\n }\n }\n\n private deferredSafetyRetentionSeconds(): number {\n const configuredWorkingMs = this.config.workingTimeout ?? 120_000;\n const workingMs =\n Number.isFinite(configuredWorkingMs) && configuredWorkingMs > 0\n ? Math.min(configuredWorkingMs, MAX_TIMER_DELAY_MS)\n : 120_000;\n const configuredRequestMs = this.config.transport?.requestTimeoutMs;\n const requestMs =\n configuredRequestMs === 0\n ? MAX_TIMER_DELAY_MS\n : configuredRequestMs !== undefined && Number.isFinite(configuredRequestMs) && configuredRequestMs > 0\n ? Math.min(configuredRequestMs, MAX_TIMER_DELAY_MS)\n : 0;\n const configuredOperationHorizonSeconds =\n Math.ceil((workingMs + requestMs) / 1000) + DEFERRED_SAFETY_MARGIN_SECONDS;\n return Math.max(\n DEFAULT_DEFERRED_SAFETY_RETENTION_SECONDS,\n this.config.deferredTaskTtlSeconds ?? 0,\n configuredOperationHorizonSeconds\n );\n }\n\n /** Restore a consumed token only when no seller continuation was dispatched. */\n private async restoreUnadvancedDeferredState(\n token: string,\n claimedVersion: string,\n state: DeferredTaskState\n ): Promise<void> {\n const remainingTtlSeconds = Math.ceil((state.expiresAt - Date.now()) / 1000);\n const storage = this.config.deferredStorage;\n if (!storage) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be restored safely.');\n }\n if (remainingTtlSeconds < 1) {\n let removed: DeferredTaskState | undefined;\n try {\n removed = await storage.takeIfVersion(token, claimedVersion);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Expired deferred dispatch admission could not be removed safely.', {\n cause: error,\n });\n }\n if (!removed) {\n throw new DeferredSettlementOwnershipError(\n 'Expired deferred dispatch admission ownership changed before cleanup.'\n );\n }\n return;\n }\n let restored: boolean;\n try {\n restored = await this.replaceDeferredState(storage, token, claimedVersion, state, remainingTtlSeconds);\n } catch (error) {\n throw new DeferredSettlementOwnershipError('Deferred continuation state could not be restored safely.', {\n cause: error,\n });\n }\n if (!restored) {\n throw new DeferredSettlementOwnershipError(\n 'Deferred continuation token was reused during trusted-agent resolution; original state was not restored.'\n );\n }\n }\n\n /**\n * Continue a task after receiving input\n */\n private async continueTaskWithInput<T>(\n agent: AgentConfig,\n taskId: string,\n taskName: string,\n params: any,\n contextId: string | undefined,\n a2aTaskId: string | undefined,\n input: any,\n messages: Message[],\n inputHandler: InputHandler | undefined,\n options: TaskOptions = {},\n debugLogs: any[] = [],\n startTime: number = Date.now(),\n deferTerminalTaskStatus = false,\n persistPausedContinuation = true,\n serverVersion: 'v2' | 'v3' = 'v3',\n deferredClientContext?: unknown,\n requireDeferredSettlementResumeAuthorization = false\n ): Promise<TaskResult<T>> {\n // This is also the direct same-process continuation when durable storage\n // is absent. Snapshot before the first await so nested caller-owned input\n // cannot change after the user selects it.\n const inputSnapshot = structuredClone(input);\n if (agent.protocol !== 'a2a') {\n throw new Error('MCP does not define a standard continuation for a returned input-required task.');\n }\n if (!a2aTaskId) {\n throw new Error(\n 'A2A continuation requires a seller task ID; refusing to issue a fresh same-tool call from identity-less state.'\n );\n }\n // Add user input message\n const inputMessage: Message = {\n id: randomUUID(),\n role: 'user',\n content: inputSnapshot,\n timestamp: new Date().toISOString(),\n metadata: { type: 'input_response' },\n };\n messages.push(inputMessage);\n\n // Continue the task with input\n const response = await ProtocolClient.callTool(\n agent,\n taskName,\n { input: inputSnapshot },\n {\n debugLogs,\n serverVersion,\n adcpVersion: this.config.adcpVersion,\n ...(this.config.wireAdcpVersion !== undefined && { wireAdcpVersion: this.config.wireAdcpVersion }),\n ...(this.config.versionEnvelope !== undefined && { versionEnvelope: this.config.versionEnvelope }),\n transport: options.transport ?? this.config.transport,\n session: { contextId, taskId: a2aTaskId },\n signal: options.signal,\n onTransportActivity: this.config.onTransportActivity,\n transportActivityContext: {\n operationId: taskId,\n taskId,\n contextId,\n },\n }\n );\n\n // Add response message\n const responseMessage: Message = {\n id: randomUUID(),\n role: 'agent',\n content: response,\n timestamp: new Date().toISOString(),\n metadata: { type: 'continued_response' },\n };\n messages.push(responseMessage);\n\n // Handle the continued response (pass inputHandler for multi-round clarification)\n return this.handleAsyncResponse<T>(\n agent,\n taskId,\n taskName,\n params,\n response,\n messages,\n inputHandler,\n options,\n debugLogs,\n startTime,\n deferTerminalTaskStatus,\n persistPausedContinuation,\n serverVersion,\n deferredClientContext,\n requireDeferredSettlementResumeAuthorization\n );\n }\n\n /**\n * Utility methods\n */\n private sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private createErrorResult<T>(\n taskId: string,\n agent: AgentConfig,\n error: any,\n debugLogs: any[] = [],\n startTime: number = Date.now()\n ): TaskResult<T> {\n // Try to extract structured error info from transport exceptions\n // (e.g., JSON-RPC errors with data.adcp_error)\n const transportData = error?.data || error?.response?.data;\n const adcpErrorInfo = extractAdcpErrorInfo(transportData);\n const correlationId = extractCorrelationId(transportData);\n\n return {\n success: false as const,\n status: 'failed' as const,\n error: error.message || String(error),\n adcpError: adcpErrorInfo,\n errorInstance: this.buildErrorInstance(taskId, adcpErrorInfo),\n correlationId,\n metadata: this.buildMetadata({\n taskId,\n taskName: 'unknown',\n agent,\n startTime,\n status: 'failed',\n }),\n debug_logs: debugLogs,\n };\n }\n\n /**\n * Legacy methods for backward compatibility\n */\n getConversationHistory(taskId: string): Message[] | undefined {\n return this.conversationStorage?.get(taskId);\n }\n\n clearConversationHistory(taskId: string): void {\n this.conversationStorage?.delete(taskId);\n }\n\n getActiveTasks(): TaskState[] {\n return Array.from(this.activeTasks.values());\n }\n\n // ====== TASK MANAGEMENT & NOTIFICATION METHODS ======\n\n private taskEventListeners = new Map<\n string,\n {\n callback: (task: TaskInfo) => void;\n agentId?: string;\n }[]\n >();\n\n private webhookRegistrations = new Map<\n string,\n {\n agent: AgentConfig;\n webhookUrl: string;\n taskTypes?: string[];\n }\n >();\n\n /**\n * Get task list for a specific agent\n */\n async getTaskList(agentId: string, transport?: import('../protocols').TransportOptions): Promise<TaskInfo[]> {\n const transportSnapshot = snapshotTransportOptions(transport ?? this.config.transport);\n // First try to get from agent via protocol\n const agent = this.findAgentById(agentId);\n if (agent) {\n try {\n return await this.listTasksForAgent(agent, transportSnapshot);\n } catch {\n // Static message — see comment on listTasks above.\n console.warn('Failed to get remote task list (see DEBUG=adcp:* logs for detail)');\n }\n }\n\n // Fall back to local active tasks\n return Array.from(this.activeTasks.values())\n .filter(task => task.agent.id === agentId)\n .map(task => ({\n taskId: task.taskId,\n status: task.status,\n taskType: task.taskName,\n createdAt: task.startTime,\n updatedAt: task.startTime, // TODO: track updates\n }));\n }\n\n /**\n * Get detailed information about a specific task\n */\n async getTaskInfo(taskId: string): Promise<TaskInfo | null> {\n const localTask = this.activeTasks.get(taskId);\n if (localTask) {\n if (this.compactedTaskIds.has(taskId)) {\n this.compactedTaskIds.delete(taskId);\n this.compactedTaskIds.set(taskId, true);\n }\n return {\n taskId: localTask.taskId,\n status: localTask.status,\n taskType: localTask.taskName,\n createdAt: localTask.startTime,\n updatedAt: localTask.startTime,\n };\n }\n\n // Try to get from agent\n // Note: Would need to know which agent to query\n return null;\n }\n\n /**\n * Subscribe to task updates for a specific agent\n */\n onTaskUpdate(agentId: string, callback: (task: TaskInfo) => void): () => void {\n const listenerId = randomUUID();\n const listeners = this.taskEventListeners.get(listenerId) || [];\n listeners.push({ callback, agentId });\n this.taskEventListeners.set(listenerId, listeners);\n\n return () => {\n this.taskEventListeners.delete(listenerId);\n };\n }\n\n /**\n * Subscribe to task events with detailed callbacks\n */\n onTaskEvents(\n agentId: string,\n callbacks: {\n onTaskCreated?: (task: TaskInfo) => void;\n onTaskUpdated?: (task: TaskInfo) => void;\n onTaskCompleted?: (task: TaskInfo) => void;\n onTaskFailed?: (task: TaskInfo, error: string) => void;\n }\n ): () => void {\n const unsubscribeFns: (() => void)[] = [];\n\n // Create combined handler that routes to specific callbacks\n const handler = (task: TaskInfo) => {\n switch (task.status) {\n case 'submitted':\n case 'working':\n callbacks.onTaskCreated?.(task);\n break;\n case 'input-required':\n callbacks.onTaskUpdated?.(task);\n break;\n case 'completed':\n callbacks.onTaskCompleted?.(task);\n break;\n case 'failed':\n case 'rejected':\n case 'canceled':\n callbacks.onTaskFailed?.(task, task.error || `Task ${task.status}`);\n break;\n default:\n callbacks.onTaskUpdated?.(task);\n }\n };\n\n unsubscribeFns.push(this.onTaskUpdate(agentId, handler));\n\n return () => {\n unsubscribeFns.forEach(fn => fn());\n };\n }\n\n /**\n * Register webhook for task notifications\n */\n async registerWebhook(agent: AgentConfig, webhookUrl: string, taskTypes?: string[]): Promise<void> {\n this.webhookRegistrations.set(agent.id, {\n agent,\n webhookUrl,\n taskTypes,\n });\n\n // TODO: Register with remote agent if it supports webhooks\n console.log(`Webhook registered for agent ${agent.id}: ${webhookUrl}`);\n }\n\n /**\n * Unregister webhook notifications\n */\n async unregisterWebhook(agent: AgentConfig): Promise<void> {\n this.webhookRegistrations.delete(agent.id);\n console.log(`Webhook unregistered for agent ${agent.id}`);\n }\n\n /**\n * Emit task event to listeners\n */\n private emitTaskEvent(task: TaskInfo, agentId?: string): void {\n this.taskEventListeners.forEach(listeners => {\n listeners.forEach(({ callback, agentId: listenerAgentId }) => {\n if (!listenerAgentId || listenerAgentId === agentId) {\n try {\n callback(task);\n } catch (error) {\n console.error('Error in task event callback:', error instanceof Error ? error.message : 'unknown error');\n }\n }\n });\n });\n }\n\n /**\n * Normalize response data for schema validation\n *\n * Converts v2-style responses to v3 format before validation.\n * This ensures validation passes for both v2 and v3 server responses.\n */\n private normalizeResponseForValidation(response: any, taskName: string, legacyWire = false): any {\n if (!response) return response;\n\n // Strip underscore-prefixed client-side annotations (`_message` is added\n // by the response unwrapper, others may follow). Schemas with\n // `additionalProperties: false` (create-property-list-response, etc.)\n // would otherwise reject every response that reaches the grader's\n // schema check — the annotation is not part of the wire protocol.\n const stripped: Record<string, unknown> = {};\n if (typeof response === 'object' && !Array.isArray(response)) {\n for (const [k, v] of Object.entries(response)) {\n if (!k.startsWith('_')) stripped[k] = v;\n }\n } else {\n return taskName === 'get_products' && !legacyWire ? normalizeGetProductsResponse(response) : response;\n }\n\n // Validate v2.5 against the exact response that crossed the wire. Public\n // canonicalization happens later in SingleAgentClient; applying it here\n // would compare canonical `fixed_price`/`format_options` fields to the\n // legacy schema that correctly requires `rate`/`is_fixed`/`format_ids`.\n if (legacyWire) return stripped;\n\n switch (taskName) {\n case 'get_products':\n return normalizeGetProductsResponse(stripped);\n default:\n return stripped;\n }\n }\n\n /**\n * Validate an incoming response against the bundled AdCP JSON schema for\n * `taskName`. Strict mode fails the task; warn mode logs and returns\n * valid so the caller can continue. Off mode short-circuits before\n * AJV runs.\n */\n private validateResponseSchema(\n response: any,\n taskName: string,\n debugLogs: any[],\n serverVersion?: 'v2' | 'v3'\n ): { valid: boolean; errors: string[] } {\n const mode = this.responseValidationMode;\n const logViolations = this.config.logSchemaViolations !== false;\n\n try {\n // Validate against the version the agent actually spoke. Without\n // this, v2.5 sellers (e.g. Wonderstruck) return valid v2.5-shaped\n // responses and the SDK rejects them as malformed v3 — surfaces as\n // `pricing_options must NOT have fewer than 1 items` and similar\n // shape mismatches that don't exist in v2.5. The v3 → v2 path is\n // Normal dispatch uses lastKnownServerVersion; restart recovery passes\n // the persisted continuation version explicitly so concurrent or fresh\n // executors cannot validate the seller's response against another wire.\n const validationVersion =\n (serverVersion ?? this.lastKnownServerVersion) === 'v2'\n ? 'v2.5'\n : (this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? ADCP_VERSION);\n const normalizedResponse = this.normalizeResponseForValidation(response, taskName, validationVersion === 'v2.5');\n // TaskExecutor owns the user-facing log entry below. Passing debugLogs\n // into the lower-level hook would emit a second, unversioned duplicate.\n const outcome = validateIncomingResponse(taskName, normalizedResponse, mode, undefined, validationVersion);\n if (outcome.valid) return { valid: true, errors: [] };\n\n const errorStrings = outcome.issues.map(i => `${i.pointer}: ${i.message}`);\n\n if (logViolations) {\n debugLogs.push({\n timestamp: new Date().toISOString(),\n type: mode === 'strict' ? 'error' : 'warning',\n message: `Schema validation ${mode === 'strict' ? 'failed' : 'warning'} for ${taskName}: ${formatIssues(\n outcome.issues\n )}`,\n errors: errorStrings,\n issues: outcome.issues,\n schemaVariant: outcome.variant,\n schemaVersion: validationVersion,\n mode,\n });\n }\n\n if (mode === 'warn') {\n if (logViolations) {\n console.warn(\n `Schema validation failed for ${taskName} against AdCP ${validationVersion} (non-blocking):`,\n errorStrings\n );\n }\n return { valid: true, errors: [] };\n }\n\n if (logViolations) {\n console.error(`Schema validation failed for ${taskName} against AdCP ${validationVersion}:`, errorStrings);\n }\n return { valid: false, errors: errorStrings };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'unknown error';\n console.error('Error during schema validation:', errorMessage);\n return {\n valid: mode !== 'strict',\n errors: mode === 'strict' ? [`Validation error: ${errorMessage}`] : [],\n };\n }\n }\n\n private responseAdcpVersionForValidation(): string | undefined {\n if (this.config.versionEnvelope === 'major-only') return '3.0';\n return undefined;\n }\n\n private effectiveResponseAdcpVersion(serverVersion?: 'v2' | 'v3'): string {\n if ((serverVersion ?? this.lastKnownServerVersion) === 'v2') return 'v2.5';\n return this.responseAdcpVersionForValidation() ?? this.config.adcpVersion ?? ADCP_VERSION;\n }\n\n /**\n * Update task status and emit events\n */\n private updateTaskStatus(taskId: string, status: TaskStatus, result?: any, error?: string): void {\n const task = this.activeTasks.get(taskId);\n if (task) {\n // Once cancellation has released request state, late work must not\n // resurrect the task or emit completion after the caller has retried.\n if (task.status === 'aborted' && status !== 'aborted') return;\n const previousStatus = task.status;\n task.status = status;\n\n const taskInfo: TaskInfo = {\n taskId: task.taskId,\n status: status,\n taskType: task.taskName,\n createdAt: task.startTime,\n updatedAt: Date.now(),\n result,\n error,\n };\n\n this.emitTaskEvent(taskInfo, task.agent.id);\n\n this.config.onActivity?.({\n type: 'status_change',\n operation_id: task.taskId,\n agent_id: task.agent.id,\n context_id: undefined,\n task_id: task.taskId,\n task_type: task.taskName,\n status: status,\n payload: result ?? (error ? { error } : undefined),\n timestamp: new Date().toISOString(),\n });\n\n if (status === 'input-required' || status === 'auth-required') {\n this.compactIntermediateTaskState(taskId, status);\n }\n\n // If task is finished, remove from active tasks after a delay.\n // unref() ensures this timer doesn't prevent the process from exiting.\n if (TERMINAL_TASK_STATUSES.has(status)) {\n // Keep lifecycle metadata briefly for status inspection, but release\n // request/conversation/options immediately. These may contain inline\n // creative assets and webhook or transport credentials.\n task.params = undefined;\n task.messages = [];\n task.options = {};\n delete task.pendingInput;\n setTimeout(() => {\n this.cleanupTerminalTaskInspectionState(taskId);\n }, 30000).unref(); // Keep for 30 seconds for final status checks\n }\n }\n }\n\n /**\n * Helper to find agent config by ID\n */\n private findAgentById(agentId: string): AgentConfig | undefined {\n // This would ideally be passed in or stored in the executor\n // For now, return undefined and fall back to local tasks\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_errors","timer","finalizationLease"]}