@mastra/react 0.0.4-alpha.0 → 0.0.4-alpha.2

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @mastra/react-hooks
2
2
 
3
+ ## 0.0.4-alpha.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies []:
8
+ - @mastra/client-js@0.15.1-alpha.2
9
+
10
+ ## 0.0.4-alpha.1
11
+
12
+ ### Patch Changes
13
+
14
+ - Mutable shared workflow run state ([#8545](https://github.com/mastra-ai/mastra/pull/8545))
15
+
16
+ - add tripwire reason in playground ([#8568](https://github.com/mastra-ai/mastra/pull/8568))
17
+
18
+ - type fixes and missing changeset ([#8545](https://github.com/mastra-ai/mastra/pull/8545))
19
+
20
+ - Convert WorkflowWatchResult to WorkflowResult in workflow graph ([#8541](https://github.com/mastra-ai/mastra/pull/8541))
21
+
22
+ - Updated dependencies [[`4783b30`](https://github.com/mastra-ai/mastra/commit/4783b3063efea887825514b783ba27f67912c26d), [`2aee9e7`](https://github.com/mastra-ai/mastra/commit/2aee9e7d188b8b256a4ddc203ccefb366b4867fa)]:
23
+ - @mastra/client-js@0.15.1-alpha.1
24
+
3
25
  ## 0.0.4-alpha.0
4
26
 
5
27
  ### Patch Changes
package/dist/index.cjs.js CHANGED
@@ -72,10 +72,9 @@ const useChat = ({ agentId, initializeMessages }) => {
72
72
  providerOptions
73
73
  });
74
74
  setIsRunning(false);
75
- if (response && "uiMessages" in response.response && response.response.uiMessages) {
76
- const formatted = onFinish(response.response.uiMessages);
77
- setMessages((prev) => [...prev, ...formatted]);
78
- }
75
+ const uiMessages = response && "uiMessages" in response.response && response.response.uiMessages ? response.response.uiMessages : [];
76
+ const formatted = onFinish({ messages: uiMessages, tripwireReason: response.tripwireReason });
77
+ setMessages((prev) => [...prev, ...formatted]);
79
78
  };
80
79
  const stream = async ({
81
80
  coreUserMessages,
@@ -188,141 +187,70 @@ const useChat = ({ agentId, initializeMessages }) => {
188
187
  const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
189
188
  if (chunk.type === "workflow-start") {
190
189
  return {
191
- ...prev,
192
- runId: chunk.runId,
193
- eventTimestamp: /* @__PURE__ */ new Date(),
194
- payload: {
195
- ...prev?.payload || {},
196
- workflowState: {
197
- ...prev?.payload?.workflowState,
198
- status: "running",
199
- steps: prev?.payload?.workflowState?.steps || {}
200
- }
201
- }
190
+ input: prev?.input,
191
+ status: "running",
192
+ steps: prev?.steps || {}
202
193
  };
203
194
  }
204
- if (chunk.type === "workflow-step-start") {
195
+ if (chunk.type === "workflow-canceled") {
205
196
  return {
206
197
  ...prev,
207
- payload: {
208
- ...prev?.payload,
209
- currentStep: {
210
- ...prev?.payload?.currentStep,
211
- ...chunk.payload
212
- },
213
- workflowState: {
214
- ...prev?.payload?.workflowState,
215
- steps: {
216
- ...prev?.payload?.workflowState?.steps,
217
- [chunk.payload.id]: {
218
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
219
- ...chunk.payload
220
- }
221
- }
222
- }
223
- },
224
- eventTimestamp: /* @__PURE__ */ new Date()
198
+ status: "canceled"
225
199
  };
226
200
  }
227
- if (chunk.type === "workflow-step-suspended") {
228
- const current = prev?.payload?.workflowState?.steps?.[chunk.payload.id] || {};
201
+ if (chunk.type === "workflow-finish") {
202
+ const finalStatus = chunk.payload.workflowStatus;
203
+ const prevSteps = prev?.steps ?? {};
204
+ const lastStep = Object.values(prevSteps).pop();
229
205
  return {
230
206
  ...prev,
231
- payload: {
232
- ...prev?.payload,
233
- currentStep: {
234
- id: chunk.payload.id,
235
- ...prev?.payload?.currentStep,
236
- ...chunk.payload
237
- },
238
- workflowState: {
239
- ...prev?.payload?.workflowState,
240
- status: "suspended",
241
- steps: {
242
- ...prev?.payload?.workflowState?.steps,
243
- [chunk.payload.id]: {
244
- ...current || {},
245
- ...chunk.payload
246
- }
247
- }
248
- }
249
- },
250
- eventTimestamp: /* @__PURE__ */ new Date()
207
+ status: chunk.payload.workflowStatus,
208
+ ...finalStatus === "success" && lastStep?.status === "success" ? { result: lastStep?.output } : finalStatus === "failed" && lastStep?.status === "failed" ? { error: lastStep?.error } : {}
251
209
  };
252
210
  }
253
- if (chunk.type === "workflow-step-waiting") {
211
+ const { stepCallId, stepName, ...newPayload } = chunk.payload ?? {};
212
+ const newSteps = {
213
+ ...prev?.steps,
214
+ [chunk.payload.id]: {
215
+ ...prev?.steps?.[chunk.payload.id],
216
+ ...newPayload
217
+ }
218
+ };
219
+ if (chunk.type === "workflow-step-start") {
254
220
  return {
255
221
  ...prev,
256
- payload: {
257
- ...prev?.payload,
258
- currentStep: {
259
- ...prev?.payload?.currentStep,
260
- ...chunk.payload
261
- },
262
- workflowState: {
263
- ...prev?.payload?.workflowState,
264
- status: "waiting",
265
- steps: {
266
- ...prev?.payload?.workflowState?.steps,
267
- [chunk.payload.id]: {
268
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
269
- ...chunk.payload
270
- }
271
- }
272
- }
273
- },
274
- eventTimestamp: /* @__PURE__ */ new Date()
222
+ steps: newSteps
275
223
  };
276
224
  }
277
- if (chunk.type === "workflow-step-result") {
278
- const next = {
279
- ...prev,
280
- payload: {
281
- ...prev?.payload || {},
282
- currentStep: {
283
- ...prev?.payload?.currentStep,
284
- ...chunk.payload
285
- },
286
- workflowState: {
287
- ...prev?.payload?.workflowState,
288
- steps: {
289
- ...prev?.payload?.workflowState?.steps,
290
- [chunk.payload.id]: {
291
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
292
- ...chunk.payload
293
- }
294
- }
225
+ if (chunk.type === "workflow-step-suspended") {
226
+ const suspendedStepIds = Object.entries(newSteps).flatMap(
227
+ ([stepId, stepResult]) => {
228
+ if (stepResult?.status === "suspended") {
229
+ const nestedPath = stepResult?.suspendPayload?.__workflow_meta?.path;
230
+ return nestedPath ? [[stepId, ...nestedPath]] : [[stepId]];
295
231
  }
296
- },
297
- eventTimestamp: /* @__PURE__ */ new Date()
232
+ return [];
233
+ }
234
+ );
235
+ return {
236
+ ...prev,
237
+ status: "suspended",
238
+ steps: newSteps,
239
+ suspendPayload: chunk.payload.suspendPayload,
240
+ suspended: suspendedStepIds
298
241
  };
299
- return next;
300
242
  }
301
- if (chunk.type === "workflow-canceled") {
243
+ if (chunk.type === "workflow-step-waiting") {
302
244
  return {
303
245
  ...prev,
304
- payload: {
305
- ...prev?.payload,
306
- workflowState: {
307
- ...prev?.payload?.workflowState,
308
- status: "canceled"
309
- }
310
- },
311
- eventTimestamp: /* @__PURE__ */ new Date()
246
+ status: "waiting",
247
+ steps: newSteps
312
248
  };
313
249
  }
314
- if (chunk.type === "workflow-finish") {
250
+ if (chunk.type === "workflow-step-result") {
315
251
  return {
316
252
  ...prev,
317
- payload: {
318
- ...prev?.payload,
319
- currentStep: void 0,
320
- workflowState: {
321
- ...prev?.payload?.workflowState,
322
- status: chunk.payload.workflowStatus
323
- }
324
- },
325
- eventTimestamp: /* @__PURE__ */ new Date()
253
+ steps: newSteps
326
254
  };
327
255
  }
328
256
  return prev;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/mastra-client-context.tsx","../src/mastra-react-provider.tsx","../src/agent/hooks.ts","../src/lib/ai-sdk/toUIMessage.ts","../src/lib/ai-sdk/toNetworkUIMessage.ts","../src/lib/ai-sdk/toAssistantUIMessage.ts"],"sourcesContent":["import { createContext, useContext, ReactNode } from 'react';\nimport { MastraClient } from '@mastra/client-js';\n\ntype MastraClientContextType = MastraClient;\n\nconst MastraClientContext = createContext<MastraClientContextType>({} as MastraClientContextType);\n\nexport interface MastraClientProviderProps {\n children: ReactNode;\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\nexport const MastraClientProvider = ({ children, baseUrl, headers }: MastraClientProviderProps) => {\n const client = createMastraClient(baseUrl, headers);\n\n return <MastraClientContext.Provider value={client}>{children}</MastraClientContext.Provider>;\n};\n\nexport const useMastraClient = () => useContext(MastraClientContext);\n\nconst createMastraClient = (baseUrl?: string, mastraClientHeaders: Record<string, string> = {}) => {\n return new MastraClient({\n baseUrl: baseUrl || '',\n // only add the header if the baseUrl is not provided i.e it's a local dev environment\n headers: !baseUrl ? { ...mastraClientHeaders, 'x-mastra-dev-playground': 'true' } : mastraClientHeaders,\n });\n};\n","import { MastraClientProvider, MastraClientProviderProps } from '@/mastra-client-context';\ntype MastraReactProviderProps = MastraClientProviderProps;\n\nexport const MastraReactProvider = ({ children, baseUrl, headers }: MastraReactProviderProps) => {\n return (\n <MastraClientProvider baseUrl={baseUrl} headers={headers}>\n {children}\n </MastraClientProvider>\n );\n};\n","import { ModelSettings } from './types';\nimport { useMastraClient } from '@/mastra-client-context';\nimport { UIMessage } from '@ai-sdk/react';\nimport { MastraClient } from '@mastra/client-js';\nimport { CoreUserMessage } from '@mastra/core/llm';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { ChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport { useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nexport interface MastraChatProps<TMessage> {\n agentId: string;\n initializeMessages?: () => TMessage[];\n}\n\ninterface SharedArgs {\n coreUserMessages: CoreUserMessage[];\n runtimeContext?: RuntimeContext;\n threadId?: string;\n modelSettings?: ModelSettings;\n signal?: AbortSignal;\n}\n\nexport type GenerateArgs<TMessage> = SharedArgs & { onFinish: (messages: UIMessage[]) => TMessage[] };\n\nexport type StreamArgs<TMessage> = SharedArgs & {\n onChunk: (chunk: ChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport type NetworkArgs<TMessage> = SharedArgs & {\n onNetworkChunk: (chunk: NetworkChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport const useChat = <TMessage>({ agentId, initializeMessages }: MastraChatProps<TMessage>) => {\n const [messages, setMessages] = useState<TMessage[]>(initializeMessages || []);\n const baseClient = useMastraClient();\n const [isRunning, setIsRunning] = useState(false);\n\n const generate = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n modelSettings,\n signal,\n onFinish,\n }: GenerateArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.generate({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n setIsRunning(false);\n\n if (response && 'uiMessages' in response.response && response.response.uiMessages) {\n const formatted = onFinish(response.response.uiMessages);\n setMessages(prev => [...prev, ...formatted]);\n }\n };\n\n const stream = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onChunk,\n modelSettings,\n signal,\n }: StreamArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.stream({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n if (!response.body) {\n setIsRunning(false);\n throw new Error('[Stream] No response body');\n }\n\n await response.processDataStream({\n onChunk: (chunk: ChunkType) => {\n // Without this, React might batch intermediate chunks which would break the message reconstruction over time\n flushSync(() => {\n setMessages(prev => onChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n const network = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onNetworkChunk,\n modelSettings,\n signal,\n }: NetworkArgs<TMessage>) => {\n const { frequencyPenalty, presencePenalty, maxRetries, maxTokens, temperature, topK, topP, maxSteps } =\n modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.network({\n messages: coreUserMessages,\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n runId: agentId,\n runtimeContext,\n ...(threadId ? { thread: threadId, resourceId: agentId } : {}),\n });\n\n await response.processDataStream({\n onChunk: (chunk: NetworkChunkType) => {\n flushSync(() => {\n setMessages(prev => onNetworkChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n return {\n network,\n stream,\n generate,\n isRunning,\n messages,\n setMessages,\n cancelRun: () => setIsRunning(false),\n };\n};\n","import { ChunkType } from '@mastra/core/stream';\nimport { type UIMessage } from '@ai-sdk/react';\nimport { WorkflowStreamEvent } from '@mastra/core/workflows';\nimport { WorkflowWatchResult } from '@mastra/client-js';\n\nexport type MastraUIMessage = UIMessage<any, any, any>;\n\ntype StreamChunk = {\n type: string;\n payload: any;\n runId: string;\n from: 'AGENT' | 'WORKFLOW';\n};\n\n// Helper function to map workflow stream chunks to watch result format\n// Based on the pattern from packages/playground-ui/src/domains/workflows/utils.ts\n\nexport const mapWorkflowStreamChunkToWatchResult = (\n prev: WorkflowWatchResult,\n chunk: StreamChunk,\n): WorkflowWatchResult => {\n if (chunk.type === 'workflow-start') {\n return {\n ...prev,\n runId: chunk.runId,\n eventTimestamp: new Date(),\n payload: {\n ...(prev?.payload || {}),\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'running',\n steps: prev?.payload?.workflowState?.steps || {},\n },\n },\n };\n }\n\n if (chunk.type === 'workflow-step-start') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-suspended') {\n const current = prev?.payload?.workflowState?.steps?.[chunk.payload.id] || {};\n\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n id: chunk.payload.id,\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'suspended',\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...(current || {}),\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-waiting') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'waiting',\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-result') {\n const next = {\n ...prev,\n payload: {\n ...(prev?.payload || {}),\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n\n return next;\n }\n\n if (chunk.type === 'workflow-canceled') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'canceled',\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-finish') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: undefined,\n workflowState: {\n ...prev?.payload?.workflowState,\n status: chunk.payload.workflowStatus,\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n return prev;\n};\n\nexport const toUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: ChunkType;\n conversation: UIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n switch (chunk.type) {\n case 'start': {\n // Create a new assistant message\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [],\n };\n\n return [...result, newMessage];\n }\n\n case 'text-start':\n case 'text-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find or create a text part\n const parts = [...lastMessage.parts];\n let textPartIndex = parts.findIndex(part => part.type === 'text');\n\n if (chunk.type === 'text-start') {\n // Add a new text part if it doesn't exist\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: '',\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n } else {\n // text-delta: append to existing text part or create if missing\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const textPart = parts[textPartIndex];\n if (textPart.type === 'text') {\n parts[textPartIndex] = {\n ...textPart,\n text: textPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'reasoning-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Find or create reasoning part\n const parts = [...lastMessage.parts];\n let reasoningPartIndex = parts.findIndex(part => part.type === 'reasoning');\n\n if (reasoningPartIndex === -1) {\n parts.push({\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const reasoningPart = parts[reasoningPartIndex];\n if (reasoningPart.type === 'reasoning') {\n parts[reasoningPartIndex] = {\n ...reasoningPart,\n text: reasoningPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-call': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to existing message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-result': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n if (chunk.payload.isError) {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-error',\n input: toolPart.input,\n errorText: String(chunk.payload.result),\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n } else {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: toolPart.output,\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-output': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n // Handle workflow-related output chunks\n if (chunk.payload.output?.type?.startsWith('workflow-')) {\n // Get existing workflow state from the output field\n const existingWorkflowState = (toolPart.output as WorkflowWatchResult) || ({} as WorkflowWatchResult);\n\n // Use the mapWorkflowStreamChunkToWatchResult pattern for accumulation\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n chunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: updatedWorkflowState as any,\n };\n } else {\n // Handle regular tool output\n const currentOutput = (toolPart.output as any) || [];\n const existingOutput = Array.isArray(currentOutput) ? currentOutput : [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: [...existingOutput, chunk.payload.output] as any,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'source': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Add source part based on sourceType\n if (chunk.payload.sourceType === 'url') {\n parts.push({\n type: 'source-url',\n sourceId: chunk.payload.id,\n url: chunk.payload.url || '',\n title: chunk.payload.title,\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else if (chunk.payload.sourceType === 'document') {\n parts.push({\n type: 'source-document',\n sourceId: chunk.payload.id,\n mediaType: chunk.payload.mimeType || 'application/octet-stream',\n title: chunk.payload.title,\n filename: chunk.payload.filename,\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'file': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Create data URL for file content\n let url: string;\n if (typeof chunk.payload.data === 'string') {\n url = chunk.payload.base64\n ? `data:${chunk.payload.mimeType};base64,${chunk.payload.data}`\n : `data:${chunk.payload.mimeType},${encodeURIComponent(chunk.payload.data)}`;\n } else {\n // For Uint8Array, convert to base64\n const base64 = btoa(String.fromCharCode(...chunk.payload.data));\n url = `data:${chunk.payload.mimeType};base64,${base64}`;\n }\n\n parts.push({\n type: 'file',\n mediaType: chunk.payload.mimeType,\n url,\n providerMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'finish': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Mark streaming parts as done\n const parts = lastMessage.parts.map(part => {\n if (part.type === 'text' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n if (part.type === 'reasoning' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n return part;\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'error': {\n // For error cases, we might want to add an error indicator\n // but since UIMessage doesn't have explicit error parts,\n // we'll just return the conversation as-is\n return result;\n }\n\n // For all other chunk types, return conversation unchanged\n default:\n return result;\n }\n};\n","import { NetworkChunkType } from '@mastra/core/stream';\nimport { MastraUIMessage, mapWorkflowStreamChunkToWatchResult } from './toUIMessage';\n\nexport const toNetworkUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: NetworkChunkType;\n conversation: MastraUIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n // Handle agent/workflow execution start - creates ONE message that will accumulate state\n if (chunk.type === 'agent-execution-start' || chunk.type === 'workflow-execution-start') {\n const primitiveId = chunk.payload?.args?.primitiveId;\n const runId = chunk.payload.runId;\n\n if (!primitiveId || !runId) return result;\n\n // Create new assistant message with a dynamic-tool part\n // Store networkMetadata temporarily in input since output is not available yet\n const newMessage: MastraUIMessage = {\n id: runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: chunk.payload.args,\n output: {\n networkMetadata: {\n selectionReason: chunk.payload?.args?.selectionReason || '',\n from: chunk.type === 'agent-execution-start' ? 'AGENT' : 'WORKFLOW',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // Handle agent execution events (text, tool calls, etc.)\n if (chunk.type.startsWith('agent-execution-event-')) {\n const agentChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Handle different agent event types\n if (agentChunk.type === 'text-delta') {\n // Accumulate text in the input field\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastMessage = messages[messages.length - 1];\n\n const nextMessages =\n lastMessage?.type === 'text'\n ? [\n ...messages.slice(0, -1),\n { type: 'text', content: (lastMessage?.content || '') + agentChunk.payload.text },\n ]\n : [...messages, { type: 'text', content: agentChunk.payload.text }];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: nextMessages,\n },\n };\n } else if (agentChunk.type === 'tool-call') {\n // Add tool call to messages\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages,\n {\n type: 'tool',\n toolCallId: agentChunk.payload.toolCallId,\n toolName: agentChunk.payload.toolName,\n toolInput: agentChunk.payload.args,\n },\n ],\n },\n };\n } else if (agentChunk.type === 'tool-result') {\n // Update the last tool message with result\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastToolIndex = messages.length - 1;\n\n if (lastToolIndex >= 0 && messages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages.slice(0, -1),\n {\n ...messages[lastToolIndex],\n toolOutput: agentChunk.payload.result,\n },\n ],\n },\n };\n }\n } else if (agentChunk.type === 'tool-output') {\n // Handle workflow output in tool-output events\n if (agentChunk.payload?.output?.type?.startsWith('workflow-')) {\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n agentChunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle workflow execution events\n if (chunk.type.startsWith('workflow-execution-event-')) {\n const workflowChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Accumulate workflow state in output field\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, workflowChunk);\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution start\n if (chunk.type === 'tool-execution-start') {\n const { args: argsData } = chunk.payload;\n const lastMessage = result[result.length - 1];\n\n const nestedArgs = argsData.args || {};\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to the current message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution end\n if (chunk.type === 'tool-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: chunk.payload.result,\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle agent/workflow execution end - mark the tool as done\n if (chunk.type === 'agent-execution-end' || chunk.type === 'workflow-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: currentOutput?.result || chunk.payload?.result || '',\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle network execution step finish - this might create a new text message\n if (chunk.type === 'network-execution-event-step-finish') {\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'text',\n text: chunk.payload?.result || '',\n state: 'done',\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // For all other chunk types (like routing-agent-start/end, network-finish), return unchanged\n return result;\n};\n","import {\n ThreadMessageLike,\n MessageStatus,\n CompleteAttachment,\n TextMessagePart,\n ReasoningMessagePart,\n SourceMessagePart,\n FileMessagePart,\n ToolCallMessagePart,\n} from '@assistant-ui/react';\nimport { MastraUIMessage } from './toUIMessage';\n\n/**\n * Extended type for MastraUIMessage that may include additional properties\n * from different sources (generate, toUIMessage, toNetworkUIMessage)\n */\ntype ExtendedMastraUIMessage = MastraUIMessage & {\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n experimental_attachments?: readonly CompleteAttachment[];\n};\n\n/**\n * Converts a Mastra UIMessage (from AI SDK) to a ThreadMessageLike format compatible with @assistant-ui/react.\n *\n * This function handles UIMessages from three sources:\n * - agent.generate: Full output with all message parts\n * - toUIMessage: Streaming chunks accumulated into UIMessages\n * - toNetworkUIMessage: Network execution events accumulated into UIMessages\n *\n * @param message - The MastraUIMessage to convert\n * @returns A ThreadMessageLike compatible with @assistant-ui/react\n */\nexport const toAssistantUIMessage = (message: MastraUIMessage): ThreadMessageLike => {\n const extendedMessage = message as ExtendedMastraUIMessage;\n\n // Convert parts array to content array\n type ContentPart = Exclude<ThreadMessageLike['content'], string> extends readonly (infer T)[] ? T : never;\n\n const content: ThreadMessageLike['content'] = message.parts.map((part): ContentPart => {\n // Handle text parts\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n };\n }\n\n // Handle reasoning parts (extended thinking)\n if (part.type === 'reasoning') {\n return {\n type: 'reasoning',\n text: part.text,\n };\n }\n\n // Handle source-url parts\n if (part.type === 'source-url') {\n return {\n type: 'source',\n sourceType: 'url',\n id: part.sourceId,\n url: part.url,\n title: part.title,\n };\n }\n\n // Handle source-document parts (not directly supported by ThreadMessageLike)\n // Convert to file part for compatibility\n if (part.type === 'source-document') {\n return {\n type: 'file',\n filename: part.filename,\n mimeType: part.mediaType,\n data: '', // Source documents don't have inline data\n };\n }\n\n // Handle file parts\n if (part.type === 'file') {\n return {\n type: 'file',\n mimeType: part.mediaType,\n data: part.url, // Use URL as data source\n };\n }\n\n // Handle dynamic-tool parts (tool calls)\n if (part.type === 'dynamic-tool') {\n // Build the tool call matching the inline type from ThreadMessageLike\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.input),\n };\n\n // Only add result and isError if the tool has completed\n if (part.state === 'output-available' && 'output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if (part.state === 'output-error' && 'errorText' in part) {\n return { ...baseToolCall, result: part.errorText, isError: true };\n }\n\n return baseToolCall;\n }\n\n // Handle typed tool parts (tool-{NAME} pattern from AI SDK)\n if (part.type.startsWith('tool-')) {\n const toolName = 'toolName' in part && typeof part.toolName === 'string' ? part.toolName : part.type.substring(5);\n\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: 'toolCallId' in part && typeof part.toolCallId === 'string' ? part.toolCallId : '',\n toolName,\n argsText: 'input' in part ? JSON.stringify(part.input) : '{}',\n };\n\n // Add result if available\n if ('output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if ('error' in part) {\n return { ...baseToolCall, result: part.error, isError: true };\n }\n\n return baseToolCall;\n }\n\n // For any other part types, return a minimal text part\n // This ensures forward compatibility with new part types\n return {\n type: 'text',\n text: '',\n };\n });\n\n // Determine status for assistant messages\n let status: MessageStatus | undefined;\n if (message.role === 'assistant' && content.length > 0) {\n // Check for streaming parts\n const hasStreamingParts = message.parts.some(\n part =>\n (part.type === 'text' && 'state' in part && part.state === 'streaming') ||\n (part.type === 'reasoning' && 'state' in part && part.state === 'streaming'),\n );\n\n // Check for tool calls (both dynamic-tool and tool-{NAME} patterns)\n const hasToolCalls = message.parts.some(part => part.type === 'dynamic-tool' || part.type.startsWith('tool-'));\n\n const hasInputAvailableTools = message.parts.some(\n part => part.type === 'dynamic-tool' && part.state === 'input-available',\n );\n\n const hasErrorTools = message.parts.some(\n part =>\n (part.type === 'dynamic-tool' && part.state === 'output-error') ||\n (part.type.startsWith('tool-') && 'error' in part),\n );\n\n // Determine message status based on part states\n if (hasStreamingParts) {\n status = { type: 'running' };\n } else if (hasInputAvailableTools && hasToolCalls) {\n status = { type: 'requires-action', reason: 'tool-calls' };\n } else if (hasErrorTools) {\n status = { type: 'incomplete', reason: 'error' };\n } else {\n status = { type: 'complete', reason: 'stop' };\n }\n }\n\n // Build metadata if present\n const metadata = extendedMessage.metadata\n ? {\n custom: extendedMessage.metadata,\n }\n : undefined;\n\n // Build the ThreadMessageLike object\n const threadMessage: ThreadMessageLike = {\n role: message.role,\n content,\n id: message.id,\n createdAt: extendedMessage.createdAt,\n status,\n metadata,\n attachments: extendedMessage.experimental_attachments,\n };\n\n return threadMessage;\n};\n"],"names":["createContext","useContext","MastraClient","jsx","useState","flushSync","lastMessage"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/mastra-client-context.tsx","../src/mastra-react-provider.tsx","../src/agent/hooks.ts","../src/lib/ai-sdk/toUIMessage.ts","../src/lib/ai-sdk/toNetworkUIMessage.ts","../src/lib/ai-sdk/toAssistantUIMessage.ts"],"sourcesContent":["import { createContext, useContext, ReactNode } from 'react';\nimport { MastraClient } from '@mastra/client-js';\n\ntype MastraClientContextType = MastraClient;\n\nconst MastraClientContext = createContext<MastraClientContextType>({} as MastraClientContextType);\n\nexport interface MastraClientProviderProps {\n children: ReactNode;\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\nexport const MastraClientProvider = ({ children, baseUrl, headers }: MastraClientProviderProps) => {\n const client = createMastraClient(baseUrl, headers);\n\n return <MastraClientContext.Provider value={client}>{children}</MastraClientContext.Provider>;\n};\n\nexport const useMastraClient = () => useContext(MastraClientContext);\n\nconst createMastraClient = (baseUrl?: string, mastraClientHeaders: Record<string, string> = {}) => {\n return new MastraClient({\n baseUrl: baseUrl || '',\n // only add the header if the baseUrl is not provided i.e it's a local dev environment\n headers: !baseUrl ? { ...mastraClientHeaders, 'x-mastra-dev-playground': 'true' } : mastraClientHeaders,\n });\n};\n","import { MastraClientProvider, MastraClientProviderProps } from '@/mastra-client-context';\ntype MastraReactProviderProps = MastraClientProviderProps;\n\nexport const MastraReactProvider = ({ children, baseUrl, headers }: MastraReactProviderProps) => {\n return (\n <MastraClientProvider baseUrl={baseUrl} headers={headers}>\n {children}\n </MastraClientProvider>\n );\n};\n","import { ModelSettings } from './types';\nimport { useMastraClient } from '@/mastra-client-context';\nimport { UIMessage } from '@ai-sdk/react';\nimport { MastraClient } from '@mastra/client-js';\nimport { CoreUserMessage } from '@mastra/core/llm';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { ChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport { useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nexport interface MastraChatProps<TMessage> {\n agentId: string;\n initializeMessages?: () => TMessage[];\n}\n\ninterface SharedArgs {\n coreUserMessages: CoreUserMessage[];\n runtimeContext?: RuntimeContext;\n threadId?: string;\n modelSettings?: ModelSettings;\n signal?: AbortSignal;\n}\n\nexport type GenerateArgs<TMessage> = SharedArgs & {\n onFinish: ({ messages, tripwireReason }: { messages: UIMessage[]; tripwireReason: string }) => TMessage[];\n};\n\nexport type StreamArgs<TMessage> = SharedArgs & {\n onChunk: (chunk: ChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport type NetworkArgs<TMessage> = SharedArgs & {\n onNetworkChunk: (chunk: NetworkChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport const useChat = <TMessage>({ agentId, initializeMessages }: MastraChatProps<TMessage>) => {\n const [messages, setMessages] = useState<TMessage[]>(initializeMessages || []);\n const baseClient = useMastraClient();\n const [isRunning, setIsRunning] = useState(false);\n\n const generate = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n modelSettings,\n signal,\n onFinish,\n }: GenerateArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.generate({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n setIsRunning(false);\n\n const uiMessages =\n response && 'uiMessages' in response.response && response.response.uiMessages ? response.response.uiMessages : [];\n\n const formatted = onFinish({ messages: uiMessages, tripwireReason: response.tripwireReason });\n setMessages(prev => [...prev, ...formatted]);\n };\n\n const stream = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onChunk,\n modelSettings,\n signal,\n }: StreamArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.stream({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n if (!response.body) {\n setIsRunning(false);\n throw new Error('[Stream] No response body');\n }\n\n await response.processDataStream({\n onChunk: (chunk: ChunkType) => {\n // Without this, React might batch intermediate chunks which would break the message reconstruction over time\n flushSync(() => {\n setMessages(prev => onChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n const network = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onNetworkChunk,\n modelSettings,\n signal,\n }: NetworkArgs<TMessage>) => {\n const { frequencyPenalty, presencePenalty, maxRetries, maxTokens, temperature, topK, topP, maxSteps } =\n modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.network({\n messages: coreUserMessages,\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n runId: agentId,\n runtimeContext,\n ...(threadId ? { thread: threadId, resourceId: agentId } : {}),\n });\n\n await response.processDataStream({\n onChunk: (chunk: NetworkChunkType) => {\n flushSync(() => {\n setMessages(prev => onNetworkChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n return {\n network,\n stream,\n generate,\n isRunning,\n messages,\n setMessages,\n cancelRun: () => setIsRunning(false),\n };\n};\n","import { ChunkType } from '@mastra/core/stream';\nimport { type UIMessage } from '@ai-sdk/react';\nimport { WorkflowStreamResult, WorkflowStreamEvent, StepResult } from '@mastra/core/workflows';\nimport { WorkflowWatchResult } from '@mastra/client-js';\n\nexport type MastraUIMessage = UIMessage<any, any, any>;\n\ntype StreamChunk = {\n type: string;\n payload: any;\n runId: string;\n from: 'AGENT' | 'WORKFLOW';\n};\n\n// Helper function to map workflow stream chunks to watch result format\n// Based on the pattern from packages/playground-ui/src/domains/workflows/utils.ts\n\nexport const mapWorkflowStreamChunkToWatchResult = (\n prev: WorkflowStreamResult<any, any, any, any>,\n chunk: StreamChunk,\n): WorkflowStreamResult<any, any, any, any> => {\n if (chunk.type === 'workflow-start') {\n return {\n input: prev?.input,\n status: 'running',\n steps: prev?.steps || {},\n };\n }\n\n if (chunk.type === 'workflow-canceled') {\n return {\n ...prev,\n status: 'canceled',\n };\n }\n\n if (chunk.type === 'workflow-finish') {\n const finalStatus = chunk.payload.workflowStatus;\n const prevSteps = prev?.steps ?? {};\n const lastStep = Object.values(prevSteps).pop();\n return {\n ...prev,\n status: chunk.payload.workflowStatus,\n ...(finalStatus === 'success' && lastStep?.status === 'success'\n ? { result: lastStep?.output }\n : finalStatus === 'failed' && lastStep?.status === 'failed'\n ? { error: lastStep?.error }\n : {}),\n };\n }\n\n const { stepCallId, stepName, ...newPayload } = chunk.payload ?? {};\n\n const newSteps = {\n ...prev?.steps,\n [chunk.payload.id]: {\n ...prev?.steps?.[chunk.payload.id],\n ...newPayload,\n },\n };\n\n if (chunk.type === 'workflow-step-start') {\n return {\n ...prev,\n steps: newSteps,\n };\n }\n\n if (chunk.type === 'workflow-step-suspended') {\n const suspendedStepIds = Object.entries(newSteps as Record<string, StepResult<any, any, any, any>>).flatMap(\n ([stepId, stepResult]) => {\n if (stepResult?.status === 'suspended') {\n const nestedPath = stepResult?.suspendPayload?.__workflow_meta?.path;\n return nestedPath ? [[stepId, ...nestedPath]] : [[stepId]];\n }\n\n return [];\n },\n );\n return {\n ...prev,\n status: 'suspended',\n steps: newSteps,\n suspendPayload: chunk.payload.suspendPayload,\n suspended: suspendedStepIds as any,\n };\n }\n\n if (chunk.type === 'workflow-step-waiting') {\n return {\n ...prev,\n status: 'waiting',\n steps: newSteps,\n };\n }\n\n if (chunk.type === 'workflow-step-result') {\n return {\n ...prev,\n steps: newSteps,\n };\n }\n\n return prev;\n};\n\nexport const toUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: ChunkType;\n conversation: UIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n switch (chunk.type) {\n case 'start': {\n // Create a new assistant message\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [],\n };\n\n return [...result, newMessage];\n }\n\n case 'text-start':\n case 'text-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find or create a text part\n const parts = [...lastMessage.parts];\n let textPartIndex = parts.findIndex(part => part.type === 'text');\n\n if (chunk.type === 'text-start') {\n // Add a new text part if it doesn't exist\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: '',\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n } else {\n // text-delta: append to existing text part or create if missing\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const textPart = parts[textPartIndex];\n if (textPart.type === 'text') {\n parts[textPartIndex] = {\n ...textPart,\n text: textPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'reasoning-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Find or create reasoning part\n const parts = [...lastMessage.parts];\n let reasoningPartIndex = parts.findIndex(part => part.type === 'reasoning');\n\n if (reasoningPartIndex === -1) {\n parts.push({\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const reasoningPart = parts[reasoningPartIndex];\n if (reasoningPart.type === 'reasoning') {\n parts[reasoningPartIndex] = {\n ...reasoningPart,\n text: reasoningPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-call': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to existing message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-result': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n if (chunk.payload.isError) {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-error',\n input: toolPart.input,\n errorText: String(chunk.payload.result),\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n } else {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: toolPart.output,\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-output': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n // Handle workflow-related output chunks\n if (chunk.payload.output?.type?.startsWith('workflow-')) {\n // Get existing workflow state from the output field\n const existingWorkflowState =\n (toolPart.output as WorkflowStreamResult<any, any, any, any>) ||\n ({} as WorkflowStreamResult<any, any, any, any>);\n\n // Use the mapWorkflowStreamChunkToWatchResult pattern for accumulation\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n chunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: updatedWorkflowState as any,\n };\n } else {\n // Handle regular tool output\n const currentOutput = (toolPart.output as any) || [];\n const existingOutput = Array.isArray(currentOutput) ? currentOutput : [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: [...existingOutput, chunk.payload.output] as any,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'source': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Add source part based on sourceType\n if (chunk.payload.sourceType === 'url') {\n parts.push({\n type: 'source-url',\n sourceId: chunk.payload.id,\n url: chunk.payload.url || '',\n title: chunk.payload.title,\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else if (chunk.payload.sourceType === 'document') {\n parts.push({\n type: 'source-document',\n sourceId: chunk.payload.id,\n mediaType: chunk.payload.mimeType || 'application/octet-stream',\n title: chunk.payload.title,\n filename: chunk.payload.filename,\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'file': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Create data URL for file content\n let url: string;\n if (typeof chunk.payload.data === 'string') {\n url = chunk.payload.base64\n ? `data:${chunk.payload.mimeType};base64,${chunk.payload.data}`\n : `data:${chunk.payload.mimeType},${encodeURIComponent(chunk.payload.data)}`;\n } else {\n // For Uint8Array, convert to base64\n const base64 = btoa(String.fromCharCode(...chunk.payload.data));\n url = `data:${chunk.payload.mimeType};base64,${base64}`;\n }\n\n parts.push({\n type: 'file',\n mediaType: chunk.payload.mimeType,\n url,\n providerMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'finish': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Mark streaming parts as done\n const parts = lastMessage.parts.map(part => {\n if (part.type === 'text' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n if (part.type === 'reasoning' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n return part;\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'error': {\n // For error cases, we might want to add an error indicator\n // but since UIMessage doesn't have explicit error parts,\n // we'll just return the conversation as-is\n return result;\n }\n\n // For all other chunk types, return conversation unchanged\n default:\n return result;\n }\n};\n","import { NetworkChunkType } from '@mastra/core/stream';\nimport { MastraUIMessage, mapWorkflowStreamChunkToWatchResult } from './toUIMessage';\n\nexport const toNetworkUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: NetworkChunkType;\n conversation: MastraUIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n // Handle agent/workflow execution start - creates ONE message that will accumulate state\n if (chunk.type === 'agent-execution-start' || chunk.type === 'workflow-execution-start') {\n const primitiveId = chunk.payload?.args?.primitiveId;\n const runId = chunk.payload.runId;\n\n if (!primitiveId || !runId) return result;\n\n // Create new assistant message with a dynamic-tool part\n // Store networkMetadata temporarily in input since output is not available yet\n const newMessage: MastraUIMessage = {\n id: runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: chunk.payload.args,\n output: {\n networkMetadata: {\n selectionReason: chunk.payload?.args?.selectionReason || '',\n from: chunk.type === 'agent-execution-start' ? 'AGENT' : 'WORKFLOW',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // Handle agent execution events (text, tool calls, etc.)\n if (chunk.type.startsWith('agent-execution-event-')) {\n const agentChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Handle different agent event types\n if (agentChunk.type === 'text-delta') {\n // Accumulate text in the input field\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastMessage = messages[messages.length - 1];\n\n const nextMessages =\n lastMessage?.type === 'text'\n ? [\n ...messages.slice(0, -1),\n { type: 'text', content: (lastMessage?.content || '') + agentChunk.payload.text },\n ]\n : [...messages, { type: 'text', content: agentChunk.payload.text }];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: nextMessages,\n },\n };\n } else if (agentChunk.type === 'tool-call') {\n // Add tool call to messages\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages,\n {\n type: 'tool',\n toolCallId: agentChunk.payload.toolCallId,\n toolName: agentChunk.payload.toolName,\n toolInput: agentChunk.payload.args,\n },\n ],\n },\n };\n } else if (agentChunk.type === 'tool-result') {\n // Update the last tool message with result\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastToolIndex = messages.length - 1;\n\n if (lastToolIndex >= 0 && messages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages.slice(0, -1),\n {\n ...messages[lastToolIndex],\n toolOutput: agentChunk.payload.result,\n },\n ],\n },\n };\n }\n } else if (agentChunk.type === 'tool-output') {\n // Handle workflow output in tool-output events\n if (agentChunk.payload?.output?.type?.startsWith('workflow-')) {\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n agentChunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle workflow execution events\n if (chunk.type.startsWith('workflow-execution-event-')) {\n const workflowChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Accumulate workflow state in output field\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, workflowChunk);\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution start\n if (chunk.type === 'tool-execution-start') {\n const { args: argsData } = chunk.payload;\n const lastMessage = result[result.length - 1];\n\n const nestedArgs = argsData.args || {};\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to the current message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution end\n if (chunk.type === 'tool-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: chunk.payload.result,\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle agent/workflow execution end - mark the tool as done\n if (chunk.type === 'agent-execution-end' || chunk.type === 'workflow-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: currentOutput?.result || chunk.payload?.result || '',\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle network execution step finish - this might create a new text message\n if (chunk.type === 'network-execution-event-step-finish') {\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'text',\n text: chunk.payload?.result || '',\n state: 'done',\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // For all other chunk types (like routing-agent-start/end, network-finish), return unchanged\n return result;\n};\n","import {\n ThreadMessageLike,\n MessageStatus,\n CompleteAttachment,\n TextMessagePart,\n ReasoningMessagePart,\n SourceMessagePart,\n FileMessagePart,\n ToolCallMessagePart,\n} from '@assistant-ui/react';\nimport { MastraUIMessage } from './toUIMessage';\n\n/**\n * Extended type for MastraUIMessage that may include additional properties\n * from different sources (generate, toUIMessage, toNetworkUIMessage)\n */\ntype ExtendedMastraUIMessage = MastraUIMessage & {\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n experimental_attachments?: readonly CompleteAttachment[];\n};\n\n/**\n * Converts a Mastra UIMessage (from AI SDK) to a ThreadMessageLike format compatible with @assistant-ui/react.\n *\n * This function handles UIMessages from three sources:\n * - agent.generate: Full output with all message parts\n * - toUIMessage: Streaming chunks accumulated into UIMessages\n * - toNetworkUIMessage: Network execution events accumulated into UIMessages\n *\n * @param message - The MastraUIMessage to convert\n * @returns A ThreadMessageLike compatible with @assistant-ui/react\n */\nexport const toAssistantUIMessage = (message: MastraUIMessage): ThreadMessageLike => {\n const extendedMessage = message as ExtendedMastraUIMessage;\n\n // Convert parts array to content array\n type ContentPart = Exclude<ThreadMessageLike['content'], string> extends readonly (infer T)[] ? T : never;\n\n const content: ThreadMessageLike['content'] = message.parts.map((part): ContentPart => {\n // Handle text parts\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n };\n }\n\n // Handle reasoning parts (extended thinking)\n if (part.type === 'reasoning') {\n return {\n type: 'reasoning',\n text: part.text,\n };\n }\n\n // Handle source-url parts\n if (part.type === 'source-url') {\n return {\n type: 'source',\n sourceType: 'url',\n id: part.sourceId,\n url: part.url,\n title: part.title,\n };\n }\n\n // Handle source-document parts (not directly supported by ThreadMessageLike)\n // Convert to file part for compatibility\n if (part.type === 'source-document') {\n return {\n type: 'file',\n filename: part.filename,\n mimeType: part.mediaType,\n data: '', // Source documents don't have inline data\n };\n }\n\n // Handle file parts\n if (part.type === 'file') {\n return {\n type: 'file',\n mimeType: part.mediaType,\n data: part.url, // Use URL as data source\n };\n }\n\n // Handle dynamic-tool parts (tool calls)\n if (part.type === 'dynamic-tool') {\n // Build the tool call matching the inline type from ThreadMessageLike\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.input),\n };\n\n // Only add result and isError if the tool has completed\n if (part.state === 'output-available' && 'output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if (part.state === 'output-error' && 'errorText' in part) {\n return { ...baseToolCall, result: part.errorText, isError: true };\n }\n\n return baseToolCall;\n }\n\n // Handle typed tool parts (tool-{NAME} pattern from AI SDK)\n if (part.type.startsWith('tool-')) {\n const toolName = 'toolName' in part && typeof part.toolName === 'string' ? part.toolName : part.type.substring(5);\n\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: 'toolCallId' in part && typeof part.toolCallId === 'string' ? part.toolCallId : '',\n toolName,\n argsText: 'input' in part ? JSON.stringify(part.input) : '{}',\n };\n\n // Add result if available\n if ('output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if ('error' in part) {\n return { ...baseToolCall, result: part.error, isError: true };\n }\n\n return baseToolCall;\n }\n\n // For any other part types, return a minimal text part\n // This ensures forward compatibility with new part types\n return {\n type: 'text',\n text: '',\n };\n });\n\n // Determine status for assistant messages\n let status: MessageStatus | undefined;\n if (message.role === 'assistant' && content.length > 0) {\n // Check for streaming parts\n const hasStreamingParts = message.parts.some(\n part =>\n (part.type === 'text' && 'state' in part && part.state === 'streaming') ||\n (part.type === 'reasoning' && 'state' in part && part.state === 'streaming'),\n );\n\n // Check for tool calls (both dynamic-tool and tool-{NAME} patterns)\n const hasToolCalls = message.parts.some(part => part.type === 'dynamic-tool' || part.type.startsWith('tool-'));\n\n const hasInputAvailableTools = message.parts.some(\n part => part.type === 'dynamic-tool' && part.state === 'input-available',\n );\n\n const hasErrorTools = message.parts.some(\n part =>\n (part.type === 'dynamic-tool' && part.state === 'output-error') ||\n (part.type.startsWith('tool-') && 'error' in part),\n );\n\n // Determine message status based on part states\n if (hasStreamingParts) {\n status = { type: 'running' };\n } else if (hasInputAvailableTools && hasToolCalls) {\n status = { type: 'requires-action', reason: 'tool-calls' };\n } else if (hasErrorTools) {\n status = { type: 'incomplete', reason: 'error' };\n } else {\n status = { type: 'complete', reason: 'stop' };\n }\n }\n\n // Build metadata if present\n const metadata = extendedMessage.metadata\n ? {\n custom: extendedMessage.metadata,\n }\n : undefined;\n\n // Build the ThreadMessageLike object\n const threadMessage: ThreadMessageLike = {\n role: message.role,\n content,\n id: message.id,\n createdAt: extendedMessage.createdAt,\n status,\n metadata,\n attachments: extendedMessage.experimental_attachments,\n };\n\n return threadMessage;\n};\n"],"names":["createContext","useContext","MastraClient","jsx","useState","flushSync","lastMessage"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -68,10 +68,9 @@ const useChat = ({ agentId, initializeMessages }) => {
68
68
  providerOptions
69
69
  });
70
70
  setIsRunning(false);
71
- if (response && "uiMessages" in response.response && response.response.uiMessages) {
72
- const formatted = onFinish(response.response.uiMessages);
73
- setMessages((prev) => [...prev, ...formatted]);
74
- }
71
+ const uiMessages = response && "uiMessages" in response.response && response.response.uiMessages ? response.response.uiMessages : [];
72
+ const formatted = onFinish({ messages: uiMessages, tripwireReason: response.tripwireReason });
73
+ setMessages((prev) => [...prev, ...formatted]);
75
74
  };
76
75
  const stream = async ({
77
76
  coreUserMessages,
@@ -184,141 +183,70 @@ const useChat = ({ agentId, initializeMessages }) => {
184
183
  const mapWorkflowStreamChunkToWatchResult = (prev, chunk) => {
185
184
  if (chunk.type === "workflow-start") {
186
185
  return {
187
- ...prev,
188
- runId: chunk.runId,
189
- eventTimestamp: /* @__PURE__ */ new Date(),
190
- payload: {
191
- ...prev?.payload || {},
192
- workflowState: {
193
- ...prev?.payload?.workflowState,
194
- status: "running",
195
- steps: prev?.payload?.workflowState?.steps || {}
196
- }
197
- }
186
+ input: prev?.input,
187
+ status: "running",
188
+ steps: prev?.steps || {}
198
189
  };
199
190
  }
200
- if (chunk.type === "workflow-step-start") {
191
+ if (chunk.type === "workflow-canceled") {
201
192
  return {
202
193
  ...prev,
203
- payload: {
204
- ...prev?.payload,
205
- currentStep: {
206
- ...prev?.payload?.currentStep,
207
- ...chunk.payload
208
- },
209
- workflowState: {
210
- ...prev?.payload?.workflowState,
211
- steps: {
212
- ...prev?.payload?.workflowState?.steps,
213
- [chunk.payload.id]: {
214
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
215
- ...chunk.payload
216
- }
217
- }
218
- }
219
- },
220
- eventTimestamp: /* @__PURE__ */ new Date()
194
+ status: "canceled"
221
195
  };
222
196
  }
223
- if (chunk.type === "workflow-step-suspended") {
224
- const current = prev?.payload?.workflowState?.steps?.[chunk.payload.id] || {};
197
+ if (chunk.type === "workflow-finish") {
198
+ const finalStatus = chunk.payload.workflowStatus;
199
+ const prevSteps = prev?.steps ?? {};
200
+ const lastStep = Object.values(prevSteps).pop();
225
201
  return {
226
202
  ...prev,
227
- payload: {
228
- ...prev?.payload,
229
- currentStep: {
230
- id: chunk.payload.id,
231
- ...prev?.payload?.currentStep,
232
- ...chunk.payload
233
- },
234
- workflowState: {
235
- ...prev?.payload?.workflowState,
236
- status: "suspended",
237
- steps: {
238
- ...prev?.payload?.workflowState?.steps,
239
- [chunk.payload.id]: {
240
- ...current || {},
241
- ...chunk.payload
242
- }
243
- }
244
- }
245
- },
246
- eventTimestamp: /* @__PURE__ */ new Date()
203
+ status: chunk.payload.workflowStatus,
204
+ ...finalStatus === "success" && lastStep?.status === "success" ? { result: lastStep?.output } : finalStatus === "failed" && lastStep?.status === "failed" ? { error: lastStep?.error } : {}
247
205
  };
248
206
  }
249
- if (chunk.type === "workflow-step-waiting") {
207
+ const { stepCallId, stepName, ...newPayload } = chunk.payload ?? {};
208
+ const newSteps = {
209
+ ...prev?.steps,
210
+ [chunk.payload.id]: {
211
+ ...prev?.steps?.[chunk.payload.id],
212
+ ...newPayload
213
+ }
214
+ };
215
+ if (chunk.type === "workflow-step-start") {
250
216
  return {
251
217
  ...prev,
252
- payload: {
253
- ...prev?.payload,
254
- currentStep: {
255
- ...prev?.payload?.currentStep,
256
- ...chunk.payload
257
- },
258
- workflowState: {
259
- ...prev?.payload?.workflowState,
260
- status: "waiting",
261
- steps: {
262
- ...prev?.payload?.workflowState?.steps,
263
- [chunk.payload.id]: {
264
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
265
- ...chunk.payload
266
- }
267
- }
268
- }
269
- },
270
- eventTimestamp: /* @__PURE__ */ new Date()
218
+ steps: newSteps
271
219
  };
272
220
  }
273
- if (chunk.type === "workflow-step-result") {
274
- const next = {
275
- ...prev,
276
- payload: {
277
- ...prev?.payload || {},
278
- currentStep: {
279
- ...prev?.payload?.currentStep,
280
- ...chunk.payload
281
- },
282
- workflowState: {
283
- ...prev?.payload?.workflowState,
284
- steps: {
285
- ...prev?.payload?.workflowState?.steps,
286
- [chunk.payload.id]: {
287
- ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],
288
- ...chunk.payload
289
- }
290
- }
221
+ if (chunk.type === "workflow-step-suspended") {
222
+ const suspendedStepIds = Object.entries(newSteps).flatMap(
223
+ ([stepId, stepResult]) => {
224
+ if (stepResult?.status === "suspended") {
225
+ const nestedPath = stepResult?.suspendPayload?.__workflow_meta?.path;
226
+ return nestedPath ? [[stepId, ...nestedPath]] : [[stepId]];
291
227
  }
292
- },
293
- eventTimestamp: /* @__PURE__ */ new Date()
228
+ return [];
229
+ }
230
+ );
231
+ return {
232
+ ...prev,
233
+ status: "suspended",
234
+ steps: newSteps,
235
+ suspendPayload: chunk.payload.suspendPayload,
236
+ suspended: suspendedStepIds
294
237
  };
295
- return next;
296
238
  }
297
- if (chunk.type === "workflow-canceled") {
239
+ if (chunk.type === "workflow-step-waiting") {
298
240
  return {
299
241
  ...prev,
300
- payload: {
301
- ...prev?.payload,
302
- workflowState: {
303
- ...prev?.payload?.workflowState,
304
- status: "canceled"
305
- }
306
- },
307
- eventTimestamp: /* @__PURE__ */ new Date()
242
+ status: "waiting",
243
+ steps: newSteps
308
244
  };
309
245
  }
310
- if (chunk.type === "workflow-finish") {
246
+ if (chunk.type === "workflow-step-result") {
311
247
  return {
312
248
  ...prev,
313
- payload: {
314
- ...prev?.payload,
315
- currentStep: void 0,
316
- workflowState: {
317
- ...prev?.payload?.workflowState,
318
- status: chunk.payload.workflowStatus
319
- }
320
- },
321
- eventTimestamp: /* @__PURE__ */ new Date()
249
+ steps: newSteps
322
250
  };
323
251
  }
324
252
  return prev;
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/mastra-client-context.tsx","../src/mastra-react-provider.tsx","../src/agent/hooks.ts","../src/lib/ai-sdk/toUIMessage.ts","../src/lib/ai-sdk/toNetworkUIMessage.ts","../src/lib/ai-sdk/toAssistantUIMessage.ts"],"sourcesContent":["import { createContext, useContext, ReactNode } from 'react';\nimport { MastraClient } from '@mastra/client-js';\n\ntype MastraClientContextType = MastraClient;\n\nconst MastraClientContext = createContext<MastraClientContextType>({} as MastraClientContextType);\n\nexport interface MastraClientProviderProps {\n children: ReactNode;\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\nexport const MastraClientProvider = ({ children, baseUrl, headers }: MastraClientProviderProps) => {\n const client = createMastraClient(baseUrl, headers);\n\n return <MastraClientContext.Provider value={client}>{children}</MastraClientContext.Provider>;\n};\n\nexport const useMastraClient = () => useContext(MastraClientContext);\n\nconst createMastraClient = (baseUrl?: string, mastraClientHeaders: Record<string, string> = {}) => {\n return new MastraClient({\n baseUrl: baseUrl || '',\n // only add the header if the baseUrl is not provided i.e it's a local dev environment\n headers: !baseUrl ? { ...mastraClientHeaders, 'x-mastra-dev-playground': 'true' } : mastraClientHeaders,\n });\n};\n","import { MastraClientProvider, MastraClientProviderProps } from '@/mastra-client-context';\ntype MastraReactProviderProps = MastraClientProviderProps;\n\nexport const MastraReactProvider = ({ children, baseUrl, headers }: MastraReactProviderProps) => {\n return (\n <MastraClientProvider baseUrl={baseUrl} headers={headers}>\n {children}\n </MastraClientProvider>\n );\n};\n","import { ModelSettings } from './types';\nimport { useMastraClient } from '@/mastra-client-context';\nimport { UIMessage } from '@ai-sdk/react';\nimport { MastraClient } from '@mastra/client-js';\nimport { CoreUserMessage } from '@mastra/core/llm';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { ChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport { useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nexport interface MastraChatProps<TMessage> {\n agentId: string;\n initializeMessages?: () => TMessage[];\n}\n\ninterface SharedArgs {\n coreUserMessages: CoreUserMessage[];\n runtimeContext?: RuntimeContext;\n threadId?: string;\n modelSettings?: ModelSettings;\n signal?: AbortSignal;\n}\n\nexport type GenerateArgs<TMessage> = SharedArgs & { onFinish: (messages: UIMessage[]) => TMessage[] };\n\nexport type StreamArgs<TMessage> = SharedArgs & {\n onChunk: (chunk: ChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport type NetworkArgs<TMessage> = SharedArgs & {\n onNetworkChunk: (chunk: NetworkChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport const useChat = <TMessage>({ agentId, initializeMessages }: MastraChatProps<TMessage>) => {\n const [messages, setMessages] = useState<TMessage[]>(initializeMessages || []);\n const baseClient = useMastraClient();\n const [isRunning, setIsRunning] = useState(false);\n\n const generate = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n modelSettings,\n signal,\n onFinish,\n }: GenerateArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.generate({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n setIsRunning(false);\n\n if (response && 'uiMessages' in response.response && response.response.uiMessages) {\n const formatted = onFinish(response.response.uiMessages);\n setMessages(prev => [...prev, ...formatted]);\n }\n };\n\n const stream = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onChunk,\n modelSettings,\n signal,\n }: StreamArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.stream({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n if (!response.body) {\n setIsRunning(false);\n throw new Error('[Stream] No response body');\n }\n\n await response.processDataStream({\n onChunk: (chunk: ChunkType) => {\n // Without this, React might batch intermediate chunks which would break the message reconstruction over time\n flushSync(() => {\n setMessages(prev => onChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n const network = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onNetworkChunk,\n modelSettings,\n signal,\n }: NetworkArgs<TMessage>) => {\n const { frequencyPenalty, presencePenalty, maxRetries, maxTokens, temperature, topK, topP, maxSteps } =\n modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.network({\n messages: coreUserMessages,\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n runId: agentId,\n runtimeContext,\n ...(threadId ? { thread: threadId, resourceId: agentId } : {}),\n });\n\n await response.processDataStream({\n onChunk: (chunk: NetworkChunkType) => {\n flushSync(() => {\n setMessages(prev => onNetworkChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n return {\n network,\n stream,\n generate,\n isRunning,\n messages,\n setMessages,\n cancelRun: () => setIsRunning(false),\n };\n};\n","import { ChunkType } from '@mastra/core/stream';\nimport { type UIMessage } from '@ai-sdk/react';\nimport { WorkflowStreamEvent } from '@mastra/core/workflows';\nimport { WorkflowWatchResult } from '@mastra/client-js';\n\nexport type MastraUIMessage = UIMessage<any, any, any>;\n\ntype StreamChunk = {\n type: string;\n payload: any;\n runId: string;\n from: 'AGENT' | 'WORKFLOW';\n};\n\n// Helper function to map workflow stream chunks to watch result format\n// Based on the pattern from packages/playground-ui/src/domains/workflows/utils.ts\n\nexport const mapWorkflowStreamChunkToWatchResult = (\n prev: WorkflowWatchResult,\n chunk: StreamChunk,\n): WorkflowWatchResult => {\n if (chunk.type === 'workflow-start') {\n return {\n ...prev,\n runId: chunk.runId,\n eventTimestamp: new Date(),\n payload: {\n ...(prev?.payload || {}),\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'running',\n steps: prev?.payload?.workflowState?.steps || {},\n },\n },\n };\n }\n\n if (chunk.type === 'workflow-step-start') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-suspended') {\n const current = prev?.payload?.workflowState?.steps?.[chunk.payload.id] || {};\n\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n id: chunk.payload.id,\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'suspended',\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...(current || {}),\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-waiting') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'waiting',\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-step-result') {\n const next = {\n ...prev,\n payload: {\n ...(prev?.payload || {}),\n currentStep: {\n ...prev?.payload?.currentStep,\n ...chunk.payload,\n },\n workflowState: {\n ...prev?.payload?.workflowState,\n steps: {\n ...prev?.payload?.workflowState?.steps,\n [chunk.payload.id]: {\n ...prev?.payload?.workflowState?.steps?.[chunk.payload.id],\n ...chunk.payload,\n },\n },\n },\n },\n eventTimestamp: new Date(),\n };\n\n return next;\n }\n\n if (chunk.type === 'workflow-canceled') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n workflowState: {\n ...prev?.payload?.workflowState,\n status: 'canceled',\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n if (chunk.type === 'workflow-finish') {\n return {\n ...prev,\n payload: {\n ...prev?.payload,\n currentStep: undefined,\n workflowState: {\n ...prev?.payload?.workflowState,\n status: chunk.payload.workflowStatus,\n },\n },\n eventTimestamp: new Date(),\n };\n }\n\n return prev;\n};\n\nexport const toUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: ChunkType;\n conversation: UIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n switch (chunk.type) {\n case 'start': {\n // Create a new assistant message\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [],\n };\n\n return [...result, newMessage];\n }\n\n case 'text-start':\n case 'text-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find or create a text part\n const parts = [...lastMessage.parts];\n let textPartIndex = parts.findIndex(part => part.type === 'text');\n\n if (chunk.type === 'text-start') {\n // Add a new text part if it doesn't exist\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: '',\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n } else {\n // text-delta: append to existing text part or create if missing\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const textPart = parts[textPartIndex];\n if (textPart.type === 'text') {\n parts[textPartIndex] = {\n ...textPart,\n text: textPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'reasoning-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Find or create reasoning part\n const parts = [...lastMessage.parts];\n let reasoningPartIndex = parts.findIndex(part => part.type === 'reasoning');\n\n if (reasoningPartIndex === -1) {\n parts.push({\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const reasoningPart = parts[reasoningPartIndex];\n if (reasoningPart.type === 'reasoning') {\n parts[reasoningPartIndex] = {\n ...reasoningPart,\n text: reasoningPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-call': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to existing message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-result': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n if (chunk.payload.isError) {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-error',\n input: toolPart.input,\n errorText: String(chunk.payload.result),\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n } else {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: toolPart.output,\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-output': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n // Handle workflow-related output chunks\n if (chunk.payload.output?.type?.startsWith('workflow-')) {\n // Get existing workflow state from the output field\n const existingWorkflowState = (toolPart.output as WorkflowWatchResult) || ({} as WorkflowWatchResult);\n\n // Use the mapWorkflowStreamChunkToWatchResult pattern for accumulation\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n chunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: updatedWorkflowState as any,\n };\n } else {\n // Handle regular tool output\n const currentOutput = (toolPart.output as any) || [];\n const existingOutput = Array.isArray(currentOutput) ? currentOutput : [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: [...existingOutput, chunk.payload.output] as any,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'source': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Add source part based on sourceType\n if (chunk.payload.sourceType === 'url') {\n parts.push({\n type: 'source-url',\n sourceId: chunk.payload.id,\n url: chunk.payload.url || '',\n title: chunk.payload.title,\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else if (chunk.payload.sourceType === 'document') {\n parts.push({\n type: 'source-document',\n sourceId: chunk.payload.id,\n mediaType: chunk.payload.mimeType || 'application/octet-stream',\n title: chunk.payload.title,\n filename: chunk.payload.filename,\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'file': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Create data URL for file content\n let url: string;\n if (typeof chunk.payload.data === 'string') {\n url = chunk.payload.base64\n ? `data:${chunk.payload.mimeType};base64,${chunk.payload.data}`\n : `data:${chunk.payload.mimeType},${encodeURIComponent(chunk.payload.data)}`;\n } else {\n // For Uint8Array, convert to base64\n const base64 = btoa(String.fromCharCode(...chunk.payload.data));\n url = `data:${chunk.payload.mimeType};base64,${base64}`;\n }\n\n parts.push({\n type: 'file',\n mediaType: chunk.payload.mimeType,\n url,\n providerMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'finish': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Mark streaming parts as done\n const parts = lastMessage.parts.map(part => {\n if (part.type === 'text' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n if (part.type === 'reasoning' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n return part;\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'error': {\n // For error cases, we might want to add an error indicator\n // but since UIMessage doesn't have explicit error parts,\n // we'll just return the conversation as-is\n return result;\n }\n\n // For all other chunk types, return conversation unchanged\n default:\n return result;\n }\n};\n","import { NetworkChunkType } from '@mastra/core/stream';\nimport { MastraUIMessage, mapWorkflowStreamChunkToWatchResult } from './toUIMessage';\n\nexport const toNetworkUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: NetworkChunkType;\n conversation: MastraUIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n // Handle agent/workflow execution start - creates ONE message that will accumulate state\n if (chunk.type === 'agent-execution-start' || chunk.type === 'workflow-execution-start') {\n const primitiveId = chunk.payload?.args?.primitiveId;\n const runId = chunk.payload.runId;\n\n if (!primitiveId || !runId) return result;\n\n // Create new assistant message with a dynamic-tool part\n // Store networkMetadata temporarily in input since output is not available yet\n const newMessage: MastraUIMessage = {\n id: runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: chunk.payload.args,\n output: {\n networkMetadata: {\n selectionReason: chunk.payload?.args?.selectionReason || '',\n from: chunk.type === 'agent-execution-start' ? 'AGENT' : 'WORKFLOW',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // Handle agent execution events (text, tool calls, etc.)\n if (chunk.type.startsWith('agent-execution-event-')) {\n const agentChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Handle different agent event types\n if (agentChunk.type === 'text-delta') {\n // Accumulate text in the input field\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastMessage = messages[messages.length - 1];\n\n const nextMessages =\n lastMessage?.type === 'text'\n ? [\n ...messages.slice(0, -1),\n { type: 'text', content: (lastMessage?.content || '') + agentChunk.payload.text },\n ]\n : [...messages, { type: 'text', content: agentChunk.payload.text }];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: nextMessages,\n },\n };\n } else if (agentChunk.type === 'tool-call') {\n // Add tool call to messages\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages,\n {\n type: 'tool',\n toolCallId: agentChunk.payload.toolCallId,\n toolName: agentChunk.payload.toolName,\n toolInput: agentChunk.payload.args,\n },\n ],\n },\n };\n } else if (agentChunk.type === 'tool-result') {\n // Update the last tool message with result\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastToolIndex = messages.length - 1;\n\n if (lastToolIndex >= 0 && messages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages.slice(0, -1),\n {\n ...messages[lastToolIndex],\n toolOutput: agentChunk.payload.result,\n },\n ],\n },\n };\n }\n } else if (agentChunk.type === 'tool-output') {\n // Handle workflow output in tool-output events\n if (agentChunk.payload?.output?.type?.startsWith('workflow-')) {\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n agentChunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle workflow execution events\n if (chunk.type.startsWith('workflow-execution-event-')) {\n const workflowChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Accumulate workflow state in output field\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, workflowChunk);\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution start\n if (chunk.type === 'tool-execution-start') {\n const { args: argsData } = chunk.payload;\n const lastMessage = result[result.length - 1];\n\n const nestedArgs = argsData.args || {};\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to the current message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution end\n if (chunk.type === 'tool-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: chunk.payload.result,\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle agent/workflow execution end - mark the tool as done\n if (chunk.type === 'agent-execution-end' || chunk.type === 'workflow-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: currentOutput?.result || chunk.payload?.result || '',\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle network execution step finish - this might create a new text message\n if (chunk.type === 'network-execution-event-step-finish') {\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'text',\n text: chunk.payload?.result || '',\n state: 'done',\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // For all other chunk types (like routing-agent-start/end, network-finish), return unchanged\n return result;\n};\n","import {\n ThreadMessageLike,\n MessageStatus,\n CompleteAttachment,\n TextMessagePart,\n ReasoningMessagePart,\n SourceMessagePart,\n FileMessagePart,\n ToolCallMessagePart,\n} from '@assistant-ui/react';\nimport { MastraUIMessage } from './toUIMessage';\n\n/**\n * Extended type for MastraUIMessage that may include additional properties\n * from different sources (generate, toUIMessage, toNetworkUIMessage)\n */\ntype ExtendedMastraUIMessage = MastraUIMessage & {\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n experimental_attachments?: readonly CompleteAttachment[];\n};\n\n/**\n * Converts a Mastra UIMessage (from AI SDK) to a ThreadMessageLike format compatible with @assistant-ui/react.\n *\n * This function handles UIMessages from three sources:\n * - agent.generate: Full output with all message parts\n * - toUIMessage: Streaming chunks accumulated into UIMessages\n * - toNetworkUIMessage: Network execution events accumulated into UIMessages\n *\n * @param message - The MastraUIMessage to convert\n * @returns A ThreadMessageLike compatible with @assistant-ui/react\n */\nexport const toAssistantUIMessage = (message: MastraUIMessage): ThreadMessageLike => {\n const extendedMessage = message as ExtendedMastraUIMessage;\n\n // Convert parts array to content array\n type ContentPart = Exclude<ThreadMessageLike['content'], string> extends readonly (infer T)[] ? T : never;\n\n const content: ThreadMessageLike['content'] = message.parts.map((part): ContentPart => {\n // Handle text parts\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n };\n }\n\n // Handle reasoning parts (extended thinking)\n if (part.type === 'reasoning') {\n return {\n type: 'reasoning',\n text: part.text,\n };\n }\n\n // Handle source-url parts\n if (part.type === 'source-url') {\n return {\n type: 'source',\n sourceType: 'url',\n id: part.sourceId,\n url: part.url,\n title: part.title,\n };\n }\n\n // Handle source-document parts (not directly supported by ThreadMessageLike)\n // Convert to file part for compatibility\n if (part.type === 'source-document') {\n return {\n type: 'file',\n filename: part.filename,\n mimeType: part.mediaType,\n data: '', // Source documents don't have inline data\n };\n }\n\n // Handle file parts\n if (part.type === 'file') {\n return {\n type: 'file',\n mimeType: part.mediaType,\n data: part.url, // Use URL as data source\n };\n }\n\n // Handle dynamic-tool parts (tool calls)\n if (part.type === 'dynamic-tool') {\n // Build the tool call matching the inline type from ThreadMessageLike\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.input),\n };\n\n // Only add result and isError if the tool has completed\n if (part.state === 'output-available' && 'output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if (part.state === 'output-error' && 'errorText' in part) {\n return { ...baseToolCall, result: part.errorText, isError: true };\n }\n\n return baseToolCall;\n }\n\n // Handle typed tool parts (tool-{NAME} pattern from AI SDK)\n if (part.type.startsWith('tool-')) {\n const toolName = 'toolName' in part && typeof part.toolName === 'string' ? part.toolName : part.type.substring(5);\n\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: 'toolCallId' in part && typeof part.toolCallId === 'string' ? part.toolCallId : '',\n toolName,\n argsText: 'input' in part ? JSON.stringify(part.input) : '{}',\n };\n\n // Add result if available\n if ('output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if ('error' in part) {\n return { ...baseToolCall, result: part.error, isError: true };\n }\n\n return baseToolCall;\n }\n\n // For any other part types, return a minimal text part\n // This ensures forward compatibility with new part types\n return {\n type: 'text',\n text: '',\n };\n });\n\n // Determine status for assistant messages\n let status: MessageStatus | undefined;\n if (message.role === 'assistant' && content.length > 0) {\n // Check for streaming parts\n const hasStreamingParts = message.parts.some(\n part =>\n (part.type === 'text' && 'state' in part && part.state === 'streaming') ||\n (part.type === 'reasoning' && 'state' in part && part.state === 'streaming'),\n );\n\n // Check for tool calls (both dynamic-tool and tool-{NAME} patterns)\n const hasToolCalls = message.parts.some(part => part.type === 'dynamic-tool' || part.type.startsWith('tool-'));\n\n const hasInputAvailableTools = message.parts.some(\n part => part.type === 'dynamic-tool' && part.state === 'input-available',\n );\n\n const hasErrorTools = message.parts.some(\n part =>\n (part.type === 'dynamic-tool' && part.state === 'output-error') ||\n (part.type.startsWith('tool-') && 'error' in part),\n );\n\n // Determine message status based on part states\n if (hasStreamingParts) {\n status = { type: 'running' };\n } else if (hasInputAvailableTools && hasToolCalls) {\n status = { type: 'requires-action', reason: 'tool-calls' };\n } else if (hasErrorTools) {\n status = { type: 'incomplete', reason: 'error' };\n } else {\n status = { type: 'complete', reason: 'stop' };\n }\n }\n\n // Build metadata if present\n const metadata = extendedMessage.metadata\n ? {\n custom: extendedMessage.metadata,\n }\n : undefined;\n\n // Build the ThreadMessageLike object\n const threadMessage: ThreadMessageLike = {\n role: message.role,\n content,\n id: message.id,\n createdAt: extendedMessage.createdAt,\n status,\n metadata,\n attachments: extendedMessage.experimental_attachments,\n };\n\n return threadMessage;\n};\n"],"names":["lastMessage"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/mastra-client-context.tsx","../src/mastra-react-provider.tsx","../src/agent/hooks.ts","../src/lib/ai-sdk/toUIMessage.ts","../src/lib/ai-sdk/toNetworkUIMessage.ts","../src/lib/ai-sdk/toAssistantUIMessage.ts"],"sourcesContent":["import { createContext, useContext, ReactNode } from 'react';\nimport { MastraClient } from '@mastra/client-js';\n\ntype MastraClientContextType = MastraClient;\n\nconst MastraClientContext = createContext<MastraClientContextType>({} as MastraClientContextType);\n\nexport interface MastraClientProviderProps {\n children: ReactNode;\n baseUrl?: string;\n headers?: Record<string, string>;\n}\n\nexport const MastraClientProvider = ({ children, baseUrl, headers }: MastraClientProviderProps) => {\n const client = createMastraClient(baseUrl, headers);\n\n return <MastraClientContext.Provider value={client}>{children}</MastraClientContext.Provider>;\n};\n\nexport const useMastraClient = () => useContext(MastraClientContext);\n\nconst createMastraClient = (baseUrl?: string, mastraClientHeaders: Record<string, string> = {}) => {\n return new MastraClient({\n baseUrl: baseUrl || '',\n // only add the header if the baseUrl is not provided i.e it's a local dev environment\n headers: !baseUrl ? { ...mastraClientHeaders, 'x-mastra-dev-playground': 'true' } : mastraClientHeaders,\n });\n};\n","import { MastraClientProvider, MastraClientProviderProps } from '@/mastra-client-context';\ntype MastraReactProviderProps = MastraClientProviderProps;\n\nexport const MastraReactProvider = ({ children, baseUrl, headers }: MastraReactProviderProps) => {\n return (\n <MastraClientProvider baseUrl={baseUrl} headers={headers}>\n {children}\n </MastraClientProvider>\n );\n};\n","import { ModelSettings } from './types';\nimport { useMastraClient } from '@/mastra-client-context';\nimport { UIMessage } from '@ai-sdk/react';\nimport { MastraClient } from '@mastra/client-js';\nimport { CoreUserMessage } from '@mastra/core/llm';\nimport { RuntimeContext } from '@mastra/core/runtime-context';\nimport { ChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport { useState } from 'react';\nimport { flushSync } from 'react-dom';\n\nexport interface MastraChatProps<TMessage> {\n agentId: string;\n initializeMessages?: () => TMessage[];\n}\n\ninterface SharedArgs {\n coreUserMessages: CoreUserMessage[];\n runtimeContext?: RuntimeContext;\n threadId?: string;\n modelSettings?: ModelSettings;\n signal?: AbortSignal;\n}\n\nexport type GenerateArgs<TMessage> = SharedArgs & {\n onFinish: ({ messages, tripwireReason }: { messages: UIMessage[]; tripwireReason: string }) => TMessage[];\n};\n\nexport type StreamArgs<TMessage> = SharedArgs & {\n onChunk: (chunk: ChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport type NetworkArgs<TMessage> = SharedArgs & {\n onNetworkChunk: (chunk: NetworkChunkType, conversation: TMessage[]) => TMessage[];\n};\n\nexport const useChat = <TMessage>({ agentId, initializeMessages }: MastraChatProps<TMessage>) => {\n const [messages, setMessages] = useState<TMessage[]>(initializeMessages || []);\n const baseClient = useMastraClient();\n const [isRunning, setIsRunning] = useState(false);\n\n const generate = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n modelSettings,\n signal,\n onFinish,\n }: GenerateArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.generate({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n setIsRunning(false);\n\n const uiMessages =\n response && 'uiMessages' in response.response && response.response.uiMessages ? response.response.uiMessages : [];\n\n const formatted = onFinish({ messages: uiMessages, tripwireReason: response.tripwireReason });\n setMessages(prev => [...prev, ...formatted]);\n };\n\n const stream = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onChunk,\n modelSettings,\n signal,\n }: StreamArgs<TMessage>) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n } = modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.stream({\n messages: coreUserMessages,\n runId: agentId,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n runtimeContext,\n ...(threadId ? { threadId, resourceId: agentId } : {}),\n providerOptions: providerOptions as any,\n });\n\n if (!response.body) {\n setIsRunning(false);\n throw new Error('[Stream] No response body');\n }\n\n await response.processDataStream({\n onChunk: (chunk: ChunkType) => {\n // Without this, React might batch intermediate chunks which would break the message reconstruction over time\n flushSync(() => {\n setMessages(prev => onChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n const network = async ({\n coreUserMessages,\n runtimeContext,\n threadId,\n onNetworkChunk,\n modelSettings,\n signal,\n }: NetworkArgs<TMessage>) => {\n const { frequencyPenalty, presencePenalty, maxRetries, maxTokens, temperature, topK, topP, maxSteps } =\n modelSettings || {};\n\n setIsRunning(true);\n\n // Create a new client instance with the abort signal\n // We can't use useMastraClient hook here, so we'll create the client directly\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const response = await agent.network({\n messages: coreUserMessages,\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n runId: agentId,\n runtimeContext,\n ...(threadId ? { thread: threadId, resourceId: agentId } : {}),\n });\n\n await response.processDataStream({\n onChunk: (chunk: NetworkChunkType) => {\n flushSync(() => {\n setMessages(prev => onNetworkChunk(chunk, prev));\n });\n\n return Promise.resolve();\n },\n });\n\n setIsRunning(false);\n };\n\n return {\n network,\n stream,\n generate,\n isRunning,\n messages,\n setMessages,\n cancelRun: () => setIsRunning(false),\n };\n};\n","import { ChunkType } from '@mastra/core/stream';\nimport { type UIMessage } from '@ai-sdk/react';\nimport { WorkflowStreamResult, WorkflowStreamEvent, StepResult } from '@mastra/core/workflows';\nimport { WorkflowWatchResult } from '@mastra/client-js';\n\nexport type MastraUIMessage = UIMessage<any, any, any>;\n\ntype StreamChunk = {\n type: string;\n payload: any;\n runId: string;\n from: 'AGENT' | 'WORKFLOW';\n};\n\n// Helper function to map workflow stream chunks to watch result format\n// Based on the pattern from packages/playground-ui/src/domains/workflows/utils.ts\n\nexport const mapWorkflowStreamChunkToWatchResult = (\n prev: WorkflowStreamResult<any, any, any, any>,\n chunk: StreamChunk,\n): WorkflowStreamResult<any, any, any, any> => {\n if (chunk.type === 'workflow-start') {\n return {\n input: prev?.input,\n status: 'running',\n steps: prev?.steps || {},\n };\n }\n\n if (chunk.type === 'workflow-canceled') {\n return {\n ...prev,\n status: 'canceled',\n };\n }\n\n if (chunk.type === 'workflow-finish') {\n const finalStatus = chunk.payload.workflowStatus;\n const prevSteps = prev?.steps ?? {};\n const lastStep = Object.values(prevSteps).pop();\n return {\n ...prev,\n status: chunk.payload.workflowStatus,\n ...(finalStatus === 'success' && lastStep?.status === 'success'\n ? { result: lastStep?.output }\n : finalStatus === 'failed' && lastStep?.status === 'failed'\n ? { error: lastStep?.error }\n : {}),\n };\n }\n\n const { stepCallId, stepName, ...newPayload } = chunk.payload ?? {};\n\n const newSteps = {\n ...prev?.steps,\n [chunk.payload.id]: {\n ...prev?.steps?.[chunk.payload.id],\n ...newPayload,\n },\n };\n\n if (chunk.type === 'workflow-step-start') {\n return {\n ...prev,\n steps: newSteps,\n };\n }\n\n if (chunk.type === 'workflow-step-suspended') {\n const suspendedStepIds = Object.entries(newSteps as Record<string, StepResult<any, any, any, any>>).flatMap(\n ([stepId, stepResult]) => {\n if (stepResult?.status === 'suspended') {\n const nestedPath = stepResult?.suspendPayload?.__workflow_meta?.path;\n return nestedPath ? [[stepId, ...nestedPath]] : [[stepId]];\n }\n\n return [];\n },\n );\n return {\n ...prev,\n status: 'suspended',\n steps: newSteps,\n suspendPayload: chunk.payload.suspendPayload,\n suspended: suspendedStepIds as any,\n };\n }\n\n if (chunk.type === 'workflow-step-waiting') {\n return {\n ...prev,\n status: 'waiting',\n steps: newSteps,\n };\n }\n\n if (chunk.type === 'workflow-step-result') {\n return {\n ...prev,\n steps: newSteps,\n };\n }\n\n return prev;\n};\n\nexport const toUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: ChunkType;\n conversation: UIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n switch (chunk.type) {\n case 'start': {\n // Create a new assistant message\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [],\n };\n\n return [...result, newMessage];\n }\n\n case 'text-start':\n case 'text-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find or create a text part\n const parts = [...lastMessage.parts];\n let textPartIndex = parts.findIndex(part => part.type === 'text');\n\n if (chunk.type === 'text-start') {\n // Add a new text part if it doesn't exist\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: '',\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n } else {\n // text-delta: append to existing text part or create if missing\n if (textPartIndex === -1) {\n parts.push({\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const textPart = parts[textPartIndex];\n if (textPart.type === 'text') {\n parts[textPartIndex] = {\n ...textPart,\n text: textPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'reasoning-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Find or create reasoning part\n const parts = [...lastMessage.parts];\n let reasoningPartIndex = parts.findIndex(part => part.type === 'reasoning');\n\n if (reasoningPartIndex === -1) {\n parts.push({\n type: 'reasoning',\n text: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else {\n const reasoningPart = parts[reasoningPartIndex];\n if (reasoningPart.type === 'reasoning') {\n parts[reasoningPartIndex] = {\n ...reasoningPart,\n text: reasoningPart.text + chunk.payload.text,\n state: 'streaming',\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-call': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to existing message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n state: 'input-available',\n input: chunk.payload.args,\n callProviderMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-result': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n if (chunk.payload.isError) {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-error',\n input: toolPart.input,\n errorText: String(chunk.payload.result),\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n } else {\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: toolPart.output,\n callProviderMetadata: chunk.payload.providerMetadata,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'tool-output': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Find and update the corresponding tool call\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n // Handle workflow-related output chunks\n if (chunk.payload.output?.type?.startsWith('workflow-')) {\n // Get existing workflow state from the output field\n const existingWorkflowState =\n (toolPart.output as WorkflowStreamResult<any, any, any, any>) ||\n ({} as WorkflowStreamResult<any, any, any, any>);\n\n // Use the mapWorkflowStreamChunkToWatchResult pattern for accumulation\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n chunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: updatedWorkflowState as any,\n };\n } else {\n // Handle regular tool output\n const currentOutput = (toolPart.output as any) || [];\n const existingOutput = Array.isArray(currentOutput) ? currentOutput : [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: [...existingOutput, chunk.payload.output] as any,\n };\n }\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'source': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Add source part based on sourceType\n if (chunk.payload.sourceType === 'url') {\n parts.push({\n type: 'source-url',\n sourceId: chunk.payload.id,\n url: chunk.payload.url || '',\n title: chunk.payload.title,\n providerMetadata: chunk.payload.providerMetadata,\n });\n } else if (chunk.payload.sourceType === 'document') {\n parts.push({\n type: 'source-document',\n sourceId: chunk.payload.id,\n mediaType: chunk.payload.mimeType || 'application/octet-stream',\n title: chunk.payload.title,\n filename: chunk.payload.filename,\n providerMetadata: chunk.payload.providerMetadata,\n });\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'file': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n\n // Create data URL for file content\n let url: string;\n if (typeof chunk.payload.data === 'string') {\n url = chunk.payload.base64\n ? `data:${chunk.payload.mimeType};base64,${chunk.payload.data}`\n : `data:${chunk.payload.mimeType},${encodeURIComponent(chunk.payload.data)}`;\n } else {\n // For Uint8Array, convert to base64\n const base64 = btoa(String.fromCharCode(...chunk.payload.data));\n url = `data:${chunk.payload.mimeType};base64,${base64}`;\n }\n\n parts.push({\n type: 'file',\n mediaType: chunk.payload.mimeType,\n url,\n providerMetadata: chunk.payload.providerMetadata,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'finish': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n // Mark streaming parts as done\n const parts = lastMessage.parts.map(part => {\n if (part.type === 'text' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n if (part.type === 'reasoning' && part.state === 'streaming') {\n return { ...part, state: 'done' as const };\n }\n return part;\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n case 'error': {\n // For error cases, we might want to add an error indicator\n // but since UIMessage doesn't have explicit error parts,\n // we'll just return the conversation as-is\n return result;\n }\n\n // For all other chunk types, return conversation unchanged\n default:\n return result;\n }\n};\n","import { NetworkChunkType } from '@mastra/core/stream';\nimport { MastraUIMessage, mapWorkflowStreamChunkToWatchResult } from './toUIMessage';\n\nexport const toNetworkUIMessage = ({\n chunk,\n conversation,\n}: {\n chunk: NetworkChunkType;\n conversation: MastraUIMessage[];\n}): MastraUIMessage[] => {\n // Always return a new array reference for React\n const result = [...conversation];\n\n // Handle agent/workflow execution start - creates ONE message that will accumulate state\n if (chunk.type === 'agent-execution-start' || chunk.type === 'workflow-execution-start') {\n const primitiveId = chunk.payload?.args?.primitiveId;\n const runId = chunk.payload.runId;\n\n if (!primitiveId || !runId) return result;\n\n // Create new assistant message with a dynamic-tool part\n // Store networkMetadata temporarily in input since output is not available yet\n const newMessage: MastraUIMessage = {\n id: runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: chunk.payload.args,\n output: {\n networkMetadata: {\n selectionReason: chunk.payload?.args?.selectionReason || '',\n from: chunk.type === 'agent-execution-start' ? 'AGENT' : 'WORKFLOW',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // Handle agent execution events (text, tool calls, etc.)\n if (chunk.type.startsWith('agent-execution-event-')) {\n const agentChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Handle different agent event types\n if (agentChunk.type === 'text-delta') {\n // Accumulate text in the input field\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastMessage = messages[messages.length - 1];\n\n const nextMessages =\n lastMessage?.type === 'text'\n ? [\n ...messages.slice(0, -1),\n { type: 'text', content: (lastMessage?.content || '') + agentChunk.payload.text },\n ]\n : [...messages, { type: 'text', content: agentChunk.payload.text }];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: nextMessages,\n },\n };\n } else if (agentChunk.type === 'tool-call') {\n // Add tool call to messages\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages,\n {\n type: 'tool',\n toolCallId: agentChunk.payload.toolCallId,\n toolName: agentChunk.payload.toolName,\n toolInput: agentChunk.payload.args,\n },\n ],\n },\n };\n } else if (agentChunk.type === 'tool-result') {\n // Update the last tool message with result\n const currentInput = toolPart.input as any;\n const messages = currentInput?.messages || [];\n const lastToolIndex = messages.length - 1;\n\n if (lastToolIndex >= 0 && messages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n input: {\n ...currentInput,\n messages: [\n ...messages.slice(0, -1),\n {\n ...messages[lastToolIndex],\n toolOutput: agentChunk.payload.result,\n },\n ],\n },\n };\n }\n } else if (agentChunk.type === 'tool-output') {\n // Handle workflow output in tool-output events\n if (agentChunk.payload?.output?.type?.startsWith('workflow-')) {\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n existingWorkflowState,\n agentChunk.payload.output,\n );\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle workflow execution events\n if (chunk.type.startsWith('workflow-execution-event-')) {\n const workflowChunk = chunk.payload as any;\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex === -1) return result;\n\n const toolPart = parts[toolPartIndex];\n if (toolPart.type !== 'dynamic-tool') return result;\n\n // Accumulate workflow state in output field\n const currentOutput = (toolPart.output as any) || {};\n const existingWorkflowState = currentOutput.result || {};\n\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, workflowChunk);\n\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n networkMetadata: currentOutput.networkMetadata,\n result: updatedWorkflowState,\n } as any,\n };\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution start\n if (chunk.type === 'tool-execution-start') {\n const { args: argsData } = chunk.payload;\n const lastMessage = result[result.length - 1];\n\n const nestedArgs = argsData.args || {};\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n // Create new message if none exists\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n },\n ],\n };\n return [...result, newMessage];\n }\n\n // Add tool call to the current message\n const parts = [...lastMessage.parts];\n parts.push({\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n output: {\n networkMetadata: {\n selectionReason: argsData.selectionReason || '',\n },\n result: undefined,\n } as any,\n });\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle tool execution end\n if (chunk.type === 'tool-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(\n part => part.type === 'dynamic-tool' && 'toolCallId' in part && part.toolCallId === chunk.payload.toolCallId,\n );\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: chunk.payload.result,\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle agent/workflow execution end - mark the tool as done\n if (chunk.type === 'agent-execution-end' || chunk.type === 'workflow-execution-end') {\n const lastMessage = result[result.length - 1];\n\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.parts];\n const toolPartIndex = parts.findIndex(part => part.type === 'dynamic-tool');\n\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex];\n if (toolPart.type === 'dynamic-tool') {\n const currentOutput = toolPart.output as any;\n parts[toolPartIndex] = {\n type: 'dynamic-tool',\n toolName: toolPart.toolName,\n toolCallId: toolPart.toolCallId,\n state: 'output-available',\n input: toolPart.input,\n output: {\n networkMetadata: currentOutput?.networkMetadata,\n result: currentOutput?.result || chunk.payload?.result || '',\n },\n };\n }\n }\n\n return [\n ...result.slice(0, -1),\n {\n ...lastMessage,\n parts,\n },\n ];\n }\n\n // Handle network execution step finish - this might create a new text message\n if (chunk.type === 'network-execution-event-step-finish') {\n const newMessage: MastraUIMessage = {\n id: chunk.runId,\n role: 'assistant',\n parts: [\n {\n type: 'text',\n text: chunk.payload?.result || '',\n state: 'done',\n },\n ],\n };\n\n return [...result, newMessage];\n }\n\n // For all other chunk types (like routing-agent-start/end, network-finish), return unchanged\n return result;\n};\n","import {\n ThreadMessageLike,\n MessageStatus,\n CompleteAttachment,\n TextMessagePart,\n ReasoningMessagePart,\n SourceMessagePart,\n FileMessagePart,\n ToolCallMessagePart,\n} from '@assistant-ui/react';\nimport { MastraUIMessage } from './toUIMessage';\n\n/**\n * Extended type for MastraUIMessage that may include additional properties\n * from different sources (generate, toUIMessage, toNetworkUIMessage)\n */\ntype ExtendedMastraUIMessage = MastraUIMessage & {\n createdAt?: Date;\n metadata?: Record<string, unknown>;\n experimental_attachments?: readonly CompleteAttachment[];\n};\n\n/**\n * Converts a Mastra UIMessage (from AI SDK) to a ThreadMessageLike format compatible with @assistant-ui/react.\n *\n * This function handles UIMessages from three sources:\n * - agent.generate: Full output with all message parts\n * - toUIMessage: Streaming chunks accumulated into UIMessages\n * - toNetworkUIMessage: Network execution events accumulated into UIMessages\n *\n * @param message - The MastraUIMessage to convert\n * @returns A ThreadMessageLike compatible with @assistant-ui/react\n */\nexport const toAssistantUIMessage = (message: MastraUIMessage): ThreadMessageLike => {\n const extendedMessage = message as ExtendedMastraUIMessage;\n\n // Convert parts array to content array\n type ContentPart = Exclude<ThreadMessageLike['content'], string> extends readonly (infer T)[] ? T : never;\n\n const content: ThreadMessageLike['content'] = message.parts.map((part): ContentPart => {\n // Handle text parts\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n };\n }\n\n // Handle reasoning parts (extended thinking)\n if (part.type === 'reasoning') {\n return {\n type: 'reasoning',\n text: part.text,\n };\n }\n\n // Handle source-url parts\n if (part.type === 'source-url') {\n return {\n type: 'source',\n sourceType: 'url',\n id: part.sourceId,\n url: part.url,\n title: part.title,\n };\n }\n\n // Handle source-document parts (not directly supported by ThreadMessageLike)\n // Convert to file part for compatibility\n if (part.type === 'source-document') {\n return {\n type: 'file',\n filename: part.filename,\n mimeType: part.mediaType,\n data: '', // Source documents don't have inline data\n };\n }\n\n // Handle file parts\n if (part.type === 'file') {\n return {\n type: 'file',\n mimeType: part.mediaType,\n data: part.url, // Use URL as data source\n };\n }\n\n // Handle dynamic-tool parts (tool calls)\n if (part.type === 'dynamic-tool') {\n // Build the tool call matching the inline type from ThreadMessageLike\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.input),\n };\n\n // Only add result and isError if the tool has completed\n if (part.state === 'output-available' && 'output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if (part.state === 'output-error' && 'errorText' in part) {\n return { ...baseToolCall, result: part.errorText, isError: true };\n }\n\n return baseToolCall;\n }\n\n // Handle typed tool parts (tool-{NAME} pattern from AI SDK)\n if (part.type.startsWith('tool-')) {\n const toolName = 'toolName' in part && typeof part.toolName === 'string' ? part.toolName : part.type.substring(5);\n\n const baseToolCall = {\n type: 'tool-call' as const,\n toolCallId: 'toolCallId' in part && typeof part.toolCallId === 'string' ? part.toolCallId : '',\n toolName,\n argsText: 'input' in part ? JSON.stringify(part.input) : '{}',\n };\n\n // Add result if available\n if ('output' in part) {\n return { ...baseToolCall, result: part.output };\n } else if ('error' in part) {\n return { ...baseToolCall, result: part.error, isError: true };\n }\n\n return baseToolCall;\n }\n\n // For any other part types, return a minimal text part\n // This ensures forward compatibility with new part types\n return {\n type: 'text',\n text: '',\n };\n });\n\n // Determine status for assistant messages\n let status: MessageStatus | undefined;\n if (message.role === 'assistant' && content.length > 0) {\n // Check for streaming parts\n const hasStreamingParts = message.parts.some(\n part =>\n (part.type === 'text' && 'state' in part && part.state === 'streaming') ||\n (part.type === 'reasoning' && 'state' in part && part.state === 'streaming'),\n );\n\n // Check for tool calls (both dynamic-tool and tool-{NAME} patterns)\n const hasToolCalls = message.parts.some(part => part.type === 'dynamic-tool' || part.type.startsWith('tool-'));\n\n const hasInputAvailableTools = message.parts.some(\n part => part.type === 'dynamic-tool' && part.state === 'input-available',\n );\n\n const hasErrorTools = message.parts.some(\n part =>\n (part.type === 'dynamic-tool' && part.state === 'output-error') ||\n (part.type.startsWith('tool-') && 'error' in part),\n );\n\n // Determine message status based on part states\n if (hasStreamingParts) {\n status = { type: 'running' };\n } else if (hasInputAvailableTools && hasToolCalls) {\n status = { type: 'requires-action', reason: 'tool-calls' };\n } else if (hasErrorTools) {\n status = { type: 'incomplete', reason: 'error' };\n } else {\n status = { type: 'complete', reason: 'stop' };\n }\n }\n\n // Build metadata if present\n const metadata = extendedMessage.metadata\n ? {\n custom: extendedMessage.metadata,\n }\n : undefined;\n\n // Build the ThreadMessageLike object\n const threadMessage: ThreadMessageLike = {\n role: message.role,\n content,\n id: message.id,\n createdAt: extendedMessage.createdAt,\n status,\n metadata,\n attachments: extendedMessage.experimental_attachments,\n };\n\n return threadMessage;\n};\n"],"names":["lastMessage"],"mappings":";;;;;AAKA,MAAM,mBAAA,GAAsB,aAAA,CAAuC,EAA6B,CAAA;AAQzF,MAAM,uBAAuB,CAAC,EAAE,QAAA,EAAU,OAAA,EAAS,SAAQ,KAAiC;AACjG,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,OAAA,EAAS,OAAO,CAAA;AAElD,EAAA,2BAAQ,mBAAA,CAAoB,QAAA,EAApB,EAA6B,KAAA,EAAO,QAAS,QAAA,EAAS,CAAA;AAChE,CAAA;AAEO,MAAM,eAAA,GAAkB,MAAM,UAAA,CAAW,mBAAmB;AAEnE,MAAM,kBAAA,GAAqB,CAAC,OAAA,EAAkB,mBAAA,GAA8C,EAAC,KAAM;AACjG,EAAA,OAAO,IAAI,YAAA,CAAa;AAAA,IACtB,SAAS,OAAA,IAAW,EAAA;AAAA;AAAA,IAEpB,OAAA,EAAS,CAAC,OAAA,GAAU,EAAE,GAAG,mBAAA,EAAqB,yBAAA,EAA2B,QAAO,GAAI;AAAA,GACrF,CAAA;AACH,CAAA;;ACxBO,MAAM,sBAAsB,CAAC,EAAE,QAAA,EAAU,OAAA,EAAS,SAAQ,KAAgC;AAC/F,EAAA,uBACE,GAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAkB,OAAA,EACrC,QAAA,EACH,CAAA;AAEJ;;AC0BO,MAAM,OAAA,GAAU,CAAW,EAAE,OAAA,EAAS,oBAAmB,KAAiC;AAC/F,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,IAAI,QAAA,CAAqB,kBAAA,IAAsB,EAAE,CAAA;AAC7E,EAAA,MAAM,aAAa,eAAA,EAAgB;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,WAAW,OAAO;AAAA,IACtB,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,KAA8B;AAC5B,IAAA,MAAM;AAAA,MACJ,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,GAAI,iBAAiB,EAAC;AACtB,IAAA,YAAA,CAAa,IAAI,CAAA;AAIjB,IAAA,MAAM,eAAA,GAAkB,IAAI,YAAA,CAAa;AAAA,MACvC,GAAG,UAAA,CAAY,OAAA;AAAA,MACf,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,CAAS;AAAA,MACpC,QAAA,EAAU,gBAAA;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,aAAA,EAAe;AAAA,QACb,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA,EAAiB,SAAA;AAAA,QACjB,WAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,GAAI,QAAA,GAAW,EAAE,UAAU,UAAA,EAAY,OAAA,KAAY,EAAC;AAAA,MACpD;AAAA,KACD,CAAA;AAED,IAAA,YAAA,CAAa,KAAK,CAAA;AAElB,IAAA,MAAM,UAAA,GACJ,QAAA,IAAY,YAAA,IAAgB,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA,CAAS,UAAA,GAAa,QAAA,CAAS,QAAA,CAAS,UAAA,GAAa,EAAC;AAElH,IAAA,MAAM,SAAA,GAAY,SAAS,EAAE,QAAA,EAAU,YAAY,cAAA,EAAgB,QAAA,CAAS,gBAAgB,CAAA;AAC5F,IAAA,WAAA,CAAY,UAAQ,CAAC,GAAG,IAAA,EAAM,GAAG,SAAS,CAAC,CAAA;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,SAAS,OAAO;AAAA,IACpB,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,KAA4B;AAC1B,IAAA,MAAM;AAAA,MACJ,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,GAAI,iBAAiB,EAAC;AAEtB,IAAA,YAAA,CAAa,IAAI,CAAA;AAIjB,IAAA,MAAM,eAAA,GAAkB,IAAI,YAAA,CAAa;AAAA,MACvC,GAAG,UAAA,CAAY,OAAA;AAAA,MACf,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,CAAO;AAAA,MAClC,QAAA,EAAU,gBAAA;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,aAAA,EAAe;AAAA,QACb,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA,EAAiB,SAAA;AAAA,QACjB,WAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,GAAI,QAAA,GAAW,EAAE,UAAU,UAAA,EAAY,OAAA,KAAY,EAAC;AAAA,MACpD;AAAA,KACD,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,MAC/B,OAAA,EAAS,CAAC,KAAA,KAAqB;AAE7B,QAAA,SAAA,CAAU,MAAM;AACd,UAAA,WAAA,CAAY,CAAA,IAAA,KAAQ,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,QAC1C,CAAC,CAAA;AAED,QAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,UAAU,OAAO;AAAA,IACrB,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,KAA6B;AAC3B,IAAA,MAAM,EAAE,gBAAA,EAAkB,eAAA,EAAiB,UAAA,EAAY,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS,GAClG,aAAA,IAAiB,EAAC;AAEpB,IAAA,YAAA,CAAa,IAAI,CAAA;AAIjB,IAAA,MAAM,eAAA,GAAkB,IAAI,YAAA,CAAa;AAAA,MACvC,GAAG,UAAA,CAAY,OAAA;AAAA,MACf,WAAA,EAAa;AAAA,KACd,CAAA;AAED,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,QAAA,CAAS,OAAO,CAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ;AAAA,MACnC,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA;AAAA,MACA,aAAA,EAAe;AAAA,QACb,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,UAAA;AAAA,QACA,eAAA,EAAiB,SAAA;AAAA,QACjB,WAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,cAAA;AAAA,MACA,GAAI,WAAW,EAAE,MAAA,EAAQ,UAAU,UAAA,EAAY,OAAA,KAAY;AAAC,KAC7D,CAAA;AAED,IAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,MAC/B,OAAA,EAAS,CAAC,KAAA,KAA4B;AACpC,QAAA,SAAA,CAAU,MAAM;AACd,UAAA,WAAA,CAAY,CAAA,IAAA,KAAQ,cAAA,CAAe,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,QACjD,CAAC,CAAA;AAED,QAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA,EAAW,MAAM,YAAA,CAAa,KAAK;AAAA,GACrC;AACF;;ACjNO,MAAM,mCAAA,GAAsC,CACjD,IAAA,EACA,KAAA,KAC6C;AAC7C,EAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACnC,IAAA,OAAO;AAAA,MACL,OAAO,IAAA,EAAM,KAAA;AAAA,MACb,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO,IAAA,EAAM,KAAA,IAAS;AAAC,KACzB;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,mBAAA,EAAqB;AACtC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpC,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,cAAA;AAClC,IAAA,MAAM,SAAA,GAAY,IAAA,EAAM,KAAA,IAAS,EAAC;AAClC,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,SAAS,EAAE,GAAA,EAAI;AAC9C,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,MAAM,OAAA,CAAQ,cAAA;AAAA,MACtB,GAAI,gBAAgB,SAAA,IAAa,QAAA,EAAU,WAAW,SAAA,GAClD,EAAE,QAAQ,QAAA,EAAU,MAAA,KACpB,WAAA,KAAgB,QAAA,IAAY,UAAU,MAAA,KAAW,QAAA,GAC/C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM,GACzB;AAAC,KACT;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,YAAY,QAAA,EAAU,GAAG,YAAW,GAAI,KAAA,CAAM,WAAW,EAAC;AAElE,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,GAAG,IAAA,EAAM,KAAA;AAAA,IACT,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAE,GAAG;AAAA,MAClB,GAAG,IAAA,EAAM,KAAA,GAAQ,KAAA,CAAM,QAAQ,EAAE,CAAA;AAAA,MACjC,GAAG;AAAA;AACL,GACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,EAAuB;AACxC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,yBAAA,EAA2B;AAC5C,IAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,OAAA,CAAQ,QAA0D,CAAA,CAAE,OAAA;AAAA,MAClG,CAAC,CAAC,MAAA,EAAQ,UAAU,CAAA,KAAM;AACxB,QAAA,IAAI,UAAA,EAAY,WAAW,WAAA,EAAa;AACtC,UAAA,MAAM,UAAA,GAAa,UAAA,EAAY,cAAA,EAAgB,eAAA,EAAiB,IAAA;AAChE,UAAA,OAAO,UAAA,GAAa,CAAC,CAAC,MAAA,EAAQ,GAAG,UAAU,CAAC,CAAA,GAAI,CAAC,CAAC,MAAM,CAAC,CAAA;AAAA,QAC3D;AAEA,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,KACF;AACA,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,cAAA,EAAgB,MAAM,OAAA,CAAQ,cAAA;AAAA,MAC9B,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,uBAAA,EAAyB;AAC1C,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,CAAM,SAAS,sBAAA,EAAwB;AACzC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEO,MAAM,cAAc,CAAC;AAAA,EAC1B,KAAA;AAAA,EACA;AACF,CAAA,KAGyB;AAEvB,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,YAAY,CAAA;AAE/B,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,OAAA,EAAS;AAEZ,MAAA,MAAM,UAAA,GAA8B;AAAA,QAClC,IAAI,KAAA,CAAM,KAAA;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,OAAO;AAAC,OACV;AAEA,MAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,IAC/B;AAAA,IAEA,KAAK,YAAA;AAAA,IACL,KAAK,YAAA,EAAc;AACjB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAG7D,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,MAAA,IAAI,gBAAgB,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,MAAM,CAAA;AAEhE,MAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAE/B,QAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,EAAA;AAAA,YACN,KAAA,EAAO,WAAA;AAAA,YACP,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,WACjC,CAAA;AAAA,QACH;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,UAAA,KAAA,CAAM,IAAA,CAAK;AAAA,YACT,IAAA,EAAM,MAAA;AAAA,YACN,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA;AAAA,YACpB,KAAA,EAAO,WAAA;AAAA,YACP,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,WACjC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,UAAA,IAAI,QAAA,CAAS,SAAS,MAAA,EAAQ;AAC5B,YAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,cACrB,GAAG,QAAA;AAAA,cACH,IAAA,EAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA;AAAA,cACpC,KAAA,EAAO;AAAA,aACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,WAAA,EAAa;AAEpD,QAAA,MAAM,UAAA,GAA8B;AAAA,UAClC,IAAI,KAAA,CAAM,KAAA;AAAA,UACV,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL;AAAA,cACE,IAAA,EAAM,WAAA;AAAA,cACN,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA;AAAA,cACpB,KAAA,EAAO,WAAA;AAAA,cACP,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA;AAClC;AACF,SACF;AACA,QAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC/B;AAGA,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,MAAA,IAAI,qBAAqB,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,WAAW,CAAA;AAE1E,MAAA,IAAI,uBAAuB,EAAA,EAAI;AAC7B,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,WAAA;AAAA,UACN,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA;AAAA,UACpB,KAAA,EAAO,WAAA;AAAA,UACP,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,SACjC,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,MAAM,aAAA,GAAgB,MAAM,kBAAkB,CAAA;AAC9C,QAAA,IAAI,aAAA,CAAc,SAAS,WAAA,EAAa;AACtC,UAAA,KAAA,CAAM,kBAAkB,CAAA,GAAI;AAAA,YAC1B,GAAG,aAAA;AAAA,YACH,IAAA,EAAM,aAAA,CAAc,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAA;AAAA,YACzC,KAAA,EAAO;AAAA,WACT;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,WAAA,EAAa;AAEpD,QAAA,MAAM,UAAA,GAA8B;AAAA,UAClC,IAAI,KAAA,CAAM,KAAA;AAAA,UACV,IAAA,EAAM,WAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL;AAAA,cACE,IAAA,EAAM,cAAA;AAAA,cACN,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,cACxB,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,cAC1B,KAAA,EAAO,iBAAA;AAAA,cACP,KAAA,EAAO,MAAM,OAAA,CAAQ,IAAA;AAAA,cACrB,oBAAA,EAAsB,MAAM,OAAA,CAAQ;AAAA;AACtC;AACF,SACF;AACA,QAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,MAC/B;AAGA,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,cAAA;AAAA,QACN,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,QACxB,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,QAC1B,KAAA,EAAO,iBAAA;AAAA,QACP,KAAA,EAAO,MAAM,OAAA,CAAQ,IAAA;AAAA,QACrB,oBAAA,EAAsB,MAAM,OAAA,CAAQ;AAAA,OACrC,CAAA;AAED,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAG7D,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,MAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA;AAAA,QAC1B,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAA,IAAkB,gBAAgB,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,KAAA,CAAM,OAAA,CAAQ;AAAA,OACpG;AAEA,MAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,QAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,QAAA,IAAI,QAAA,CAAS,SAAS,cAAA,EAAgB;AACpC,UAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,EAAS;AACzB,YAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,cACrB,IAAA,EAAM,cAAA;AAAA,cACN,UAAU,QAAA,CAAS,QAAA;AAAA,cACnB,YAAY,QAAA,CAAS,UAAA;AAAA,cACrB,KAAA,EAAO,cAAA;AAAA,cACP,OAAO,QAAA,CAAS,KAAA;AAAA,cAChB,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,cACtC,oBAAA,EAAsB,MAAM,OAAA,CAAQ;AAAA,aACtC;AAAA,UACF,CAAA,MAAO;AACL,YAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,cACrB,IAAA,EAAM,cAAA;AAAA,cACN,UAAU,QAAA,CAAS,QAAA;AAAA,cACnB,YAAY,QAAA,CAAS,UAAA;AAAA,cACrB,KAAA,EAAO,kBAAA;AAAA,cACP,OAAO,QAAA,CAAS,KAAA;AAAA,cAChB,QAAQ,QAAA,CAAS,MAAA;AAAA,cACjB,oBAAA,EAAsB,MAAM,OAAA,CAAQ;AAAA,aACtC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,aAAA,EAAe;AAClB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAG7D,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,MAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA;AAAA,QAC1B,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAA,IAAkB,gBAAgB,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,KAAA,CAAM,OAAA,CAAQ;AAAA,OACpG;AAEA,MAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,QAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,QAAA,IAAI,QAAA,CAAS,SAAS,cAAA,EAAgB;AAEpC,UAAA,IAAI,MAAM,OAAA,CAAQ,MAAA,EAAQ,IAAA,EAAM,UAAA,CAAW,WAAW,CAAA,EAAG;AAEvD,YAAA,MAAM,qBAAA,GACH,QAAA,CAAS,MAAA,IACT,EAAC;AAGJ,YAAA,MAAM,oBAAA,GAAuB,mCAAA;AAAA,cAC3B,qBAAA;AAAA,cACA,MAAM,OAAA,CAAQ;AAAA,aAChB;AAEA,YAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,cACrB,GAAG,QAAA;AAAA,cACH,MAAA,EAAQ;AAAA,aACV;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,MAAM,aAAA,GAAiB,QAAA,CAAS,MAAA,IAAkB,EAAC;AACnD,YAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,GAAI,gBAAgB,EAAC;AAEvE,YAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,cACrB,GAAG,QAAA;AAAA,cACH,QAAQ,CAAC,GAAG,cAAA,EAAgB,KAAA,CAAM,QAAQ,MAAM;AAAA,aAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AAGnC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe,KAAA,EAAO;AACtC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,YAAA;AAAA,UACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,UACxB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAA,IAAO,EAAA;AAAA,UAC1B,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,UACrB,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,SACjC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,UAAA,KAAe,UAAA,EAAY;AAClD,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,iBAAA;AAAA,UACN,QAAA,EAAU,MAAM,OAAA,CAAQ,EAAA;AAAA,UACxB,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,IAAY,0BAAA;AAAA,UACrC,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,UACrB,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,UACxB,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,SACjC,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AAGnC,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,QAAA,EAAU;AAC1C,QAAA,GAAA,GAAM,KAAA,CAAM,QAAQ,MAAA,GAChB,CAAA,KAAA,EAAQ,MAAM,OAAA,CAAQ,QAAQ,WAAW,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,CAAA,GAC3D,CAAA,KAAA,EAAQ,MAAM,OAAA,CAAQ,QAAQ,IAAI,kBAAA,CAAmB,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AAAA,MAC9E,CAAA,MAAO;AAEL,QAAA,MAAM,MAAA,GAAS,KAAK,MAAA,CAAO,YAAA,CAAa,GAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAC9D,QAAA,GAAA,GAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,WAAW,MAAM,CAAA,CAAA;AAAA,MACvD;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,SAAA,EAAW,MAAM,OAAA,CAAQ,QAAA;AAAA,QACzB,GAAA;AAAA,QACA,gBAAA,EAAkB,MAAM,OAAA,CAAQ;AAAA,OACjC,CAAA;AAED,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC5C,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAG7D,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC1C,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,IAAA,CAAK,UAAU,WAAA,EAAa;AACtD,UAAA,OAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,MAAA,EAAgB;AAAA,QAC3C;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,KAAS,WAAA,IAAe,IAAA,CAAK,UAAU,WAAA,EAAa;AAC3D,UAAA,OAAO,EAAE,GAAG,IAAA,EAAM,KAAA,EAAO,MAAA,EAAgB;AAAA,QAC3C;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAED,MAAA,OAAO;AAAA,QACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB;AAAA,UACE,GAAG,WAAA;AAAA,UACH;AAAA;AACF,OACF;AAAA,IACF;AAAA,IAEA,KAAK,OAAA,EAAS;AAIZ,MAAA,OAAO,MAAA;AAAA,IACT;AAAA;AAAA,IAGA;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;;ACndO,MAAM,qBAAqB,CAAC;AAAA,EACjC,KAAA;AAAA,EACA;AACF,CAAA,KAGyB;AAEvB,EAAA,MAAM,MAAA,GAAS,CAAC,GAAG,YAAY,CAAA;AAG/B,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,uBAAA,IAA2B,KAAA,CAAM,SAAS,0BAAA,EAA4B;AACvF,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,WAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,KAAA;AAE5B,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,KAAA,EAAO,OAAO,MAAA;AAInC,IAAA,MAAM,UAAA,GAA8B;AAAA,MAClC,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL;AAAA,UACE,IAAA,EAAM,cAAA;AAAA,UACN,QAAA,EAAU,WAAA;AAAA,UACV,UAAA,EAAY,KAAA;AAAA,UACZ,KAAA,EAAO,iBAAA;AAAA,UACP,KAAA,EAAO,MAAM,OAAA,CAAQ,IAAA;AAAA,UACrB,MAAA,EAAQ;AAAA,YACN,eAAA,EAAiB;AAAA,cACf,eAAA,EAAiB,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,eAAA,IAAmB,EAAA;AAAA,cACzD,IAAA,EAAM,KAAA,CAAM,IAAA,KAAS,uBAAA,GAA0B,OAAA,GAAU;AAAA,aAC3D;AAAA,YACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAEA,IAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC/B;AAGA,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,wBAAwB,CAAA,EAAG;AACnD,IAAA,MAAM,aAAa,KAAA,CAAM,OAAA;AACzB,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE5C,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,IAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,cAAc,CAAA;AAE1E,IAAA,IAAI,aAAA,KAAkB,IAAI,OAAO,MAAA;AAEjC,IAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,IAAA,IAAI,QAAA,CAAS,IAAA,KAAS,cAAA,EAAgB,OAAO,MAAA;AAG7C,IAAA,IAAI,UAAA,CAAW,SAAS,YAAA,EAAc;AAEpC,MAAA,MAAM,eAAe,QAAA,CAAS,KAAA;AAC9B,MAAA,MAAM,QAAA,GAAW,YAAA,EAAc,QAAA,IAAY,EAAC;AAC5C,MAAA,MAAMA,YAAAA,GAAc,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAEhD,MAAA,MAAM,YAAA,GACJA,YAAAA,EAAa,IAAA,KAAS,MAAA,GAClB;AAAA,QACE,GAAG,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,QACvB,EAAE,MAAM,MAAA,EAAQ,OAAA,EAAA,CAAUA,cAAa,OAAA,IAAW,EAAA,IAAM,UAAA,CAAW,OAAA,CAAQ,IAAA;AAAK,OAClF,GACA,CAAC,GAAG,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,IAAA,EAAM,CAAA;AAEtE,MAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,QACrB,GAAG,QAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,GAAG,YAAA;AAAA,UACH,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,IACF,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,KAAS,WAAA,EAAa;AAE1C,MAAA,MAAM,eAAe,QAAA,CAAS,KAAA;AAC9B,MAAA,MAAM,QAAA,GAAW,YAAA,EAAc,QAAA,IAAY,EAAC;AAE5C,MAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,QACrB,GAAG,QAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,GAAG,YAAA;AAAA,UACH,QAAA,EAAU;AAAA,YACR,GAAG,QAAA;AAAA,YACH;AAAA,cACE,IAAA,EAAM,MAAA;AAAA,cACN,UAAA,EAAY,WAAW,OAAA,CAAQ,UAAA;AAAA,cAC/B,QAAA,EAAU,WAAW,OAAA,CAAQ,QAAA;AAAA,cAC7B,SAAA,EAAW,WAAW,OAAA,CAAQ;AAAA;AAChC;AACF;AACF,OACF;AAAA,IACF,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,KAAS,aAAA,EAAe;AAE5C,MAAA,MAAM,eAAe,QAAA,CAAS,KAAA;AAC9B,MAAA,MAAM,QAAA,GAAW,YAAA,EAAc,QAAA,IAAY,EAAC;AAC5C,MAAA,MAAM,aAAA,GAAgB,SAAS,MAAA,GAAS,CAAA;AAExC,MAAA,IAAI,iBAAiB,CAAA,IAAK,QAAA,CAAS,aAAa,CAAA,EAAG,SAAS,MAAA,EAAQ;AAClE,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,UACrB,GAAG,QAAA;AAAA,UACH,KAAA,EAAO;AAAA,YACL,GAAG,YAAA;AAAA,YACH,QAAA,EAAU;AAAA,cACR,GAAG,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,cACvB;AAAA,gBACE,GAAG,SAAS,aAAa,CAAA;AAAA,gBACzB,UAAA,EAAY,WAAW,OAAA,CAAQ;AAAA;AACjC;AACF;AACF,SACF;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,UAAA,CAAW,IAAA,KAAS,aAAA,EAAe;AAE5C,MAAA,IAAI,WAAW,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,UAAA,CAAW,WAAW,CAAA,EAAG;AAC7D,QAAA,MAAM,aAAA,GAAiB,QAAA,CAAS,MAAA,IAAkB,EAAC;AACnD,QAAA,MAAM,qBAAA,GAAwB,aAAA,CAAc,MAAA,IAAU,EAAC;AAEvD,QAAA,MAAM,oBAAA,GAAuB,mCAAA;AAAA,UAC3B,qBAAA;AAAA,UACA,WAAW,OAAA,CAAQ;AAAA,SACrB;AAEA,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,UACrB,GAAG,QAAA;AAAA,UACH,MAAA,EAAQ;AAAA,YACN,iBAAiB,aAAA,CAAc,eAAA;AAAA,YAC/B,MAAA,EAAQ;AAAA;AACV,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACrB;AAAA,QACE,GAAG,WAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,2BAA2B,CAAA,EAAG;AACtD,IAAA,MAAM,gBAAgB,KAAA,CAAM,OAAA;AAC5B,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE5C,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,IAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,cAAc,CAAA;AAE1E,IAAA,IAAI,aAAA,KAAkB,IAAI,OAAO,MAAA;AAEjC,IAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,IAAA,IAAI,QAAA,CAAS,IAAA,KAAS,cAAA,EAAgB,OAAO,MAAA;AAG7C,IAAA,MAAM,aAAA,GAAiB,QAAA,CAAS,MAAA,IAAkB,EAAC;AACnD,IAAA,MAAM,qBAAA,GAAwB,aAAA,CAAc,MAAA,IAAU,EAAC;AAEvD,IAAA,MAAM,oBAAA,GAAuB,mCAAA,CAAoC,qBAAA,EAAuB,aAAa,CAAA;AAErG,IAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,MACrB,GAAG,QAAA;AAAA,MACH,MAAA,EAAQ;AAAA,QACN,iBAAiB,aAAA,CAAc,eAAA;AAAA,QAC/B,MAAA,EAAQ;AAAA;AACV,KACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACrB;AAAA,QACE,GAAG,WAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,sBAAA,EAAwB;AACzC,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,KAAA,CAAM,OAAA;AACjC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE5C,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,IAAA,IAAQ,EAAC;AAErC,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,WAAA,EAAa;AAEpD,MAAA,MAAM,UAAA,GAA8B;AAAA,QAClC,IAAI,KAAA,CAAM,KAAA;AAAA,QACV,IAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL;AAAA,YACE,IAAA,EAAM,cAAA;AAAA,YACN,QAAA,EAAU,SAAS,QAAA,IAAY,SAAA;AAAA,YAC/B,UAAA,EAAY,SAAS,UAAA,IAAc,SAAA;AAAA,YACnC,KAAA,EAAO,iBAAA;AAAA,YACP,KAAA,EAAO,UAAA;AAAA,YACP,MAAA,EAAQ;AAAA,cACN,eAAA,EAAiB;AAAA,gBACf,eAAA,EAAiB,SAAS,eAAA,IAAmB;AAAA,eAC/C;AAAA,cACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AACA,MAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,IAC/B;AAGA,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,IAAA,EAAM,cAAA;AAAA,MACN,QAAA,EAAU,SAAS,QAAA,IAAY,SAAA;AAAA,MAC/B,UAAA,EAAY,SAAS,UAAA,IAAc,SAAA;AAAA,MACnC,KAAA,EAAO,iBAAA;AAAA,MACP,KAAA,EAAO,UAAA;AAAA,MACP,MAAA,EAAQ;AAAA,QACN,eAAA,EAAiB;AAAA,UACf,eAAA,EAAiB,SAAS,eAAA,IAAmB;AAAA,SAC/C;AAAA,QACA,MAAA,EAAQ;AAAA;AACV,KACD,CAAA;AAED,IAAA,OAAO;AAAA,MACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACrB;AAAA,QACE,GAAG,WAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,oBAAA,EAAsB;AACvC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE5C,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,IAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA;AAAA,MAC1B,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,cAAA,IAAkB,gBAAgB,IAAA,IAAQ,IAAA,CAAK,UAAA,KAAe,KAAA,CAAM,OAAA,CAAQ;AAAA,KACpG;AAEA,IAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,MAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,MAAA,IAAI,QAAA,CAAS,SAAS,cAAA,EAAgB;AACpC,QAAA,MAAM,gBAAgB,QAAA,CAAS,MAAA;AAC/B,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,UACrB,IAAA,EAAM,cAAA;AAAA,UACN,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAA,EAAO,kBAAA;AAAA,UACP,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,MAAA,EAAQ;AAAA,YACN,iBAAiB,aAAA,EAAe,eAAA;AAAA,YAChC,MAAA,EAAQ,MAAM,OAAA,CAAQ;AAAA;AACxB,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACrB;AAAA,QACE,GAAG,WAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,qBAAA,IAAyB,KAAA,CAAM,SAAS,wBAAA,EAA0B;AACnF,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE5C,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,KAAS,aAAa,OAAO,MAAA;AAE7D,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,WAAA,CAAY,KAAK,CAAA;AACnC,IAAA,MAAM,gBAAgB,KAAA,CAAM,SAAA,CAAU,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,cAAc,CAAA;AAE1E,IAAA,IAAI,kBAAkB,EAAA,EAAI;AACxB,MAAA,MAAM,QAAA,GAAW,MAAM,aAAa,CAAA;AACpC,MAAA,IAAI,QAAA,CAAS,SAAS,cAAA,EAAgB;AACpC,QAAA,MAAM,gBAAgB,QAAA,CAAS,MAAA;AAC/B,QAAA,KAAA,CAAM,aAAa,CAAA,GAAI;AAAA,UACrB,IAAA,EAAM,cAAA;AAAA,UACN,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAA,EAAO,kBAAA;AAAA,UACP,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,MAAA,EAAQ;AAAA,YACN,iBAAiB,aAAA,EAAe,eAAA;AAAA,YAChC,MAAA,EAAQ,aAAA,EAAe,MAAA,IAAU,KAAA,CAAM,SAAS,MAAA,IAAU;AAAA;AAC5D,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MACrB;AAAA,QACE,GAAG,WAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,SAAS,qCAAA,EAAuC;AACxD,IAAA,MAAM,UAAA,GAA8B;AAAA,MAClC,IAAI,KAAA,CAAM,KAAA;AAAA,MACV,IAAA,EAAM,WAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,KAAA,CAAM,OAAA,EAAS,MAAA,IAAU,EAAA;AAAA,UAC/B,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAEA,IAAA,OAAO,CAAC,GAAG,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC/B;AAGA,EAAA,OAAO,MAAA;AACT;;ACpTO,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAgD;AACnF,EAAA,MAAM,eAAA,GAAkB,OAAA;AAKxB,EAAA,MAAM,OAAA,GAAwC,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAsB;AAErF,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,IAAA,CAAK;AAAA,OACb;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,WAAA,EAAa;AAC7B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,WAAA;AAAA,QACN,MAAM,IAAA,CAAK;AAAA,OACb;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,EAAc;AAC9B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,UAAA,EAAY,KAAA;AAAA,QACZ,IAAI,IAAA,CAAK,QAAA;AAAA,QACT,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,OAAO,IAAA,CAAK;AAAA,OACd;AAAA,IACF;AAIA,IAAA,IAAI,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACnC,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,UAAU,IAAA,CAAK,SAAA;AAAA,QACf,IAAA,EAAM;AAAA;AAAA,OACR;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,UAAU,IAAA,CAAK,SAAA;AAAA,QACf,MAAM,IAAA,CAAK;AAAA;AAAA,OACb;AAAA,IACF;AAGA,IAAA,IAAI,IAAA,CAAK,SAAS,cAAA,EAAgB;AAEhC,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,IAAA,EAAM,WAAA;AAAA,QACN,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,KAAK;AAAA,OACrC;AAGA,MAAA,IAAI,IAAA,CAAK,KAAA,KAAU,kBAAA,IAAsB,QAAA,IAAY,IAAA,EAAM;AACzD,QAAA,OAAO,EAAE,GAAG,YAAA,EAAc,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,MAChD,CAAA,MAAA,IAAW,IAAA,CAAK,KAAA,KAAU,cAAA,IAAkB,eAAe,IAAA,EAAM;AAC/D,QAAA,OAAO,EAAE,GAAG,YAAA,EAAc,QAAQ,IAAA,CAAK,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,MAClE;AAEA,MAAA,OAAO,YAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AACjC,MAAA,MAAM,QAAA,GAAW,UAAA,IAAc,IAAA,IAAQ,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA;AAEhH,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,IAAA,EAAM,WAAA;AAAA,QACN,UAAA,EAAY,gBAAgB,IAAA,IAAQ,OAAO,KAAK,UAAA,KAAe,QAAA,GAAW,KAAK,UAAA,GAAa,EAAA;AAAA,QAC5F,QAAA;AAAA,QACA,UAAU,OAAA,IAAW,IAAA,GAAO,KAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA,GAAI;AAAA,OAC3D;AAGA,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAO,EAAE,GAAG,YAAA,EAAc,MAAA,EAAQ,KAAK,MAAA,EAAO;AAAA,MAChD,CAAA,MAAA,IAAW,WAAW,IAAA,EAAM;AAC1B,QAAA,OAAO,EAAE,GAAG,YAAA,EAAc,QAAQ,IAAA,CAAK,KAAA,EAAO,SAAS,IAAA,EAAK;AAAA,MAC9D;AAEA,MAAA,OAAO,YAAA;AAAA,IACT;AAIA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACR;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,WAAA,IAAe,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEtD,IAAA,MAAM,iBAAA,GAAoB,QAAQ,KAAA,CAAM,IAAA;AAAA,MACtC,CAAA,IAAA,KACG,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,WAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,KAAU,WAAA,IAC1D,KAAK,IAAA,KAAS,WAAA,IAAe,OAAA,IAAW,IAAA,IAAQ,KAAK,KAAA,KAAU;AAAA,KACpE;AAGA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAO,CAAC,CAAA;AAE7G,IAAA,MAAM,sBAAA,GAAyB,QAAQ,KAAA,CAAM,IAAA;AAAA,MAC3C,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,cAAA,IAAkB,KAAK,KAAA,KAAU;AAAA,KACzD;AAEA,IAAA,MAAM,aAAA,GAAgB,QAAQ,KAAA,CAAM,IAAA;AAAA,MAClC,CAAA,IAAA,KACG,IAAA,CAAK,IAAA,KAAS,cAAA,IAAkB,IAAA,CAAK,KAAA,KAAU,cAAA,IAC/C,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,IAAK,OAAA,IAAW;AAAA,KACjD;AAGA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,MAAA,GAAS,EAAE,MAAM,SAAA,EAAU;AAAA,IAC7B,CAAA,MAAA,IAAW,0BAA0B,YAAA,EAAc;AACjD,MAAA,MAAA,GAAS,EAAE,IAAA,EAAM,iBAAA,EAAmB,MAAA,EAAQ,YAAA,EAAa;AAAA,IAC3D,WAAW,aAAA,EAAe;AACxB,MAAA,MAAA,GAAS,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAQ,OAAA,EAAQ;AAAA,IACjD,CAAA,MAAO;AACL,MAAA,MAAA,GAAS,EAAE,IAAA,EAAM,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAO;AAAA,IAC9C;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,gBAAgB,QAAA,GAC7B;AAAA,IACE,QAAQ,eAAA,CAAgB;AAAA,GAC1B,GACA,MAAA;AAGJ,EAAA,MAAM,aAAA,GAAmC;AAAA,IACvC,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAA;AAAA,IACA,IAAI,OAAA,CAAQ,EAAA;AAAA,IACZ,WAAW,eAAA,CAAgB,SAAA;AAAA,IAC3B,MAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAa,eAAA,CAAgB;AAAA,GAC/B;AAEA,EAAA,OAAO,aAAA;AACT;;;;"}
@@ -15,7 +15,10 @@ interface SharedArgs {
15
15
  signal?: AbortSignal;
16
16
  }
17
17
  export type GenerateArgs<TMessage> = SharedArgs & {
18
- onFinish: (messages: UIMessage[]) => TMessage[];
18
+ onFinish: ({ messages, tripwireReason }: {
19
+ messages: UIMessage[];
20
+ tripwireReason: string;
21
+ }) => TMessage[];
19
22
  };
20
23
  export type StreamArgs<TMessage> = SharedArgs & {
21
24
  onChunk: (chunk: ChunkType, conversation: TMessage[]) => TMessage[];
@@ -1,6 +1,6 @@
1
1
  import { ChunkType } from '@mastra/core/stream';
2
2
  import { UIMessage } from '@ai-sdk/react';
3
- import { WorkflowWatchResult } from '@mastra/client-js';
3
+ import { WorkflowStreamResult } from '@mastra/core/workflows';
4
4
  export type MastraUIMessage = UIMessage<any, any, any>;
5
5
  type StreamChunk = {
6
6
  type: string;
@@ -8,7 +8,7 @@ type StreamChunk = {
8
8
  runId: string;
9
9
  from: 'AGENT' | 'WORKFLOW';
10
10
  };
11
- export declare const mapWorkflowStreamChunkToWatchResult: (prev: WorkflowWatchResult, chunk: StreamChunk) => WorkflowWatchResult;
11
+ export declare const mapWorkflowStreamChunkToWatchResult: (prev: WorkflowStreamResult<any, any, any, any>, chunk: StreamChunk) => WorkflowStreamResult<any, any, any, any>;
12
12
  export declare const toUIMessage: ({ chunk, conversation, }: {
13
13
  chunk: ChunkType;
14
14
  conversation: UIMessage[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/react",
3
- "version": "0.0.4-alpha.0",
3
+ "version": "0.0.4-alpha.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/mastra-ai/mastra.git",
@@ -22,7 +22,7 @@
22
22
  "dependencies": {
23
23
  "react": "^19.1.1",
24
24
  "react-dom": "^19.1.1",
25
- "@mastra/client-js": "0.15.1-alpha.0"
25
+ "@mastra/client-js": "0.15.1-alpha.2"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@ai-sdk/react": "^2.0.57",
@@ -37,7 +37,7 @@
37
37
  "vite": "^7.1.7",
38
38
  "vite-plugin-dts": "^4.5.4",
39
39
  "vitest": "^3.2.4",
40
- "@mastra/core": "0.20.1-alpha.0"
40
+ "@mastra/core": "0.20.1-alpha.2"
41
41
  },
42
42
  "scripts": {
43
43
  "build": "vite build",