{"version":3,"file":"stream-CGwJ76we.cjs","names":["isUrlString","exhaustiveCheck","EventEmitter","DelayedPromise","#baseStream","WritableStream","#bufferedChunks","#emitter","#updateUsageCount","#status","#tripwireData","#streamError","#usageCount","#finalWorkflowResult","#delayedPromises","#streamFinished","#consumptionStarted","ReadableStream","#getDelayedPromise","ReadableStream","#usageCount","#run","#streamPromise","#objectPromise","#objectStream","#objectStreamController","isUrlString","DefaultGeneratedFile","DefaultGeneratedFileWithType","TransformStream"],"sources":["../src/stream/aisdk/v5/compat/ui-message.ts","../src/stream/base/consume-stream.ts","../src/stream/RunOutput.ts","../src/stream/MastraAgentNetworkStream.ts","../src/stream/aisdk/v5/transform.ts","../src/stream/caching-transform-stream.ts","../src/stream/smooth-stream.ts"],"sourcesContent":["import type { InferUIMessageChunk, TextStreamPart, ToolSet, UIMessage, IdGenerator } from '@internal/ai-sdk-v5';\nimport { isUrlString } from './content';\n\nexport function getResponseUIMessageId({\n  originalMessages,\n  responseMessageId,\n}: {\n  originalMessages: UIMessage[] | undefined;\n  responseMessageId: string | IdGenerator | undefined;\n}) {\n  // when there are no original messages (i.e. no persistence),\n  // the assistant message id generation is handled on the client side.\n  if (originalMessages == null) {\n    return undefined;\n  }\n\n  const lastMessage = originalMessages[originalMessages.length - 1];\n\n  return lastMessage?.role === 'assistant'\n    ? lastMessage.id\n    : typeof responseMessageId === 'function'\n      ? responseMessageId()\n      : responseMessageId;\n}\n\nexport function convertFullStreamChunkToUIMessageStream<UI_MESSAGE extends UIMessage>({\n  part,\n  messageMetadataValue,\n  sendReasoning,\n  sendSources,\n  onError,\n  sendStart,\n  sendFinish,\n  responseMessageId,\n}: {\n  // tool-output is a custom mastra chunk type used in ToolStream\n  part: TextStreamPart<ToolSet> | { type: 'tool-output'; toolCallId: string; output: any };\n  messageMetadataValue?: unknown;\n  sendReasoning?: boolean;\n  sendSources?: boolean;\n  onError: (error: unknown) => string;\n  sendStart?: boolean;\n  sendFinish?: boolean;\n  responseMessageId?: string;\n}): InferUIMessageChunk<UI_MESSAGE> | undefined {\n  const partType = part.type;\n\n  switch (partType) {\n    case 'text-start': {\n      return {\n        type: 'text-start',\n        id: part.id,\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n      };\n    }\n\n    case 'text-delta': {\n      return {\n        type: 'text-delta',\n        id: part.id,\n        delta: part.text,\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n      };\n    }\n\n    case 'text-end': {\n      return {\n        type: 'text-end',\n        id: part.id,\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n      };\n    }\n\n    case 'reasoning-start': {\n      return {\n        type: 'reasoning-start',\n        id: part.id,\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n      };\n    }\n\n    case 'reasoning-delta': {\n      if (sendReasoning) {\n        return {\n          type: 'reasoning-delta',\n          id: part.id,\n          delta: part.text,\n          ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n        };\n      }\n      return;\n    }\n\n    case 'reasoning-end': {\n      return {\n        type: 'reasoning-end',\n        id: part.id,\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n      };\n    }\n\n    case 'file': {\n      // URL-backed generated files store the URL string where base64 normally\n      // lives; emit it as the url directly instead of a broken data URI.\n      const base64 = part.file.base64;\n      return {\n        type: 'file',\n        mediaType: part.file.mediaType,\n        url: isUrlString(base64) ? base64 : `data:${part.file.mediaType};base64,${base64}`,\n      };\n    }\n\n    case 'source': {\n      if (sendSources && part.sourceType === 'url') {\n        return {\n          type: 'source-url',\n          sourceId: part.id,\n          url: part.url,\n          title: part.title,\n          ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n        };\n      }\n\n      if (sendSources && part.sourceType === 'document') {\n        return {\n          type: 'source-document',\n          sourceId: part.id,\n          mediaType: part.mediaType,\n          title: part.title,\n          filename: part.filename,\n          ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n        };\n      }\n      return;\n    }\n\n    case 'tool-input-start': {\n      return {\n        type: 'tool-input-start',\n        toolCallId: part.id,\n        toolName: part.toolName,\n        ...(part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {}),\n        ...(part.dynamic != null ? { dynamic: part.dynamic } : {}),\n      };\n    }\n\n    case 'tool-input-delta': {\n      return {\n        type: 'tool-input-delta',\n        toolCallId: part.id,\n        inputTextDelta: part.delta,\n      };\n    }\n\n    case 'tool-call': {\n      return {\n        type: 'tool-input-available',\n        toolCallId: part.toolCallId,\n        toolName: part.toolName,\n        input: part.input,\n        ...(part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {}),\n        ...(part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}),\n        ...(part.dynamic != null ? { dynamic: part.dynamic } : {}),\n      };\n    }\n\n    case 'tool-result': {\n      return {\n        type: 'tool-output-available',\n        toolCallId: part.toolCallId,\n        output: part.output,\n        ...(part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {}),\n        ...(part.dynamic != null ? { dynamic: part.dynamic } : {}),\n      };\n    }\n\n    case 'tool-output': {\n      return {\n        ...part.output,\n      };\n    }\n\n    case 'tool-error': {\n      return {\n        type: 'tool-output-error',\n        toolCallId: part.toolCallId,\n        errorText: onError(part.error),\n        ...(part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {}),\n        ...(part.dynamic != null ? { dynamic: part.dynamic } : {}),\n      };\n    }\n\n    case 'error': {\n      return {\n        type: 'error',\n        errorText: onError(part.error),\n      };\n    }\n\n    case 'start-step': {\n      return { type: 'start-step' };\n    }\n\n    case 'finish-step': {\n      return { type: 'finish-step' };\n    }\n\n    case 'start': {\n      if (sendStart) {\n        return {\n          type: 'start' as const,\n          ...(messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {}),\n          ...(responseMessageId != null ? { messageId: responseMessageId } : {}),\n        } as InferUIMessageChunk<UI_MESSAGE>;\n      }\n      return;\n    }\n\n    case 'finish': {\n      if (sendFinish) {\n        return {\n          type: 'finish' as const,\n          ...(messageMetadataValue != null ? { messageMetadata: messageMetadataValue } : {}),\n        } as InferUIMessageChunk<UI_MESSAGE>;\n      }\n      return;\n    }\n\n    case 'abort': {\n      return part;\n    }\n\n    case 'tool-input-end': {\n      return;\n    }\n\n    case 'raw': {\n      // Raw chunks are not included in UI message streams\n      // as they contain provider-specific data for developer use\n      return;\n    }\n\n    default: {\n      const exhaustiveCheck: never = partType;\n      throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n    }\n  }\n}\n","export async function consumeStream({\n  stream,\n  onError,\n}: {\n  stream: ReadableStream;\n  onError?: (error: unknown) => void;\n}) {\n  const reader = stream.getReader();\n  try {\n    while (true) {\n      const { done } = await reader.read();\n      if (done) break;\n    }\n  } catch (error) {\n    onError == null ? void 0 : onError(error);\n  } finally {\n    reader.releaseLock();\n  }\n}\n","import EventEmitter from 'node:events';\nimport { ReadableStream, WritableStream } from 'node:stream/web';\nimport type { ReadableStreamGetReaderOptions, ReadableWritablePair, StreamPipeOptions } from 'node:stream/web';\nimport type { LanguageModelUsage } from '@internal/ai-sdk-v5';\nimport type { WorkflowResult, WorkflowRunStatus } from '../workflows';\nimport { DelayedPromise } from './aisdk/v5/compat';\nimport type { MastraBaseStream } from './base/base';\nimport { consumeStream } from './base/consume-stream';\nimport { ChunkFrom } from './types';\nimport type { StepTripwireData, WorkflowStreamEvent } from './types';\n\ntype AggregatedLanguageModelUsage = Required<LanguageModelUsage> & {\n  cacheCreationInputTokens: number;\n};\n\nexport class WorkflowRunOutput<\n  TResult extends WorkflowResult<any, any, any, any> = WorkflowResult<any, any, any, any>,\n> implements MastraBaseStream<WorkflowStreamEvent> {\n  #status: WorkflowRunStatus = 'running';\n  #tripwireData: StepTripwireData | undefined;\n  #usageCount: AggregatedLanguageModelUsage = {\n    inputTokens: 0,\n    outputTokens: 0,\n    totalTokens: 0,\n    cachedInputTokens: 0,\n    cacheCreationInputTokens: 0,\n    reasoningTokens: 0,\n  };\n  #consumptionStarted = false;\n  #baseStream: ReadableStream<WorkflowStreamEvent>;\n  #emitter = new EventEmitter();\n  #bufferedChunks: WorkflowStreamEvent[] = [];\n\n  #streamFinished = false;\n\n  #streamError: Error | undefined;\n\n  #finalWorkflowResult: unknown;\n\n  #delayedPromises = {\n    usage: new DelayedPromise<LanguageModelUsage>(),\n    result: new DelayedPromise<TResult>(),\n  };\n\n  /**\n   * Unique identifier for this workflow run\n   */\n  public runId: string;\n  /**\n   * Unique identifier for this workflow\n   */\n  public workflowId: string;\n\n  constructor({\n    runId,\n    workflowId,\n    stream,\n  }: {\n    runId: string;\n    workflowId: string;\n    stream: ReadableStream<WorkflowStreamEvent>;\n  }) {\n    const self = this;\n    this.runId = runId;\n    this.workflowId = workflowId;\n\n    this.#baseStream = stream;\n    stream\n      .pipeTo(\n        new WritableStream({\n          start() {\n            const chunk: WorkflowStreamEvent = {\n              type: 'workflow-start',\n              runId: self.runId,\n              from: ChunkFrom.WORKFLOW,\n              payload: {\n                workflowId: self.workflowId,\n              },\n            } as WorkflowStreamEvent;\n\n            self.#bufferedChunks.push(chunk);\n            self.#emitter.emit('chunk', chunk);\n          },\n          write(chunk) {\n            if (chunk.type !== 'workflow-step-finish') {\n              self.#bufferedChunks.push(chunk);\n              self.#emitter.emit('chunk', chunk);\n            }\n\n            if (chunk.type === 'workflow-step-output') {\n              if ('output' in chunk.payload && chunk.payload.output) {\n                const output = chunk.payload.output;\n                if (output.type === 'finish') {\n                  if (output.payload && 'usage' in output.payload && output.payload.usage) {\n                    self.#updateUsageCount(output.payload.usage);\n                  } else if (output.payload && 'output' in output.payload && output.payload.output) {\n                    const outputPayload = output.payload.output;\n                    if ('usage' in outputPayload && outputPayload.usage) {\n                      self.#updateUsageCount(outputPayload.usage);\n                    }\n                  }\n                }\n              }\n            } else if (chunk.type === 'workflow-canceled') {\n              self.#status = 'canceled';\n            } else if (chunk.type === 'workflow-step-suspended') {\n              self.#status = 'suspended';\n            } else if (chunk.type === 'workflow-step-result' && chunk.payload.status === 'failed') {\n              // Check if the failure was due to a tripwire\n              if (chunk.payload.tripwire) {\n                self.#status = 'tripwire';\n                self.#tripwireData = chunk.payload.tripwire;\n              } else {\n                self.#status = 'failed';\n              }\n            } else if (chunk.type === 'workflow-paused') {\n              self.#status = 'paused';\n            }\n          },\n          close() {\n            if (self.#status === 'running') {\n              self.#status = 'success';\n            }\n\n            self.#emitter.emit('chunk', {\n              type: 'workflow-finish',\n              runId: self.runId,\n              from: ChunkFrom.WORKFLOW,\n              payload: {\n                workflowStatus: self.#status,\n                metadata: self.#streamError\n                  ? {\n                      error: self.#streamError,\n                      errorMessage: self.#streamError?.message,\n                    }\n                  : {},\n                output: {\n                  usage: self.#usageCount,\n                },\n                ...(self.#status === 'success' && self.#finalWorkflowResult !== undefined\n                  ? { finalWorkflowResult: self.#finalWorkflowResult }\n                  : {}),\n                // Include tripwire data when status is 'tripwire'\n                ...(self.#status === 'tripwire' && self.#tripwireData ? { tripwire: self.#tripwireData } : {}),\n              },\n            });\n\n            self.#delayedPromises.usage.resolve(self.#usageCount);\n\n            Object.entries(self.#delayedPromises).forEach(([key, promise]) => {\n              if (promise.status.type === 'pending') {\n                promise.reject(new Error(`promise '${key}' was not resolved or rejected when stream finished`));\n              }\n            });\n\n            self.#streamFinished = true;\n            self.#emitter.emit('finish');\n          },\n        }),\n      )\n      .catch(reason => {\n        // eslint-disable-next-line no-console\n        console.log(' something went wrong', reason);\n      });\n  }\n\n  #getDelayedPromise<T>(promise: DelayedPromise<T>): Promise<T> {\n    if (!this.#consumptionStarted) {\n      void this.consumeStream();\n    }\n    return promise.promise;\n  }\n\n  #updateUsageCount(\n    usage:\n      | {\n          inputTokens?: `${number}` | number;\n          outputTokens?: `${number}` | number;\n          totalTokens?: `${number}` | number;\n          reasoningTokens?: `${number}` | number;\n          cachedInputTokens?: `${number}` | number;\n          cacheCreationInputTokens?: `${number}` | number;\n        }\n      | {\n          promptTokens?: `${number}` | number;\n          completionTokens?: `${number}` | number;\n          totalTokens?: `${number}` | number;\n          reasoningTokens?: `${number}` | number;\n          cachedInputTokens?: `${number}` | number;\n          cacheCreationInputTokens?: `${number}` | number;\n        },\n  ) {\n    let totalUsage = {\n      inputTokens: this.#usageCount.inputTokens ?? 0,\n      outputTokens: this.#usageCount.outputTokens ?? 0,\n      totalTokens: this.#usageCount.totalTokens ?? 0,\n      reasoningTokens: this.#usageCount.reasoningTokens ?? 0,\n      cachedInputTokens: this.#usageCount.cachedInputTokens ?? 0,\n      cacheCreationInputTokens: this.#usageCount.cacheCreationInputTokens ?? 0,\n    };\n    if ('inputTokens' in usage) {\n      totalUsage.inputTokens += parseInt(usage?.inputTokens?.toString() ?? '0', 10);\n      totalUsage.outputTokens += parseInt(usage?.outputTokens?.toString() ?? '0', 10);\n      // we need to handle both formats because you can use a V1 model inside a stream workflow\n    } else if ('promptTokens' in usage) {\n      totalUsage.inputTokens += parseInt(usage?.promptTokens?.toString() ?? '0', 10);\n      totalUsage.outputTokens += parseInt(usage?.completionTokens?.toString() ?? '0', 10);\n    }\n    totalUsage.totalTokens += parseInt(usage?.totalTokens?.toString() ?? '0', 10);\n\n    totalUsage.reasoningTokens += parseInt(usage?.reasoningTokens?.toString() ?? '0', 10);\n    totalUsage.cachedInputTokens += parseInt(usage?.cachedInputTokens?.toString() ?? '0', 10);\n    totalUsage.cacheCreationInputTokens += parseInt(usage?.cacheCreationInputTokens?.toString() ?? '0', 10);\n    this.#usageCount = totalUsage;\n  }\n\n  /**\n   * @internal\n   */\n  updateResults(results: TResult) {\n    if (results.status === 'success') {\n      this.#finalWorkflowResult = results.result;\n    }\n    this.#delayedPromises.result.resolve(results);\n  }\n\n  /**\n   * @internal\n   */\n  rejectResults(error: Error) {\n    this.#delayedPromises.result.reject(error);\n    this.#status = 'failed';\n    this.#streamError = error;\n  }\n\n  /**\n   * @internal\n   */\n  resume(stream: ReadableStream<WorkflowStreamEvent>) {\n    this.#baseStream = stream;\n    this.#streamFinished = false;\n    this.#consumptionStarted = false;\n    this.#status = 'running';\n    this.#delayedPromises = {\n      usage: new DelayedPromise<LanguageModelUsage>(),\n      result: new DelayedPromise<TResult>(),\n    };\n\n    const self = this;\n    stream\n      .pipeTo(\n        new WritableStream({\n          start() {\n            const chunk: WorkflowStreamEvent = {\n              type: 'workflow-start',\n              runId: self.runId,\n              from: ChunkFrom.WORKFLOW,\n              payload: {\n                workflowId: self.workflowId,\n              },\n            } as WorkflowStreamEvent;\n\n            self.#bufferedChunks.push(chunk);\n            self.#emitter.emit('chunk', chunk);\n          },\n          write(chunk) {\n            if (chunk.type !== 'workflow-step-finish') {\n              self.#bufferedChunks.push(chunk);\n              self.#emitter.emit('chunk', chunk);\n            }\n\n            if (chunk.type === 'workflow-step-output') {\n              if ('output' in chunk.payload && chunk.payload.output) {\n                const output = chunk.payload.output;\n                if (output.type === 'finish') {\n                  if (output.payload && 'usage' in output.payload && output.payload.usage) {\n                    self.#updateUsageCount(output.payload.usage);\n                  } else if (output.payload && 'output' in output.payload && output.payload.output) {\n                    const outputPayload = output.payload.output;\n                    if ('usage' in outputPayload && outputPayload.usage) {\n                      self.#updateUsageCount(outputPayload.usage);\n                    }\n                  }\n                }\n              }\n            } else if (chunk.type === 'workflow-canceled') {\n              self.#status = 'canceled';\n            } else if (chunk.type === 'workflow-step-suspended') {\n              self.#status = 'suspended';\n            } else if (chunk.type === 'workflow-step-result' && chunk.payload.status === 'failed') {\n              // Check if the failure was due to a tripwire\n              if (chunk.payload.tripwire) {\n                self.#status = 'tripwire';\n                self.#tripwireData = chunk.payload.tripwire;\n              } else {\n                self.#status = 'failed';\n              }\n            } else if (chunk.type === 'workflow-paused') {\n              self.#status = 'paused';\n            }\n          },\n          close() {\n            if (self.#status === 'running') {\n              self.#status = 'success';\n            }\n\n            self.#emitter.emit('chunk', {\n              type: 'workflow-finish',\n              runId: self.runId,\n              from: ChunkFrom.WORKFLOW,\n              payload: {\n                workflowStatus: self.#status,\n                metadata: self.#streamError\n                  ? {\n                      error: self.#streamError,\n                      errorMessage: self.#streamError?.message,\n                    }\n                  : {},\n                output: {\n                  usage: self.#usageCount,\n                },\n                ...(self.#status === 'success' && self.#finalWorkflowResult !== undefined\n                  ? { finalWorkflowResult: self.#finalWorkflowResult }\n                  : {}),\n                // Include tripwire data when status is 'tripwire'\n                ...(self.#status === 'tripwire' && self.#tripwireData ? { tripwire: self.#tripwireData } : {}),\n              },\n            });\n\n            self.#streamFinished = true;\n            self.#emitter.emit('finish');\n          },\n        }),\n      )\n      .catch(reason => {\n        // eslint-disable-next-line no-console\n        console.log(' something went wrong', reason);\n      });\n  }\n\n  async consumeStream(options?: Parameters<typeof consumeStream>[0]): Promise<void> {\n    if (this.#consumptionStarted) {\n      return;\n    }\n\n    this.#consumptionStarted = true;\n\n    try {\n      await consumeStream({\n        stream: this.#baseStream as globalThis.ReadableStream,\n        onError: options?.onError,\n      });\n    } catch (error) {\n      options?.onError?.(error);\n    }\n  }\n\n  get fullStream(): ReadableStream<WorkflowStreamEvent> {\n    const self = this;\n    // Holds this subscriber's own detach function once start() registers its\n    // listeners. cancel() must only remove this subscriber's handlers — the\n    // emitter is shared across every concurrent fullStream/observe consumer of\n    // the same run, so removeAllListeners() here would silently kill every\n    // other subscriber (see #19743).\n    let detach: (() => void) | undefined;\n    return new ReadableStream<WorkflowStreamEvent>({\n      start(controller) {\n        // Replay existing buffered chunks\n        self.#bufferedChunks.forEach(chunk => {\n          controller.enqueue(chunk);\n        });\n\n        // If stream already finished, close immediately\n        if (self.#streamFinished) {\n          controller.close();\n          return;\n        }\n\n        // Listen for new chunks and stream finish\n        const chunkHandler = (chunk: WorkflowStreamEvent) => {\n          controller.enqueue(chunk);\n        };\n\n        const finishHandler = () => {\n          self.#emitter.off('chunk', chunkHandler);\n          self.#emitter.off('finish', finishHandler);\n          controller.close();\n        };\n\n        self.#emitter.on('chunk', chunkHandler);\n        self.#emitter.on('finish', finishHandler);\n\n        detach = () => {\n          self.#emitter.off('chunk', chunkHandler);\n          self.#emitter.off('finish', finishHandler);\n        };\n      },\n\n      pull(_controller) {\n        // Only start consumption when someone is actively reading the stream\n        if (!self.#consumptionStarted) {\n          void self.consumeStream();\n        }\n      },\n\n      cancel() {\n        // Only detach this subscriber's own listeners — never the whole emitter.\n        detach?.();\n      },\n    });\n  }\n\n  get status() {\n    return this.#status;\n  }\n\n  get result() {\n    return this.#getDelayedPromise(this.#delayedPromises.result);\n  }\n\n  get usage() {\n    return this.#getDelayedPromise(this.#delayedPromises.usage);\n  }\n\n  /**\n   * @deprecated Use `fullStream.locked` instead\n   */\n  get locked(): boolean {\n    console.warn('WorkflowRunOutput.locked is deprecated. Use fullStream.locked instead.');\n    return this.fullStream.locked;\n  }\n\n  /**\n   * @deprecated Use `fullStream.cancel()` instead\n   */\n  cancel(reason?: any): Promise<void> {\n    console.warn('WorkflowRunOutput.cancel() is deprecated. Use fullStream.cancel() instead.');\n    return this.fullStream.cancel(reason);\n  }\n\n  /**\n   * @deprecated Use `fullStream.getReader()` instead\n   */\n  getReader(\n    options?: ReadableStreamGetReaderOptions,\n  ): ReadableStreamDefaultReader<WorkflowStreamEvent> | ReadableStreamBYOBReader {\n    console.warn('WorkflowRunOutput.getReader() is deprecated. Use fullStream.getReader() instead.');\n    return this.fullStream.getReader(options as any) as any;\n  }\n\n  /**\n   * @deprecated Use `fullStream.pipeThrough()` instead\n   */\n  pipeThrough<T>(\n    transform: ReadableWritablePair<T, WorkflowStreamEvent>,\n    options?: StreamPipeOptions,\n  ): ReadableStream<T> {\n    console.warn('WorkflowRunOutput.pipeThrough() is deprecated. Use fullStream.pipeThrough() instead.');\n    return this.fullStream.pipeThrough(transform as any, options) as ReadableStream<T>;\n  }\n\n  /**\n   * @deprecated Use `fullStream.pipeTo()` instead\n   */\n  pipeTo(destination: WritableStream<WorkflowStreamEvent>, options?: StreamPipeOptions): Promise<void> {\n    console.warn('WorkflowRunOutput.pipeTo() is deprecated. Use fullStream.pipeTo() instead.');\n    return this.fullStream.pipeTo(destination, options);\n  }\n\n  /**\n   * @deprecated Use `fullStream.tee()` instead\n   */\n  tee(): [ReadableStream<WorkflowStreamEvent>, ReadableStream<WorkflowStreamEvent>] {\n    console.warn('WorkflowRunOutput.tee() is deprecated. Use fullStream.tee() instead.');\n    return this.fullStream.tee();\n  }\n\n  /**\n   * @deprecated Use `fullStream[Symbol.asyncIterator]()` instead\n   */\n  [Symbol.asyncIterator](): AsyncIterableIterator<WorkflowStreamEvent> {\n    console.warn(\n      'WorkflowRunOutput[Symbol.asyncIterator]() is deprecated. Use fullStream[Symbol.asyncIterator]() instead.',\n    );\n    return this.fullStream[Symbol.asyncIterator]();\n  }\n\n  /**\n   * Helper method to treat this object as a ReadableStream\n   * @deprecated Use `fullStream` directly instead\n   */\n  toReadableStream(): ReadableStream<WorkflowStreamEvent> {\n    console.warn('WorkflowRunOutput.toReadableStream() is deprecated. Use fullStream directly instead.');\n    return this.fullStream;\n  }\n}\n","import { ReadableStream } from 'node:stream/web';\nimport type { DefaultEngineType, Run, Step } from '../workflows';\nimport type { ChunkType } from './types';\n\nexport class MastraAgentNetworkStream<OUTPUT = undefined> extends ReadableStream<ChunkType<OUTPUT>> {\n  #usageCount = {\n    inputTokens: 0,\n    outputTokens: 0,\n    totalTokens: 0,\n    cachedInputTokens: 0,\n    cacheCreationInputTokens: 0,\n    reasoningTokens: 0,\n  };\n  #streamPromise: {\n    promise: Promise<void>;\n    resolve: (value: void) => void;\n    reject: (reason?: any) => void;\n  };\n  #objectPromise: {\n    promise: Promise<OUTPUT | undefined>;\n    resolve: (value: OUTPUT | undefined) => void;\n    reject: (reason?: any) => void;\n  };\n  #objectStreamController: ReadableStreamDefaultController<Partial<OUTPUT>> | null = null;\n  #objectStream: ReadableStream<Partial<OUTPUT>> | null = null;\n  #run: Run;\n  runId: string;\n\n  constructor({\n    createStream,\n    run,\n  }: {\n    createStream: (writer: WritableStream<ChunkType<OUTPUT>>) => Promise<ReadableStream<any>> | ReadableStream<any>;\n    run: Run<DefaultEngineType, Step<string, any, any, any, any, any, DefaultEngineType>[], any, any, any>;\n  }) {\n    const deferredPromise = {\n      promise: null,\n      resolve: null,\n      reject: null,\n    } as unknown as {\n      promise: Promise<void>;\n      resolve: (value: void) => void;\n      reject: (reason?: any) => void;\n    };\n    deferredPromise.promise = new Promise((resolve, reject) => {\n      deferredPromise.resolve = resolve;\n      deferredPromise.reject = reject;\n    });\n\n    // Object promise for structured output\n    const objectDeferredPromise = {\n      promise: null,\n      resolve: null,\n      reject: null,\n    } as unknown as {\n      promise: Promise<OUTPUT | undefined>;\n      resolve: (value: OUTPUT | undefined) => void;\n      reject: (reason?: any) => void;\n    };\n    objectDeferredPromise.promise = new Promise((resolve, reject) => {\n      objectDeferredPromise.resolve = resolve;\n      objectDeferredPromise.reject = reject;\n    });\n\n    // Object stream controller reference\n    let objectStreamController: ReadableStreamDefaultController<Partial<OUTPUT>> | null = null;\n\n    const updateUsageCount = (usage: {\n      inputTokens?: `${number}` | number;\n      outputTokens?: `${number}` | number;\n      totalTokens?: `${number}` | number;\n      reasoningTokens?: `${number}` | number;\n      cachedInputTokens?: `${number}` | number;\n      cacheCreationInputTokens?: `${number}` | number;\n    }) => {\n      this.#usageCount.inputTokens += parseInt(usage?.inputTokens?.toString() ?? '0', 10);\n      this.#usageCount.outputTokens += parseInt(usage?.outputTokens?.toString() ?? '0', 10);\n      this.#usageCount.totalTokens += parseInt(usage?.totalTokens?.toString() ?? '0', 10);\n      this.#usageCount.reasoningTokens += parseInt(usage?.reasoningTokens?.toString() ?? '0', 10);\n      this.#usageCount.cachedInputTokens += parseInt(usage?.cachedInputTokens?.toString() ?? '0', 10);\n      this.#usageCount.cacheCreationInputTokens += parseInt(usage?.cacheCreationInputTokens?.toString() ?? '0', 10);\n    };\n\n    super({\n      start: async controller => {\n        try {\n          const writer = new WritableStream<ChunkType<OUTPUT>>({\n            write: chunk => {\n              if (\n                (chunk.type === 'step-output' &&\n                  chunk.payload?.output?.from === 'AGENT' &&\n                  chunk.payload?.output?.type === 'finish') ||\n                (chunk.type === 'step-output' &&\n                  chunk.payload?.output?.from === 'WORKFLOW' &&\n                  chunk.payload?.output?.type === 'finish')\n              ) {\n                const output = chunk.payload?.output;\n                if (output && 'payload' in output && output.payload) {\n                  const finishPayload = output.payload;\n                  if ('usage' in finishPayload && finishPayload.usage) {\n                    updateUsageCount(finishPayload.usage);\n                  } else if ('output' in finishPayload && finishPayload.output) {\n                    const outputPayload = finishPayload.output;\n                    if ('usage' in outputPayload && outputPayload.usage) {\n                      updateUsageCount(outputPayload.usage);\n                    }\n                  }\n                }\n              }\n\n              controller.enqueue(chunk);\n            },\n          });\n\n          const stream: ReadableStream<ChunkType<OUTPUT>> = await createStream(writer);\n\n          const getInnerChunk = (chunk: ChunkType<OUTPUT>) => {\n            if (chunk.type === 'workflow-step-output') {\n              return getInnerChunk(chunk.payload.output as any);\n            }\n            return chunk;\n          };\n\n          let objectResolved = false;\n\n          for await (const chunk of stream) {\n            if (chunk.type === 'workflow-step-output') {\n              const innerChunk = getInnerChunk(chunk);\n              if (\n                innerChunk.type === 'routing-agent-end' ||\n                innerChunk.type === 'agent-execution-end' ||\n                innerChunk.type === 'workflow-execution-end'\n              ) {\n                if (innerChunk.payload?.usage) {\n                  updateUsageCount(innerChunk.payload.usage);\n                }\n              }\n\n              // Handle network-object chunks (partial objects during streaming)\n              if (innerChunk.type === 'network-object') {\n                if (objectStreamController) {\n                  objectStreamController.enqueue((innerChunk as any).payload?.object);\n                }\n                controller.enqueue(innerChunk);\n              }\n              // Handle network-object-result chunks (final structured object)\n              else if (innerChunk.type === 'network-object-result') {\n                if (!objectResolved) {\n                  objectResolved = true;\n                  objectDeferredPromise.resolve((innerChunk as any).payload?.object);\n                  if (objectStreamController) {\n                    objectStreamController.close();\n                  }\n                }\n                controller.enqueue(innerChunk);\n              } else if (innerChunk.type === 'network-execution-event-finish') {\n                const finishPayload = {\n                  ...innerChunk.payload,\n                  usage: this.#usageCount,\n                };\n                controller.enqueue({ ...innerChunk, payload: finishPayload });\n              } else {\n                controller.enqueue(innerChunk);\n              }\n            }\n          }\n\n          // If no object was resolved, resolve with undefined\n          if (!objectResolved) {\n            objectDeferredPromise.resolve(undefined);\n            if (objectStreamController) {\n              objectStreamController.close();\n            }\n          }\n\n          controller.close();\n          deferredPromise.resolve();\n        } catch (error) {\n          controller.error(error);\n          deferredPromise.reject(error);\n          objectDeferredPromise.reject(error);\n          if (objectStreamController) {\n            objectStreamController.error(error);\n          }\n        }\n      },\n    });\n\n    this.#run = run;\n    this.#streamPromise = deferredPromise;\n\n    this.runId = run.runId;\n    this.#objectPromise = objectDeferredPromise;\n\n    // Create object stream\n    this.#objectStream = new ReadableStream<Partial<OUTPUT>>({\n      start: ctrl => {\n        objectStreamController = ctrl;\n        this.#objectStreamController = ctrl;\n      },\n    });\n  }\n\n  get status() {\n    return this.#streamPromise.promise.then(() => this.#run._getExecutionResults()).then(res => res!.status);\n  }\n\n  get result() {\n    return this.#streamPromise.promise.then(() => this.#run._getExecutionResults());\n  }\n\n  get usage() {\n    return this.#streamPromise.promise.then(() => this.#usageCount);\n  }\n\n  /**\n   * Returns a promise that resolves to the structured output object.\n   * Only available when structuredOutput option is provided to network().\n   * Resolves to undefined if no structuredOutput was requested.\n   */\n  get object(): Promise<OUTPUT | undefined> {\n    return this.#objectPromise.promise;\n  }\n\n  /**\n   * Returns a ReadableStream of partial objects during structured output generation.\n   * Useful for streaming partial results as they're being generated.\n   */\n  get objectStream(): ReadableStream<Partial<OUTPUT>> {\n    return this.#objectStream!;\n  }\n}\n","import type {\n  LanguageModelV2FinishReason,\n  LanguageModelV2StreamPart,\n  LanguageModelV2Usage,\n  SharedV2ProviderMetadata,\n} from '@ai-sdk/provider-v5';\nimport type { LanguageModelV3FinishReason, LanguageModelV3Usage } from '@ai-sdk/provider-v6';\nimport type { ModelMessage, ObjectStreamPart, TextStreamPart, ToolSet } from '@internal/ai-sdk-v5';\nimport type { AIV5ResponseMessage } from '../../../agent/message-list';\nimport type { ChunkType, LanguageModelUsage } from '../../types';\nimport { ChunkFrom } from '../../types';\nimport { isUrlString } from './compat/content';\nimport { DefaultGeneratedFile, DefaultGeneratedFileWithType } from './file';\n\n/**\n * Sanitizes tool-call input strings for safe JSON parsing.\n *\n * LLMs sometimes append internal tokens like `<|call|>`, `<|endoftext|>`, or `<|end|>`\n * to otherwise valid JSON in streamed tool-call arguments, causing JSON.parse to fail.\n *\n * This function first attempts JSON.parse on the original input. If parsing succeeds,\n * the original string is returned unchanged — this avoids corrupting valid JSON payloads\n * that legitimately contain `<|...|>` patterns inside string values.\n *\n * Only when the original input is not valid JSON does the function fall back to stripping\n * `<|...|>` token patterns and surrounding whitespace via regex.\n *\n * @see https://github.com/mastra-ai/mastra/issues/13261\n * @see https://github.com/mastra-ai/mastra/issues/13185\n */\nexport function sanitizeToolCallInput(input: string): string {\n  // Fast path: if input is already valid JSON, return unchanged to avoid\n  // corrupting <|...|> patterns that appear inside JSON string values.\n  try {\n    JSON.parse(input);\n    return input;\n  } catch {\n    // Input is not valid JSON — strip LLM-specific tokens and retry.\n    // The pattern starts at the literal `<|` (no leading `\\s*`) to keep\n    // matching linear on adversarial inputs (CodeQL js/polynomial-redos);\n    // leftover whitespace is harmless to JSON.parse and trimmed at the ends.\n    return input.replace(/<\\|[^|]*\\|>\\s*/g, '').trim();\n  }\n}\n\n/**\n * Attempts to repair common JSON malformations produced by LLM providers.\n *\n * Some LLM providers (e.g., Kimi/K2) occasionally generate malformed JSON for\n * tool call arguments. This function applies a sequence of targeted fixes for\n * the most common errors before giving up.\n *\n * Repairs applied (in order):\n * 1. Missing quote before property name: `{\"a\":\"b\",c\":\"d\"}` → `{\"a\":\"b\",\"c\":\"d\"}`\n * 2. Unquoted property names: `{command:\"value\"}` → `{\"command\":\"value\"}`\n * 3. Single quotes → double quotes (only outside already-double-quoted strings)\n * 4. Trailing commas: `{\"a\":1,}` → `{\"a\":1}`\n *\n * @returns The parsed object if repair succeeds, or null if the JSON is unrecoverable.\n * @see https://github.com/mastra-ai/mastra/issues/11078\n */\nexport function tryRepairJson(input: string): Record<string, any> | null {\n  let repaired = input.trim();\n\n  // Fix 1: Missing quote before property name after comma or opening brace\n  // e.g. {\"a\":\"b\",c\":\"d\"} → {\"a\":\"b\",\"c\":\"d\"}\n  // Matches: ,c\" or {c\" where c is a word character sequence followed by \"\n  // but NOT already preceded by a quote\n  repaired = repaired.replace(/([{,]\\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\"/g, (match, prefix, name) => {\n    // Check if the name is already quoted — if so, leave it alone\n    if (prefix.trimEnd().endsWith('\"')) {\n      return match;\n    }\n    return `${prefix}\"${name}\"`;\n  });\n\n  // Fix 2: Unquoted property names (must come after Fix 1 since Fix 1 handles the partial-quote case)\n  // e.g. {command:\"value\"} → {\"command\":\"value\"}\n  repaired = repaired.replace(/([{,]\\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*:/g, '$1\"$2\":');\n\n  // Fix 3: Single quotes → double quotes\n  // Simple approach: replace single quotes that act as JSON delimiters\n  repaired = repaired.replace(/'/g, '\"');\n\n  // Fix 4: Trailing commas before closing braces/brackets\n  // e.g. {\"a\":1,} → {\"a\":1}\n  repaired = repaired.replace(/,(\\s*[}\\]])/g, '$1');\n\n  // Fix 5: Unquoted date/datetime values (issue #14230)\n  // e.g. {\"dueStart\": 2026-04-15} → {\"dueStart\": \"2026-04-15\"}\n  // e.g. {\"start\": 2026-04-15T09:00:00} → {\"start\": \"2026-04-15T09:00:00\"}\n  repaired = repaired.replace(/:\\s*(\\d{4}-\\d{2}-\\d{2}(?:T[\\d:]+)?)\\s*([,}])/g, ': \"$1\"$2');\n\n  try {\n    return JSON.parse(repaired);\n  } catch {\n    return null;\n  }\n}\n\nexport type StreamPart =\n  | Exclude<LanguageModelV2StreamPart, { type: 'finish' }>\n  | {\n      type: 'finish';\n      /** Includes 'tripwire' and 'retry' for processor scenarios */\n      finishReason: LanguageModelV2FinishReason | 'tripwire' | 'retry';\n      usage: LanguageModelV2Usage;\n      providerMetadata: SharedV2ProviderMetadata;\n      messages: {\n        all: ModelMessage[];\n        user: ModelMessage[];\n        nonUser: AIV5ResponseMessage[];\n      };\n    };\n\nexport function convertFullStreamChunkToMastra(value: StreamPart, ctx: { runId: string }): ChunkType | undefined {\n  switch (value.type) {\n    case 'response-metadata':\n      return {\n        type: 'response-metadata',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: { ...value },\n      };\n    case 'text-start':\n      return {\n        type: 'text-start',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          id: value.id,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n    case 'text-delta':\n      // Keep empty deltas that carry provider metadata (e.g. Gemini thought signatures),\n      // otherwise that metadata is dropped before it reaches the consumer.\n      if (value.delta || value.providerMetadata != null) {\n        return {\n          type: 'text-delta',\n          runId: ctx.runId,\n          from: ChunkFrom.AGENT,\n          payload: {\n            id: value.id,\n            providerMetadata: value.providerMetadata,\n            text: value.delta,\n          },\n        };\n      }\n      return;\n\n    case 'text-end':\n      return {\n        type: 'text-end',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: value,\n      };\n\n    case 'reasoning-start':\n      return {\n        type: 'reasoning-start',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          id: value.id,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n\n    case 'reasoning-delta':\n      return {\n        type: 'reasoning-delta',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          id: value.id,\n          providerMetadata: value.providerMetadata,\n          text: value.delta,\n        },\n      };\n\n    case 'reasoning-end':\n      return {\n        type: 'reasoning-end',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          id: value.id,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n\n    case 'source':\n      return {\n        type: 'source',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          id: value.id,\n          sourceType: value.sourceType,\n          title: value.title || '',\n          mimeType: value.sourceType === 'document' ? value.mediaType : undefined,\n          filename: value.sourceType === 'document' ? value.filename : undefined,\n          url: value.sourceType === 'url' ? value.url : undefined,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n\n    case 'file': {\n      const pm = (value as any).providerMetadata;\n      return {\n        type: 'file',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          data: value.data,\n          // URL-backed generated files flatten to URL strings, which are not base64.\n          base64: typeof value.data === 'string' && !isUrlString(value.data) ? value.data : undefined,\n          mimeType: value.mediaType,\n          ...(pm != null ? { providerMetadata: pm } : {}),\n        },\n      };\n    }\n\n    case 'tool-call': {\n      let toolCallInput: Record<string, any> | undefined = undefined;\n\n      if (value.input) {\n        const sanitized = sanitizeToolCallInput(value.input);\n        if (sanitized) {\n          try {\n            toolCallInput = JSON.parse(sanitized);\n          } catch {\n            // JSON.parse failed — attempt to repair common LLM JSON errors\n            const repaired = tryRepairJson(sanitized);\n            if (repaired) {\n              toolCallInput = repaired;\n            } else {\n              console.error('Error converting tool call input to JSON', {\n                input: value.input,\n              });\n              toolCallInput = undefined;\n            }\n          }\n        }\n      }\n\n      return {\n        type: 'tool-call',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          toolCallId: value.toolCallId,\n          toolName: value.toolName,\n          args: toolCallInput,\n          providerExecuted: value.providerExecuted,\n          providerMetadata: value.providerMetadata,\n          ...((value as { observability?: unknown }).observability\n            ? { observability: (value as { observability?: unknown }).observability as any }\n            : {}),\n        },\n      };\n    }\n\n    case 'tool-result':\n      return {\n        type: 'tool-result',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          toolCallId: value.toolCallId,\n          toolName: value.toolName,\n          result: value.result,\n          isError: value.isError,\n          providerExecuted: value.providerExecuted,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n\n    case 'tool-input-start':\n      return {\n        type: 'tool-call-input-streaming-start',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          toolCallId: value.id,\n          toolName: value.toolName,\n          providerExecuted: value.providerExecuted,\n          providerMetadata: value.providerMetadata,\n          dynamic: (value as { dynamic?: boolean }).dynamic,\n          ...((value as { observability?: unknown }).observability\n            ? { observability: (value as { observability?: unknown }).observability as any }\n            : {}),\n        },\n      };\n\n    case 'tool-input-delta':\n      if (value.delta) {\n        return {\n          type: 'tool-call-delta',\n          runId: ctx.runId,\n          from: ChunkFrom.AGENT,\n          payload: {\n            argsTextDelta: value.delta,\n            toolCallId: value.id,\n            providerMetadata: value.providerMetadata,\n          },\n        };\n      }\n      return;\n\n    case 'tool-input-end':\n      return {\n        type: 'tool-call-input-streaming-end',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          toolCallId: value.id,\n          providerMetadata: value.providerMetadata,\n        },\n      };\n\n    case 'finish':\n      const { finishReason, usage, providerMetadata, messages, ...rest } = value;\n      return {\n        type: 'finish',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: {\n          providerMetadata: value.providerMetadata,\n          stepResult: {\n            reason: normalizeFinishReason(value.finishReason),\n          },\n          output: {\n            // Normalize usage to handle both V2 (flat) and V3 (nested) formats\n            usage: normalizeUsage(value.usage),\n          },\n          metadata: {\n            providerMetadata: value.providerMetadata,\n          },\n          messages: messages ?? {\n            all: [],\n            user: [],\n            nonUser: [],\n          },\n          ...rest,\n        },\n      };\n    case 'error':\n      return {\n        type: 'error',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: value,\n      };\n\n    case 'raw':\n      return {\n        type: 'raw',\n        runId: ctx.runId,\n        from: ChunkFrom.AGENT,\n        payload: value.rawValue as Record<string, unknown>,\n      };\n  }\n  return;\n}\n\nexport type OutputChunkType<OUTPUT = undefined> =\n  | TextStreamPart<ToolSet>\n  | ObjectStreamPart<Partial<OUTPUT>>\n  | undefined;\n\nexport function convertMastraChunkToAISDKv5<OUTPUT = undefined>({\n  chunk,\n  mode = 'stream',\n}: {\n  chunk: ChunkType<OUTPUT>;\n  mode?: 'generate' | 'stream';\n}): OutputChunkType<OUTPUT> {\n  switch (chunk.type) {\n    case 'start':\n      return {\n        type: 'start',\n      };\n    case 'step-start':\n      const { messageId: _messageId, ...rest } = chunk.payload;\n      return {\n        type: 'start-step',\n        request: rest.request,\n        warnings: rest.warnings || [],\n      };\n    case 'raw':\n      return {\n        type: 'raw',\n        rawValue: chunk.payload,\n      };\n\n    case 'finish': {\n      return {\n        type: 'finish',\n        // Cast needed: Mastra extends reason with 'tripwire' | 'retry' for processor scenarios\n        finishReason: chunk.payload.stepResult.reason as LanguageModelV2FinishReason,\n        // Cast needed: Mastra's LanguageModelUsage has optional properties, V2 has required-but-nullable\n        totalUsage: chunk.payload.output.usage as LanguageModelV2Usage,\n      };\n    }\n    case 'reasoning-start':\n      return {\n        type: 'reasoning-start',\n        id: chunk.payload.id,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'reasoning-delta':\n      return {\n        type: 'reasoning-delta',\n        id: chunk.payload.id,\n        text: chunk.payload.text,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'reasoning-signature':\n      throw new Error('AISDKv5 chunk type \"reasoning-signature\" not supported');\n    case 'redacted-reasoning':\n      throw new Error('AISDKv5 chunk type \"redacted-reasoning\" not supported');\n\n    case 'reasoning-end':\n      return {\n        type: 'reasoning-end',\n        id: chunk.payload.id,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'source':\n      if (chunk.payload.sourceType === 'url') {\n        return {\n          type: 'source',\n          sourceType: 'url',\n          id: chunk.payload.id,\n          url: chunk.payload.url!,\n          title: chunk.payload.title,\n          providerMetadata: chunk.payload.providerMetadata,\n        };\n      } else {\n        return {\n          type: 'source',\n          sourceType: 'document',\n          id: chunk.payload.id,\n          mediaType: chunk.payload.mimeType!,\n          title: chunk.payload.title,\n          filename: chunk.payload.filename,\n          providerMetadata: chunk.payload.providerMetadata,\n        };\n      }\n    case 'file': {\n      const filePart =\n        mode === 'generate'\n          ? {\n              type: 'file' as const,\n              file: new DefaultGeneratedFile({\n                data: chunk.payload.data,\n                mediaType: chunk.payload.mimeType,\n              }),\n            }\n          : {\n              type: 'file' as const,\n              file: new DefaultGeneratedFileWithType({\n                data: chunk.payload.data,\n                mediaType: chunk.payload.mimeType,\n              }),\n            };\n\n      if (chunk.payload.providerMetadata) {\n        (filePart as any).providerMetadata = chunk.payload.providerMetadata;\n      }\n\n      return filePart;\n    }\n    case 'tool-call': {\n      const toolCallPart = {\n        type: 'tool-call',\n        toolCallId: chunk.payload.toolCallId,\n        providerMetadata: chunk.payload.providerMetadata,\n        providerExecuted: chunk.payload.providerExecuted,\n        toolName: chunk.payload.toolName,\n        input: chunk.payload.args,\n      };\n      if (chunk.payload.observability) {\n        (toolCallPart as { observability?: unknown }).observability = chunk.payload.observability;\n      }\n      return toolCallPart as OutputChunkType<OUTPUT>;\n    }\n    case 'tool-call-input-streaming-start':\n      return {\n        type: 'tool-input-start',\n        id: chunk.payload.toolCallId,\n        toolName: chunk.payload.toolName,\n        dynamic: !!chunk.payload.dynamic,\n        providerMetadata: chunk.payload.providerMetadata,\n        providerExecuted: chunk.payload.providerExecuted,\n        ...(chunk.payload.observability ? { observability: chunk.payload.observability as any } : {}),\n      };\n    case 'tool-call-input-streaming-end':\n      return {\n        type: 'tool-input-end',\n        id: chunk.payload.toolCallId,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'tool-call-delta':\n      return {\n        type: 'tool-input-delta',\n        id: chunk.payload.toolCallId,\n        delta: chunk.payload.argsTextDelta,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'step-finish': {\n      const { request: _request, providerMetadata: metadataProviderMetadata, ...rest } = chunk.payload.metadata;\n      return {\n        type: 'finish-step',\n        response: {\n          id: chunk.payload.id || '',\n          timestamp: new Date(),\n          modelId: (rest.modelId as string) || '',\n          ...rest,\n        },\n        usage: chunk.payload.output.usage,\n        finishReason: chunk.payload.stepResult.reason,\n        providerMetadata: metadataProviderMetadata ?? chunk.payload.providerMetadata,\n      };\n    }\n    case 'text-delta':\n      return {\n        type: 'text-delta',\n        id: chunk.payload.id,\n        text: chunk.payload.text,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'text-end':\n      return {\n        type: 'text-end',\n        id: chunk.payload.id,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'text-start':\n      return {\n        type: 'text-start',\n        id: chunk.payload.id,\n        providerMetadata: chunk.payload.providerMetadata,\n      };\n    case 'tool-result':\n      return {\n        type: 'tool-result',\n        input: chunk.payload.args,\n        toolCallId: chunk.payload.toolCallId,\n        providerExecuted: chunk.payload.providerExecuted,\n        toolName: chunk.payload.toolName,\n        output: chunk.payload.result,\n        // providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?\n      };\n    case 'tool-error':\n      return {\n        type: 'tool-error',\n        error: chunk.payload.error,\n        input: chunk.payload.args,\n        toolCallId: chunk.payload.toolCallId,\n        providerExecuted: chunk.payload.providerExecuted,\n        toolName: chunk.payload.toolName,\n        // providerMetadata: chunk.payload.providerMetadata, // AI v5 types don't show this?\n      };\n\n    case 'abort':\n      return {\n        type: 'abort',\n      };\n\n    case 'error':\n      return {\n        type: 'error',\n        error: chunk.payload.error,\n      };\n\n    case 'object':\n      return {\n        type: 'object',\n        object: chunk.object,\n      };\n\n    default:\n      if (chunk.type && 'payload' in chunk && chunk.payload) {\n        return {\n          type: chunk.type as string,\n          ...(chunk.payload || {}),\n        } as OutputChunkType<OUTPUT>;\n      }\n      return;\n  }\n}\n\n/**\n * Type guard to check if usage is in V3 format (nested objects)\n */\nfunction isV3Usage(usage: unknown): usage is LanguageModelV3Usage {\n  if (!usage || typeof usage !== 'object') return false;\n  const u = usage as Record<string, unknown>;\n  return (\n    typeof u.inputTokens === 'object' &&\n    u.inputTokens !== null &&\n    'total' in (u.inputTokens as object) &&\n    typeof u.outputTokens === 'object' &&\n    u.outputTokens !== null &&\n    'total' in (u.outputTokens as object)\n  );\n}\n\n/**\n * Normalizes usage from either V2 (flat) or V3 (nested) format to Mastra's flat format.\n * V2 format: { inputTokens: number, outputTokens: number, totalTokens?: number }\n * V3 format: { inputTokens: { total, noCache, cacheRead, cacheWrite }, outputTokens: { total, text, reasoning } }\n *\n * The original usage data is preserved in the `raw` field for advanced use cases.\n */\nfunction normalizeUsage(usage: LanguageModelV2Usage | LanguageModelV3Usage | undefined): LanguageModelUsage {\n  if (!usage) {\n    return {\n      inputTokens: undefined,\n      outputTokens: undefined,\n      totalTokens: undefined,\n      reasoningTokens: undefined,\n      cachedInputTokens: undefined,\n      cacheCreationInputTokens: undefined,\n      raw: undefined,\n    };\n  }\n\n  if (isV3Usage(usage)) {\n    // V3 format - extract from nested structure\n    const inputTokens = usage.inputTokens.total;\n    const outputTokens = usage.outputTokens.total;\n    return {\n      inputTokens,\n      outputTokens,\n      totalTokens: (inputTokens ?? 0) + (outputTokens ?? 0),\n      reasoningTokens: usage.outputTokens.reasoning,\n      cachedInputTokens: usage.inputTokens.cacheRead,\n      cacheCreationInputTokens: usage.inputTokens.cacheWrite,\n      raw: usage,\n    };\n  }\n\n  // V2 format - already flat\n  const v2Usage = usage as LanguageModelV2Usage;\n  return {\n    inputTokens: v2Usage.inputTokens,\n    outputTokens: v2Usage.outputTokens,\n    totalTokens: v2Usage.totalTokens ?? (v2Usage.inputTokens ?? 0) + (v2Usage.outputTokens ?? 0),\n    reasoningTokens: (v2Usage as { reasoningTokens?: number }).reasoningTokens,\n    cachedInputTokens: (v2Usage as { cachedInputTokens?: number }).cachedInputTokens,\n    cacheCreationInputTokens: (v2Usage as { cacheCreationInputTokens?: number }).cacheCreationInputTokens,\n    raw: usage,\n  };\n}\n\n/**\n * Type guard to check if a finish reason is V3 format (object with unified/raw properties)\n */\nfunction isV3FinishReason(\n  finishReason: LanguageModelV2FinishReason | LanguageModelV3FinishReason | 'tripwire' | 'retry' | undefined,\n): finishReason is LanguageModelV3FinishReason {\n  return typeof finishReason === 'object' && finishReason !== null && 'unified' in finishReason;\n}\n\n/**\n * Normalize finish reason from either V2/V5 (string) or V3/V6 (object) format to a string.\n *\n * V2/V5 format: 'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other' | 'unknown'\n * V3/V6 format: { unified: 'stop' | 'length' | 'content-filter' | 'tool-calls' | 'error' | 'other', raw: string | undefined }\n *\n * We normalize to the unified string value for internal Mastra use.\n * Note: V6 removed 'unknown' and merged it into 'other'.\n */\nfunction normalizeFinishReason(\n  finishReason: LanguageModelV2FinishReason | LanguageModelV3FinishReason | 'tripwire' | 'retry' | undefined,\n): LanguageModelV2FinishReason | 'tripwire' | 'retry' {\n  if (!finishReason) {\n    return 'other';\n  }\n\n  // Handle Mastra-specific finish reasons\n  if (finishReason === 'tripwire' || finishReason === 'retry') {\n    return finishReason;\n  }\n\n  // V3/V6 format - extract unified value\n  if (isV3FinishReason(finishReason)) {\n    return finishReason.unified;\n  }\n\n  // V2/V5 format - already a string, but normalize 'unknown' to 'other' for consistency with V6\n  return finishReason === 'unknown' ? 'other' : finishReason;\n}\n","import type { MastraServerCache } from '../cache/base';\n\n/**\n * Options for creating a CachingTransformStream\n */\nexport interface CachingTransformStreamOptions<T> {\n  /**\n   * Cache instance for storing stream chunks\n   */\n  cache: MastraServerCache;\n\n  /**\n   * Unique key for this stream's cache entries\n   */\n  cacheKey: string;\n\n  /**\n   * Optional serializer for chunks before caching.\n   * Defaults to identity (chunks stored as-is).\n   */\n  serialize?: (chunk: T) => unknown;\n\n  /**\n   * Optional deserializer for chunks from cache.\n   * Defaults to identity (chunks returned as-is).\n   */\n  deserialize?: (cached: unknown) => T;\n}\n\n/**\n * Creates a TransformStream that caches all chunks passing through it.\n *\n * Use this for workflow streaming where you need resumable streams\n * without changing to a PubSub-based architecture.\n *\n * @example\n * ```typescript\n * const cache = mastra.getServerCache();\n * const { transform, getHistory } = createCachingTransformStream({\n *   cache,\n *   cacheKey: runId,\n * });\n *\n * // Use the transform stream\n * const cachedStream = sourceStream.pipeThrough(transform);\n *\n * // Later, get cached history for replay\n * const history = await getHistory();\n * ```\n */\nexport function createCachingTransformStream<T>(options: CachingTransformStreamOptions<T>): {\n  /**\n   * TransformStream that caches chunks as they pass through\n   */\n  transform: TransformStream<T, T>;\n\n  /**\n   * Get all cached chunks for this stream\n   */\n  getHistory: (offset?: number) => Promise<T[]>;\n\n  /**\n   * Clear cached chunks for this stream\n   */\n  clearCache: () => Promise<void>;\n} {\n  const { cache, cacheKey, serialize = (x: T) => x, deserialize = (x: unknown) => x as T } = options;\n\n  const transform = new TransformStream<T, T>({\n    transform(chunk, controller) {\n      // Cache the chunk (non-blocking)\n      const serialized = serialize(chunk);\n      cache.listPush(cacheKey, serialized).catch(() => {\n        // Silently ignore cache errors - streaming should continue\n      });\n\n      // Pass through the chunk\n      controller.enqueue(chunk);\n    },\n  });\n\n  const getHistory = async (offset = 0): Promise<T[]> => {\n    const cached = await cache.listFromTo(cacheKey, offset);\n    return cached.map(item => deserialize(item));\n  };\n\n  const clearCache = async (): Promise<void> => {\n    await cache.delete(cacheKey);\n  };\n\n  return { transform, getHistory, clearCache };\n}\n\n/**\n * Creates a ReadableStream that first emits cached history, then pipes from a live source.\n *\n * Use this when a client reconnects and needs to receive missed chunks\n * before continuing with the live stream.\n *\n * @example\n * ```typescript\n * const cache = mastra.getServerCache();\n *\n * // Get cached history\n * const history = await cache.listFromTo(runId, 0);\n *\n * // Create combined stream\n * const stream = createReplayStream({\n *   history: history as ChunkType[],\n *   liveSource: workflow.stream(),\n *   cache,\n *   cacheKey: runId,\n * });\n * ```\n */\nexport function createReplayStream<T>(options: {\n  /**\n   * Cached chunks to emit first\n   */\n  history: T[];\n\n  /**\n   * Live stream to continue from after history\n   */\n  liveSource: ReadableStream<T>;\n\n  /**\n   * Optional cache for continued caching of live chunks\n   */\n  cache?: MastraServerCache;\n\n  /**\n   * Cache key for continued caching\n   */\n  cacheKey?: string;\n\n  /**\n   * Optional serializer for caching\n   */\n  serialize?: (chunk: T) => unknown;\n}): ReadableStream<T> {\n  const { history, liveSource, cache, cacheKey, serialize = (x: T) => x } = options;\n\n  let historyIndex = 0;\n  let liveReader: ReadableStreamDefaultReader<T> | null = null;\n  let historyComplete = false;\n\n  return new ReadableStream<T>({\n    async pull(controller) {\n      // First, emit all history chunks\n      if (!historyComplete) {\n        if (historyIndex < history.length) {\n          controller.enqueue(history[historyIndex]!);\n          historyIndex++;\n          return;\n        }\n        historyComplete = true;\n        liveReader = liveSource.getReader();\n      }\n\n      // Then, read from live source\n      if (liveReader) {\n        try {\n          const { done, value } = await liveReader.read();\n\n          if (done) {\n            controller.close();\n            return;\n          }\n\n          // Cache the live chunk if caching is enabled\n          if (cache && cacheKey) {\n            const serialized = serialize(value);\n            cache.listPush(cacheKey, serialized).catch(() => {});\n          }\n\n          controller.enqueue(value);\n        } catch (error) {\n          controller.error(error);\n        }\n      }\n    },\n\n    cancel() {\n      if (liveReader) {\n        void liveReader.cancel();\n      }\n    },\n  });\n}\n\n/**\n * Helper to create a caching transform and get history in one call.\n *\n * This is the recommended way to add caching to workflow streams.\n *\n * @example\n * ```typescript\n * const { pipeThrough, getHistory, clearCache } = withStreamCaching({\n *   cache: mastra.getServerCache(),\n *   cacheKey: runId,\n * });\n *\n * // Apply caching to a stream\n * const cachedStream = workflow.fullStream.pipeThrough(pipeThrough());\n *\n * // On reconnect, get history and create replay stream\n * const history = await getHistory();\n * const replayStream = createReplayStream({\n *   history,\n *   liveSource: workflow.resumeStream(),\n * });\n * ```\n */\nexport function withStreamCaching<T>(options: CachingTransformStreamOptions<T>): {\n  /**\n   * Creates a new TransformStream that caches chunks.\n   * Call this each time you need a new caching transform.\n   */\n  pipeThrough: () => TransformStream<T, T>;\n\n  /**\n   * Get cached history for this stream\n   */\n  getHistory: (offset?: number) => Promise<T[]>;\n\n  /**\n   * Clear the cache for this stream\n   */\n  clearCache: () => Promise<void>;\n} {\n  const { cache, cacheKey, serialize, deserialize } = options;\n\n  return {\n    pipeThrough: () => {\n      const { transform } = createCachingTransformStream({ cache, cacheKey, serialize, deserialize });\n      return transform;\n    },\n\n    getHistory: async (offset = 0) => {\n      const deserializeFn = deserialize ?? ((x: unknown) => x as T);\n      const cached = await cache.listFromTo(cacheKey, offset);\n      return cached.map(item => deserializeFn(item));\n    },\n\n    clearCache: async () => {\n      await cache.delete(cacheKey);\n    },\n  };\n}\n","import { TransformStream } from 'node:stream/web';\nimport type { ChunkType } from './types';\n\nconst CHUNKING_PATTERNS = {\n  word: /\\S+\\s+/m,\n  line: /\\n+/m,\n} as const;\n\nconst wait = (delayInMs: number) => new Promise<void>(resolve => setTimeout(resolve, delayInMs));\n\n/**\n * Detects the next complete chunk at the start of a buffered string.\n *\n * @experimental This API may change in a future release.\n */\nexport type SmoothStreamChunkDetector = (buffer: string) => string | null | undefined;\n\n/**\n * Options for {@link smoothStream}.\n *\n * @experimental This API may change in a future release.\n */\nexport interface SmoothStreamOptions {\n  /**\n   * Delay between emitted chunks in milliseconds. Set to `null` to emit chunks\n   * without a delay.\n   *\n   * @default 10\n   */\n  delayInMs?: number | null;\n\n  /**\n   * How buffered text and reasoning are divided into chunks.\n   *\n   * @default 'word'\n   */\n  chunking?: 'word' | 'line' | RegExp | SmoothStreamChunkDetector | Intl.Segmenter;\n}\n\ntype SmoothableChunk<OUTPUT> = Extract<ChunkType<OUTPUT>, { type: 'text-delta' | 'reasoning-delta' }>;\n\nfunction createChunkDetector(chunking: NonNullable<SmoothStreamOptions['chunking']>): SmoothStreamChunkDetector {\n  if (typeof chunking === 'object' && 'segment' in chunking && typeof chunking.segment === 'function') {\n    return buffer => {\n      if (!buffer) {\n        return null;\n      }\n\n      const firstSegment = chunking.segment(buffer)[Symbol.iterator]().next().value;\n      return firstSegment?.segment || null;\n    };\n  }\n\n  if (typeof chunking === 'function') {\n    return buffer => {\n      const match = chunking(buffer);\n\n      if (match == null) {\n        return null;\n      }\n\n      if (!match.length) {\n        throw new TypeError('The chunking function must return a non-empty string.');\n      }\n\n      if (!buffer.startsWith(match)) {\n        throw new TypeError('The chunking function must return a prefix of the buffered text.');\n      }\n\n      return match;\n    };\n  }\n\n  const pattern = typeof chunking === 'string' ? CHUNKING_PATTERNS[chunking] : chunking;\n\n  if (!(pattern instanceof RegExp)) {\n    throw new TypeError('chunking must be \"word\", \"line\", a RegExp, an Intl.Segmenter, or a chunk detector function.');\n  }\n\n  return buffer => {\n    pattern.lastIndex = 0;\n    const match = pattern.exec(buffer);\n\n    if (!match) {\n      return null;\n    }\n\n    const detected = buffer.slice(0, match.index) + match[0];\n    if (!detected.length) {\n      throw new TypeError('The chunking RegExp must match a non-empty string.');\n    }\n\n    return detected;\n  };\n}\n\n/**\n * Creates a transform stream that buffers text and reasoning deltas and emits\n * them in consistent, delayed chunks. Other stream parts pass through without\n * modification after any buffered content has been emitted.\n *\n * @experimental This API may change in a future release.\n */\nexport function smoothStream<OUTPUT = undefined>({\n  delayInMs = 10,\n  chunking = 'word',\n}: SmoothStreamOptions = {}): TransformStream<ChunkType<OUTPUT>, ChunkType<OUTPUT>> {\n  const detectChunk = createChunkDetector(chunking);\n  let buffer = '';\n  let bufferedChunk: SmoothableChunk<OUTPUT> | undefined;\n  let bufferedMetadata: SmoothableChunk<OUTPUT>['metadata'];\n  let bufferedProviderMetadata: SmoothableChunk<OUTPUT>['payload']['providerMetadata'];\n\n  const enqueueBufferedText = (controller: TransformStreamDefaultController<ChunkType<OUTPUT>>, text: string) => {\n    // Emit even when the text is empty if metadata is still pending, so a\n    // trailing metadata-only delta (e.g. Gemini thought signatures, #20469)\n    // is not silently dropped on flush.\n    const hasPendingMetadata = bufferedMetadata !== undefined || bufferedProviderMetadata !== undefined;\n    if (!bufferedChunk || (!text && !hasPendingMetadata)) {\n      return;\n    }\n\n    const { metadata: _metadata, ...chunkWithoutMetadata } = bufferedChunk;\n    const { providerMetadata: _providerMetadata, ...payloadWithoutProviderMetadata } = bufferedChunk.payload;\n\n    controller.enqueue({\n      ...chunkWithoutMetadata,\n      ...(bufferedMetadata !== undefined ? { metadata: bufferedMetadata } : {}),\n      payload: {\n        ...payloadWithoutProviderMetadata,\n        ...(bufferedProviderMetadata !== undefined ? { providerMetadata: bufferedProviderMetadata } : {}),\n        text,\n      },\n    } as ChunkType<OUTPUT>);\n\n    bufferedMetadata = undefined;\n    bufferedProviderMetadata = undefined;\n  };\n\n  const flushBuffer = (controller: TransformStreamDefaultController<ChunkType<OUTPUT>>) => {\n    enqueueBufferedText(controller, buffer);\n    buffer = '';\n    bufferedChunk = undefined;\n    bufferedMetadata = undefined;\n    bufferedProviderMetadata = undefined;\n  };\n\n  return new TransformStream<ChunkType<OUTPUT>, ChunkType<OUTPUT>>({\n    async transform(chunk, controller) {\n      if (chunk.type !== 'text-delta' && chunk.type !== 'reasoning-delta') {\n        flushBuffer(controller);\n        controller.enqueue(chunk);\n        return;\n      }\n\n      if (bufferedChunk && (chunk.type !== bufferedChunk.type || chunk.payload.id !== bufferedChunk.payload.id)) {\n        flushBuffer(controller);\n      }\n\n      buffer += chunk.payload.text;\n      bufferedChunk = chunk as SmoothableChunk<OUTPUT>;\n      bufferedMetadata = chunk.metadata ?? bufferedMetadata;\n      bufferedProviderMetadata = chunk.payload.providerMetadata ?? bufferedProviderMetadata;\n\n      let match: string | null | undefined;\n      while ((match = detectChunk(buffer)) != null) {\n        enqueueBufferedText(controller, match);\n        buffer = buffer.slice(match.length);\n\n        if (delayInMs !== null) {\n          await wait(delayInMs);\n        }\n      }\n    },\n    flush(controller) {\n      flushBuffer(controller);\n    },\n  });\n}\n"],"mappings":"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"}