{"version":3,"file":"index.cjs","names":["convertMessages","MessageList","MastraA2AError","#url","#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/a2a-agent.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { AgentCard, Message, Task, TaskArtifactUpdateEvent, TaskStatusUpdateEvent } from '@a2a-js/sdk';\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 { 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 A2AStreamEventData = Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent;\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 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(eventBlock: string): { 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<A2AStreamEventData> | A2AStreamEventData;\n\n  try {\n    parsed = JSON.parse(payload) as JSONRPCResponse<A2AStreamEventData> | A2AStreamEventData;\n  } catch {\n    return {};\n  }\n\n  if ('result' in parsed && parsed.result) {\n    return { event: parsed.result };\n  }\n\n  return { event: parsed as A2AStreamEventData };\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\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    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  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 #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.#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-${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    ({ specificationVersion: 'v2' }) 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 ?? 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        signal: options?.abortSignal,\n        contextId: state.contextId,\n        referenceTaskIds: state.taskId ? [state.taskId] : undefined,\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 ?? 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        signal: options?.abortSignal,\n        contextId: state.contextId,\n        referenceTaskIds: state.taskId ? [state.taskId] : undefined,\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 card = (await response.json()) as AgentCard;\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    signal,\n    contextId,\n    referenceTaskIds,\n  }: {\n    bootstrap: AgentBootstrap;\n    prompt: string;\n    signal?: AbortSignal;\n    contextId?: string;\n    referenceTaskIds?: 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: randomUUID(),\n        method: 'message/send',\n        params: {\n          message: {\n            role: 'user',\n            kind: 'message',\n            messageId: randomUUID(),\n            parts: [{ kind: 'text', text: prompt }],\n            ...(contextId ? { contextId } : {}),\n            ...(referenceTaskIds?.length ? { referenceTaskIds } : {}),\n          },\n        },\n      } satisfies JSONRPCRequestBody,\n    });\n\n    const json = await response.json();\n    return unwrapA2AResult(json);\n  }\n\n  async #sendAndResolve({\n    bootstrap,\n    runId,\n    prompt,\n    signal,\n    contextId,\n    referenceTaskIds,\n    threadId,\n    resourceId,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    prompt: string;\n    signal?: AbortSignal;\n    contextId?: string;\n    referenceTaskIds?: string[];\n    threadId?: string;\n    resourceId?: string;\n  }): Promise<A2AAgentGenerateResult> {\n    const response = await this.#sendMessage({\n      bootstrap,\n      prompt,\n      signal,\n      contextId,\n      referenceTaskIds,\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: randomUUID(),\n        method: 'tasks/get',\n        params: { id: taskId },\n      } satisfies JSONRPCRequestBody,\n    });\n\n    const json = await response.json();\n    const result = unwrapA2AResult(json);\n\n    if (!isTask(result)) {\n      throw MastraA2AError.invalidAgentResponse('Remote A2A agent returned a non-task response for tasks/get.');\n    }\n\n    return result;\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 (evaluation.task.status.state === 'input-required') {\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 (task.status.state === 'input-required') {\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    signal,\n    contextId,\n    referenceTaskIds,\n    threadId,\n    resourceId,\n    emitStart,\n  }: {\n    bootstrap: AgentBootstrap;\n    runId: string;\n    prompt: string;\n    signal?: AbortSignal;\n    contextId?: string;\n    referenceTaskIds?: 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: randomUUID(),\n        method: 'message/stream',\n        params: {\n          message: {\n            role: 'user',\n            kind: 'message',\n            messageId: randomUUID(),\n            parts: [{ kind: 'text', text: prompt }],\n            ...(contextId ? { contextId } : {}),\n            ...(referenceTaskIds?.length ? { referenceTaskIds } : {}),\n          },\n        },\n      } satisfies JSONRPCRequestBody,\n    });\n\n    return this.#consumeA2AStream({\n      bootstrap,\n      runId,\n      stream: await requireResponseBody(response, 'message/stream'),\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: randomUUID(),\n        method: 'tasks/resubscribe',\n        params: { id: taskId },\n      } satisfies JSONRPCRequestBody,\n    });\n\n    return this.#consumeA2AStream({\n      bootstrap,\n      runId,\n      initialTask,\n      stream: await requireResponseBody(response, 'tasks/resubscribe'),\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);\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 (event.status.state === 'input-required') {\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 (event.status.state === 'input-required' && 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);\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 (event.status.state === 'input-required') {\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            task = task\n              ? {\n                  ...task,\n                  artifacts: [\n                    ...(task.artifacts ?? []).filter(artifact => artifact.artifactId !== event.artifact.artifactId),\n                    event.artifact,\n                  ],\n                }\n              : task;\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            if (artifactText) {\n              textBuffer += artifactText;\n            }\n          } else if (event.kind === 'status-update') {\n            task = task\n              ? {\n                  ...task,\n                  status: event.status,\n                }\n              : task;\n\n            if (event.status.state === 'input-required' && 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 = {\n      accept: stream ? 'text/event-stream' : 'application/json',\n      ...this.#headers,\n      ...headers,\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: {\n            ...finalHeaders,\n            ...(body ? { 'content-type': 'application/json' } : {}),\n          },\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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"}