{"version":3,"file":"index.cjs","names":["isTask","MastraA2AError","Role","TaskState","MastraA2AError","SendMessageRequestCodec","AgentCardCodec","SendMessageResponseCodec","GetTaskRequestCodec","TaskCodec","SubscribeToTaskRequestCodec","StreamResponseCodec","MastraA2AError","convertMessages","MessageList","#url","#compat","#description","#headers","#fetch","#retries","#backoffMs","#maxBackoffMs","#credentials","#abortSignal","#timeoutMs","#verifyAgentCard","#runState","#getBootstrap","#memory","RequestContext","#mastra","#sendAndResolve","#getTask","#resolveTaskToGenerateResult","#createBufferedStreamResult","#runRemoteStream","#resubscribeToRemoteStream","#cachedBootstrap","#resolveCardUrl","#request","#sendMessage","#evaluateTask","#delay","#consumeA2AStream","#collectStreamEvents","#streamEvents","#resolveRequestSignal"],"sources":["../../src/a2a/compat/v0_3.ts","../../src/a2a/compat/v1.ts","../../src/a2a/a2a-agent.ts"],"sourcesContent":["import type { AgentCard, Message, Task } from '@a2a-js/sdk-v0_3';\nimport { MastraA2AError } from '../error';\nimport type { A2AProtocolCompat, A2AStreamEventData, SendMessageInput } from './types';\n\nfunction isTask(value: Message | Task | A2AStreamEventData): value is Task {\n  return typeof value === 'object' && value !== null && 'status' in value && 'id' in value && 'kind' in value;\n}\n\nexport const v0_3Compat: A2AProtocolCompat = {\n  headers: {},\n  methods: {\n    sendMessage: 'message/send',\n    streamMessage: 'message/stream',\n    getTask: 'tasks/get',\n    resubscribeTask: 'tasks/resubscribe',\n  },\n  decodeAgentCard: value => value as AgentCard,\n  createSendMessageParams: ({ prompt, data, contextId, taskId }: SendMessageInput) => ({\n    message: {\n      role: 'user',\n      kind: 'message',\n      messageId: globalThis.crypto.randomUUID(),\n      parts: [{ kind: 'text', text: prompt }, ...(data ? [{ kind: 'data' as const, data }] : [])],\n      ...(contextId ? { contextId } : {}),\n      ...(taskId ? { taskId } : {}),\n    },\n  }),\n  decodeSendMessageResult: value => value as Message | Task,\n  createGetTaskParams: taskId => ({ id: taskId }),\n  decodeGetTaskResult: value => {\n    const result = value as A2AStreamEventData;\n    if (!isTask(result)) {\n      throw MastraA2AError.invalidAgentResponse('Remote A2A agent returned a non-task response for tasks/get.');\n    }\n    return result;\n  },\n  createResubscribeParams: taskId => ({ id: taskId }),\n  decodeStreamResult: value => value as A2AStreamEventData,\n};\n","import type { AgentCard, Message, Task } from '@a2a-js/sdk-v0_3';\nimport {\n  AgentCard as AgentCardCodec,\n  GetTaskRequest as GetTaskRequestCodec,\n  Role,\n  SendMessageRequest as SendMessageRequestCodec,\n  SendMessageResponse as SendMessageResponseCodec,\n  StreamResponse as StreamResponseCodec,\n  SubscribeToTaskRequest as SubscribeToTaskRequestCodec,\n  Task as TaskCodec,\n  TaskState,\n} from '@a2a-js/sdk-v1';\nimport type {\n  AgentCard as AgentCardV1,\n  Artifact,\n  Message as MessageV1,\n  Part,\n  SendMessageResponse,\n  StreamResponse,\n  Task as TaskV1,\n  TaskStatus,\n} from '@a2a-js/sdk-v1';\nimport { MastraA2AError } from '../error';\nimport type { A2AProtocolCompat, A2AStreamEventData, SendMessageInput } from './types';\n\nfunction fromPart(part: Part): Message['parts'][number] {\n  const metadata = part.metadata ?? undefined;\n  switch (part.content?.$case) {\n    case 'text':\n      return { kind: 'text', text: part.content.value, metadata };\n    case 'raw':\n      return {\n        kind: 'file',\n        file: {\n          bytes: Buffer.from(part.content.value).toString('base64'),\n          mimeType: part.mediaType,\n          name: part.filename,\n        },\n        metadata,\n      };\n    case 'url':\n      return {\n        kind: 'file',\n        file: { uri: part.content.value, mimeType: part.mediaType, name: part.filename },\n        metadata,\n      };\n    case 'data':\n      return { kind: 'data', data: part.content.value, metadata };\n    default:\n      return { kind: 'data', data: {}, metadata };\n  }\n}\n\nfunction fromMessage(message: MessageV1): Message {\n  return {\n    kind: 'message',\n    messageId: message.messageId,\n    role: message.role === Role.ROLE_AGENT ? 'agent' : 'user',\n    parts: message.parts.map(fromPart),\n    ...(message.contextId ? { contextId: message.contextId } : {}),\n    ...(message.taskId ? { taskId: message.taskId } : {}),\n    ...(message.metadata ? { metadata: message.metadata } : {}),\n    ...(message.extensions.length ? { extensions: message.extensions } : {}),\n    ...(message.referenceTaskIds.length ? { referenceTaskIds: message.referenceTaskIds } : {}),\n  };\n}\n\nfunction fromTaskState(state: TaskState): Task['status']['state'] {\n  switch (state) {\n    case TaskState.TASK_STATE_SUBMITTED:\n      return 'submitted';\n    case TaskState.TASK_STATE_WORKING:\n      return 'working';\n    case TaskState.TASK_STATE_COMPLETED:\n      return 'completed';\n    case TaskState.TASK_STATE_FAILED:\n      return 'failed';\n    case TaskState.TASK_STATE_CANCELED:\n      return 'canceled';\n    case TaskState.TASK_STATE_INPUT_REQUIRED:\n      return 'input-required';\n    case TaskState.TASK_STATE_REJECTED:\n      return 'rejected';\n    case TaskState.TASK_STATE_AUTH_REQUIRED:\n      return 'auth-required';\n    default:\n      return 'unknown';\n  }\n}\n\nfunction fromStatus(status: TaskStatus | undefined): Task['status'] {\n  return {\n    state: fromTaskState(status?.state ?? TaskState.TASK_STATE_UNSPECIFIED),\n    ...(status?.message ? { message: fromMessage(status.message) } : {}),\n    ...(status?.timestamp ? { timestamp: status.timestamp } : {}),\n  };\n}\n\nfunction fromArtifact(artifact: Artifact): NonNullable<Task['artifacts']>[number] {\n  return {\n    artifactId: artifact.artifactId,\n    name: artifact.name,\n    description: artifact.description,\n    parts: artifact.parts.map(fromPart),\n    ...(artifact.metadata ? { metadata: artifact.metadata } : {}),\n    ...(artifact.extensions.length ? { extensions: artifact.extensions } : {}),\n  };\n}\n\nfunction fromTask(task: TaskV1): Task {\n  return {\n    kind: 'task',\n    id: task.id,\n    contextId: task.contextId,\n    status: fromStatus(task.status),\n    artifacts: task.artifacts.map(fromArtifact),\n    history: task.history.map(fromMessage),\n    ...(task.metadata ? { metadata: task.metadata } : {}),\n  };\n}\n\nfunction fromSendMessageResponse(response: SendMessageResponse): Message | Task {\n  const payload = response.payload;\n  if (!payload) {\n    throw MastraA2AError.invalidAgentResponse('Remote A2A v1.0 agent returned an empty message response.');\n  }\n  return payload.$case === 'task' ? fromTask(payload.value) : fromMessage(payload.value);\n}\n\nfunction fromStreamResponse(response: StreamResponse): A2AStreamEventData {\n  const payload = response.payload;\n  if (!payload) {\n    throw MastraA2AError.invalidAgentResponse('Remote A2A v1.0 agent returned an empty stream payload.');\n  }\n\n  switch (payload.$case) {\n    case 'task':\n      return fromTask(payload.value);\n    case 'message':\n      return fromMessage(payload.value);\n    case 'statusUpdate':\n      return {\n        kind: 'status-update',\n        taskId: payload.value.taskId,\n        contextId: payload.value.contextId,\n        status: fromStatus(payload.value.status),\n        final: false,\n        ...(payload.value.metadata ? { metadata: payload.value.metadata } : {}),\n      };\n    case 'artifactUpdate':\n      if (!payload.value.artifact) {\n        throw MastraA2AError.invalidAgentResponse(\n          'Remote A2A v1.0 agent returned an artifact update without an artifact.',\n        );\n      }\n      return {\n        kind: 'artifact-update',\n        taskId: payload.value.taskId,\n        contextId: payload.value.contextId,\n        artifact: fromArtifact(payload.value.artifact),\n        append: payload.value.append,\n        lastChunk: payload.value.lastChunk,\n        ...(payload.value.metadata ? { metadata: payload.value.metadata } : {}),\n      };\n  }\n}\n\nfunction createSendMessageParams({ prompt, data, contextId, taskId }: SendMessageInput): Record<string, unknown> {\n  const request = SendMessageRequestCodec.fromJSON({\n    message: {\n      role: 'ROLE_USER',\n      messageId: globalThis.crypto.randomUUID(),\n      parts: [{ text: prompt }, ...(data ? [{ data }] : [])],\n      ...(contextId ? { contextId } : {}),\n      ...(taskId ? { taskId } : {}),\n    },\n  });\n  return SendMessageRequestCodec.toJSON(request) as Record<string, unknown>;\n}\n\nfunction fromAgentCard(card: AgentCardV1): AgentCard {\n  const jsonRpcInterface = card.supportedInterfaces.find(\n    agentInterface =>\n      agentInterface.protocolBinding.toUpperCase() === 'JSONRPC' && agentInterface.protocolVersion === '1.0',\n  );\n  if (!jsonRpcInterface) {\n    throw MastraA2AError.invalidAgentResponse('Remote A2A v1.0 agent card does not advertise a JSON-RPC interface.');\n  }\n\n  return {\n    name: card.name,\n    description: card.description,\n    url: jsonRpcInterface.url,\n    preferredTransport: 'JSONRPC',\n    protocolVersion: jsonRpcInterface.protocolVersion,\n    version: card.version,\n    capabilities: card.capabilities as AgentCard['capabilities'],\n    defaultInputModes: card.defaultInputModes,\n    defaultOutputModes: card.defaultOutputModes,\n    skills: card.skills as AgentCard['skills'],\n    ...(card.provider ? { provider: card.provider } : {}),\n    ...(card.documentationUrl ? { documentationUrl: card.documentationUrl } : {}),\n  };\n}\n\nexport const v1Compat: A2AProtocolCompat = {\n  headers: { 'A2A-Version': '1.0' },\n  methods: {\n    sendMessage: 'SendMessage',\n    streamMessage: 'SendStreamingMessage',\n    getTask: 'GetTask',\n    resubscribeTask: 'SubscribeToTask',\n  },\n  decodeAgentCard: value => fromAgentCard(AgentCardCodec.fromJSON(value)),\n  createSendMessageParams,\n  decodeSendMessageResult: value => fromSendMessageResponse(SendMessageResponseCodec.fromJSON(value)),\n  createGetTaskParams: taskId =>\n    GetTaskRequestCodec.toJSON(GetTaskRequestCodec.fromJSON({ id: taskId })) as Record<string, unknown>,\n  decodeGetTaskResult: value => fromTask(TaskCodec.fromJSON(value)),\n  createResubscribeParams: taskId =>\n    SubscribeToTaskRequestCodec.toJSON(SubscribeToTaskRequestCodec.fromJSON({ id: taskId })) as Record<string, unknown>,\n  decodeStreamResult: value => fromStreamResponse(StreamResponseCodec.fromJSON(value)),\n};\n","import type { AgentCard, Message, Task, TaskArtifactUpdateEvent, TaskStatusUpdateEvent } from '@a2a-js/sdk-v0_3';\nimport type { AgentExecutionOptionsBase } from '../agent/agent.types';\nimport { MessageList } from '../agent/message-list';\nimport type { MastraDBMessage, MessageListInput } from '../agent/message-list';\nimport { convertMessages } from '../agent/message-list/utils/convert-messages';\nimport type { SubAgent } from '../agent/subagent';\nimport type { Mastra } from '../mastra';\nimport type { MastraMemory } from '../memory/memory';\nimport { RequestContext } from '../request-context';\nimport type { ChunkType } from '../stream/types';\nimport type { DynamicArgument } from '../types';\nimport type { A2AProtocolCompat, A2AStreamEventData } from './compat/types';\nimport { v0_3Compat } from './compat/v0_3';\nimport { v1Compat } from './compat/v1';\nimport { MastraA2AError } from './error';\nimport type {\n  A2AAgentCardVerificationContext,\n  A2AAgentGenerateResult,\n  A2AAgentOptions,\n  A2AAgentResumePayload,\n  A2AAgentRunState,\n  A2AAgentStreamResult,\n  JSONRPCResponse,\n  RequestCredentialsMode,\n} from './types';\n\ntype FetchLike = typeof fetch;\n\ntype JSONRPCRequestBody = {\n  jsonrpc: '2.0';\n  id: string;\n  method: string;\n  params?: Record<string, unknown>;\n};\n\ntype RequestOptions = {\n  method?: string;\n  headers?: Record<string, string>;\n  body?: unknown;\n  stream?: boolean;\n  credentials?: RequestCredentialsMode;\n  signal?: AbortSignal;\n};\n\ntype AgentBootstrap = {\n  card: AgentCard;\n  cardUrl: string;\n  executionUrl: string;\n  streamingSupported: boolean;\n};\n\ntype TerminalEvaluation =\n  | {\n      kind: 'completed';\n      text: string;\n      task?: Task;\n      message?: Message;\n    }\n  | {\n      kind: 'suspended';\n      text: string;\n      task: Task;\n      resumePayload: A2AAgentResumePayload;\n      resumeSchema?: string;\n    };\n\ntype StreamConsumptionResult = {\n  text: string;\n  task?: Task;\n  suspended?: {\n    payload: A2AAgentResumePayload;\n    resumeSchema?: string;\n  };\n};\n\ntype A2AAgentFullStreamChunkBase =\n  | { type: 'start'; payload: { id: string } }\n  | { type: 'text-start'; payload: { id: string } }\n  | { type: 'text-delta'; payload: { id: string; text: string } }\n  | { type: 'text-end'; payload: { id: string } }\n  | {\n      type: 'tool-call-suspended';\n      payload: {\n        toolCallId: string;\n        toolName: string;\n        args: Record<string, never>;\n        suspendPayload: A2AAgentResumePayload;\n        resumeSchema: string;\n      };\n    }\n  | {\n      type: 'finish';\n      payload: A2AAgentFinishPayload;\n    };\n\ntype AgentFinishPayload = Extract<ChunkType, { type: 'finish' }>['payload'];\n\ntype A2AAgentFinishPayload = AgentFinishPayload & {\n  /** @deprecated Use `stepResult.reason`. Kept for consumers of the previous flat payload shape. */\n  finishReason: 'stop';\n  /** @deprecated Use `output.usage`. Kept for consumers of the previous flat payload shape. */\n  usage: typeof EMPTY_USAGE;\n};\ntype A2AAgentFullStreamChunk = A2AAgentFullStreamChunkBase & {\n  runId: string;\n  from: 'AGENT';\n};\n\ntype Deferred<T> = {\n  promise: Promise<T>;\n  resolve: (value: T | PromiseLike<T>) => void;\n  reject: (reason?: unknown) => void;\n};\n\nconst EMPTY_USAGE = {\n  inputTokens: undefined,\n  outputTokens: undefined,\n  totalTokens: undefined,\n};\n\nfunction toAgentStreamChunk(runId: string, chunk: A2AAgentFullStreamChunkBase): A2AAgentFullStreamChunk {\n  return {\n    ...chunk,\n    runId,\n    from: 'AGENT',\n  };\n}\n\nfunction createFinishPayload(): A2AAgentFinishPayload {\n  return {\n    stepResult: {\n      reason: 'stop',\n    },\n    output: {\n      usage: EMPTY_USAGE,\n    },\n    metadata: {},\n    messages: {\n      all: [],\n      user: [],\n      nonUser: [],\n    },\n    finishReason: 'stop',\n    usage: EMPTY_USAGE,\n  };\n}\n\nfunction isTask(result: Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent): result is Task {\n  return typeof result === 'object' && result !== null && 'status' in result && 'id' in result && 'kind' in result;\n}\n\nfunction isMessage(result: Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent): result is Message {\n  return typeof result === 'object' && result !== null && 'messageId' in result && 'parts' in result;\n}\n\nfunction isTerminalTaskState(state: Task['status']['state'] | undefined) {\n  return state === 'completed' || state === 'failed' || state === 'canceled' || state === 'rejected';\n}\n\nfunction isInterruptedTaskState(state: Task['status']['state'] | undefined) {\n  return state === 'input-required' || state === 'auth-required';\n}\n\nfunction throwIfA2AErrorResponse(response: unknown): void {\n  if (!response || typeof response !== 'object' || !('error' in response)) {\n    return;\n  }\n\n  const error = response.error;\n  if (error == null) {\n    return;\n  }\n\n  if (\n    typeof error !== 'object' ||\n    !('code' in error) ||\n    typeof error.code !== 'number' ||\n    !('message' in error) ||\n    typeof error.message !== 'string'\n  ) {\n    throw MastraA2AError.invalidAgentResponse('Remote A2A agent returned a malformed JSON-RPC error response.');\n  }\n\n  throw new MastraA2AError(error.code, error.message, 'data' in error ? error.data : undefined);\n}\n\nfunction splitNextEvent(buffer: string): { eventBlock?: string; rest: string } {\n  const normalizedBuffer = buffer.replace(/\\x1E/g, '\\n\\n');\n  const match = normalizedBuffer.match(/\\r?\\n\\r?\\n/);\n\n  if (!match || match.index === undefined) {\n    return { rest: normalizedBuffer };\n  }\n\n  return {\n    eventBlock: normalizedBuffer.slice(0, match.index),\n    rest: normalizedBuffer.slice(match.index + match[0].length),\n  };\n}\n\nfunction parseEventBlock(\n  eventBlock: string,\n  compat: A2AProtocolCompat,\n): { done: true } | { event?: A2AStreamEventData } {\n  const trimmedBlock = eventBlock.trim();\n\n  if (!trimmedBlock) {\n    return {};\n  }\n\n  const lines = trimmedBlock.split(/\\r?\\n/);\n  const dataLines = lines.filter(line => line.startsWith('data:')).map(line => line.slice(5).trimStart());\n  const payload = dataLines.length > 0 ? dataLines.join('\\n') : trimmedBlock;\n\n  if (payload === '[DONE]') {\n    return { done: true };\n  }\n\n  let parsed: JSONRPCResponse<unknown> | unknown;\n\n  try {\n    parsed = JSON.parse(payload);\n  } catch {\n    return {};\n  }\n\n  throwIfA2AErrorResponse(parsed);\n\n  const result = typeof parsed === 'object' && parsed !== null && 'result' in parsed ? parsed.result : parsed;\n  return { event: compat.decodeStreamResult(result) };\n}\n\nfunction extractTextParts(parts: { kind: string; text?: string }[] | undefined): string {\n  return (parts ?? [])\n    .filter((part): part is { kind: string; text: string } => part.kind === 'text' && typeof part.text === 'string')\n    .map(part => part.text)\n    .join('\\n');\n}\n\nfunction extractTaskText(task: Task): string {\n  const artifactText = (task.artifacts ?? [])\n    .flatMap(\n      artifact =>\n        artifact.parts?.flatMap(part => {\n          if (part.kind === 'text' && 'text' in part && typeof part.text === 'string') {\n            return [part.text];\n          }\n\n          return [];\n        }) ?? [],\n    )\n    .join('\\n');\n  const statusText = task.status.message ? extractMessageText(task.status.message) : '';\n  return [artifactText, statusText].filter(Boolean).join('\\n').trim();\n}\n\nfunction extractTaskArtifactText(task: Task): string {\n  return (task.artifacts ?? [])\n    .flatMap(\n      artifact =>\n        artifact.parts?.flatMap(part => {\n          if (part.kind === 'text' && 'text' in part && typeof part.text === 'string') {\n            return [part.text];\n          }\n\n          return [];\n        }) ?? [],\n    )\n    .join('');\n}\n\nfunction extractMessageText(message: Message): string {\n  return extractTextParts(message.parts as { kind: string; text?: string }[] | undefined).trim();\n}\n\nfunction messagesToPrompt<OUTPUT>(messages: MessageListInput, options?: AgentExecutionOptionsBase<OUTPUT>): string {\n  if (typeof messages === 'string') {\n    return messages;\n  }\n\n  const converted = convertMessages(messages).to('AIV5.Model');\n  const lines: string[] = [];\n\n  if (options?.instructions) {\n    lines.push(`Instructions:\\n${options.instructions}`);\n  }\n\n  const contextMessages = options?.context as Array<{ role?: string; content?: unknown }> | undefined;\n  if (contextMessages?.length) {\n    lines.push(\n      'Context:\\n' +\n        contextMessages\n          .map(message => {\n            const role = message.role ?? 'unknown';\n            const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);\n            return `${role}: ${content}`;\n          })\n          .join('\\n'),\n    );\n  }\n\n  for (const message of converted) {\n    if (message.role === 'system') {\n      const content = Array.isArray(message.content)\n        ? message.content\n            .map((part: { type: string; text?: string }) => {\n              if ('type' in part && part.type === 'text') {\n                return part.text;\n              }\n\n              return '';\n            })\n            .filter(Boolean)\n            .join('\\n')\n        : typeof message.content === 'string'\n          ? message.content\n          : '';\n\n      if (content) {\n        lines.push(`system: ${content}`);\n      }\n      continue;\n    }\n\n    const content = Array.isArray(message.content)\n      ? message.content\n          .map((part: { type: string; text?: string; filename?: string }) => {\n            if ('type' in part && part.type === 'text') {\n              return part.text;\n            }\n\n            if ('type' in part && part.type === 'file') {\n              return `[file:${part.filename ?? 'attachment'}]`;\n            }\n\n            return '';\n          })\n          .filter(Boolean)\n          .join('\\n')\n      : typeof message.content === 'string'\n        ? message.content\n        : '';\n\n    lines.push(`${message.role}: ${content}`);\n  }\n\n  return lines.join('\\n\\n').trim();\n}\n\nfunction resumeDataToPrompt(resumeData: unknown): string {\n  if (typeof resumeData === 'string') {\n    return resumeData;\n  }\n\n  if (resumeData == null) {\n    return '';\n  }\n\n  return JSON.stringify(resumeData, null, 2);\n}\n\n/**\n * Structured resume data is also sent as an A2A data part — the spec-idiomatic\n * carrier for machine-readable input — alongside the JSON text part kept for\n * servers that only read text.\n */\nfunction resumeDataToDataPart(resumeData: unknown): Record<string, unknown> | undefined {\n  if (!resumeData || typeof resumeData !== 'object' || Array.isArray(resumeData)) {\n    return undefined;\n  }\n\n  return resumeData as Record<string, unknown>;\n}\n\nfunction createResumeSchema(): string {\n  return JSON.stringify({\n    type: 'object',\n    additionalProperties: true,\n    description: 'Data to continue the remote A2A task.',\n  });\n}\n\nfunction resolveStreamTextId(candidateIds: Array<string | undefined>): string {\n  for (const candidate of candidateIds) {\n    if (candidate) {\n      return candidate;\n    }\n  }\n\n  return 'text-1';\n}\n\nfunction resolveMemoryInfo<OUTPUT>(options?: AgentExecutionOptionsBase<OUTPUT>) {\n  const threadId = typeof options?.memory?.thread === 'string' ? options.memory.thread : options?.memory?.thread?.id;\n\n  return {\n    threadId,\n    resourceId: options?.memory?.resource,\n  };\n}\n\nfunction createResponseMessages(\n  text: string,\n  memoryInfo: { threadId?: string; resourceId?: string } = {},\n): MastraDBMessage[] {\n  if (!text) {\n    return [];\n  }\n\n  return new MessageList(memoryInfo)\n    .add(\n      {\n        role: 'assistant',\n        content: text,\n      },\n      'response',\n    )\n    .get.response.db();\n}\n\nfunction createGenerateResult({\n  runId,\n  text,\n  task,\n  message,\n  resumePayload,\n  resumeSchema,\n  threadId,\n  resourceId,\n}: {\n  runId: string;\n  text: string;\n  task?: Task;\n  message?: Message;\n  resumePayload?: A2AAgentResumePayload;\n  resumeSchema?: string;\n  threadId?: string;\n  resourceId?: string;\n}): A2AAgentGenerateResult {\n  const responseMessages = createResponseMessages(text, { threadId, resourceId });\n\n  return {\n    text,\n    usage: EMPTY_USAGE,\n    steps: [],\n    finishReason: resumePayload ? 'suspended' : 'stop',\n    warnings: [],\n    providerMetadata: undefined,\n    request: {},\n    reasoning: [],\n    reasoningText: undefined,\n    toolCalls: [],\n    toolResults: [],\n    sources: [],\n    files: [],\n    response: {\n      id: message?.messageId ?? task?.id ?? runId,\n      timestamp: new Date(),\n      modelId: 'a2a/remote-agent',\n      messages: [],\n      uiMessages: [],\n      dbMessages: responseMessages,\n    },\n    totalUsage: EMPTY_USAGE,\n    object: undefined,\n    usedFallbackValue: false,\n    error: undefined,\n    tripwire: undefined,\n    traceId: undefined,\n    spanId: undefined,\n    runId,\n    suspendPayload: resumePayload,\n    resumeSchema,\n    messages: responseMessages,\n    rememberedMessages: [],\n    task,\n    message,\n    resumePayload,\n  };\n}\n\nfunction unwrapA2AResult(result: unknown): Message | Task {\n  if (!result || typeof result !== 'object') {\n    throw MastraA2AError.invalidAgentResponse('Remote A2A agent returned an invalid response.');\n  }\n\n  throwIfA2AErrorResponse(result);\n\n  if ('result' in result && result.result && typeof result.result === 'object') {\n    return result.result as Message | Task;\n  }\n\n  return result as Message | Task;\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n  let resolve!: Deferred<T>['resolve'];\n  let reject!: Deferred<T>['reject'];\n\n  const promise = new Promise<T>((res, rej) => {\n    resolve = res;\n    reject = rej;\n  });\n\n  return { promise, resolve, reject };\n}\n\nasync function requireResponseBody(response: Response, operation: string) {\n  if (!response.body) {\n    throw MastraA2AError.invalidAgentResponse(`Remote A2A agent returned an empty stream for ${operation}.`);\n  }\n\n  return response.body;\n}\n\nexport class A2AAgent implements SubAgent {\n  readonly id: string;\n  readonly name: string;\n\n  readonly #url: string;\n  readonly #compat: A2AProtocolCompat;\n  readonly #description: string;\n  readonly #headers: Record<string, string>;\n  readonly #fetch: FetchLike;\n  readonly #retries: number;\n  readonly #backoffMs: number;\n  readonly #maxBackoffMs: number;\n  readonly #credentials?: RequestCredentialsMode;\n  readonly #abortSignal?: AbortSignal;\n  readonly #timeoutMs?: number;\n  readonly #verifyAgentCard?: A2AAgentOptions['verifyAgentCard'];\n\n  #cachedBootstrap?: AgentBootstrap;\n  readonly #runState = new Map<string, A2AAgentRunState>();\n  #memory?: DynamicArgument<MastraMemory>;\n  #mastra?: Mastra;\n\n  constructor(options: A2AAgentOptions) {\n    this.#url = options.url.replace(/\\/$/, '');\n    this.#compat = options.protocolVersion === '1.0' ? v1Compat : v0_3Compat;\n    this.#description = options.description ?? `Remote A2A agent at ${this.#url}`;\n    this.#headers = options.headers ?? {};\n    this.#fetch = options.fetch ?? fetch;\n    this.#retries = options.retries ?? 0;\n    this.#backoffMs = options.backoffMs ?? 250;\n    this.#maxBackoffMs = options.maxBackoffMs ?? 1_000;\n    this.#credentials = options.credentials;\n    this.#abortSignal = options.abortSignal;\n    this.#timeoutMs = options.timeoutMs;\n    this.#verifyAgentCard = options.verifyAgentCard;\n    this.id = options.id ?? `a2a-${globalThis.crypto.randomUUID()}`;\n    this.name = options.name ?? options.description ?? 'A2A Agent';\n  }\n\n  async getAgentCard({ forceRefresh = false }: { forceRefresh?: boolean } = {}): Promise<AgentCard> {\n    return (await this.#getBootstrap({ forceRefresh })).card;\n  }\n\n  getDescription(): string {\n    return this.#description;\n  }\n\n  getModel: SubAgent['getModel'] = async () =>\n    ({\n      specificationVersion: 'v2',\n    }) as Awaited<ReturnType<SubAgent['getModel']>>;\n\n  hasOwnMemory(): boolean {\n    return Boolean(this.#memory);\n  }\n\n  __setMemory(memory: DynamicArgument<MastraMemory>): void {\n    this.#memory = memory;\n  }\n\n  async getMemory({ requestContext = new RequestContext() }: { requestContext?: RequestContext } = {}) {\n    if (!this.#memory) {\n      return undefined;\n    }\n\n    if (typeof this.#memory !== 'function') {\n      return this.#memory;\n    }\n\n    return await this.#memory({\n      requestContext,\n      mastra: this.#mastra,\n    });\n  }\n\n  getInstructions: SubAgent['getInstructions'] = async () => '';\n\n  __registerMastra(mastra: Mastra): void {\n    this.#mastra = mastra;\n  }\n\n  async generate(\n    messages: MessageListInput,\n    options?: AgentExecutionOptionsBase<unknown>,\n  ): Promise<A2AAgentGenerateResult> {\n    const bootstrap = await this.#getBootstrap();\n    const runId = options?.runId ?? globalThis.crypto.randomUUID();\n    const prompt = messagesToPrompt(messages, options);\n    const memoryInfo = resolveMemoryInfo(options);\n\n    return this.#sendAndResolve({\n      bootstrap,\n      runId,\n      prompt,\n      signal: options?.abortSignal,\n      ...memoryInfo,\n    });\n  }\n\n  async resumeGenerate(\n    resumeData: unknown,\n    options?: AgentExecutionOptionsBase<unknown>,\n  ): Promise<A2AAgentGenerateResult> {\n    const runId = options?.runId;\n    if (!runId) {\n      throw MastraA2AError.invalidParams('A2AAgent.resumeGenerate requires a runId.');\n    }\n\n    const state = this.#runState.get(runId);\n    if (!state) {\n      throw MastraA2AError.invalidParams(`No resumable A2A run state found for runId \"${runId}\".`);\n    }\n\n    const bootstrap = await this.#getBootstrap();\n    const memoryInfo = resolveMemoryInfo(options);\n\n    if (state.waitingForInput) {\n      const prompt = resumeDataToPrompt(resumeData);\n      return this.#sendAndResolve({\n        bootstrap,\n        runId,\n        prompt,\n        data: resumeDataToDataPart(resumeData),\n        signal: options?.abortSignal,\n        contextId: state.contextId,\n        taskId: state.taskId,\n        ...memoryInfo,\n      });\n    }\n\n    if (!state.taskId) {\n      throw MastraA2AError.invalidParams(`A2AAgent resume state for \"${runId}\" is missing a taskId.`);\n    }\n\n    const task = await this.#getTask({\n      bootstrap,\n      taskId: state.taskId,\n      signal: options?.abortSignal,\n    });\n\n    return this.#resolveTaskToGenerateResult({\n      bootstrap,\n      runId,\n      task,\n      signal: options?.abortSignal,\n      ...memoryInfo,\n    });\n  }\n\n  async stream(\n    messages: MessageListInput,\n    options?: AgentExecutionOptionsBase<unknown>,\n  ): Promise<A2AAgentStreamResult> {\n    const bootstrap = await this.#getBootstrap();\n    const runId = options?.runId ?? globalThis.crypto.randomUUID();\n    const prompt = messagesToPrompt(messages, options);\n    const memoryInfo = resolveMemoryInfo(options);\n\n    if (!bootstrap.streamingSupported) {\n      const result = await this.generate(messages, { ...options, runId });\n      return this.#createBufferedStreamResult({ runId, result, emitStart: true, ...memoryInfo });\n    }\n\n    return this.#runRemoteStream({\n      bootstrap,\n      runId,\n      prompt,\n      signal: options?.abortSignal,\n      emitStart: true,\n      ...memoryInfo,\n    });\n  }\n\n  async resumeStream(resumeData: unknown, options?: AgentExecutionOptionsBase<unknown>): Promise<A2AAgentStreamResult> {\n    const runId = options?.runId;\n    if (!runId) {\n      throw MastraA2AError.invalidParams('A2AAgent.resumeStream requires a runId.');\n    }\n\n    const state = this.#runState.get(runId);\n    if (!state) {\n      throw MastraA2AError.invalidParams(`No resumable A2A run state found for runId \"${runId}\".`);\n    }\n\n    const bootstrap = await this.#getBootstrap();\n    const memoryInfo = resolveMemoryInfo(options);\n\n    if (state.waitingForInput) {\n      const prompt = resumeDataToPrompt(resumeData);\n\n      if (!bootstrap.streamingSupported) {\n        const result = await this.resumeGenerate(resumeData, options);\n        return this.#createBufferedStreamResult({ runId, result, emitStart: false, ...memoryInfo });\n      }\n\n      return this.#runRemoteStream({\n        bootstrap,\n        runId,\n        prompt,\n        data: resumeDataToDataPart(resumeData),\n        signal: options?.abortSignal,\n        contextId: state.contextId,\n        taskId: state.taskId,\n        // Resumed runs skip the `start` chunk, mirroring the regular Agent loop.\n        emitStart: false,\n        ...memoryInfo,\n      });\n    }\n\n    if (!state.taskId) {\n      throw MastraA2AError.invalidParams(`A2AAgent resume state for \"${runId}\" is missing a taskId.`);\n    }\n\n    if (!bootstrap.streamingSupported) {\n      const result = await this.resumeGenerate(resumeData, options);\n      return this.#createBufferedStreamResult({ runId, result, emitStart: false, ...memoryInfo });\n    }\n\n    return this.#resubscribeToRemoteStream({\n      bootstrap,\n      runId,\n      taskId: state.taskId,\n      initialTask: state.lastTask,\n      signal: options?.abortSignal,\n      ...memoryInfo,\n    });\n  }\n\n  async #getBootstrap({ forceRefresh = false }: { forceRefresh?: boolean } = {}): Promise<AgentBootstrap> {\n    if (!forceRefresh && this.#cachedBootstrap) {\n      return this.#cachedBootstrap;\n    }\n\n    const cardUrl = this.#resolveCardUrl();\n    const response = await this.#request(cardUrl, {\n      method: 'GET',\n      signal: this.#abortSignal,\n    });\n\n    const cardJson = await response.json();\n    const card = this.#compat.decodeAgentCard(cardJson);\n    const fetchedAt = new Date();\n\n    if (this.#verifyAgentCard) {\n      const context: A2AAgentCardVerificationContext = { cardUrl, fetchedAt };\n      await this.#verifyAgentCard.verify(card, context);\n    }\n\n    const bootstrap: AgentBootstrap = {\n      card,\n      cardUrl,\n      executionUrl: card.url,\n      streamingSupported: card.capabilities?.streaming ?? false,\n    };\n\n    this.#cachedBootstrap = bootstrap;\n    return bootstrap;\n  }\n\n  #resolveCardUrl() {\n    return this.#url.endsWith('/agent-card.json') ? this.#url : `${this.#url}/.well-known/agent-card.json`;\n  }\n\n  async #sendMessage({\n    bootstrap,\n    prompt,\n    data,\n    signal,\n    contextId,\n    taskId,\n  }: {\n    bootstrap: AgentBootstrap;\n    prompt: string;\n    data?: Record<string, unknown>;\n    signal?: AbortSignal;\n    contextId?: string;\n    taskId?: string;\n  }): Promise<Message | Task> {\n    const response = await this.#request(bootstrap.executionUrl, {\n      method: 'POST',\n      signal,\n      body: {\n        jsonrpc: '2.0',\n        id: globalThis.crypto.randomUUID(),\n        method: this.#compat.methods.sendMessage,\n        params: this.#compat.createSendMessageParams({ prompt, data, contextId, taskId }),\n      } satisfies JSONRPCRequestBody,\n    });\n\n    const json = await response.json();\n    return this.#compat.decodeSendMessageResult(unwrapA2AResult(json));\n  }\n\n  async #sendAndResolve({\n    bootstrap,\n    runId,\n    prompt,\n    data,\n    signal,\n    contextId,\n    taskId,\n    threadId,\n    resourceId,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    prompt: string;\n    data?: Record<string, unknown>;\n    signal?: AbortSignal;\n    contextId?: string;\n    taskId?: string;\n    threadId?: string;\n    resourceId?: string;\n  }): Promise<A2AAgentGenerateResult> {\n    const response = await this.#sendMessage({\n      bootstrap,\n      prompt,\n      data,\n      signal,\n      contextId,\n      taskId,\n    });\n\n    if (isMessage(response)) {\n      this.#runState.delete(runId);\n      return createGenerateResult({\n        runId,\n        text: extractMessageText(response),\n        message: response,\n        threadId,\n        resourceId,\n      });\n    }\n\n    return this.#resolveTaskToGenerateResult({\n      bootstrap,\n      runId,\n      task: response,\n      signal,\n      threadId,\n      resourceId,\n    });\n  }\n\n  async #getTask({\n    bootstrap,\n    taskId,\n    signal,\n  }: {\n    bootstrap: AgentBootstrap;\n    taskId: string;\n    signal?: AbortSignal;\n  }): Promise<Task> {\n    const response = await this.#request(bootstrap.executionUrl, {\n      method: 'POST',\n      signal,\n      body: {\n        jsonrpc: '2.0',\n        id: globalThis.crypto.randomUUID(),\n        method: this.#compat.methods.getTask,\n        params: this.#compat.createGetTaskParams(taskId),\n      } satisfies JSONRPCRequestBody,\n    });\n\n    const json = await response.json();\n    return this.#compat.decodeGetTaskResult(unwrapA2AResult(json));\n  }\n\n  async #resolveTaskToGenerateResult({\n    bootstrap,\n    runId,\n    task,\n    signal,\n    threadId,\n    resourceId,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    task: Task;\n    signal?: AbortSignal;\n    threadId?: string;\n    resourceId?: string;\n  }): Promise<A2AAgentGenerateResult> {\n    let currentTask = task;\n\n    while (true) {\n      const evaluation = this.#evaluateTask({\n        bootstrap,\n        task: currentTask,\n      });\n\n      if (evaluation.kind === 'completed') {\n        this.#runState.delete(runId);\n\n        return createGenerateResult({\n          runId,\n          text: evaluation.text,\n          task: evaluation.task,\n          message: evaluation.message,\n          threadId,\n          resourceId,\n        });\n      }\n\n      this.#runState.set(runId, {\n        runId,\n        contextId: evaluation.task.contextId,\n        taskId: evaluation.task.id,\n        executionUrl: bootstrap.executionUrl,\n        cardUrl: bootstrap.cardUrl,\n        streamingSupported: bootstrap.streamingSupported,\n        waitingForInput: evaluation.resumePayload.waitingForInput,\n        lastTask: evaluation.task,\n      });\n\n      if (isInterruptedTaskState(evaluation.task.status.state)) {\n        return createGenerateResult({\n          runId,\n          text: evaluation.text,\n          task: evaluation.task,\n          resumePayload: evaluation.resumePayload,\n          resumeSchema: evaluation.resumeSchema,\n          threadId,\n          resourceId,\n        });\n      }\n\n      await this.#delay();\n\n      currentTask = await this.#getTask({\n        bootstrap,\n        taskId: evaluation.task.id,\n        signal,\n      });\n    }\n  }\n\n  #evaluateTask({ bootstrap, task }: { bootstrap: AgentBootstrap; task: Task }): TerminalEvaluation {\n    const text = extractTaskText(task);\n\n    if (isInterruptedTaskState(task.status.state)) {\n      return {\n        kind: 'suspended',\n        text,\n        task,\n        resumePayload: {\n          taskId: task.id,\n          contextId: task.contextId,\n          executionUrl: bootstrap.executionUrl,\n          cardUrl: bootstrap.cardUrl,\n          waitingForInput: true,\n          task: structuredClone(task),\n        },\n        resumeSchema: createResumeSchema(),\n      };\n    }\n\n    if (isTerminalTaskState(task.status.state)) {\n      return {\n        kind: 'completed',\n        text,\n        task,\n      };\n    }\n\n    return {\n      kind: 'suspended',\n      text,\n      task,\n      resumePayload: {\n        taskId: task.id,\n        contextId: task.contextId,\n        executionUrl: bootstrap.executionUrl,\n        cardUrl: bootstrap.cardUrl,\n        waitingForInput: false,\n        task: structuredClone(task),\n      },\n    };\n  }\n\n  async #runRemoteStream({\n    bootstrap,\n    runId,\n    prompt,\n    data,\n    signal,\n    contextId,\n    taskId,\n    threadId,\n    resourceId,\n    emitStart,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    prompt: string;\n    data?: Record<string, unknown>;\n    signal?: AbortSignal;\n    contextId?: string;\n    taskId?: string;\n    threadId?: string;\n    resourceId?: string;\n    emitStart: boolean;\n  }): Promise<A2AAgentStreamResult> {\n    const response = await this.#request(bootstrap.executionUrl, {\n      method: 'POST',\n      signal,\n      stream: true,\n      body: {\n        jsonrpc: '2.0',\n        id: globalThis.crypto.randomUUID(),\n        method: this.#compat.methods.streamMessage,\n        params: this.#compat.createSendMessageParams({ prompt, data, contextId, taskId }),\n      } satisfies JSONRPCRequestBody,\n    });\n\n    return this.#consumeA2AStream({\n      bootstrap,\n      runId,\n      stream: await requireResponseBody(response, this.#compat.methods.streamMessage),\n      threadId,\n      resourceId,\n      emitStart,\n    });\n  }\n\n  async #resubscribeToRemoteStream({\n    bootstrap,\n    runId,\n    taskId,\n    initialTask,\n    signal,\n    threadId,\n    resourceId,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    taskId: string;\n    initialTask?: Task;\n    signal?: AbortSignal;\n    threadId?: string;\n    resourceId?: string;\n  }): Promise<A2AAgentStreamResult> {\n    const response = await this.#request(bootstrap.executionUrl, {\n      method: 'POST',\n      signal,\n      stream: true,\n      body: {\n        jsonrpc: '2.0',\n        id: globalThis.crypto.randomUUID(),\n        method: this.#compat.methods.resubscribeTask,\n        params: this.#compat.createResubscribeParams(taskId),\n      } satisfies JSONRPCRequestBody,\n    });\n\n    return this.#consumeA2AStream({\n      bootstrap,\n      runId,\n      initialTask,\n      stream: await requireResponseBody(response, this.#compat.methods.resubscribeTask),\n      threadId,\n      resourceId,\n      // Resubscribing continues an existing run; `start` is only emitted for fresh runs,\n      // mirroring the regular Agent loop which skips `start` when resuming.\n      emitStart: false,\n    });\n  }\n\n  async #consumeA2AStream({\n    bootstrap,\n    runId,\n    initialTask,\n    stream,\n    threadId,\n    resourceId,\n    emitStart,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    initialTask?: Task;\n    stream: ReadableStream<Uint8Array>;\n    threadId?: string;\n    resourceId?: string;\n    emitStart: boolean;\n  }): Promise<A2AAgentStreamResult> {\n    const [consumerStream, accumulatorStream] = stream.tee();\n    const resultDeferred = createDeferred<A2AAgentGenerateResult>();\n    const textDeferred = createDeferred<string>();\n    const taskDeferred = createDeferred<Task | undefined>();\n    const suspendPayloadDeferred = createDeferred<A2AAgentResumePayload | undefined>();\n    const resumeSchemaDeferred = createDeferred<string | undefined>();\n    const messageList = new MessageList({ threadId, resourceId });\n\n    void this.#collectStreamEvents({\n      bootstrap,\n      initialTask,\n      stream: accumulatorStream,\n    })\n      .then(consumed => {\n        if (consumed.task && consumed.suspended) {\n          this.#runState.set(runId, {\n            runId,\n            contextId: consumed.task.contextId,\n            taskId: consumed.task.id,\n            executionUrl: bootstrap.executionUrl,\n            cardUrl: bootstrap.cardUrl,\n            streamingSupported: bootstrap.streamingSupported,\n            waitingForInput: consumed.suspended.payload.waitingForInput,\n            lastTask: consumed.task,\n          });\n        } else {\n          this.#runState.delete(runId);\n        }\n\n        textDeferred.resolve(consumed.text);\n        taskDeferred.resolve(consumed.task);\n        suspendPayloadDeferred.resolve(consumed.suspended?.payload);\n        resumeSchemaDeferred.resolve(consumed.suspended?.resumeSchema);\n        if (consumed.text) {\n          messageList.add(\n            {\n              role: 'assistant',\n              content: consumed.text,\n            },\n            'response',\n          );\n        }\n        resultDeferred.resolve(\n          createGenerateResult({\n            runId,\n            text: consumed.text,\n            task: consumed.task,\n            threadId,\n            resourceId,\n            ...(consumed.suspended\n              ? {\n                  resumePayload: consumed.suspended.payload,\n                  resumeSchema: consumed.suspended.resumeSchema,\n                }\n              : {}),\n          }),\n        );\n      })\n      .catch(error => {\n        textDeferred.reject(error);\n        taskDeferred.reject(error);\n        suspendPayloadDeferred.reject(error);\n        resumeSchemaDeferred.reject(error);\n        resultDeferred.reject(error);\n      });\n\n    const streamResult = {\n      runId,\n      fullStream: this.#streamEvents({ bootstrap, runId, stream: consumerStream, emitStart }),\n      text: textDeferred.promise,\n      toolResults: Promise.resolve([]),\n      messageList,\n      task: taskDeferred.promise,\n      suspendPayload: suspendPayloadDeferred.promise,\n      resumeSchema: resumeSchemaDeferred.promise,\n      getResult: async () => resultDeferred.promise,\n    };\n\n    return streamResult as unknown as A2AAgentStreamResult;\n  }\n\n  async *#streamEvents({\n    bootstrap,\n    runId,\n    stream,\n    emitStart,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    stream: ReadableStream<Uint8Array>;\n    emitStart: boolean;\n  }): AsyncIterable<A2AAgentFullStreamChunk> {\n    if (emitStart) {\n      yield toAgentStreamChunk(runId, { type: 'start', payload: { id: this.id } });\n    }\n\n    const reader = stream.getReader();\n    const decoder = new TextDecoder();\n    let buffer = '';\n    let textId: string | undefined;\n    let textStarted = false;\n    let task: Task | undefined;\n    let suspended: A2AAgentResumePayload | undefined;\n    let receivedDone = false;\n\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) {\n        buffer += decoder.decode();\n      } else if (value) {\n        buffer += decoder.decode(value, { stream: true });\n      }\n\n      let next = splitNextEvent(buffer);\n      while (next.eventBlock !== undefined) {\n        const parsed = parseEventBlock(next.eventBlock, this.#compat);\n        if ('done' in parsed && parsed.done) {\n          receivedDone = true;\n          buffer = next.rest;\n          break;\n        }\n\n        if ('event' in parsed && parsed.event) {\n          const event = parsed.event;\n\n          if (isTask(event)) {\n            task = event;\n            if (isInterruptedTaskState(event.status.state)) {\n              suspended = {\n                taskId: event.id,\n                contextId: event.contextId,\n                executionUrl: bootstrap.executionUrl,\n                cardUrl: bootstrap.cardUrl,\n                waitingForInput: true,\n                task: structuredClone(event),\n              };\n            }\n          } else if (isMessage(event)) {\n            const text = extractMessageText(event);\n            if (text) {\n              textId ??= resolveStreamTextId([event.messageId, task?.id]);\n              if (textId) {\n                if (!textStarted) {\n                  yield toAgentStreamChunk(runId, { type: 'text-start', payload: { id: textId } });\n                  textStarted = true;\n                }\n                yield toAgentStreamChunk(runId, { type: 'text-delta', payload: { id: textId, text } });\n              }\n            }\n          } else if (event.kind === 'artifact-update') {\n            const text = event.artifact.parts\n              ?.flatMap(part =>\n                part.kind === 'text' && 'text' in part && typeof part.text === 'string' ? [part.text] : [],\n              )\n              .join('');\n            if (text) {\n              textId ??= resolveStreamTextId([event.artifact.artifactId, task?.id]);\n              if (textId) {\n                if (!textStarted) {\n                  yield toAgentStreamChunk(runId, { type: 'text-start', payload: { id: textId } });\n                  textStarted = true;\n                }\n                yield toAgentStreamChunk(runId, { type: 'text-delta', payload: { id: textId, text } });\n              }\n            }\n          } else if (event.kind === 'status-update') {\n            task = task\n              ? {\n                  ...task,\n                  status: event.status,\n                }\n              : task;\n            if (isInterruptedTaskState(event.status.state) && task) {\n              suspended = {\n                taskId: task.id,\n                contextId: task.contextId,\n                executionUrl: bootstrap.executionUrl,\n                cardUrl: bootstrap.cardUrl,\n                waitingForInput: true,\n                task: structuredClone(task),\n              };\n            }\n          }\n        }\n\n        buffer = next.rest;\n        next = splitNextEvent(buffer);\n      }\n\n      if (done || receivedDone) {\n        if (textId && textStarted) {\n          yield toAgentStreamChunk(runId, { type: 'text-end', payload: { id: textId } });\n        }\n\n        if (!suspended && task && !isTerminalTaskState(task.status.state)) {\n          suspended = {\n            taskId: task.id,\n            contextId: task.contextId,\n            executionUrl: bootstrap.executionUrl,\n            cardUrl: bootstrap.cardUrl,\n            waitingForInput: false,\n            task: structuredClone(task),\n          };\n        }\n\n        if (suspended) {\n          yield toAgentStreamChunk(runId, {\n            type: 'tool-call-suspended',\n            payload: {\n              toolCallId: runId,\n              toolName: this.id,\n              args: {},\n              suspendPayload: suspended,\n              resumeSchema: createResumeSchema(),\n            },\n          });\n        } else {\n          yield toAgentStreamChunk(runId, {\n            type: 'finish',\n            payload: createFinishPayload(),\n          });\n        }\n        return;\n      }\n    }\n  }\n\n  async #collectStreamEvents({\n    bootstrap,\n    initialTask,\n    stream,\n  }: {\n    bootstrap: AgentBootstrap;\n    initialTask?: Task;\n    stream: ReadableStream<Uint8Array>;\n  }): Promise<StreamConsumptionResult> {\n    const reader = stream.getReader();\n    const decoder = new TextDecoder();\n    let buffer = '';\n    let textBuffer = '';\n    let task: Task | undefined = initialTask ? structuredClone(initialTask) : undefined;\n    let suspended: StreamConsumptionResult['suspended'];\n\n    while (true) {\n      const { done, value } = await reader.read();\n\n      if (done) {\n        buffer += decoder.decode();\n      } else if (value) {\n        buffer += decoder.decode(value, { stream: true });\n      }\n\n      let next = splitNextEvent(buffer);\n      while (next.eventBlock !== undefined) {\n        const parsed = parseEventBlock(next.eventBlock, this.#compat);\n        if ('done' in parsed && parsed.done) {\n          break;\n        }\n\n        if ('event' in parsed && parsed.event) {\n          const event = parsed.event;\n\n          if (isTask(event)) {\n            task = event;\n            textBuffer = extractTaskArtifactText(event) || textBuffer;\n\n            if (isInterruptedTaskState(event.status.state)) {\n              suspended = {\n                payload: {\n                  taskId: event.id,\n                  contextId: event.contextId,\n                  executionUrl: bootstrap.executionUrl,\n                  cardUrl: bootstrap.cardUrl,\n                  waitingForInput: true,\n                  task: structuredClone(event),\n                },\n                resumeSchema: createResumeSchema(),\n              };\n            }\n          } else if (isMessage(event)) {\n            const messageText = extractMessageText(event);\n            if (messageText) {\n              textBuffer = messageText;\n            }\n          } else if (event.kind === 'artifact-update') {\n            if (task) {\n              const artifacts = task.artifacts ?? [];\n              const existingArtifact = artifacts.find(artifact => artifact.artifactId === event.artifact.artifactId);\n              const updatedArtifact =\n                event.append && existingArtifact\n                  ? {\n                      ...existingArtifact,\n                      ...event.artifact,\n                      parts: [...existingArtifact.parts, ...event.artifact.parts],\n                    }\n                  : event.artifact;\n\n              task = {\n                ...task,\n                artifacts: existingArtifact\n                  ? artifacts.map(artifact =>\n                      artifact.artifactId === event.artifact.artifactId ? updatedArtifact : artifact,\n                    )\n                  : [...artifacts, updatedArtifact],\n              };\n            }\n\n            const artifactText = event.artifact.parts\n              ?.flatMap(part =>\n                part.kind === 'text' && 'text' in part && typeof part.text === 'string' ? [part.text] : [],\n              )\n              .join('');\n            textBuffer = task ? extractTaskArtifactText(task) : textBuffer + (artifactText ?? '');\n          } else if (event.kind === 'status-update') {\n            task = task\n              ? {\n                  ...task,\n                  status: event.status,\n                }\n              : task;\n\n            if (isInterruptedTaskState(event.status.state) && task) {\n              suspended = {\n                payload: {\n                  taskId: task.id,\n                  contextId: task.contextId,\n                  executionUrl: bootstrap.executionUrl,\n                  cardUrl: bootstrap.cardUrl,\n                  waitingForInput: true,\n                  task: structuredClone(task),\n                },\n                resumeSchema: createResumeSchema(),\n              };\n            }\n          }\n        }\n\n        buffer = next.rest;\n        next = splitNextEvent(buffer);\n      }\n\n      if (done) {\n        break;\n      }\n    }\n\n    if (!suspended && task && !isTerminalTaskState(task.status.state)) {\n      suspended = {\n        payload: {\n          taskId: task.id,\n          contextId: task.contextId,\n          executionUrl: bootstrap.executionUrl,\n          cardUrl: bootstrap.cardUrl,\n          waitingForInput: false,\n          task: structuredClone(task),\n        },\n      };\n    }\n\n    return {\n      text: textBuffer,\n      task,\n      suspended,\n    };\n  }\n\n  #createBufferedStreamResult({\n    runId,\n    result,\n    threadId,\n    resourceId,\n    emitStart,\n  }: {\n    runId: string;\n    result: A2AAgentGenerateResult;\n    threadId?: string;\n    resourceId?: string;\n    emitStart: boolean;\n  }): A2AAgentStreamResult {\n    const messageList = new MessageList({ threadId, resourceId });\n    const toolName = this.id;\n    const agentId = this.id;\n    const textId = resolveStreamTextId([result.message?.messageId, result.task?.id]);\n    if (result.text) {\n      messageList.add(\n        {\n          role: 'assistant',\n          content: result.text,\n        },\n        'response',\n      );\n    }\n\n    const fullStream = (async function* (): AsyncIterable<A2AAgentFullStreamChunk> {\n      if (emitStart) {\n        yield toAgentStreamChunk(runId, { type: 'start', payload: { id: agentId } });\n      }\n\n      if (result.text) {\n        yield toAgentStreamChunk(runId, { type: 'text-start', payload: { id: textId } });\n        yield toAgentStreamChunk(runId, { type: 'text-delta', payload: { id: textId, text: result.text } });\n        yield toAgentStreamChunk(runId, { type: 'text-end', payload: { id: textId } });\n      }\n\n      if (result.resumePayload) {\n        yield toAgentStreamChunk(runId, {\n          type: 'tool-call-suspended',\n          payload: {\n            toolCallId: runId,\n            toolName,\n            args: {},\n            suspendPayload: result.resumePayload,\n            resumeSchema: result.resumeSchema ?? createResumeSchema(),\n          },\n        });\n        return;\n      }\n\n      yield toAgentStreamChunk(runId, {\n        type: 'finish',\n        payload: createFinishPayload(),\n      });\n    })();\n\n    const streamResult = {\n      runId,\n      fullStream,\n      text: Promise.resolve(result.text),\n      toolResults: Promise.resolve([]),\n      messageList,\n      task: Promise.resolve(result.task),\n      suspendPayload: Promise.resolve(result.resumePayload),\n      resumeSchema: Promise.resolve(result.resumeSchema),\n      getResult: async () => result,\n    };\n\n    return streamResult as unknown as A2AAgentStreamResult;\n  }\n\n  async #request(\n    url: string,\n    { method = 'POST', headers = {}, body, stream = false, credentials, signal }: RequestOptions = {},\n  ): Promise<Response> {\n    let attempts = 0;\n    let lastError: unknown;\n\n    const finalHeaders = new Headers({\n      accept: stream ? 'text/event-stream' : 'application/json',\n      ...this.#headers,\n      ...headers,\n    });\n    for (const [name, value] of Object.entries(this.#compat.headers)) {\n      finalHeaders.set(name, value);\n    }\n    if (body) {\n      finalHeaders.set('content-type', 'application/json');\n    }\n\n    while (attempts <= this.#retries) {\n      try {\n        const requestSignal = this.#resolveRequestSignal(signal);\n        const response = await this.#fetch(url, {\n          method,\n          headers: finalHeaders,\n          body: body ? JSON.stringify(body) : undefined,\n          credentials: credentials ?? this.#credentials,\n          signal: requestSignal,\n        });\n\n        if (!response.ok) {\n          throw MastraA2AError.invalidAgentResponse(`Remote A2A request failed with status ${response.status}.`, {\n            status: response.status,\n            url,\n          });\n        }\n\n        return response;\n      } catch (error) {\n        lastError = error;\n\n        if (!shouldRetryRequest(error)) {\n          throw lastError;\n        }\n\n        if (attempts === this.#retries) {\n          break;\n        }\n\n        attempts += 1;\n        await this.#delay(attempts);\n      }\n    }\n\n    throw lastError;\n  }\n\n  async #delay(attempt: number = 0) {\n    const delayMs = Math.min(this.#backoffMs * Math.max(1, attempt), this.#maxBackoffMs);\n    if (delayMs <= 0) {\n      return;\n    }\n\n    await new Promise(resolve => setTimeout(resolve, delayMs));\n  }\n\n  #resolveRequestSignal(signal?: AbortSignal) {\n    if (this.#timeoutMs == null) {\n      return signal ?? this.#abortSignal;\n    }\n\n    const timeoutSignal = AbortSignal.timeout(this.#timeoutMs);\n    const signals = [signal, this.#abortSignal, timeoutSignal].filter(Boolean) as AbortSignal[];\n\n    if (signals.length === 0) {\n      return undefined;\n    }\n\n    return signals.length === 1 ? signals[0] : AbortSignal.any(signals);\n  }\n}\n\nfunction shouldRetryRequest(error: unknown): boolean {\n  if (error instanceof TypeError) {\n    return true;\n  }\n\n  if (error instanceof DOMException && error.name === 'AbortError') {\n    return true;\n  }\n\n  if (error instanceof Error && error.name === 'AbortError') {\n    return true;\n  }\n\n  const status =\n    typeof error === 'object' && error !== null && 'status' in error && typeof error.status === 'number'\n      ? error.status\n      : typeof error === 'object' &&\n          error !== null &&\n          'data' in error &&\n          typeof error.data === 'object' &&\n          error.data !== null &&\n          'status' in error.data &&\n          typeof error.data.status === 'number'\n        ? error.data.status\n        : undefined;\n\n  if (status === undefined) {\n    return true;\n  }\n\n  return status === 408 || status === 429 || status >= 500;\n}\n"],"mappings":"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"}