@mastra/core 1.55.0-alpha.2 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/durable/index.cjs +1 -1
  4. package/dist/agent/durable/index.js +1 -1
  5. package/dist/agent/index.cjs +2 -2
  6. package/dist/agent/index.js +2 -2
  7. package/dist/{agent-BvRfRKIt.js → agent-0y2cApTZ.js} +57 -82
  8. package/dist/agent-0y2cApTZ.js.map +1 -0
  9. package/dist/agent-builder/ee/index.cjs +1 -1
  10. package/dist/agent-builder/ee/index.js +1 -1
  11. package/dist/agent-controller/index.cjs +1 -1
  12. package/dist/agent-controller/index.js +1 -1
  13. package/dist/{agent-controller-CM6tQSMj.js → agent-controller-ByW51eCC.js} +5 -5
  14. package/dist/{agent-controller-CM6tQSMj.js.map → agent-controller-ByW51eCC.js.map} +1 -1
  15. package/dist/{agent-controller-C75dc544.cjs → agent-controller-DahKlMET.cjs} +5 -5
  16. package/dist/{agent-controller-C75dc544.cjs.map → agent-controller-DahKlMET.cjs.map} +1 -1
  17. package/dist/{agent-CwUYflGG.cjs → agent-um2LJs-0.cjs} +57 -82
  18. package/dist/agent-um2LJs-0.cjs.map +1 -0
  19. package/dist/background-tasks/index.cjs +1 -1
  20. package/dist/background-tasks/index.js +1 -1
  21. package/dist/{background-tasks-AKlv5tIo.js → background-tasks-CM94BIj8.js} +2 -2
  22. package/dist/{background-tasks-AKlv5tIo.js.map → background-tasks-CM94BIj8.js.map} +1 -1
  23. package/dist/{background-tasks-Chpan7PB.cjs → background-tasks-CobPW4Z3.cjs} +2 -2
  24. package/dist/{background-tasks-Chpan7PB.cjs.map → background-tasks-CobPW4Z3.cjs.map} +1 -1
  25. package/dist/browser/index.cjs +1 -1
  26. package/dist/browser/index.js +1 -1
  27. package/dist/channels/index.cjs +2 -2
  28. package/dist/channels/index.js +2 -2
  29. package/dist/{channels-BW52ccH_.cjs → channels-BgbloDjB.cjs} +2 -2
  30. package/dist/{channels-BW52ccH_.cjs.map → channels-BgbloDjB.cjs.map} +1 -1
  31. package/dist/{channels-Da9lEAi1.js → channels-MegO_4KL.js} +2 -2
  32. package/dist/{channels-Da9lEAi1.js.map → channels-MegO_4KL.js.map} +1 -1
  33. package/dist/coding-agent/index.cjs +1 -1
  34. package/dist/coding-agent/index.js +1 -1
  35. package/dist/{create-durable-agent-DmTTvoGi.cjs → create-durable-agent-ChmjQwzE.cjs} +8 -8
  36. package/dist/{create-durable-agent-DmTTvoGi.cjs.map → create-durable-agent-ChmjQwzE.cjs.map} +1 -1
  37. package/dist/{create-durable-agent-Bd4Bm5FV.js → create-durable-agent-DH_dWTMR.js} +8 -8
  38. package/dist/{create-durable-agent-Bd4Bm5FV.js.map → create-durable-agent-DH_dWTMR.js.map} +1 -1
  39. package/dist/datasets/index.cjs +1 -1
  40. package/dist/datasets/index.js +1 -1
  41. package/dist/{dist-C077BlAN.js → dist-BZBxELZo.js} +2 -2
  42. package/dist/{dist-C077BlAN.js.map → dist-BZBxELZo.js.map} +1 -1
  43. package/dist/{dist-CsR_D1uk.cjs → dist-ftJxyNRx.cjs} +2 -2
  44. package/dist/{dist-CsR_D1uk.cjs.map → dist-ftJxyNRx.cjs.map} +1 -1
  45. package/dist/docs/SKILL.md +1 -1
  46. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  47. package/dist/evals/index.cjs +1 -1
  48. package/dist/evals/index.js +1 -1
  49. package/dist/evals/scoreTraces/index.cjs +1 -1
  50. package/dist/evals/scoreTraces/index.js +1 -1
  51. package/dist/harness/index.cjs +1 -1
  52. package/dist/harness/index.js +1 -1
  53. package/dist/index.cjs +1 -1
  54. package/dist/index.js +1 -1
  55. package/dist/llm/index.cjs +5 -5
  56. package/dist/llm/index.js +5 -5
  57. package/dist/{llm-DlVyw1cX.js → llm-DGuYy_Nx.js} +5 -5
  58. package/dist/{llm-DlVyw1cX.js.map → llm-DGuYy_Nx.js.map} +1 -1
  59. package/dist/{llm-Bjt2hZ3f.cjs → llm-DmAhSSgh.cjs} +5 -5
  60. package/dist/{llm-Bjt2hZ3f.cjs.map → llm-DmAhSSgh.cjs.map} +1 -1
  61. package/dist/loop/index.cjs +1 -1
  62. package/dist/loop/index.js +1 -1
  63. package/dist/{manager-CYGpXJfK.js → manager-DDRcONBK.js} +3 -3
  64. package/dist/{manager-CYGpXJfK.js.map → manager-DDRcONBK.js.map} +1 -1
  65. package/dist/{manager-BjrFnt_A.cjs → manager-DqHiikx1.cjs} +3 -3
  66. package/dist/{manager-BjrFnt_A.cjs.map → manager-DqHiikx1.cjs.map} +1 -1
  67. package/dist/mastra/index.cjs +1 -1
  68. package/dist/mastra/index.js +1 -1
  69. package/dist/{mastra-CVLF1dWt.js → mastra-B6CffFOC.js} +9 -9
  70. package/dist/{mastra-CVLF1dWt.js.map → mastra-B6CffFOC.js.map} +1 -1
  71. package/dist/{mastra-Bxx9WPf6.cjs → mastra-BlT9srQJ.cjs} +9 -9
  72. package/dist/{mastra-Bxx9WPf6.cjs.map → mastra-BlT9srQJ.cjs.map} +1 -1
  73. package/dist/memory/index.cjs +1 -1
  74. package/dist/memory/index.js +1 -1
  75. package/dist/{model-CA0WLISt.js → model-DQzxkQqM.js} +2 -2
  76. package/dist/{model-CA0WLISt.js.map → model-DQzxkQqM.js.map} +1 -1
  77. package/dist/{model-DMVq6nAS.cjs → model-Iow-mV9i.cjs} +2 -2
  78. package/dist/{model-DMVq6nAS.cjs.map → model-Iow-mV9i.cjs.map} +1 -1
  79. package/dist/{models-dev-Cbus1Uh2.js → models-dev-BFOUCgyS.js} +2 -2
  80. package/dist/{models-dev-Cbus1Uh2.js.map → models-dev-BFOUCgyS.js.map} +1 -1
  81. package/dist/{models-dev-D_X4VMSu.cjs → models-dev-BUEaCBxL.cjs} +2 -2
  82. package/dist/{models-dev-D_X4VMSu.cjs.map → models-dev-BUEaCBxL.cjs.map} +1 -1
  83. package/dist/{netlify-C-nnPVSj.js → netlify-7eHXUkln.js} +2 -2
  84. package/dist/{netlify-C-nnPVSj.js.map → netlify-7eHXUkln.js.map} +1 -1
  85. package/dist/{netlify-CUuCnmtd.cjs → netlify-Db5icdAJ.cjs} +2 -2
  86. package/dist/{netlify-CUuCnmtd.cjs.map → netlify-Db5icdAJ.cjs.map} +1 -1
  87. package/dist/processor-provider/index.cjs +1 -1
  88. package/dist/processor-provider/index.js +1 -1
  89. package/dist/processors/index.cjs +2 -2
  90. package/dist/processors/index.js +2 -2
  91. package/dist/processors/processors/index.d.ts +1 -1
  92. package/dist/processors/processors/index.d.ts.map +1 -1
  93. package/dist/processors/tool-result-reminder.d.ts +23 -0
  94. package/dist/processors/tool-result-reminder.d.ts.map +1 -1
  95. package/dist/{provider-registry-BFknh6Fu.cjs → provider-registry-DRJihW5_.cjs} +6 -6
  96. package/dist/{provider-registry-BFknh6Fu.cjs.map → provider-registry-DRJihW5_.cjs.map} +1 -1
  97. package/dist/{provider-registry-DIbls44Z.js → provider-registry-DzSSAz1R.js} +6 -6
  98. package/dist/{provider-registry-DIbls44Z.js.map → provider-registry-DzSSAz1R.js.map} +1 -1
  99. package/dist/relevance/index.cjs +2 -2
  100. package/dist/relevance/index.js +2 -2
  101. package/dist/stream/index.cjs +3 -3
  102. package/dist/stream/index.js +3 -3
  103. package/dist/{stream-tlVjYkAO.cjs → stream-D-cHV05r.cjs} +3 -3
  104. package/dist/{stream-tlVjYkAO.cjs.map → stream-D-cHV05r.cjs.map} +1 -1
  105. package/dist/{stream-Cd_isEZJ.js → stream-DJaosaeO.js} +3 -3
  106. package/dist/{stream-Cd_isEZJ.js.map → stream-DJaosaeO.js.map} +1 -1
  107. package/dist/test-utils/llm-mock.cjs +1 -1
  108. package/dist/test-utils/llm-mock.js +1 -1
  109. package/dist/tool-loop-agent/index.cjs +1 -1
  110. package/dist/tool-loop-agent/index.js +1 -1
  111. package/dist/{tool-loop-agent-th9L-ls9.cjs → tool-loop-agent-ByrutV2Q.cjs} +4 -4
  112. package/dist/{tool-loop-agent-th9L-ls9.cjs.map → tool-loop-agent-ByrutV2Q.cjs.map} +1 -1
  113. package/dist/{tool-loop-agent-CcT-TTcT.js → tool-loop-agent-BzHXZDL3.js} +4 -4
  114. package/dist/{tool-loop-agent-CcT-TTcT.js.map → tool-loop-agent-BzHXZDL3.js.map} +1 -1
  115. package/dist/{trip-wire-Cj0cJivR.js → trip-wire-DxpTS3jV.js} +2 -2
  116. package/dist/{trip-wire-Cj0cJivR.js.map → trip-wire-DxpTS3jV.js.map} +1 -1
  117. package/dist/{trip-wire-BNzxirr0.cjs → trip-wire-utCESgMt.cjs} +2 -2
  118. package/dist/{trip-wire-BNzxirr0.cjs.map → trip-wire-utCESgMt.cjs.map} +1 -1
  119. package/dist/{utils-BoQofieM.cjs → utils-CPUQn5dX.cjs} +2 -2
  120. package/dist/{utils-BoQofieM.cjs.map → utils-CPUQn5dX.cjs.map} +1 -1
  121. package/dist/{utils-DUfAZ4gr.js → utils-CrKEOVUo.js} +2 -2
  122. package/dist/{utils-DUfAZ4gr.js.map → utils-CrKEOVUo.js.map} +1 -1
  123. package/dist/utils.cjs +1 -1
  124. package/dist/utils.js +1 -1
  125. package/dist/worker/index.cjs +1 -1
  126. package/dist/worker/index.js +1 -1
  127. package/dist/{worker-DwlyX5l8.js → worker-Ciya6mfo.js} +3 -3
  128. package/dist/{worker-DwlyX5l8.js.map → worker-Ciya6mfo.js.map} +1 -1
  129. package/dist/{worker-CsbZPhWb.cjs → worker-YT_pMttZ.cjs} +3 -3
  130. package/dist/{worker-CsbZPhWb.cjs.map → worker-YT_pMttZ.cjs.map} +1 -1
  131. package/dist/{workflow-BR5D6ij_.cjs → workflow-DcS_0R0Z.cjs} +3 -3
  132. package/dist/{workflow-BR5D6ij_.cjs.map → workflow-DcS_0R0Z.cjs.map} +1 -1
  133. package/dist/{workflow-OjZRiiCG.js → workflow-k6s0ESOR.js} +3 -3
  134. package/dist/{workflow-OjZRiiCG.js.map → workflow-k6s0ESOR.js.map} +1 -1
  135. package/dist/workflows/evented/index.cjs +1 -1
  136. package/dist/workflows/evented/index.js +1 -1
  137. package/dist/workflows/index.cjs +1 -1
  138. package/dist/workflows/index.js +1 -1
  139. package/package.json +12 -12
  140. package/dist/agent-BvRfRKIt.js.map +0 -1
  141. package/dist/agent-CwUYflGG.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stream-Cd_isEZJ.js","names":["exhaustiveCheck","EventEmitter","#baseStream","WritableStream","#bufferedChunks","#emitter","#updateUsageCount","#status","#tripwireData","#streamError","#usageCount","#delayedPromises","#streamFinished","#consumptionStarted","ReadableStream","#getDelayedPromise","ReadableStream","#usageCount","#run","#streamPromise","#objectPromise","#objectStream","#objectStreamController","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 #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 // 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 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 // 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 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\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 // Stream was cancelled, clean up\n self.#emitter.removeAllListeners();\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 if (value.delta) {\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 if (!bufferedChunk || !text) {\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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"}
1
+ {"version":3,"file":"stream-DJaosaeO.js","names":["exhaustiveCheck","EventEmitter","#baseStream","WritableStream","#bufferedChunks","#emitter","#updateUsageCount","#status","#tripwireData","#streamError","#usageCount","#delayedPromises","#streamFinished","#consumptionStarted","ReadableStream","#getDelayedPromise","ReadableStream","#usageCount","#run","#streamPromise","#objectPromise","#objectStream","#objectStreamController","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 #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 // 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 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 // 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 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\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 // Stream was cancelled, clean up\n self.#emitter.removeAllListeners();\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 if (value.delta) {\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 if (!bufferedChunk || !text) {\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":";;;;;;;AAyBA,SAAgB,wCAAsE,EACpF,MACA,sBACA,eACA,aACA,SACA,WACA,YACA,qBAW8C;CAC9C,MAAM,WAAW,KAAK;CAEtB,QAAQ,UAAR;EACE,KAAK,cACH,OAAO;GACL,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;EACrF;EAGF,KAAK,cACH,OAAO;GACL,MAAM;GACN,IAAI,KAAK;GACT,OAAO,KAAK;GACZ,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;EACrF;EAGF,KAAK,YACH,OAAO;GACL,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;EACrF;EAGF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;EACrF;EAGF,KAAK;GACH,IAAI,eACF,OAAO;IACL,MAAM;IACN,IAAI,KAAK;IACT,OAAO,KAAK;IACZ,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACrF;GAEF;EAGF,KAAK,iBACH,OAAO;GACL,MAAM;GACN,IAAI,KAAK;GACT,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;EACrF;EAGF,KAAK,QAAQ;GAGX,MAAM,SAAS,KAAK,KAAK;GACzB,OAAO;IACL,MAAM;IACN,WAAW,KAAK,KAAK;IACrB,KAAK,YAAY,MAAM,IAAI,SAAS,QAAQ,KAAK,KAAK,UAAU,UAAU;GAC5E;EACF;EAEA,KAAK;GACH,IAAI,eAAe,KAAK,eAAe,OACrC,OAAO;IACL,MAAM;IACN,UAAU,KAAK;IACf,KAAK,KAAK;IACV,OAAO,KAAK;IACZ,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACrF;GAGF,IAAI,eAAe,KAAK,eAAe,YACrC,OAAO;IACL,MAAM;IACN,UAAU,KAAK;IACf,WAAW,KAAK;IAChB,OAAO,KAAK;IACZ,UAAU,KAAK;IACf,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACrF;GAEF;EAGF,KAAK,oBACH,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACnF,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;EAC1D;EAGF,KAAK,oBACH,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,gBAAgB,KAAK;EACvB;EAGF,KAAK,aACH,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,UAAU,KAAK;GACf,OAAO,KAAK;GACZ,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACnF,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACnF,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;EAC1D;EAGF,KAAK,eACH,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,QAAQ,KAAK;GACb,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACnF,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;EAC1D;EAGF,KAAK,eACH,OAAO,EACL,GAAG,KAAK,OACV;EAGF,KAAK,cACH,OAAO;GACL,MAAM;GACN,YAAY,KAAK;GACjB,WAAW,QAAQ,KAAK,KAAK;GAC7B,GAAI,KAAK,oBAAoB,OAAO,EAAE,kBAAkB,KAAK,iBAAiB,IAAI,CAAC;GACnF,GAAI,KAAK,WAAW,OAAO,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;EAC1D;EAGF,KAAK,SACH,OAAO;GACL,MAAM;GACN,WAAW,QAAQ,KAAK,KAAK;EAC/B;EAGF,KAAK,cACH,OAAO,EAAE,MAAM,aAAa;EAG9B,KAAK,eACH,OAAO,EAAE,MAAM,cAAc;EAG/B,KAAK;GACH,IAAI,WACF,OAAO;IACL,MAAM;IACN,GAAI,wBAAwB,OAAO,EAAE,iBAAiB,qBAAqB,IAAI,CAAC;IAChF,GAAI,qBAAqB,OAAO,EAAE,WAAW,kBAAkB,IAAI,CAAC;GACtE;GAEF;EAGF,KAAK;GACH,IAAI,YACF,OAAO;IACL,MAAM;IACN,GAAI,wBAAwB,OAAO,EAAE,iBAAiB,qBAAqB,IAAI,CAAC;GAClF;GAEF;EAGF,KAAK,SACH,OAAO;EAGT,KAAK,kBACH;EAGF,KAAK,OAGH;EAGF,SAEE,MAAM,IAAI,MAAM,uBAAuBA,UAAiB;CAE5D;AACF;;;ACvPA,eAAsB,cAAc,EAClC,QACA,WAIC;CACD,MAAM,SAAS,OAAO,UAAU;CAChC,IAAI;EACF,OAAO,MAAM;GACX,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK;GACnC,IAAI,MAAM;EACZ;CACF,SAAS,OAAO;EACd,UAAmC,KAAK;CAC1C,UAAU;EACR,OAAO,YAAY;CACrB;AACF;;;ACHA,IAAa,oBAAb,MAEmD;CACjD,UAA6B;CAC7B;CACA,cAA4C;EAC1C,aAAa;EACb,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,0BAA0B;EAC1B,iBAAiB;CACnB;CACA,sBAAsB;CACtB;CACA,WAAW,IAAIC,eAAa;CAC5B,kBAAyC,CAAC;CAE1C,kBAAkB;CAElB;CAEA,mBAAmB;EACjB,OAAO,IAAI,eAAmC;EAC9C,QAAQ,IAAI,eAAwB;CACtC;;;;CAKA;;;;CAIA;CAEA,YAAY,EACV,OACA,YACA,UAKC;EACD,MAAM,OAAO;EACb,KAAK,QAAQ;EACb,KAAK,aAAa;EAElB,KAAKC,cAAc;EACnB,OACG,OACC,IAAIC,iBAAe;GACjB,QAAQ;IACN,MAAM,QAA6B;KACjC,MAAM;KACN,OAAO,KAAK;KACZ,MAAA;KACA,SAAS,EACP,YAAY,KAAK,WACnB;IACF;IAEA,KAAKC,gBAAgB,KAAK,KAAK;IAC/B,KAAKC,SAAS,KAAK,SAAS,KAAK;GACnC;GACA,MAAM,OAAO;IACX,IAAI,MAAM,SAAS,wBAAwB;KACzC,KAAKD,gBAAgB,KAAK,KAAK;KAC/B,KAAKC,SAAS,KAAK,SAAS,KAAK;IACnC;IAEA,IAAI,MAAM,SAAS,wBACb;SAAA,YAAY,MAAM,WAAW,MAAM,QAAQ,QAAQ;MACrD,MAAM,SAAS,MAAM,QAAQ;MAC7B,IAAI,OAAO,SAAS,UACd;WAAA,OAAO,WAAW,WAAW,OAAO,WAAW,OAAO,QAAQ,OAChE,KAAKC,kBAAkB,OAAO,QAAQ,KAAK;YACtC,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,OAAO,QAAQ,QAAQ;QAChF,MAAM,gBAAgB,OAAO,QAAQ;QACrC,IAAI,WAAW,iBAAiB,cAAc,OAC5C,KAAKA,kBAAkB,cAAc,KAAK;OAE9C;;KAEJ;WACK,IAAI,MAAM,SAAS,qBACxB,KAAKC,UAAU;SACV,IAAI,MAAM,SAAS,2BACxB,KAAKA,UAAU;SACV,IAAI,MAAM,SAAS,0BAA0B,MAAM,QAAQ,WAAW,UAE3E,IAAI,MAAM,QAAQ,UAAU;KAC1B,KAAKA,UAAU;KACf,KAAKC,gBAAgB,MAAM,QAAQ;IACrC,OACE,KAAKD,UAAU;SAEZ,IAAI,MAAM,SAAS,mBACxB,KAAKA,UAAU;GAEnB;GACA,QAAQ;IACN,IAAI,KAAKA,YAAY,WACnB,KAAKA,UAAU;IAGjB,KAAKF,SAAS,KAAK,SAAS;KAC1B,MAAM;KACN,OAAO,KAAK;KACZ,MAAA;KACA,SAAS;MACP,gBAAgB,KAAKE;MACrB,UAAU,KAAKE,eACX;OACE,OAAO,KAAKA;OACZ,cAAc,KAAKA,cAAc;MACnC,IACA,CAAC;MACL,QAAQ,EACN,OAAO,KAAKC,YACd;MAEA,GAAI,KAAKH,YAAY,cAAc,KAAKC,gBAAgB,EAAE,UAAU,KAAKA,cAAc,IAAI,CAAC;KAC9F;IACF,CAAC;IAED,KAAKG,iBAAiB,MAAM,QAAQ,KAAKD,WAAW;IAEpD,OAAO,QAAQ,KAAKC,gBAAgB,CAAC,CAAC,SAAS,CAAC,KAAK,aAAa;KAChE,IAAI,QAAQ,OAAO,SAAS,WAC1B,QAAQ,uBAAO,IAAI,MAAM,YAAY,IAAI,oDAAoD,CAAC;IAElG,CAAC;IAED,KAAKC,kBAAkB;IACvB,KAAKP,SAAS,KAAK,QAAQ;GAC7B;EACF,CAAC,CACH,CAAC,CACA,OAAM,WAAU;GAEf,QAAQ,IAAI,yBAAyB,MAAM;EAC7C,CAAC;CACL;CAEA,mBAAsB,SAAwC;EAC5D,IAAI,CAAC,KAAKQ,qBACR,KAAU,cAAc;EAE1B,OAAO,QAAQ;CACjB;CAEA,kBACE,OAiBA;EACA,IAAI,aAAa;GACf,aAAa,KAAKH,YAAY,eAAe;GAC7C,cAAc,KAAKA,YAAY,gBAAgB;GAC/C,aAAa,KAAKA,YAAY,eAAe;GAC7C,iBAAiB,KAAKA,YAAY,mBAAmB;GACrD,mBAAmB,KAAKA,YAAY,qBAAqB;GACzD,0BAA0B,KAAKA,YAAY,4BAA4B;EACzE;EACA,IAAI,iBAAiB,OAAO;GAC1B,WAAW,eAAe,SAAS,OAAO,aAAa,SAAS,KAAK,KAAK,EAAE;GAC5E,WAAW,gBAAgB,SAAS,OAAO,cAAc,SAAS,KAAK,KAAK,EAAE;EAEhF,OAAO,IAAI,kBAAkB,OAAO;GAClC,WAAW,eAAe,SAAS,OAAO,cAAc,SAAS,KAAK,KAAK,EAAE;GAC7E,WAAW,gBAAgB,SAAS,OAAO,kBAAkB,SAAS,KAAK,KAAK,EAAE;EACpF;EACA,WAAW,eAAe,SAAS,OAAO,aAAa,SAAS,KAAK,KAAK,EAAE;EAE5E,WAAW,mBAAmB,SAAS,OAAO,iBAAiB,SAAS,KAAK,KAAK,EAAE;EACpF,WAAW,qBAAqB,SAAS,OAAO,mBAAmB,SAAS,KAAK,KAAK,EAAE;EACxF,WAAW,4BAA4B,SAAS,OAAO,0BAA0B,SAAS,KAAK,KAAK,EAAE;EACtG,KAAKA,cAAc;CACrB;;;;CAKA,cAAc,SAAkB;EAC9B,KAAKC,iBAAiB,OAAO,QAAQ,OAAO;CAC9C;;;;CAKA,cAAc,OAAc;EAC1B,KAAKA,iBAAiB,OAAO,OAAO,KAAK;EACzC,KAAKJ,UAAU;EACf,KAAKE,eAAe;CACtB;;;;CAKA,OAAO,QAA6C;EAClD,KAAKP,cAAc;EACnB,KAAKU,kBAAkB;EACvB,KAAKC,sBAAsB;EAC3B,KAAKN,UAAU;EACf,KAAKI,mBAAmB;GACtB,OAAO,IAAI,eAAmC;GAC9C,QAAQ,IAAI,eAAwB;EACtC;EAEA,MAAM,OAAO;EACb,OACG,OACC,IAAIR,iBAAe;GACjB,QAAQ;IACN,MAAM,QAA6B;KACjC,MAAM;KACN,OAAO,KAAK;KACZ,MAAA;KACA,SAAS,EACP,YAAY,KAAK,WACnB;IACF;IAEA,KAAKC,gBAAgB,KAAK,KAAK;IAC/B,KAAKC,SAAS,KAAK,SAAS,KAAK;GACnC;GACA,MAAM,OAAO;IACX,IAAI,MAAM,SAAS,wBAAwB;KACzC,KAAKD,gBAAgB,KAAK,KAAK;KAC/B,KAAKC,SAAS,KAAK,SAAS,KAAK;IACnC;IAEA,IAAI,MAAM,SAAS,wBACb;SAAA,YAAY,MAAM,WAAW,MAAM,QAAQ,QAAQ;MACrD,MAAM,SAAS,MAAM,QAAQ;MAC7B,IAAI,OAAO,SAAS,UACd;WAAA,OAAO,WAAW,WAAW,OAAO,WAAW,OAAO,QAAQ,OAChE,KAAKC,kBAAkB,OAAO,QAAQ,KAAK;YACtC,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,OAAO,QAAQ,QAAQ;QAChF,MAAM,gBAAgB,OAAO,QAAQ;QACrC,IAAI,WAAW,iBAAiB,cAAc,OAC5C,KAAKA,kBAAkB,cAAc,KAAK;OAE9C;;KAEJ;WACK,IAAI,MAAM,SAAS,qBACxB,KAAKC,UAAU;SACV,IAAI,MAAM,SAAS,2BACxB,KAAKA,UAAU;SACV,IAAI,MAAM,SAAS,0BAA0B,MAAM,QAAQ,WAAW,UAE3E,IAAI,MAAM,QAAQ,UAAU;KAC1B,KAAKA,UAAU;KACf,KAAKC,gBAAgB,MAAM,QAAQ;IACrC,OACE,KAAKD,UAAU;SAEZ,IAAI,MAAM,SAAS,mBACxB,KAAKA,UAAU;GAEnB;GACA,QAAQ;IACN,IAAI,KAAKA,YAAY,WACnB,KAAKA,UAAU;IAGjB,KAAKF,SAAS,KAAK,SAAS;KAC1B,MAAM;KACN,OAAO,KAAK;KACZ,MAAA;KACA,SAAS;MACP,gBAAgB,KAAKE;MACrB,UAAU,KAAKE,eACX;OACE,OAAO,KAAKA;OACZ,cAAc,KAAKA,cAAc;MACnC,IACA,CAAC;MACL,QAAQ,EACN,OAAO,KAAKC,YACd;MAEA,GAAI,KAAKH,YAAY,cAAc,KAAKC,gBAAgB,EAAE,UAAU,KAAKA,cAAc,IAAI,CAAC;KAC9F;IACF,CAAC;IAED,KAAKI,kBAAkB;IACvB,KAAKP,SAAS,KAAK,QAAQ;GAC7B;EACF,CAAC,CACH,CAAC,CACA,OAAM,WAAU;GAEf,QAAQ,IAAI,yBAAyB,MAAM;EAC7C,CAAC;CACL;CAEA,MAAM,cAAc,SAA8D;EAChF,IAAI,KAAKQ,qBACP;EAGF,KAAKA,sBAAsB;EAE3B,IAAI;GACF,MAAM,cAAc;IAClB,QAAQ,KAAKX;IACb,SAAS,SAAS;GACpB,CAAC;EACH,SAAS,OAAO;GACd,SAAS,UAAU,KAAK;EAC1B;CACF;CAEA,IAAI,aAAkD;EACpD,MAAM,OAAO;EACb,OAAO,IAAIY,iBAAoC;GAC7C,MAAM,YAAY;IAEhB,KAAKV,gBAAgB,SAAQ,UAAS;KACpC,WAAW,QAAQ,KAAK;IAC1B,CAAC;IAGD,IAAI,KAAKQ,iBAAiB;KACxB,WAAW,MAAM;KACjB;IACF;IAGA,MAAM,gBAAgB,UAA+B;KACnD,WAAW,QAAQ,KAAK;IAC1B;IAEA,MAAM,sBAAsB;KAC1B,KAAKP,SAAS,IAAI,SAAS,YAAY;KACvC,KAAKA,SAAS,IAAI,UAAU,aAAa;KACzC,WAAW,MAAM;IACnB;IAEA,KAAKA,SAAS,GAAG,SAAS,YAAY;IACtC,KAAKA,SAAS,GAAG,UAAU,aAAa;GAC1C;GAEA,KAAK,aAAa;IAEhB,IAAI,CAAC,KAAKQ,qBACR,KAAU,cAAc;GAE5B;GAEA,SAAS;IAEP,KAAKR,SAAS,mBAAmB;GACnC;EACF,CAAC;CACH;CAEA,IAAI,SAAS;EACX,OAAO,KAAKE;CACd;CAEA,IAAI,SAAS;EACX,OAAO,KAAKQ,mBAAmB,KAAKJ,iBAAiB,MAAM;CAC7D;CAEA,IAAI,QAAQ;EACV,OAAO,KAAKI,mBAAmB,KAAKJ,iBAAiB,KAAK;CAC5D;;;;CAKA,IAAI,SAAkB;EACpB,QAAQ,KAAK,wEAAwE;EACrF,OAAO,KAAK,WAAW;CACzB;;;;CAKA,OAAO,QAA6B;EAClC,QAAQ,KAAK,4EAA4E;EACzF,OAAO,KAAK,WAAW,OAAO,MAAM;CACtC;;;;CAKA,UACE,SAC6E;EAC7E,QAAQ,KAAK,kFAAkF;EAC/F,OAAO,KAAK,WAAW,UAAU,OAAc;CACjD;;;;CAKA,YACE,WACA,SACmB;EACnB,QAAQ,KAAK,sFAAsF;EACnG,OAAO,KAAK,WAAW,YAAY,WAAkB,OAAO;CAC9D;;;;CAKA,OAAO,aAAkD,SAA4C;EACnG,QAAQ,KAAK,4EAA4E;EACzF,OAAO,KAAK,WAAW,OAAO,aAAa,OAAO;CACpD;;;;CAKA,MAAkF;EAChF,QAAQ,KAAK,sEAAsE;EACnF,OAAO,KAAK,WAAW,IAAI;CAC7B;;;;CAKA,CAAC,OAAO,iBAA6D;EACnE,QAAQ,KACN,0GACF;EACA,OAAO,KAAK,WAAW,OAAO,cAAc,CAAC;CAC/C;;;;;CAMA,mBAAwD;EACtD,QAAQ,KAAK,sFAAsF;EACnG,OAAO,KAAK;CACd;AACF;;;ACrdA,IAAa,2BAAb,cAAkEK,iBAAkC;CAClG,cAAc;EACZ,aAAa;EACb,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,0BAA0B;EAC1B,iBAAiB;CACnB;CACA;CAKA;CAKA,0BAAmF;CACnF,gBAAwD;CACxD;CACA;CAEA,YAAY,EACV,cACA,OAIC;EACD,MAAM,kBAAkB;GACtB,SAAS;GACT,SAAS;GACT,QAAQ;EACV;EAKA,gBAAgB,UAAU,IAAI,SAAS,SAAS,WAAW;GACzD,gBAAgB,UAAU;GAC1B,gBAAgB,SAAS;EAC3B,CAAC;EAGD,MAAM,wBAAwB;GAC5B,SAAS;GACT,SAAS;GACT,QAAQ;EACV;EAKA,sBAAsB,UAAU,IAAI,SAAS,SAAS,WAAW;GAC/D,sBAAsB,UAAU;GAChC,sBAAsB,SAAS;EACjC,CAAC;EAGD,IAAI,yBAAkF;EAEtF,MAAM,oBAAoB,UAOpB;GACJ,KAAKC,YAAY,eAAe,SAAS,OAAO,aAAa,SAAS,KAAK,KAAK,EAAE;GAClF,KAAKA,YAAY,gBAAgB,SAAS,OAAO,cAAc,SAAS,KAAK,KAAK,EAAE;GACpF,KAAKA,YAAY,eAAe,SAAS,OAAO,aAAa,SAAS,KAAK,KAAK,EAAE;GAClF,KAAKA,YAAY,mBAAmB,SAAS,OAAO,iBAAiB,SAAS,KAAK,KAAK,EAAE;GAC1F,KAAKA,YAAY,qBAAqB,SAAS,OAAO,mBAAmB,SAAS,KAAK,KAAK,EAAE;GAC9F,KAAKA,YAAY,4BAA4B,SAAS,OAAO,0BAA0B,SAAS,KAAK,KAAK,EAAE;EAC9G;EAEA,MAAM,EACJ,OAAO,OAAM,eAAc;GACzB,IAAI;IA6BF,MAAM,SAA4C,MAAM,aAAa,IA5BlD,eAAkC,EACnD,QAAO,UAAS;KACd,IACG,MAAM,SAAS,iBACd,MAAM,SAAS,QAAQ,SAAS,WAChC,MAAM,SAAS,QAAQ,SAAS,YACjC,MAAM,SAAS,iBACd,MAAM,SAAS,QAAQ,SAAS,cAChC,MAAM,SAAS,QAAQ,SAAS,UAClC;MACA,MAAM,SAAS,MAAM,SAAS;MAC9B,IAAI,UAAU,aAAa,UAAU,OAAO,SAAS;OACnD,MAAM,gBAAgB,OAAO;OAC7B,IAAI,WAAW,iBAAiB,cAAc,OAC5C,iBAAiB,cAAc,KAAK;YAC/B,IAAI,YAAY,iBAAiB,cAAc,QAAQ;QAC5D,MAAM,gBAAgB,cAAc;QACpC,IAAI,WAAW,iBAAiB,cAAc,OAC5C,iBAAiB,cAAc,KAAK;OAExC;MACF;KACF;KAEA,WAAW,QAAQ,KAAK;IAC1B,EACF,CAE0E,CAAC;IAE3E,MAAM,iBAAiB,UAA6B;KAClD,IAAI,MAAM,SAAS,wBACjB,OAAO,cAAc,MAAM,QAAQ,MAAa;KAElD,OAAO;IACT;IAEA,IAAI,iBAAiB;IAErB,WAAW,MAAM,SAAS,QACxB,IAAI,MAAM,SAAS,wBAAwB;KACzC,MAAM,aAAa,cAAc,KAAK;KACtC,IACE,WAAW,SAAS,uBACpB,WAAW,SAAS,yBACpB,WAAW,SAAS,0BAEhB;UAAA,WAAW,SAAS,OACtB,iBAAiB,WAAW,QAAQ,KAAK;KAAA;KAK7C,IAAI,WAAW,SAAS,kBAAkB;MACxC,IAAI,wBACF,uBAAuB,QAAS,WAAmB,SAAS,MAAM;MAEpE,WAAW,QAAQ,UAAU;KAC/B,OAEK,IAAI,WAAW,SAAS,yBAAyB;MACpD,IAAI,CAAC,gBAAgB;OACnB,iBAAiB;OACjB,sBAAsB,QAAS,WAAmB,SAAS,MAAM;OACjE,IAAI,wBACF,uBAAuB,MAAM;MAEjC;MACA,WAAW,QAAQ,UAAU;KAC/B,OAAO,IAAI,WAAW,SAAS,kCAAkC;MAC/D,MAAM,gBAAgB;OACpB,GAAG,WAAW;OACd,OAAO,KAAKA;MACd;MACA,WAAW,QAAQ;OAAE,GAAG;OAAY,SAAS;MAAc,CAAC;KAC9D,OACE,WAAW,QAAQ,UAAU;IAEjC;IAIF,IAAI,CAAC,gBAAgB;KACnB,sBAAsB,QAAQ,KAAA,CAAS;KACvC,IAAI,wBACF,uBAAuB,MAAM;IAEjC;IAEA,WAAW,MAAM;IACjB,gBAAgB,QAAQ;GAC1B,SAAS,OAAO;IACd,WAAW,MAAM,KAAK;IACtB,gBAAgB,OAAO,KAAK;IAC5B,sBAAsB,OAAO,KAAK;IAClC,IAAI,wBACF,uBAAuB,MAAM,KAAK;GAEtC;EACF,EACF,CAAC;EAED,KAAKC,OAAO;EACZ,KAAKC,iBAAiB;EAEtB,KAAK,QAAQ,IAAI;EACjB,KAAKC,iBAAiB;EAGtB,KAAKC,gBAAgB,IAAIL,iBAAgC,EACvD,QAAO,SAAQ;GACb,yBAAyB;GACzB,KAAKM,0BAA0B;EACjC,EACF,CAAC;CACH;CAEA,IAAI,SAAS;EACX,OAAO,KAAKH,eAAe,QAAQ,WAAW,KAAKD,KAAK,qBAAqB,CAAC,CAAC,CAAC,MAAK,QAAO,IAAK,MAAM;CACzG;CAEA,IAAI,SAAS;EACX,OAAO,KAAKC,eAAe,QAAQ,WAAW,KAAKD,KAAK,qBAAqB,CAAC;CAChF;CAEA,IAAI,QAAQ;EACV,OAAO,KAAKC,eAAe,QAAQ,WAAW,KAAKF,WAAW;CAChE;;;;;;CAOA,IAAI,SAAsC;EACxC,OAAO,KAAKG,eAAe;CAC7B;;;;;CAMA,IAAI,eAAgD;EAClD,OAAO,KAAKC;CACd;AACF;;;;;;;;;;;;;;;;;;;ACzMA,SAAgB,sBAAsB,OAAuB;CAG3D,IAAI;EACF,KAAK,MAAM,KAAK;EAChB,OAAO;CACT,QAAQ;EAKN,OAAO,MAAM,QAAQ,mBAAmB,EAAE,CAAC,CAAC,KAAK;CACnD;AACF;;;;;;;;;;;;;;;;;AAkBA,SAAgB,cAAc,OAA2C;CACvE,IAAI,WAAW,MAAM,KAAK;CAM1B,WAAW,SAAS,QAAQ,0CAA0C,OAAO,QAAQ,SAAS;EAE5F,IAAI,OAAO,QAAQ,CAAC,CAAC,SAAS,IAAG,GAC/B,OAAO;EAET,OAAO,GAAG,OAAO,GAAG,KAAK;CAC3B,CAAC;CAID,WAAW,SAAS,QAAQ,4CAA4C,WAAS;CAIjF,WAAW,SAAS,QAAQ,MAAM,IAAG;CAIrC,WAAW,SAAS,QAAQ,gBAAgB,IAAI;CAKhD,WAAW,SAAS,QAAQ,iDAAiD,YAAU;CAEvF,IAAI;EACF,OAAO,KAAK,MAAM,QAAQ;CAC5B,QAAQ;EACN,OAAO;CACT;AACF;AAiBA,SAAgB,+BAA+B,OAAmB,KAA+C;CAC/G,QAAQ,MAAM,MAAd;EACE,KAAK,qBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS,EAAE,GAAG,MAAM;EACtB;EACF,KAAK,cACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,IAAI,MAAM;IACV,kBAAkB,MAAM;GAC1B;EACF;EACF,KAAK;GACH,IAAI,MAAM,OACR,OAAO;IACL,MAAM;IACN,OAAO,IAAI;IACX,MAAA;IACA,SAAS;KACP,IAAI,MAAM;KACV,kBAAkB,MAAM;KACxB,MAAM,MAAM;IACd;GACF;GAEF;EAEF,KAAK,YACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;EACX;EAEF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,IAAI,MAAM;IACV,kBAAkB,MAAM;GAC1B;EACF;EAEF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,IAAI,MAAM;IACV,kBAAkB,MAAM;IACxB,MAAM,MAAM;GACd;EACF;EAEF,KAAK,iBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,IAAI,MAAM;IACV,kBAAkB,MAAM;GAC1B;EACF;EAEF,KAAK,UACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,IAAI,MAAM;IACV,YAAY,MAAM;IAClB,OAAO,MAAM,SAAS;IACtB,UAAU,MAAM,eAAe,aAAa,MAAM,YAAY,KAAA;IAC9D,UAAU,MAAM,eAAe,aAAa,MAAM,WAAW,KAAA;IAC7D,KAAK,MAAM,eAAe,QAAQ,MAAM,MAAM,KAAA;IAC9C,kBAAkB,MAAM;GAC1B;EACF;EAEF,KAAK,QAAQ;GACX,MAAM,KAAM,MAAc;GAC1B,OAAO;IACL,MAAM;IACN,OAAO,IAAI;IACX,MAAA;IACA,SAAS;KACP,MAAM,MAAM;KAEZ,QAAQ,OAAO,MAAM,SAAS,YAAY,CAAC,YAAY,MAAM,IAAI,IAAI,MAAM,OAAO,KAAA;KAClF,UAAU,MAAM;KAChB,GAAI,MAAM,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C;GACF;EACF;EAEA,KAAK,aAAa;GAChB,IAAI,gBAAiD,KAAA;GAErD,IAAI,MAAM,OAAO;IACf,MAAM,YAAY,sBAAsB,MAAM,KAAK;IACnD,IAAI,WACF,IAAI;KACF,gBAAgB,KAAK,MAAM,SAAS;IACtC,QAAQ;KAEN,MAAM,WAAW,cAAc,SAAS;KACxC,IAAI,UACF,gBAAgB;UACX;MACL,QAAQ,MAAM,4CAA4C,EACxD,OAAO,MAAM,MACf,CAAC;MACD,gBAAgB,KAAA;KAClB;IACF;GAEJ;GAEA,OAAO;IACL,MAAM;IACN,OAAO,IAAI;IACX,MAAA;IACA,SAAS;KACP,YAAY,MAAM;KAClB,UAAU,MAAM;KAChB,MAAM;KACN,kBAAkB,MAAM;KACxB,kBAAkB,MAAM;KACxB,GAAK,MAAsC,gBACvC,EAAE,eAAgB,MAAsC,cAAqB,IAC7E,CAAC;IACP;GACF;EACF;EAEA,KAAK,eACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,YAAY,MAAM;IAClB,UAAU,MAAM;IAChB,QAAQ,MAAM;IACd,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,kBAAkB,MAAM;GAC1B;EACF;EAEF,KAAK,oBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,YAAY,MAAM;IAClB,UAAU,MAAM;IAChB,kBAAkB,MAAM;IACxB,kBAAkB,MAAM;IACxB,SAAU,MAAgC;IAC1C,GAAK,MAAsC,gBACvC,EAAE,eAAgB,MAAsC,cAAqB,IAC7E,CAAC;GACP;EACF;EAEF,KAAK;GACH,IAAI,MAAM,OACR,OAAO;IACL,MAAM;IACN,OAAO,IAAI;IACX,MAAA;IACA,SAAS;KACP,eAAe,MAAM;KACrB,YAAY,MAAM;KAClB,kBAAkB,MAAM;IAC1B;GACF;GAEF;EAEF,KAAK,kBACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;IACP,YAAY,MAAM;IAClB,kBAAkB,MAAM;GAC1B;EACF;EAEF,KAAK;GACH,MAAM,EAAE,cAAc,OAAO,kBAAkB,UAAU,GAAG,SAAS;GACrE,OAAO;IACL,MAAM;IACN,OAAO,IAAI;IACX,MAAA;IACA,SAAS;KACP,kBAAkB,MAAM;KACxB,YAAY,EACV,QAAQ,sBAAsB,MAAM,YAAY,EAClD;KACA,QAAQ,EAEN,OAAO,eAAe,MAAM,KAAK,EACnC;KACA,UAAU,EACR,kBAAkB,MAAM,iBAC1B;KACA,UAAU,YAAY;MACpB,KAAK,CAAC;MACN,MAAM,CAAC;MACP,SAAS,CAAC;KACZ;KACA,GAAG;IACL;GACF;EACF,KAAK,SACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS;EACX;EAEF,KAAK,OACH,OAAO;GACL,MAAM;GACN,OAAO,IAAI;GACX,MAAA;GACA,SAAS,MAAM;EACjB;CACJ;AAEF;AAOA,SAAgB,4BAAgD,EAC9D,OACA,OAAO,YAImB;CAC1B,QAAQ,MAAM,MAAd;EACE,KAAK,SACH,OAAO,EACL,MAAM,QACR;EACF,KAAK;GACH,MAAM,EAAE,WAAW,YAAY,GAAG,SAAS,MAAM;GACjD,OAAO;IACL,MAAM;IACN,SAAS,KAAK;IACd,UAAU,KAAK,YAAY,CAAC;GAC9B;EACF,KAAK,OACH,OAAO;GACL,MAAM;GACN,UAAU,MAAM;EAClB;EAEF,KAAK,UACH,OAAO;GACL,MAAM;GAEN,cAAc,MAAM,QAAQ,WAAW;GAEvC,YAAY,MAAM,QAAQ,OAAO;EACnC;EAEF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,MAAM,MAAM,QAAQ;GACpB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,uBACH,MAAM,IAAI,MAAM,0DAAwD;EAC1E,KAAK,sBACH,MAAM,IAAI,MAAM,yDAAuD;EAEzE,KAAK,iBACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,UACH,IAAI,MAAM,QAAQ,eAAe,OAC/B,OAAO;GACL,MAAM;GACN,YAAY;GACZ,IAAI,MAAM,QAAQ;GAClB,KAAK,MAAM,QAAQ;GACnB,OAAO,MAAM,QAAQ;GACrB,kBAAkB,MAAM,QAAQ;EAClC;OAEA,OAAO;GACL,MAAM;GACN,YAAY;GACZ,IAAI,MAAM,QAAQ;GAClB,WAAW,MAAM,QAAQ;GACzB,OAAO,MAAM,QAAQ;GACrB,UAAU,MAAM,QAAQ;GACxB,kBAAkB,MAAM,QAAQ;EAClC;EAEJ,KAAK,QAAQ;GACX,MAAM,WACJ,SAAS,aACL;IACE,MAAM;IACN,MAAM,IAAI,qBAAqB;KAC7B,MAAM,MAAM,QAAQ;KACpB,WAAW,MAAM,QAAQ;IAC3B,CAAC;GACH,IACA;IACE,MAAM;IACN,MAAM,IAAI,6BAA6B;KACrC,MAAM,MAAM,QAAQ;KACpB,WAAW,MAAM,QAAQ;IAC3B,CAAC;GACH;GAEN,IAAI,MAAM,QAAQ,kBAChB,SAAkB,mBAAmB,MAAM,QAAQ;GAGrD,OAAO;EACT;EACA,KAAK,aAAa;GAChB,MAAM,eAAe;IACnB,MAAM;IACN,YAAY,MAAM,QAAQ;IAC1B,kBAAkB,MAAM,QAAQ;IAChC,kBAAkB,MAAM,QAAQ;IAChC,UAAU,MAAM,QAAQ;IACxB,OAAO,MAAM,QAAQ;GACvB;GACA,IAAI,MAAM,QAAQ,eAChB,aAA8C,gBAAgB,MAAM,QAAQ;GAE9E,OAAO;EACT;EACA,KAAK,mCACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,UAAU,MAAM,QAAQ;GACxB,SAAS,CAAC,CAAC,MAAM,QAAQ;GACzB,kBAAkB,MAAM,QAAQ;GAChC,kBAAkB,MAAM,QAAQ;GAChC,GAAI,MAAM,QAAQ,gBAAgB,EAAE,eAAe,MAAM,QAAQ,cAAqB,IAAI,CAAC;EAC7F;EACF,KAAK,iCACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,mBACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,OAAO,MAAM,QAAQ;GACrB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,eAAe;GAClB,MAAM,EAAE,SAAS,UAAU,kBAAkB,0BAA0B,GAAG,SAAS,MAAM,QAAQ;GACjG,OAAO;IACL,MAAM;IACN,UAAU;KACR,IAAI,MAAM,QAAQ,MAAM;KACxB,2BAAW,IAAI,KAAK;KACpB,SAAU,KAAK,WAAsB;KACrC,GAAG;IACL;IACA,OAAO,MAAM,QAAQ,OAAO;IAC5B,cAAc,MAAM,QAAQ,WAAW;IACvC,kBAAkB,4BAA4B,MAAM,QAAQ;GAC9D;EACF;EACA,KAAK,cACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,MAAM,MAAM,QAAQ;GACpB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,YACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,cACH,OAAO;GACL,MAAM;GACN,IAAI,MAAM,QAAQ;GAClB,kBAAkB,MAAM,QAAQ;EAClC;EACF,KAAK,eACH,OAAO;GACL,MAAM;GACN,OAAO,MAAM,QAAQ;GACrB,YAAY,MAAM,QAAQ;GAC1B,kBAAkB,MAAM,QAAQ;GAChC,UAAU,MAAM,QAAQ;GACxB,QAAQ,MAAM,QAAQ;EAExB;EACF,KAAK,cACH,OAAO;GACL,MAAM;GACN,OAAO,MAAM,QAAQ;GACrB,OAAO,MAAM,QAAQ;GACrB,YAAY,MAAM,QAAQ;GAC1B,kBAAkB,MAAM,QAAQ;GAChC,UAAU,MAAM,QAAQ;EAE1B;EAEF,KAAK,SACH,OAAO,EACL,MAAM,QACR;EAEF,KAAK,SACH,OAAO;GACL,MAAM;GACN,OAAO,MAAM,QAAQ;EACvB;EAEF,KAAK,UACH,OAAO;GACL,MAAM;GACN,QAAQ,MAAM;EAChB;EAEF;GACE,IAAI,MAAM,QAAQ,aAAa,SAAS,MAAM,SAC5C,OAAO;IACL,MAAM,MAAM;IACZ,GAAI,MAAM,WAAW,CAAC;GACxB;GAEF;CACJ;AACF;;;;AAKA,SAAS,UAAU,OAA+C;CAChE,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO;CAChD,MAAM,IAAI;CACV,OACE,OAAO,EAAE,gBAAgB,YACzB,EAAE,gBAAgB,QAClB,WAAY,EAAE,eACd,OAAO,EAAE,iBAAiB,YAC1B,EAAE,iBAAiB,QACnB,WAAY,EAAE;AAElB;;;;;;;;AASA,SAAS,eAAe,OAAoF;CAC1G,IAAI,CAAC,OACH,OAAO;EACL,aAAa,KAAA;EACb,cAAc,KAAA;EACd,aAAa,KAAA;EACb,iBAAiB,KAAA;EACjB,mBAAmB,KAAA;EACnB,0BAA0B,KAAA;EAC1B,KAAK,KAAA;CACP;CAGF,IAAI,UAAU,KAAK,GAAG;EAEpB,MAAM,cAAc,MAAM,YAAY;EACtC,MAAM,eAAe,MAAM,aAAa;EACxC,OAAO;GACL;GACA;GACA,cAAc,eAAe,MAAM,gBAAgB;GACnD,iBAAiB,MAAM,aAAa;GACpC,mBAAmB,MAAM,YAAY;GACrC,0BAA0B,MAAM,YAAY;GAC5C,KAAK;EACP;CACF;CAGA,MAAM,UAAU;CAChB,OAAO;EACL,aAAa,QAAQ;EACrB,cAAc,QAAQ;EACtB,aAAa,QAAQ,gBAAgB,QAAQ,eAAe,MAAM,QAAQ,gBAAgB;EAC1F,iBAAkB,QAAyC;EAC3D,mBAAoB,QAA2C;EAC/D,0BAA2B,QAAkD;EAC7E,KAAK;CACP;AACF;;;;AAKA,SAAS,iBACP,cAC6C;CAC7C,OAAO,OAAO,iBAAiB,YAAY,iBAAiB,QAAQ,aAAa;AACnF;;;;;;;;;;AAWA,SAAS,sBACP,cACoD;CACpD,IAAI,CAAC,cACH,OAAO;CAIT,IAAI,iBAAiB,cAAc,iBAAiB,SAClD,OAAO;CAIT,IAAI,iBAAiB,YAAY,GAC/B,OAAO,aAAa;CAItB,OAAO,iBAAiB,YAAY,UAAU;AAChD;;;;;;;;;;;;;;;;;;;;;;;;ACroBA,SAAgB,6BAAgC,SAe9C;CACA,MAAM,EAAE,OAAO,UAAU,aAAa,MAAS,GAAG,eAAe,MAAe,MAAW;CAE3F,MAAM,YAAY,IAAI,gBAAsB,EAC1C,UAAU,OAAO,YAAY;EAE3B,MAAM,aAAa,UAAU,KAAK;EAClC,MAAM,SAAS,UAAU,UAAU,CAAC,CAAC,YAAY,CAEjD,CAAC;EAGD,WAAW,QAAQ,KAAK;CAC1B,EACF,CAAC;CAED,MAAM,aAAa,OAAO,SAAS,MAAoB;EAErD,QAAO,MADc,MAAM,WAAW,UAAU,MAAM,EAAA,CACxC,KAAI,SAAQ,YAAY,IAAI,CAAC;CAC7C;CAEA,MAAM,aAAa,YAA2B;EAC5C,MAAM,MAAM,OAAO,QAAQ;CAC7B;CAEA,OAAO;EAAE;EAAW;EAAY;CAAW;AAC7C;;;;;;;;;;;;;;;;;;;;;;;AAwBA,SAAgB,mBAAsB,SAyBhB;CACpB,MAAM,EAAE,SAAS,YAAY,OAAO,UAAU,aAAa,MAAS,MAAM;CAE1E,IAAI,eAAe;CACnB,IAAI,aAAoD;CACxD,IAAI,kBAAkB;CAEtB,OAAO,IAAI,eAAkB;EAC3B,MAAM,KAAK,YAAY;GAErB,IAAI,CAAC,iBAAiB;IACpB,IAAI,eAAe,QAAQ,QAAQ;KACjC,WAAW,QAAQ,QAAQ,aAAc;KACzC;KACA;IACF;IACA,kBAAkB;IAClB,aAAa,WAAW,UAAU;GACpC;GAGA,IAAI,YACF,IAAI;IACF,MAAM,EAAE,MAAM,UAAU,MAAM,WAAW,KAAK;IAE9C,IAAI,MAAM;KACR,WAAW,MAAM;KACjB;IACF;IAGA,IAAI,SAAS,UAAU;KACrB,MAAM,aAAa,UAAU,KAAK;KAClC,MAAM,SAAS,UAAU,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD;IAEA,WAAW,QAAQ,KAAK;GAC1B,SAAS,OAAO;IACd,WAAW,MAAM,KAAK;GACxB;EAEJ;EAEA,SAAS;GACP,IAAI,YACF,WAAgB,OAAO;EAE3B;CACF,CAAC;AACH;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,kBAAqB,SAgBnC;CACA,MAAM,EAAE,OAAO,UAAU,WAAW,gBAAgB;CAEpD,OAAO;EACL,mBAAmB;GACjB,MAAM,EAAE,cAAc,6BAA6B;IAAE;IAAO;IAAU;IAAW;GAAY,CAAC;GAC9F,OAAO;EACT;EAEA,YAAY,OAAO,SAAS,MAAM;GAChC,MAAM,gBAAgB,iBAAiB,MAAe;GAEtD,QAAO,MADc,MAAM,WAAW,UAAU,MAAM,EAAA,CACxC,KAAI,SAAQ,cAAc,IAAI,CAAC;EAC/C;EAEA,YAAY,YAAY;GACtB,MAAM,MAAM,OAAO,QAAQ;EAC7B;CACF;AACF;;;ACtPA,MAAM,oBAAoB;CACxB,MAAM;CACN,MAAM;AACR;AAEA,MAAM,QAAQ,cAAsB,IAAI,SAAc,YAAW,WAAW,SAAS,SAAS,CAAC;AAiC/F,SAAS,oBAAoB,UAAmF;CAC9G,IAAI,OAAO,aAAa,YAAY,aAAa,YAAY,OAAO,SAAS,YAAY,YACvF,QAAO,WAAU;EACf,IAAI,CAAC,QACH,OAAO;EAIT,OADqB,SAAS,QAAQ,MAAM,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OACnD,WAAW;CAClC;CAGF,IAAI,OAAO,aAAa,YACtB,QAAO,WAAU;EACf,MAAM,QAAQ,SAAS,MAAM;EAE7B,IAAI,SAAS,MACX,OAAO;EAGT,IAAI,CAAC,MAAM,QACT,MAAM,IAAI,UAAU,uDAAuD;EAG7E,IAAI,CAAC,OAAO,WAAW,KAAK,GAC1B,MAAM,IAAI,UAAU,kEAAkE;EAGxF,OAAO;CACT;CAGF,MAAM,UAAU,OAAO,aAAa,WAAW,kBAAkB,YAAY;CAE7E,IAAI,EAAE,mBAAmB,SACvB,MAAM,IAAI,UAAU,iGAA6F;CAGnH,QAAO,WAAU;EACf,QAAQ,YAAY;EACpB,MAAM,QAAQ,QAAQ,KAAK,MAAM;EAEjC,IAAI,CAAC,OACH,OAAO;EAGT,MAAM,WAAW,OAAO,MAAM,GAAG,MAAM,KAAK,IAAI,MAAM;EACtD,IAAI,CAAC,SAAS,QACZ,MAAM,IAAI,UAAU,oDAAoD;EAG1E,OAAO;CACT;AACF;;;;;;;;AASA,SAAgB,aAAiC,EAC/C,YAAY,IACZ,WAAW,WACY,CAAC,GAA0D;CAClF,MAAM,cAAc,oBAAoB,QAAQ;CAChD,IAAI,SAAS;CACb,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,MAAM,uBAAuB,YAAiE,SAAiB;EAC7G,IAAI,CAAC,iBAAiB,CAAC,MACrB;EAGF,MAAM,EAAE,UAAU,WAAW,GAAG,yBAAyB;EACzD,MAAM,EAAE,kBAAkB,mBAAmB,GAAG,mCAAmC,cAAc;EAEjG,WAAW,QAAQ;GACjB,GAAG;GACH,GAAI,qBAAqB,KAAA,IAAY,EAAE,UAAU,iBAAiB,IAAI,CAAC;GACvE,SAAS;IACP,GAAG;IACH,GAAI,6BAA6B,KAAA,IAAY,EAAE,kBAAkB,yBAAyB,IAAI,CAAC;IAC/F;GACF;EACF,CAAsB;EAEtB,mBAAmB,KAAA;EACnB,2BAA2B,KAAA;CAC7B;CAEA,MAAM,eAAe,eAAoE;EACvF,oBAAoB,YAAY,MAAM;EACtC,SAAS;EACT,gBAAgB,KAAA;EAChB,mBAAmB,KAAA;EACnB,2BAA2B,KAAA;CAC7B;CAEA,OAAO,IAAIE,kBAAsD;EAC/D,MAAM,UAAU,OAAO,YAAY;GACjC,IAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,mBAAmB;IACnE,YAAY,UAAU;IACtB,WAAW,QAAQ,KAAK;IACxB;GACF;GAEA,IAAI,kBAAkB,MAAM,SAAS,cAAc,QAAQ,MAAM,QAAQ,OAAO,cAAc,QAAQ,KACpG,YAAY,UAAU;GAGxB,UAAU,MAAM,QAAQ;GACxB,gBAAgB;GAChB,mBAAmB,MAAM,YAAY;GACrC,2BAA2B,MAAM,QAAQ,oBAAoB;GAE7D,IAAI;GACJ,QAAQ,QAAQ,YAAY,MAAM,MAAM,MAAM;IAC5C,oBAAoB,YAAY,KAAK;IACrC,SAAS,OAAO,MAAM,MAAM,MAAM;IAElC,IAAI,cAAc,MAChB,MAAM,KAAK,SAAS;GAExB;EACF;EACA,MAAM,YAAY;GAChB,YAAY,UAAU;EACxB;CACF,CAAC;AACH"}
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_rolldown_runtime = require("../rolldown-runtime-uwYp4b74.cjs");
3
3
  const require_dist = require("../dist-WHfFgO3W.cjs");
4
4
  const require_model = require("../model-CxJfDXLP.cjs");
5
- const require_model$1 = require("../model-DMVq6nAS.cjs");
5
+ const require_model$1 = require("../model-Iow-mV9i.cjs");
6
6
  let stream = require("stream");
7
7
  let url = require("url");
8
8
  let http = require("http");
@@ -1,6 +1,6 @@
1
1
  import { l as __require$1, o as simulateReadableStream } from "../dist-CguJeKKv.js";
2
2
  import { t as AISDKV5LanguageModel } from "../model-CAzmQiEl.js";
3
- import { t as MastraLLMV1 } from "../model-CA0WLISt.js";
3
+ import { t as MastraLLMV1 } from "../model-DQzxkQqM.js";
4
4
  import { Readable } from "stream";
5
5
  import { URL as URL$1, parse, urlToHttpOptions } from "url";
6
6
  import http, { Agent, IncomingMessage, STATUS_CODES, ServerResponse, globalAgent } from "http";
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_tool_loop_agent = require("../tool-loop-agent-th9L-ls9.cjs");
2
+ const require_tool_loop_agent = require("../tool-loop-agent-ByrutV2Q.cjs");
3
3
  exports.getSettings = require_tool_loop_agent.getSettings;
4
4
  exports.isToolLoopAgentLike = require_tool_loop_agent.isToolLoopAgentLike;
5
5
  exports.toolLoopAgentToMastraAgent = require_tool_loop_agent.toolLoopAgentToMastraAgent;
@@ -1,2 +1,2 @@
1
- import { n as getSettings, r as isToolLoopAgentLike, t as toolLoopAgentToMastraAgent } from "../tool-loop-agent-CcT-TTcT.js";
1
+ import { n as getSettings, r as isToolLoopAgentLike, t as toolLoopAgentToMastraAgent } from "../tool-loop-agent-BzHXZDL3.js";
2
2
  export { getSettings, isToolLoopAgentLike, toolLoopAgentToMastraAgent };
@@ -1,6 +1,6 @@
1
- const require_llm = require("./llm-Bjt2hZ3f.cjs");
2
- const require_trip_wire = require("./trip-wire-BNzxirr0.cjs");
3
- const require_agent = require("./agent-CwUYflGG.cjs");
1
+ const require_llm = require("./llm-DmAhSSgh.cjs");
2
+ const require_trip_wire = require("./trip-wire-utCESgMt.cjs");
3
+ const require_agent = require("./agent-um2LJs-0.cjs");
4
4
  const require_message_list = require("./message-list-CvuPcMsx.cjs");
5
5
  const require_dist = require("./dist-DZhmZ2Ix.cjs");
6
6
  //#region src/tool-loop-agent/utils.ts
@@ -246,4 +246,4 @@ Object.defineProperty(exports, "toolLoopAgentToMastraAgent", {
246
246
  }
247
247
  });
248
248
 
249
- //# sourceMappingURL=tool-loop-agent-th9L-ls9.cjs.map
249
+ //# sourceMappingURL=tool-loop-agent-ByrutV2Q.cjs.map