@mastra/react 1.0.0-beta.25 → 1.0.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 +2763 -3
- package/LICENSE.md +15 -0
- package/dist/agent/extractRunIdFromMessages.d.ts +10 -0
- package/dist/agent/extractRunIdFromMessages.d.ts.map +1 -0
- package/dist/agent/hooks.d.ts +91 -0
- package/dist/agent/hooks.d.ts.map +1 -0
- package/dist/agent/signal-data.d.ts +2 -0
- package/dist/agent/signal-data.d.ts.map +1 -0
- package/dist/{src/agent → agent}/types.d.ts +6 -1
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/index.cjs +3743 -63
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3676 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/mastra-db/accumulator.d.ts +48 -0
- package/dist/lib/mastra-db/accumulator.d.ts.map +1 -0
- package/dist/lib/mastra-db/formatCompletionFeedback.d.ts +19 -0
- package/dist/lib/mastra-db/formatCompletionFeedback.d.ts.map +1 -0
- package/dist/lib/mastra-db/fromCoreUserMessage.d.ts +14 -0
- package/dist/lib/mastra-db/fromCoreUserMessage.d.ts.map +1 -0
- package/dist/lib/mastra-db/index.d.ts +6 -0
- package/dist/lib/mastra-db/index.d.ts.map +1 -0
- package/dist/lib/mastra-db/types.d.ts +171 -0
- package/dist/lib/mastra-db/types.d.ts.map +1 -0
- package/dist/lib/use-mutation.d.ts +28 -0
- package/dist/lib/use-mutation.d.ts.map +1 -0
- package/dist/mastra-client-context.d.ts +26 -0
- package/dist/mastra-client-context.d.ts.map +1 -0
- package/dist/mastra-react-provider.d.ts +5 -0
- package/dist/mastra-react-provider.d.ts.map +1 -0
- package/dist/react.css +184 -322
- package/dist/{src/ui → ui}/Code/Code.d.ts +2 -1
- package/dist/ui/Code/Code.d.ts.map +1 -0
- package/dist/ui/Code/highlight.d.ts +4 -0
- package/dist/ui/Code/highlight.d.ts.map +1 -0
- package/dist/ui/Code/index.d.ts +2 -0
- package/dist/ui/Code/index.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Entity/Entity.d.ts +2 -1
- package/dist/ui/Entity/Entity.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Entity/Entry.d.ts +2 -1
- package/dist/ui/Entity/Entry.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Entity/ToolApproval.d.ts +1 -0
- package/dist/ui/Entity/ToolApproval.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Entity/context.d.ts +4 -3
- package/dist/ui/Entity/context.d.ts.map +1 -0
- package/dist/ui/Entity/index.d.ts +5 -0
- package/dist/ui/Entity/index.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Entity/types.d.ts +1 -0
- package/dist/ui/Entity/types.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Icon/Icon.d.ts +2 -1
- package/dist/ui/Icon/Icon.d.ts.map +1 -0
- package/dist/ui/Icon/index.d.ts +2 -0
- package/dist/ui/Icon/index.d.ts.map +1 -0
- package/dist/{src/ui → ui}/IconButton/IconButton.d.ts +2 -1
- package/dist/ui/IconButton/IconButton.d.ts.map +1 -0
- package/dist/ui/IconButton/index.d.ts +2 -0
- package/dist/ui/IconButton/index.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Icons/AgentIcon.d.ts +2 -1
- package/dist/ui/Icons/AgentIcon.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Icons/ToolsIcon.d.ts +2 -1
- package/dist/ui/Icons/ToolsIcon.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Icons/WorkflowIcon.d.ts +2 -1
- package/dist/ui/Icons/WorkflowIcon.d.ts.map +1 -0
- package/dist/ui/Icons/index.d.ts +4 -0
- package/dist/ui/Icons/index.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Message/Message.d.ts +2 -1
- package/dist/ui/Message/Message.d.ts.map +1 -0
- package/dist/ui/Message/index.d.ts +2 -0
- package/dist/ui/Message/index.d.ts.map +1 -0
- package/dist/ui/MessageFactory/MessageFactory.d.ts +22 -0
- package/dist/ui/MessageFactory/MessageFactory.d.ts.map +1 -0
- package/dist/ui/MessageFactory/index.d.ts +3 -0
- package/dist/ui/MessageFactory/index.d.ts.map +1 -0
- package/dist/ui/MessageFactory/types.d.ts +181 -0
- package/dist/ui/MessageFactory/types.d.ts.map +1 -0
- package/dist/{src/ui → ui}/Tooltip/Tooltip.d.ts +2 -1
- package/dist/ui/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/ui/Tooltip/index.d.ts +2 -0
- package/dist/ui/Tooltip/index.d.ts.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/voice/index.d.ts +5 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/play-stream-with-web-audio.d.ts +2 -0
- package/dist/voice/play-stream-with-web-audio.d.ts.map +1 -0
- package/dist/voice/record-mic-to-file.d.ts +2 -0
- package/dist/voice/record-mic-to-file.d.ts.map +1 -0
- package/dist/voice/use-speech-recognition.d.ts +20 -0
- package/dist/voice/use-speech-recognition.d.ts.map +1 -0
- package/dist/workflows/WorkflowStepFactory/WorkflowStepFactory.d.ts +8 -0
- package/dist/workflows/WorkflowStepFactory/WorkflowStepFactory.d.ts.map +1 -0
- package/dist/workflows/WorkflowStepFactory/index.d.ts +3 -0
- package/dist/workflows/WorkflowStepFactory/index.d.ts.map +1 -0
- package/dist/workflows/WorkflowStepFactory/types.d.ts +72 -0
- package/dist/workflows/WorkflowStepFactory/types.d.ts.map +1 -0
- package/dist/workflows/hooks.d.ts +34 -0
- package/dist/workflows/hooks.d.ts.map +1 -0
- package/dist/workflows/index.d.ts +4 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/types.d.ts +122 -0
- package/dist/workflows/types.d.ts.map +1 -0
- package/dist/workflows/use-stream-workflow.d.ts +39 -0
- package/dist/workflows/use-stream-workflow.d.ts.map +1 -0
- package/package.json +35 -31
- package/dist/chunk-55VPMN3N-Ax1F4Y75.js +0 -249
- package/dist/chunk-55VPMN3N-Ax1F4Y75.js.map +0 -1
- package/dist/chunk-55VPMN3N-BHqoDkCq.cjs +0 -251
- package/dist/chunk-55VPMN3N-BHqoDkCq.cjs.map +0 -1
- package/dist/index-BaK_Y6TP.cjs +0 -185
- package/dist/index-BaK_Y6TP.cjs.map +0 -1
- package/dist/index-C1OzXW5i.js +0 -180
- package/dist/index-C1OzXW5i.js.map +0 -1
- package/dist/index-ChvWx-iU.cjs +0 -20711
- package/dist/index-ChvWx-iU.cjs.map +0 -1
- package/dist/index-D3JtF_Zl.js +0 -20628
- package/dist/index-D3JtF_Zl.js.map +0 -1
- package/dist/src/agent/hooks.d.ts +0 -65
- package/dist/src/index.d.ts +0 -6
- package/dist/src/lib/ai-sdk/index.d.ts +0 -4
- package/dist/src/lib/ai-sdk/memory/resolveInitialMessages.d.ts +0 -12
- package/dist/src/lib/ai-sdk/memory/resolveInitialMessages.test.d.ts +0 -1
- package/dist/src/lib/ai-sdk/transformers/AISdkNetworkTransformer.d.ts +0 -10
- package/dist/src/lib/ai-sdk/transformers/AISdkNetworkTransformer.test.d.ts +0 -1
- package/dist/src/lib/ai-sdk/transformers/types.d.ts +0 -10
- package/dist/src/lib/ai-sdk/types.d.ts +0 -106
- package/dist/src/lib/ai-sdk/utils/fromCoreUserMessageToUIMessage.d.ts +0 -10
- package/dist/src/lib/ai-sdk/utils/fromCoreUserMessageToUIMessage.test.d.ts +0 -1
- package/dist/src/lib/ai-sdk/utils/toAssistantUIMessage.d.ts +0 -14
- package/dist/src/lib/ai-sdk/utils/toAssistantUIMessage.test.d.ts +0 -1
- package/dist/src/lib/ai-sdk/utils/toUIMessage.d.ts +0 -17
- package/dist/src/lib/ai-sdk/utils/toUIMessage.test.d.ts +0 -1
- package/dist/src/mastra-client-context.d.ts +0 -10
- package/dist/src/mastra-react-provider.d.ts +0 -4
- package/dist/src/ui/Code/highlight.d.ts +0 -3
- package/dist/src/ui/Code/index.d.ts +0 -1
- package/dist/src/ui/Entity/Entity.stories.d.ts +0 -22
- package/dist/src/ui/Entity/index.d.ts +0 -4
- package/dist/src/ui/Icon/index.d.ts +0 -1
- package/dist/src/ui/IconButton/IconButton.stories.d.ts +0 -12
- package/dist/src/ui/IconButton/index.d.ts +0 -1
- package/dist/src/ui/Icons/index.d.ts +0 -3
- package/dist/src/ui/Message/Message.stories.d.ts +0 -13
- package/dist/src/ui/Message/index.d.ts +0 -1
- package/dist/src/ui/Tooltip/Tooltip.stories.d.ts +0 -12
- package/dist/src/ui/Tooltip/index.d.ts +0 -1
- package/dist/src/ui/index.d.ts +0 -7
- package/dist/token-6GSAFR2W-SPYPLMBM-CWoxKwfk.cjs +0 -64
- package/dist/token-6GSAFR2W-SPYPLMBM-CWoxKwfk.cjs.map +0 -1
- package/dist/token-6GSAFR2W-SPYPLMBM-ChURikIE.js +0 -60
- package/dist/token-6GSAFR2W-SPYPLMBM-ChURikIE.js.map +0 -1
- package/dist/token-util-NEHG7TUY-JRJTGTAB-BU9ZxL1w.cjs +0 -11
- package/dist/token-util-NEHG7TUY-JRJTGTAB-BU9ZxL1w.cjs.map +0 -1
- package/dist/token-util-NEHG7TUY-JRJTGTAB-hEay2AHp.js +0 -7
- package/dist/token-util-NEHG7TUY-JRJTGTAB-hEay2AHp.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"sources":["../src/mastra-client-context.tsx","../src/mastra-react-provider.tsx","../src/lib/mastra-db/formatCompletionFeedback.ts","../src/lib/mastra-db/types.ts","../src/lib/mastra-db/accumulator.ts","../src/lib/mastra-db/fromCoreUserMessage.ts","../src/agent/extractRunIdFromMessages.ts","../src/agent/signal-data.ts","../src/agent/hooks.ts","../src/ui/Icon/Icon.tsx","../src/ui/Entity/context.tsx","../src/ui/Entity/Entity.tsx","../src/ui/Entity/ToolApproval.tsx","../src/ui/Entity/Entry.tsx","../src/ui/Tooltip/Tooltip.tsx","../src/ui/IconButton/IconButton.tsx","../src/ui/Code/highlight.ts","../src/ui/Code/Code.tsx","../src/ui/Icons/AgentIcon.tsx","../src/ui/Icons/ToolsIcon.tsx","../src/ui/Icons/WorkflowIcon.tsx","../src/ui/Message/Message.tsx","../src/ui/MessageFactory/MessageFactory.tsx","../src/lib/use-mutation.ts","../src/workflows/use-stream-workflow.ts","../src/workflows/hooks.ts","../src/workflows/WorkflowStepFactory/WorkflowStepFactory.tsx","../src/voice/record-mic-to-file.ts","../src/voice/play-stream-with-web-audio.ts","../src/voice/use-speech-recognition.ts"],"names":["createContext","useContext","MastraClient","jsx","parts","content","isDataChunk","AIV5Adapter","useRef","useState","useEffect","useCallback","threadId","resourceId","uuid","twMerge","ChevronDownIcon","RTooltipProvider","RTooltipRoot","RTooltipPortal","RTooltipContent","RTooltipTrigger","codeToHast","toJsxRuntime","Fragment","jsxs","useLayoutEffect","CheckIcon","CopyIcon","isDynamicToolPart","memo","agent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { MastraClient } from '@mastra/client-js';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\n\nexport type MastraClientContextType = MastraClient;\n\nconst MastraClientContext = createContext<MastraClientContextType>({} as MastraClientContextType);\n\n/** Passed through to `fetch` / `MastraClient`. Default `include` sends cookies on cross-origin Studio → API requests. */\nexport type MastraClientCredentials = 'omit' | 'same-origin' | 'include';\n\nexport interface MastraClientProviderProps {\n children: ReactNode;\n baseUrl?: string;\n headers?: Record<string, string>;\n /** API route prefix. Defaults to '/api'. Set this to match your server's apiPrefix configuration. */\n apiPrefix?: string;\n /**\n * Credentials mode for API requests. Defaults to `include` so session cookies reach a custom server when Studio and API differ by origin/port.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Request/credentials\n */\n credentials?: MastraClientCredentials;\n /**\n * Custom fetch function for HTTP requests. Useful for adding middleware like auth refresh.\n * When provided, this overrides the default fetch behavior.\n */\n customFetch?: typeof fetch;\n}\n\nexport const MastraClientProvider = ({\n children,\n baseUrl,\n headers,\n apiPrefix,\n credentials = 'include',\n customFetch,\n}: MastraClientProviderProps) => {\n const client = createMastraClient(baseUrl, headers, apiPrefix, credentials, customFetch);\n\n return <MastraClientContext.Provider value={client}>{children}</MastraClientContext.Provider>;\n};\n\nexport const useMastraClient = () => useContext(MastraClientContext);\n\nconst IPV4_LOOPBACK_RE = /^127\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/;\n\nconst isIPv4Loopback = (hostname: string): boolean => {\n const m = IPV4_LOOPBACK_RE.exec(hostname);\n if (!m) return false;\n return +m[1]! <= 255 && +m[2]! <= 255 && +m[3]! <= 255;\n};\n\nexport const isLocalUrl = (url?: string): boolean => {\n if (!url) return true;\n try {\n const { hostname } = new URL(url);\n return (\n hostname === 'localhost' ||\n hostname.endsWith('.localhost') ||\n isIPv4Loopback(hostname) ||\n hostname === '::1' ||\n hostname === '[::1]'\n );\n } catch {\n return false;\n }\n};\n\nconst createMastraClient = (\n baseUrl?: string,\n mastraClientHeaders: Record<string, string> = {},\n apiPrefix?: string,\n credentials: MastraClientCredentials = 'include',\n customFetch?: typeof fetch,\n) => {\n return new MastraClient({\n baseUrl: baseUrl || '',\n headers: isLocalUrl(baseUrl) ? { ...mastraClientHeaders, 'x-mastra-dev-playground': 'true' } : mastraClientHeaders,\n apiPrefix,\n credentials,\n fetch: customFetch,\n });\n};\n","import type { MastraClientProviderProps } from './mastra-client-context';\nimport { MastraClientProvider } from './mastra-client-context';\ntype MastraReactProviderProps = MastraClientProviderProps;\n\nexport const MastraReactProvider = ({\n children,\n baseUrl,\n headers,\n apiPrefix,\n credentials,\n customFetch,\n}: MastraReactProviderProps) => {\n return (\n <MastraClientProvider\n baseUrl={baseUrl}\n headers={headers}\n apiPrefix={apiPrefix}\n credentials={credentials}\n customFetch={customFetch}\n >\n {children}\n </MastraClientProvider>\n );\n};\n","type CompletionScorerResult = {\n duration?: number;\n passed: boolean;\n reason?: string;\n score: number;\n scorerId: string;\n scorerName: string;\n};\n\ntype CompletionResult = {\n complete: boolean;\n completionReason?: string;\n scorers: CompletionScorerResult[];\n timedOut: boolean;\n totalDuration: number;\n};\n\n// Browser-safe copy of the core completion-feedback formatter.\n// Keep this local so @mastra/react does not pull @mastra/core/loop into client bundles.\nconst formatBaseCompletionFeedback = (\n result: CompletionResult,\n maxIterationReached: boolean,\n formatScorerHeading: (scorer: CompletionScorerResult) => string,\n incompleteMessage: string,\n) => {\n const lines: string[] = [];\n\n lines.push('#### Completion Check Results');\n lines.push('');\n lines.push(`Overall: ${result.complete ? '✅ COMPLETE' : '❌ NOT COMPLETE'}`);\n lines.push(`Duration: ${result.totalDuration}ms`);\n if (result.timedOut) {\n lines.push('⚠️ Scoring timed out');\n }\n lines.push('');\n\n for (const scorer of result.scorers) {\n lines.push(formatScorerHeading(scorer));\n lines.push(`Score: ${scorer.score} ${scorer.passed ? '✅' : '❌'}`);\n if (scorer.reason) {\n lines.push(`Reason: ${scorer.reason}`);\n }\n lines.push('');\n }\n\n if (result.complete) {\n lines.push('✅ The task is complete.');\n } else if (maxIterationReached) {\n lines.push('⚠️ Max iterations reached.');\n } else {\n lines.push(incompleteMessage);\n }\n\n return lines.join('\\n');\n};\n\nexport const formatCompletionFeedback = (result: CompletionResult, maxIterationReached: boolean): string => {\n return formatBaseCompletionFeedback(\n result,\n maxIterationReached,\n scorer => `###### ${scorer.scorerName} (${scorer.scorerId})`,\n '🔄 Will continue working on the task.',\n );\n};\n\nexport const formatStreamCompletionFeedback = (result: CompletionResult, maxIterationReached: boolean): string => {\n return formatBaseCompletionFeedback(\n result,\n maxIterationReached,\n scorer => `**${scorer.scorerName}** (${scorer.scorerId})`,\n '🔄 The task is not yet complete. Please continue working based on the feedback above.',\n );\n};\n","import type { MastraMessagePart, AIV5Type } from '@mastra/core/agent/message-list';\nimport type { TripwirePayload } from '@mastra/core/stream';\n\nexport type MastraProviderMetadata = Record<string, Record<string, unknown>>;\n\n/**\n * Tripwire metadata included when a processor triggers a tripwire.\n * Canonical shape sourced from core's `tripwire` stream-chunk payload.\n */\nexport type TripwireMetadata = TripwirePayload;\n\nexport type ToolApprovalArgs = Record<string, unknown>;\n\nexport type RequireApprovalEntry = {\n toolCallId: string;\n toolName: string;\n args: ToolApprovalArgs;\n runId?: string;\n};\n\nexport type SuspendedToolEntry = {\n toolCallId: string;\n toolName: string;\n args: ToolApprovalArgs;\n suspendPayload: unknown;\n runId?: string;\n};\n\nexport type PendingToolApprovalEntry = {\n toolCallId: string;\n toolName: string;\n args: ToolApprovalArgs;\n runId?: string;\n};\n\nexport type BackgroundTaskEntry = {\n startedAt: Date;\n completedAt?: Date;\n suspendedAt?: Date;\n taskId: string;\n};\n\nexport type CompletionResult = {\n passed: boolean;\n suppressFeedback?: boolean;\n};\n\n/**\n * Canonical metadata block stored under `MastraDBMessage.content.metadata`.\n *\n * Every UX hint the React accumulator needs to surface lives here. Mode-specific\n * fields are all optional so a single record can carry the union without forcing\n * narrowing on the consumer side.\n */\n/**\n * Metadata key carrying a client-generated correlation id. The optimistic\n * pending user bubble and the outgoing `sendMessage` request both stamp this\n * id; the server echoes it back on the `data-user-message` data part so the\n * accumulator can reconcile the pending bubble deterministically (decoupled\n * from the server-assigned signal id). This is transient client state and is\n * stripped once the echo is reconciled and on reload.\n */\nexport const CLIENT_MESSAGE_ID_KEY = 'clientMessageId';\n\nexport type MastraDBMessageMetadata = {\n /** Which run mode produced this message. */\n mode?: 'generate' | 'stream' | 'network';\n /** Client-generated correlation id (see {@link CLIENT_MESSAGE_ID_KEY}). */\n clientMessageId?: string;\n /**\n * Streaming/abort/error/tripwire surface status. `'pending'` marks an\n * optimistically-appended user message that is awaiting its server signal\n * echo; it is cleared once the echo arrives and is stripped on reload.\n */\n status?: 'warning' | 'error' | 'tripwire' | 'pending';\n /** Reason recorded by the upstream stream when it finishes. */\n finishReason?: string;\n /** Tripwire metadata when status === 'tripwire'. */\n tripwire?: TripwireMetadata;\n /** Per-toolName approval requirements declared mid-stream. */\n requireApprovalMetadata?: Record<string, RequireApprovalEntry>;\n /** Per-toolName suspension records from suspended tool calls. */\n suspendedTools?: Record<string, SuspendedToolEntry>;\n /** Pending approvals keyed by toolCallId (for runtime resolution). */\n pendingToolApprovals?: Record<string, PendingToolApprovalEntry>;\n /** Per-toolCallId background-task bookkeeping. */\n backgroundTasks?: Record<string, BackgroundTaskEntry>;\n /** Number of background tasks currently executing for this message. */\n runningBackgroundTasksCount?: number;\n /** Task-completion result returned by the run (network mode). */\n completionResult?: CompletionResult;\n /**\n * Task-completion verdict from the supervisor `isTaskComplete` path. Shares\n * the `{ passed, suppressFeedback }` shape with `completionResult`; core\n * persists it as an object and reads it back as one (see `MessageMerger`).\n */\n isTaskCompleteResult?: CompletionResult;\n /** Signal-echo dedupe: signalId of the user message echoed back. */\n signalEchoIds?: string[];\n /** Network-mode bookkeeping. */\n from?: 'AGENT' | 'WORKFLOW' | 'TOOL';\n selectionReason?: string;\n agentInput?: string | object | Array<object>;\n hasMoreMessages?: boolean;\n /**\n * Structured decision emitted by the routing agent. Parsed from the\n * routing-agent text stream when it forms a balanced JSON object so the\n * raw payload never reaches the rendered thread.\n */\n routingDecision?: Record<string, unknown>;\n /**\n * Raw routing-agent text used when the stream did not parse as JSON. Kept\n * out of the visible parts but exposed for downstream UI (badge tooltips,\n * metadata dialogs, debugging).\n */\n routingDecisionText?: string;\n /**\n * Internal buffer for partial routing-agent text deltas. Cleared once the\n * buffer parses as JSON and is promoted to `routingDecision`.\n */\n routingDecisionBuffer?: string;\n};\n\n/**\n * Mastra-extended text part. Adds `textId` (per-stream identifier) and\n * `state` (streaming/done) on top of the V4 text part shape, mirroring the\n * `MastraStepStartPart` extension pattern in core.\n */\nexport type MastraTextPart = {\n type: 'text';\n text: string;\n textId?: string;\n state?: 'streaming' | 'done';\n providerMetadata?: MastraProviderMetadata;\n createdAt?: number;\n};\n\n/**\n * Mastra-extended reasoning part with per-stream identifier and streaming state.\n * `redacted: true` indicates the upstream provider redacted the reasoning content.\n */\nexport type MastraReasoningPart = {\n type: 'reasoning';\n reasoning: string;\n reasoningId?: string;\n state?: 'streaming' | 'done';\n redacted?: boolean;\n providerMetadata?: MastraProviderMetadata;\n createdAt?: number;\n};\n\n/**\n * Streaming buffer attached to a tool-invocation part while `tool-call-delta`\n * fragments arrive. The accumulator concatenates JSON chunks into `argsText`\n * and parses them on `tool-call-input-streaming-end`. Stored alongside the\n * canonical `args` so the persisted shape still satisfies `MastraDBMessage`.\n */\nexport type StreamingToolInvocationExtension = {\n argsText?: string;\n};\n\n/**\n * Custom `data-*` chunk part shape persisted on a `MastraDBMessage`. Mirrors\n * AI SDK v5 `DataUIPart` structurally so it is structurally compatible with\n * `MastraMessagePart`, while keeping the React-side accumulator independent\n * of the v5 type machinery.\n */\nexport type StreamingDataPart = {\n type: `data-${string}`;\n data: unknown;\n id?: string;\n};\n\n/**\n * Union of part types the accumulator emits. Compatible with `MastraMessagePart`\n * at runtime; the extended text/reasoning parts add optional fields that\n * downstream consumers (e.g. `AIV5Adapter.toUIMessage`) preserve via\n * providerMetadata round-tripping.\n *\n * `AIV5Type.SourceUrlUIPart` is the flat `type: 'source-url'` shape the\n * accumulator actually pushes for URL source citations (the typed\n * `MastraMessagePart` only models the nested `type: 'source'` shape), so it is\n * listed explicitly as a first-class member of the runtime union.\n */\nexport type AccumulatorPart =\n | MastraMessagePart\n | MastraTextPart\n | MastraReasoningPart\n | StreamingDataPart\n | AIV5Type.SourceUrlUIPart;\n","import type {\n AIV5Type,\n MastraDBMessage,\n MastraMessagePart,\n MastraMessageContentV2,\n MastraToolInvocation,\n MastraToolInvocationPart,\n} from '@mastra/core/agent/message-list';\nimport type { AgentChunkType, ChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport type { WorkflowStreamResult, StepResult } from '@mastra/core/workflows';\nimport { formatCompletionFeedback, formatStreamCompletionFeedback } from './formatCompletionFeedback';\nimport { CLIENT_MESSAGE_ID_KEY } from './types';\nimport type {\n BackgroundTaskEntry,\n MastraDBMessageMetadata,\n MastraProviderMetadata,\n MastraReasoningPart,\n MastraTextPart,\n} from './types';\n\n// Boundary cast policy\n// --------------------\n// `MastraMessagePart` (from @mastra/core) is V4-shaped:\n// - text/reasoning parts have no `state`, `textId`, `reasoningId`, or `redacted`\n// - the V4 reasoning part requires a `details` array we do not synthesize\n// - the V4 file part is `{ mimeType, data }`; we emit V5-shaped `{ mediaType, url }`\n// - V4 source parts wrap a `LanguageModelV1Source` object; we emit V5-shaped\n// flat `source-url` / `source-document` parts\n//\n// The React SDK targets AI SDK v5 only, so the accumulator stores a V5-flavored\n// superset of `MastraMessagePart`. Every `as unknown as MastraMessagePart` site\n// in this file is a deliberate storage-boundary cast for one of the above\n// extensions, not an accident. Downstream consumers (`toAISdkV5Messages`,\n// playground `to-assistant-ui-message`) read the V5 fields directly.\n\ntype StreamChunk = {\n type: string;\n payload: any;\n runId: string;\n from: 'AGENT' | 'WORKFLOW';\n};\n\nconst cloneMetadata = (metadata: MastraDBMessageMetadata | undefined): MastraDBMessageMetadata =>\n metadata ? { ...metadata } : {};\n\nconst withParts = (message: MastraDBMessage, parts: MastraMessagePart[]): MastraDBMessage => ({\n ...message,\n content: {\n ...message.content,\n parts,\n },\n});\n\nconst withMetadata = (message: MastraDBMessage, metadata: MastraDBMessageMetadata): MastraDBMessage => ({\n ...message,\n content: {\n ...message.content,\n metadata,\n },\n});\n\n// Drops the transient `pending` status and the `clientMessageId` correlation\n// key from an optimistic user message once its server echo confirms it, leaving\n// the rest of the metadata intact.\nconst clearPendingStatus = (message: MastraDBMessage): MastraDBMessage => {\n const { status: _status, [CLIENT_MESSAGE_ID_KEY]: _clientMessageId, ...rest } = message.content.metadata ?? {};\n return withMetadata(message, rest);\n};\n\n// Like `clearPendingStatus` but retains the `clientMessageId` correlation key.\n// Used during `data-user-message` reconciliation so the rendered row key (which\n// prefers `clientMessageId`) stays stable across the id swap, preventing a\n// React unmount/remount and the resulting layout shift. `clientMessageId` is\n// still stripped from persisted threads by `resolveInitialMessages`.\nconst clearPendingStatusKeepClientId = (message: MastraDBMessage): MastraDBMessage => {\n const { status: _status, ...rest } = message.content.metadata ?? {};\n return withMetadata(message, rest);\n};\n\nconst replaceLast = (conversation: MastraDBMessage[], message: MastraDBMessage): MastraDBMessage[] => [\n ...conversation.slice(0, -1),\n message,\n];\n\nconst replaceAt = (conversation: MastraDBMessage[], index: number, message: MastraDBMessage): MastraDBMessage[] => [\n ...conversation.slice(0, index),\n message,\n ...conversation.slice(index + 1),\n];\n\nconst newAssistantMessage = (\n id: string,\n parts: MastraMessagePart[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage => ({\n id,\n role: 'assistant',\n createdAt: new Date(),\n content: {\n format: 2,\n parts,\n metadata: cloneMetadata(metadata),\n } satisfies MastraMessageContentV2,\n});\n\nconst appendAssistantMessage = (\n conversation: MastraDBMessage[],\n id: string,\n parts: MastraMessagePart[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] => [...conversation, newAssistantMessage(id, parts, metadata)];\n\nconst isToolPart = (part: MastraMessagePart): part is MastraToolInvocationPart => part.type === 'tool-invocation';\n\nconst partTextId = (part: MastraMessagePart): string | undefined =>\n part.type === 'text' ? (part as MastraTextPart).textId : undefined;\n\nconst partState = (part: MastraMessagePart): string | undefined => (part as { state?: string }).state;\n\nconst partProviderMetadata = (part: MastraMessagePart): Record<string, unknown> | undefined =>\n (part as { providerMetadata?: Record<string, unknown> }).providerMetadata;\n\n/**\n * Set any streaming text/reasoning parts on the trailing assistant message to\n * `state: 'done'`. Mirrors the previous `finishStreamingAssistantMessage` from\n * the AI-SDK accumulator.\n */\nexport const finishStreamingAssistantMessage = (conversation: MastraDBMessage[]): MastraDBMessage[] => {\n const lastMessage = conversation[conversation.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return conversation;\n if (lastMessage.content.parts.length === 0) return conversation.slice(0, -1);\n\n const nextParts = lastMessage.content.parts.map(part => {\n if ((part.type === 'text' || part.type === 'reasoning') && partState(part) === 'streaming') {\n return {\n ...(part as MastraTextPart | MastraReasoningPart),\n state: 'done' as const,\n } as unknown as MastraMessagePart;\n }\n return part;\n });\n\n return replaceLast(conversation, withParts(lastMessage, nextParts));\n};\n\n/**\n * Locate the assistant message + tool part owning `toolCallId`. Prefers the\n * most recent assistant message and walks back up to 10 messages, matching the\n * historical accumulator's lookup behavior.\n */\nconst locateToolPart = (\n messages: MastraDBMessage[],\n toolCallId: string,\n allowMetadataOnlyMatch: boolean,\n): { messageIndex: number; toolPartIndex: number } | null => {\n const findIndex = (parts: MastraMessagePart[]) =>\n parts.findIndex(part => isToolPart(part) && part.toolInvocation.toolCallId === toolCallId);\n\n const lastMessage = messages[messages.length - 1];\n if (lastMessage && lastMessage.role === 'assistant') {\n const idx = findIndex(lastMessage.content.parts);\n if (idx !== -1) return { messageIndex: messages.length - 1, toolPartIndex: idx };\n }\n\n let count = 0;\n const maxMessagesBack = 10;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (count > maxMessagesBack) break;\n const message = messages[i];\n if (message.role !== 'assistant') continue;\n const idx = findIndex(message.content.parts);\n if (idx !== -1) return { messageIndex: i, toolPartIndex: idx };\n count++;\n }\n\n if (!allowMetadataOnlyMatch) return null;\n\n // Fall back to most-recent assistant message for metadata-only updates.\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === 'assistant') return { messageIndex: i, toolPartIndex: -1 };\n }\n return null;\n};\n\n/**\n * Merge per-toolCallId background-task bookkeeping onto message metadata.\n */\nconst mergeBgTaskMetadata = (\n existing: MastraDBMessageMetadata | undefined,\n mode: 'stream' | 'generate' | 'network' | undefined,\n args: {\n resetRunningCount?: boolean;\n perTaskEntry?: {\n toolCallId: string;\n startedAt?: Date;\n completedAt?: Date;\n suspendedAt?: Date;\n taskId: string;\n };\n },\n otherMetadata?: MastraDBMessageMetadata,\n): MastraDBMessageMetadata => {\n const base = cloneMetadata(existing);\n const existingBgTasks = (base.backgroundTasks ?? {}) as Record<string, BackgroundTaskEntry>;\n\n const nextBgTasks: Record<string, BackgroundTaskEntry> = { ...existingBgTasks };\n if (args.perTaskEntry) {\n const { toolCallId, startedAt, completedAt, taskId, suspendedAt } = args.perTaskEntry;\n const prev = existingBgTasks[toolCallId] ?? ({ taskId } as BackgroundTaskEntry);\n nextBgTasks[toolCallId] = {\n ...prev,\n taskId,\n ...(startedAt !== undefined ? { startedAt } : {}),\n ...(completedAt !== undefined ? { completedAt } : {}),\n ...(suspendedAt !== undefined ? { suspendedAt } : {}),\n };\n }\n\n const merged: MastraDBMessageMetadata = {\n ...base,\n ...(otherMetadata ?? {}),\n mode,\n backgroundTasks: nextBgTasks,\n };\n if (args.resetRunningCount) merged.runningBackgroundTasksCount = undefined;\n return merged;\n};\n\n/**\n * Workflow chunk accumulation. Mirrors\n * `mapWorkflowStreamChunkToWatchResult` from the previous accumulator.\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 { ...prev, status: 'canceled' };\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 : finalStatus === 'tripwire' && chunk.payload.tripwire\n ? { tripwire: chunk.payload.tripwire }\n : {}),\n };\n }\n\n const { stepCallId: _stepCallId, stepName: _stepName, ...newPayload } = chunk.payload ?? {};\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') return { ...prev, steps: newSteps };\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 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') return { ...prev, status: 'waiting', steps: newSteps };\n\n if (chunk.type === 'workflow-step-progress') {\n return {\n ...prev,\n steps: {\n ...prev?.steps,\n [chunk.payload.id]: {\n ...prev?.steps?.[chunk.payload.id],\n foreachProgress: {\n completedCount: chunk.payload.completedCount,\n totalCount: chunk.payload.totalCount,\n currentIndex: chunk.payload.currentIndex,\n iterationStatus: chunk.payload.iterationStatus,\n iterationOutput: chunk.payload.iterationOutput,\n },\n },\n },\n };\n }\n\n if (chunk.type === 'workflow-step-result') return { ...prev, steps: newSteps };\n\n return prev;\n};\n\nconst signalContentsToUserMessages = (contents: unknown, metadata: MastraDBMessageMetadata): MastraDBMessage[] => {\n const makeUserMessage = (parts: MastraMessagePart[]): MastraDBMessage => ({\n id: `signal-${Date.now()}`,\n role: 'user',\n createdAt: new Date(),\n content: {\n format: 2,\n parts,\n metadata: cloneMetadata(metadata),\n },\n });\n\n const toMessagePart = (part: unknown): MastraMessagePart[] => {\n if (!part || typeof part !== 'object') return [];\n const typedPart = part as Record<string, unknown>;\n\n if (typedPart.type === 'text' && typeof typedPart.text === 'string') {\n return [{ type: 'text', text: typedPart.text }];\n }\n\n if (typedPart.type === 'image') {\n const image = typedPart.image;\n return [\n {\n type: 'file',\n mediaType:\n typeof typedPart.mediaType === 'string'\n ? typedPart.mediaType\n : typeof typedPart.mimeType === 'string'\n ? typedPart.mimeType\n : 'image/*',\n url: typeof image === 'string' ? image : image instanceof URL ? image.toString() : '',\n } as unknown as MastraMessagePart,\n ];\n }\n\n if (typedPart.type === 'file') {\n const data = typedPart.data;\n return [\n {\n type: 'file',\n mediaType:\n typeof typedPart.mediaType === 'string'\n ? typedPart.mediaType\n : typeof typedPart.mimeType === 'string'\n ? typedPart.mimeType\n : 'application/octet-stream',\n url: typeof data === 'string' ? data : data instanceof URL ? data.toString() : '',\n ...(typeof typedPart.filename === 'string' ? { filename: typedPart.filename } : {}),\n } as unknown as MastraMessagePart,\n ];\n }\n\n return [];\n };\n\n if (typeof contents === 'string') {\n return [makeUserMessage([{ type: 'text', text: contents }])];\n }\n\n if (Array.isArray(contents)) {\n const parts = contents.flatMap(toMessagePart);\n return parts.length\n ? [makeUserMessage(parts)]\n : contents.flatMap(content => signalContentsToUserMessages(content, metadata));\n }\n\n if (!contents || typeof contents !== 'object') return [];\n\n const message = contents as { role?: unknown; content?: unknown };\n if (message.role && message.role !== 'user') return [];\n\n const content = message.content;\n if (typeof content === 'string') {\n return [makeUserMessage([{ type: 'text', text: content }])];\n }\n\n if (!Array.isArray(content)) return [];\n\n const parts = content.flatMap(toMessagePart);\n return parts.length ? [makeUserMessage(parts)] : [];\n};\n\nconst makeToolInvocationPart = (invocation: MastraToolInvocation): MastraToolInvocationPart => ({\n type: 'tool-invocation',\n toolInvocation: invocation,\n});\n\n/**\n * Narrow the chunk to the template-literal passthrough variants from\n * `NetworkChunkType`. Encoded as a type guard so the surrounding `switch`\n * statement can stay exhaustive over the remaining string-literal cases.\n */\nconst isTemplateLiteralPassthrough = <T extends { type: string }>(\n chunk: T,\n): chunk is T & { type: `agent-execution-event-${string}` | `workflow-execution-event-${string}` } =>\n chunk.type.startsWith('agent-execution-event-') || chunk.type.startsWith('workflow-execution-event-');\n\n/**\n * Narrow the chunk to the `data-${string}` family. Used so the trailing\n * exhaustiveness check can prove the switch covers every remaining variant.\n */\nconst isDataChunk = <T extends { type: string }>(chunk: T): chunk is T & { type: `data-${string}` } =>\n chunk.type.startsWith('data-');\n\nexport interface AccumulateChunkArgs {\n chunk: ChunkType;\n conversation: MastraDBMessage[];\n metadata: MastraDBMessageMetadata;\n}\n\n/**\n * Reduce a single stream chunk into the running `MastraDBMessage[]`\n * conversation. The accumulator owns the entire chunk→DB mapping for the\n * React SDK; consumers downstream (e.g. `toAISdkV5Messages` in the playground)\n * translate the result into AI SDK / assistant-ui shapes as needed.\n */\nexport const accumulateChunk = ({ chunk, conversation, metadata }: AccumulateChunkArgs): MastraDBMessage[] => {\n const result = [...conversation];\n\n // ----- Template-literal passthrough chunk types from NetworkChunkType -----\n // `agent-execution-event-*` and `workflow-execution-event-*` carry nested\n // events that are surfaced through other mechanisms (e.g. tool-output\n // routing); at the top-level DB accumulator they are no-ops. The narrow is\n // expressed as a function so the remaining switch can be exhaustive over\n // the literal-typed variants.\n if (isTemplateLiteralPassthrough(chunk)) {\n return result;\n }\n\n // ----- Custom `data-*` chunks (including signal-echo) -----\n if (isDataChunk(chunk)) {\n if (\n chunk.type === 'data-user-message' &&\n 'data' in chunk &&\n ((chunk as any).data?.type === 'user-message' || (chunk as any).data?.type === 'user')\n ) {\n const signalId = (chunk as any).data.id;\n\n // Preferred reconciliation: the optimistic pending bubble and the outgoing\n // message both carry a client-generated `clientMessageId`; the server\n // echoes it back here. Match on it (not the server-assigned signal id) so\n // the single optimistic bubble adopts the server id and clears its\n // transient pending state instead of being duplicated.\n const echoedClientMessageId = (chunk as any).data?.metadata?.[CLIENT_MESSAGE_ID_KEY];\n if (\n typeof echoedClientMessageId === 'string' &&\n result.some(\n message =>\n message.content.metadata?.status === 'pending' &&\n message.content.metadata[CLIENT_MESSAGE_ID_KEY] === echoedClientMessageId,\n )\n ) {\n return finishStreamingAssistantMessage(\n result.map(message =>\n message.content.metadata?.status === 'pending' &&\n message.content.metadata[CLIENT_MESSAGE_ID_KEY] === echoedClientMessageId\n ? clearPendingStatusKeepClientId(typeof signalId === 'string' ? { ...message, id: signalId } : message)\n : message,\n ),\n );\n }\n\n if (typeof signalId === 'string' && result.some(message => message.id === signalId)) {\n return finishStreamingAssistantMessage(\n result.map(message =>\n message.id === signalId && message.content.metadata?.status === 'pending'\n ? clearPendingStatus(message)\n : message,\n ),\n );\n }\n\n const userMessages = signalContentsToUserMessages((chunk as any).data.contents, metadata);\n if (!userMessages.length) return result;\n\n const conversationWithFinishedAssistant = finishStreamingAssistantMessage(result);\n const messageIdPrefix = typeof signalId === 'string' ? signalId : `signal-${chunk.runId}-${Date.now()}`;\n return [\n ...conversationWithFinishedAssistant,\n ...userMessages.map((message, index) => ({\n ...message,\n id: index === 0 ? messageIdPrefix : `${messageIdPrefix}-${index}`,\n })),\n ];\n }\n\n const dataPart = {\n type: chunk.type as `data-${string}`,\n data: 'data' in chunk ? (chunk as any).data : undefined,\n ...('id' in chunk && typeof (chunk as any).id === 'string' ? { id: (chunk as any).id } : {}),\n } as unknown as MastraMessagePart;\n\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(result, `data-${chunk.runId}-${Date.now()}`, [dataPart], metadata);\n }\n\n return replaceLast(result, withParts(lastMessage, [...lastMessage.content.parts, dataPart]));\n }\n\n switch (chunk.type) {\n case 'tripwire': {\n const newMessage = newAssistantMessage(\n `tripwire-${chunk.runId + Date.now()}`,\n [{ type: 'text', text: chunk.payload.reason } as MastraMessagePart],\n {\n ...metadata,\n status: 'tripwire',\n tripwire: {\n reason: chunk.payload.reason,\n retry: chunk.payload.retry,\n metadata: chunk.payload.metadata,\n processorId: chunk.payload.processorId,\n },\n },\n );\n return [...result, newMessage];\n }\n\n case 'start': {\n const messageId = typeof chunk.payload.messageId === 'string' ? chunk.payload.messageId : undefined;\n if (messageId && result.some(message => message.id === messageId)) return result;\n return [...result, newAssistantMessage(messageId ?? `start-${chunk.runId + Date.now()}`, [], metadata)];\n }\n\n case 'text-start': {\n const lastMessage = result[result.length - 1];\n const textId = chunk.payload.id || `text-${Date.now()}`;\n if (\n chunk.payload.id &&\n lastMessage?.role === 'assistant' &&\n lastMessage.content.parts.some(part => part.type === 'text' && partTextId(part) === textId)\n ) {\n return result;\n }\n\n const newTextPart: MastraTextPart = {\n type: 'text',\n text: '',\n state: 'streaming',\n textId,\n providerMetadata: chunk.payload.providerMetadata,\n };\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(\n result,\n `start-${chunk.runId}-${Date.now()}`,\n [newTextPart as MastraMessagePart],\n metadata,\n );\n }\n\n // If the last message is a completion/isTaskComplete result message, start a new assistant message\n if (lastMessage.content.metadata?.completionResult) {\n return appendAssistantMessage(\n result,\n `start-${chunk.runId}-${Date.now()}`,\n [newTextPart as MastraMessagePart],\n metadata,\n );\n }\n\n return replaceLast(\n result,\n withParts(lastMessage, [...lastMessage.content.parts, newTextPart as MastraMessagePart]),\n );\n }\n\n case 'background-task-progress': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n return replaceLast(\n result,\n withMetadata(lastMessage, {\n mode: metadata.mode,\n ...(lastMessage.content.metadata as MastraDBMessageMetadata | undefined),\n runningBackgroundTasksCount: chunk.payload.runningCount,\n }),\n );\n }\n\n case 'text-delta': {\n const lastMessage = result[result.length - 1];\n const textId = chunk.payload.id;\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n const newTextPart: MastraTextPart = {\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n textId,\n providerMetadata: chunk.payload.providerMetadata,\n };\n return appendAssistantMessage(\n result,\n `text-${chunk.runId}-${Date.now()}`,\n [newTextPart as MastraMessagePart],\n metadata,\n );\n }\n\n const parts = [...lastMessage.content.parts];\n\n let textPartIndex = textId\n ? parts.findLastIndex(part => part.type === 'text' && partTextId(part) === textId)\n : -1;\n\n if (textPartIndex === -1) {\n textPartIndex = parts.findLastIndex(part => part.type === 'text' && partState(part) === 'streaming');\n }\n\n if (textPartIndex === -1) {\n const newTextPart: MastraTextPart = {\n type: 'text',\n text: chunk.payload.text,\n state: 'streaming',\n textId,\n providerMetadata: chunk.payload.providerMetadata,\n };\n parts.push(newTextPart as MastraMessagePart);\n } else {\n const textPart = parts[textPartIndex] as MastraTextPart;\n parts[textPartIndex] = {\n ...textPart,\n text: textPart.text + chunk.payload.text,\n state: 'streaming',\n } as MastraMessagePart;\n }\n\n return replaceLast(result, withParts(lastMessage, parts));\n }\n\n case 'text-end': {\n // Lifecycle marker only. Streaming text parts stay in `state: 'streaming'`\n // and are finalized by `finish` / `abort` via `finishStreamingAssistantMessage`.\n // Returned as-is so the chunk-to-DB mapping stays total.\n return result;\n }\n\n case 'reasoning-start': {\n const lastMessage = result[result.length - 1];\n const newReasoningPart: MastraReasoningPart = {\n type: 'reasoning',\n reasoning: '',\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n };\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(\n result,\n `reasoning-${chunk.runId + Date.now()}`,\n [newReasoningPart as unknown as MastraMessagePart],\n metadata,\n );\n }\n\n return replaceLast(\n result,\n withParts(lastMessage, [...lastMessage.content.parts, newReasoningPart as unknown as MastraMessagePart]),\n );\n }\n\n case 'reasoning-delta': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n const newReasoningPart: MastraReasoningPart = {\n type: 'reasoning',\n reasoning: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n };\n return appendAssistantMessage(\n result,\n `reasoning-${chunk.runId + Date.now()}`,\n [newReasoningPart as unknown as MastraMessagePart],\n metadata,\n );\n }\n\n const parts = [...lastMessage.content.parts];\n const lastIndex = parts.length - 1;\n const lastPart = parts[lastIndex];\n\n if (lastPart?.type === 'reasoning') {\n const reasoningPart = lastPart as unknown as MastraReasoningPart;\n parts[lastIndex] = {\n ...reasoningPart,\n reasoning: reasoningPart.reasoning + chunk.payload.text,\n state: 'streaming',\n } as unknown as MastraMessagePart;\n } else {\n const newReasoningPart: MastraReasoningPart = {\n type: 'reasoning',\n reasoning: chunk.payload.text,\n state: 'streaming',\n providerMetadata: chunk.payload.providerMetadata,\n };\n parts.push(newReasoningPart as unknown as MastraMessagePart);\n }\n\n return replaceLast(result, withParts(lastMessage, parts));\n }\n\n case 'reasoning-end': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.content.parts];\n const reasoningIndex = parts.findLastIndex(part => part.type === 'reasoning' && partState(part) === 'streaming');\n if (reasoningIndex === -1) return result;\n\n const reasoningPart = parts[reasoningIndex] as unknown as MastraReasoningPart;\n const existingMeta = reasoningPart.providerMetadata;\n const endMeta = chunk.payload.providerMetadata;\n\n parts[reasoningIndex] = {\n ...reasoningPart,\n state: 'done',\n ...(existingMeta || endMeta ? { providerMetadata: { ...(existingMeta ?? {}), ...(endMeta ?? {}) } } : {}),\n } as unknown as MastraMessagePart;\n\n return replaceLast(result, withParts(lastMessage, parts));\n }\n\n case 'reasoning-signature': {\n // Merge the signature provider metadata into the most recent reasoning part\n // (streaming or done). Mirrors historical AI-SDK behavior where the\n // signature payload becomes part of the reasoning part's providerMetadata.\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const parts = [...lastMessage.content.parts];\n const reasoningIndex = parts.findLastIndex(part => part.type === 'reasoning');\n if (reasoningIndex === -1) return result;\n\n const reasoningPart = parts[reasoningIndex] as unknown as MastraReasoningPart;\n const existingMeta = reasoningPart.providerMetadata;\n const sigMeta = chunk.payload.providerMetadata;\n\n parts[reasoningIndex] = {\n ...reasoningPart,\n ...(existingMeta || sigMeta ? { providerMetadata: { ...(existingMeta ?? {}), ...(sigMeta ?? {}) } } : {}),\n } as unknown as MastraMessagePart;\n\n return replaceLast(result, withParts(lastMessage, parts));\n }\n\n case 'redacted-reasoning': {\n // Emit a done reasoning part flagged as redacted. The provider redacted\n // the content; the placeholder preserves the slot in the parts array.\n const lastMessage = result[result.length - 1];\n const redactedData = chunk.payload.data;\n const redactedPart: MastraReasoningPart = {\n type: 'reasoning',\n reasoning: typeof redactedData === 'string' ? redactedData : '',\n state: 'done',\n redacted: true,\n providerMetadata: chunk.payload.providerMetadata,\n };\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(\n result,\n `redacted-reasoning-${chunk.runId + Date.now()}`,\n [redactedPart as unknown as MastraMessagePart],\n metadata,\n );\n }\n\n return replaceLast(\n result,\n withParts(lastMessage, [...lastMessage.content.parts, redactedPart as unknown as MastraMessagePart]),\n );\n }\n\n case 'tool-call': {\n const invocation: MastraToolInvocation = {\n state: 'call',\n toolCallId: chunk.payload.toolCallId,\n toolName: chunk.payload.toolName,\n args: chunk.payload.args,\n };\n const newPart: MastraToolInvocationPart = {\n ...makeToolInvocationPart(invocation),\n providerMetadata: chunk.payload.providerMetadata,\n };\n\n // Upsert by toolCallId: if `tool-call-input-streaming-start` already created\n // a placeholder part for this id, transition it in place instead of\n // appending a duplicate. `chunk.payload.args` is the authoritative\n // server-side parsed args and overwrites any client-side JSON.parse done\n // during streaming.\n const existing = locateToolPart(result, chunk.payload.toolCallId, false);\n if (existing && existing.toolPartIndex >= 0) {\n const { messageIndex, toolPartIndex } = existing;\n const targetMessage = result[messageIndex];\n if (targetMessage && targetMessage.role === 'assistant') {\n const parts = [...targetMessage.content.parts];\n const prev = parts[toolPartIndex] as MastraToolInvocationPart & { argsText?: string };\n if (isToolPart(prev)) {\n const { argsText: _argsText, ...rest } = prev;\n parts[toolPartIndex] = {\n ...rest,\n toolInvocation: {\n ...prev.toolInvocation,\n state: 'call',\n toolName: chunk.payload.toolName,\n toolCallId: chunk.payload.toolCallId,\n args: chunk.payload.args,\n } as MastraToolInvocation,\n providerMetadata: chunk.payload.providerMetadata ?? prev.providerMetadata,\n } as MastraMessagePart;\n return replaceAt(result, messageIndex, withParts(targetMessage, parts));\n }\n }\n }\n\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(result, `tool-call-${chunk.runId + Date.now()}`, [newPart], metadata);\n }\n\n return replaceLast(result, withParts(lastMessage, [...lastMessage.content.parts, newPart]));\n }\n\n case 'tool-call-input-streaming-start': {\n // Create a placeholder tool-invocation part in `partial-call` state with an\n // empty args buffer; subsequent `tool-call-delta` chunks append JSON\n // fragments to `argsText` and `tool-call-input-streaming-end` parses them.\n const lastMessage = result[result.length - 1];\n const invocation: MastraToolInvocation = {\n state: 'partial-call',\n toolCallId: chunk.payload.toolCallId,\n toolName: chunk.payload.toolName,\n args: {},\n };\n const newPart: MastraToolInvocationPart & { argsText?: string } = {\n ...makeToolInvocationPart(invocation),\n argsText: '',\n };\n\n if (!lastMessage || lastMessage.role !== 'assistant') {\n return appendAssistantMessage(\n result,\n `tool-call-streaming-${chunk.runId + Date.now()}`,\n [newPart as MastraMessagePart],\n metadata,\n );\n }\n\n return replaceLast(result, withParts(lastMessage, [...lastMessage.content.parts, newPart as MastraMessagePart]));\n }\n\n case 'tool-call-delta': {\n // Append the streamed JSON fragment onto the matching tool invocation's\n // `argsText` buffer. Keep `args` empty/parsed-so-far until the end chunk.\n const location = locateToolPart(result, chunk.payload.toolCallId, false);\n if (!location || location.toolPartIndex < 0) return result;\n const { messageIndex, toolPartIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const parts = [...targetMessage.content.parts];\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart & { argsText?: string };\n if (!isToolPart(toolPart)) return result;\n\n const nextArgsText = (toolPart.argsText ?? '') + (chunk.payload.argsTextDelta ?? '');\n parts[toolPartIndex] = {\n ...toolPart,\n argsText: nextArgsText,\n toolInvocation: {\n ...toolPart.toolInvocation,\n state: 'partial-call',\n } as MastraToolInvocation,\n } as MastraMessagePart;\n\n return replaceAt(result, messageIndex, withParts(targetMessage, parts));\n }\n\n case 'tool-call-input-streaming-end': {\n // Finalize the streaming args: parse `argsText` and transition to `call`.\n // If parsing fails, keep `args: {}` so downstream consumers stay safe.\n const location = locateToolPart(result, chunk.payload.toolCallId, false);\n if (!location || location.toolPartIndex < 0) return result;\n const { messageIndex, toolPartIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const parts = [...targetMessage.content.parts];\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart & { argsText?: string };\n if (!isToolPart(toolPart)) return result;\n\n let parsedArgs: Record<string, unknown> = {};\n const argsText = toolPart.argsText;\n if (typeof argsText === 'string' && argsText.length > 0) {\n try {\n const maybe = JSON.parse(argsText);\n if (maybe && typeof maybe === 'object' && !Array.isArray(maybe)) {\n parsedArgs = maybe as Record<string, unknown>;\n }\n } catch {\n parsedArgs = {};\n }\n }\n\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n ...toolPart.toolInvocation,\n state: 'call',\n args: parsedArgs,\n } as MastraToolInvocation,\n } as MastraMessagePart;\n\n return replaceAt(result, messageIndex, withParts(targetMessage, parts));\n }\n\n case 'tool-error':\n case 'tool-result':\n case 'background-task-completed':\n case 'background-task-failed': {\n const isBgTaskEvent = chunk.type === 'background-task-completed' || chunk.type === 'background-task-failed';\n const location = locateToolPart(result, chunk.payload.toolCallId, isBgTaskEvent);\n if (!location) return result;\n const { messageIndex, toolPartIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const parts = [...targetMessage.content.parts];\n const toolPart = toolPartIndex >= 0 ? parts[toolPartIndex] : undefined;\n\n // Narrow the merged-case payload by chunk.type so each branch has typed\n // access to its specific fields without `as any`.\n let payloadResult: unknown;\n let payloadError: unknown;\n let payloadIsError = false;\n let payloadProviderMetadata: MastraProviderMetadata | undefined;\n let payloadCompletedAt: Date | undefined;\n let payloadTaskId: string | undefined;\n switch (chunk.type) {\n case 'tool-result':\n payloadResult = chunk.payload.result;\n payloadIsError = Boolean(chunk.payload.isError);\n payloadProviderMetadata = chunk.payload.providerMetadata as MastraProviderMetadata | undefined;\n break;\n case 'tool-error':\n payloadError = chunk.payload.error;\n payloadProviderMetadata = chunk.payload.providerMetadata as MastraProviderMetadata | undefined;\n break;\n case 'background-task-completed':\n payloadResult = chunk.payload.result;\n payloadCompletedAt = chunk.payload.completedAt;\n payloadTaskId = chunk.payload.taskId;\n break;\n case 'background-task-failed':\n payloadError = chunk.payload.error;\n payloadCompletedAt = chunk.payload.completedAt;\n payloadTaskId = chunk.payload.taskId;\n break;\n }\n\n if (toolPart && isToolPart(toolPart)) {\n const { toolName, toolCallId, args } = toolPart.toolInvocation;\n // Provider metadata flows through opaquely; cast once at the storage\n // boundary because the V4 part type pins it to SharedV2ProviderMetadata\n // (Record<string, Record<string, JSONValue>>) and Mastra payloads are\n // not constrained to that shape.\n const providerMeta = (payloadProviderMetadata ??\n toolPart.providerMetadata) as MastraToolInvocationPart['providerMetadata'];\n\n const isError = chunk.type === 'tool-error' || chunk.type === 'background-task-failed' || payloadIsError;\n\n if (isError) {\n const error =\n chunk.type === 'tool-error' || chunk.type === 'background-task-failed' ? payloadError : payloadResult;\n const errorText =\n typeof error === 'string'\n ? error\n : error instanceof Error\n ? error.message\n : ((error as { message?: string } | null)?.message ?? String(error));\n\n parts[toolPartIndex] = {\n ...toolPart,\n providerMetadata: providerMeta,\n toolInvocation: {\n state: 'output-error',\n toolCallId,\n toolName,\n args,\n errorText,\n } as MastraToolInvocation,\n };\n } else {\n const resultObj = payloadResult as { result?: { steps?: unknown }; childMessages?: unknown } | undefined;\n // A workflow tool-result is a *finalization* event, not a replacement.\n // The accumulated `WorkflowStreamResult` (steps, status, etc.) was\n // built up by prior `tool-output` chunks via\n // `mapWorkflowStreamChunkToWatchResult`. The terminal `tool-result`\n // payload for dynamic workflows is often just `{ result: <scalar>, runId }`\n // with no `steps` field, so detecting workflows purely from the new\n // payload would clobber that state. Also check the tool name and any\n // previously-accumulated `WorkflowStreamResult`-shaped result.\n const existingResult =\n toolPart.toolInvocation.state === 'partial-call' || toolPart.toolInvocation.state === 'result'\n ? (toolPart.toolInvocation as { result?: unknown }).result\n : undefined;\n const existingLooksLikeWorkflow = Boolean(\n existingResult && typeof existingResult === 'object' && 'steps' in (existingResult as object),\n );\n const isWorkflow =\n Boolean(resultObj?.result?.steps) || toolName?.startsWith('workflow-') || existingLooksLikeWorkflow;\n const isAgent = chunk.from === 'AGENT';\n let output: unknown;\n if (isWorkflow) {\n // Prefer merging the terminal payload into the accumulated\n // workflow state so the UI keeps its step history.\n const accumulated =\n existingLooksLikeWorkflow && existingResult && typeof existingResult === 'object'\n ? (existingResult as Record<string, unknown>)\n : undefined;\n const payloadWorkflow =\n resultObj?.result && typeof resultObj.result === 'object'\n ? (resultObj.result as Record<string, unknown>)\n : undefined;\n if (accumulated || payloadWorkflow) {\n output = {\n ...(accumulated ?? {}),\n ...(payloadWorkflow ?? {}),\n // Preserve `steps` from accumulated state when the terminal\n // payload doesn't carry them.\n steps: (payloadWorkflow?.steps as unknown) ?? (accumulated?.steps as unknown) ?? [],\n status: (payloadWorkflow?.status as unknown) ?? (accumulated?.status as unknown) ?? 'success',\n // Surface the terminal scalar output without losing history.\n output: payloadResult,\n };\n } else {\n output = payloadResult;\n }\n } else if (isAgent) {\n const existingOutput =\n toolPart.toolInvocation.state === 'result' ? toolPart.toolInvocation.result : undefined;\n const existingChild = (existingOutput as { childMessages?: unknown[] } | undefined)?.childMessages;\n output = existingOutput\n ? {\n ...(payloadResult as object),\n childMessages: existingChild?.length ? existingChild : resultObj?.childMessages,\n }\n : payloadResult;\n } else {\n output = payloadResult;\n }\n\n parts[toolPartIndex] = {\n ...toolPart,\n providerMetadata: providerMeta,\n toolInvocation: {\n state: 'result',\n toolCallId,\n toolName,\n args,\n result: output,\n } as MastraToolInvocation,\n };\n }\n }\n\n const nextMetadata = mergeBgTaskMetadata(\n targetMessage.content.metadata as MastraDBMessageMetadata | undefined,\n metadata.mode,\n {\n resetRunningCount: isBgTaskEvent,\n perTaskEntry:\n isBgTaskEvent && payloadTaskId\n ? {\n toolCallId: chunk.payload.toolCallId,\n completedAt: payloadCompletedAt,\n taskId: payloadTaskId,\n }\n : undefined,\n },\n );\n\n const nextMessage: MastraDBMessage = {\n ...targetMessage,\n content: {\n ...targetMessage.content,\n parts,\n metadata: nextMetadata,\n },\n };\n\n return replaceAt(result, messageIndex, nextMessage);\n }\n\n case 'background-task-running': {\n const location = locateToolPart(result, chunk.payload.toolCallId, true);\n if (!location) return result;\n const { messageIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const nextMetadata = mergeBgTaskMetadata(\n targetMessage.content.metadata as MastraDBMessageMetadata | undefined,\n metadata.mode,\n {\n perTaskEntry: {\n toolCallId: chunk.payload.toolCallId,\n startedAt: chunk.payload.startedAt,\n taskId: chunk.payload.taskId,\n },\n },\n );\n\n return replaceAt(result, messageIndex, withMetadata(targetMessage, nextMetadata));\n }\n\n case 'tool-output':\n case 'background-task-output': {\n const isBgTaskOutput = chunk.type === 'background-task-output';\n const location = locateToolPart(result, chunk.payload.toolCallId, isBgTaskOutput);\n if (!location || location.toolPartIndex < 0) return result;\n const { messageIndex, toolPartIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const parts = [...targetMessage.content.parts];\n const toolPart = parts[toolPartIndex];\n if (!isToolPart(toolPart)) return result;\n\n const { toolName, toolCallId, args } = toolPart.toolInvocation;\n const payloadOutput =\n chunk.type === 'background-task-output' ? chunk.payload.payload.payload.output : chunk.payload.output;\n\n // Workflow stream output: accumulate into watch-result state\n if (payloadOutput?.type?.startsWith('workflow-')) {\n const existingWorkflowState =\n ((toolPart.toolInvocation as any).result as WorkflowStreamResult<any, any, any, any>) ||\n ({} as WorkflowStreamResult<any, any, any, any>);\n const updated = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, payloadOutput);\n\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n state: 'partial-call',\n toolCallId,\n toolName,\n args,\n result: updated,\n } as MastraToolInvocation,\n };\n } else if (\n payloadOutput?.from === 'AGENT' ||\n (payloadOutput?.from === 'USER' && payloadOutput?.payload?.output?.type?.startsWith('workflow-'))\n ) {\n return accumulateAgentChunk(payloadOutput, result, metadata, toolCallId, toolName);\n } else {\n const currentResult = (toolPart.toolInvocation as any).result;\n const existing = Array.isArray(currentResult) ? currentResult : [];\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n state: 'partial-call',\n toolCallId,\n toolName,\n args,\n result: [...existing, payloadOutput],\n } as MastraToolInvocation,\n };\n }\n\n return replaceAt(result, messageIndex, withParts(targetMessage, parts));\n }\n\n case 'is-task-complete': {\n if (chunk.payload.suppressFeedback) return result;\n\n const feedback = formatStreamCompletionFeedback(\n {\n complete: chunk.payload.passed,\n scorers: chunk.payload.results,\n totalDuration: chunk.payload.duration,\n timedOut: chunk.payload.timedOut,\n completionReason: chunk.payload.reason,\n },\n chunk.payload.maxIterationReached,\n );\n\n const newMessage = newAssistantMessage(\n `is-task-complete-${chunk.runId + Date.now()}`,\n [{ type: 'text', text: feedback } as MastraMessagePart],\n {\n ...metadata,\n completionResult: { passed: chunk.payload.passed },\n },\n );\n return [...result, newMessage];\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.content.parts];\n if (chunk.payload.sourceType === 'url') {\n // Flat V5 `source-url` shape (see boundary cast policy above). Typed as\n // the shared `AIV5Type.SourceUrlUIPart` so the literal is shape-checked,\n // then stored via the storage-boundary cast like the other V5 parts.\n const sourceUrlPart: AIV5Type.SourceUrlUIPart = {\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 parts.push(sourceUrlPart as unknown as MastraMessagePart);\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 } as MastraMessagePart);\n }\n\n return replaceLast(result, withParts(lastMessage, parts));\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.content.parts];\n\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 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 } as unknown as MastraMessagePart);\n\n return replaceLast(result, withParts(lastMessage, parts));\n }\n\n case 'tool-call-approval': {\n const lastMessage = result[result.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return result;\n\n const existingMeta = (lastMessage.content.metadata as MastraDBMessageMetadata | undefined) ?? {};\n const lastRequireApproval = existingMeta.mode === 'stream' ? (existingMeta.requireApprovalMetadata ?? {}) : {};\n\n return replaceLast(result, {\n ...lastMessage,\n content: {\n ...lastMessage.content,\n metadata: {\n ...existingMeta,\n mode: 'stream',\n requireApprovalMetadata: {\n ...lastRequireApproval,\n [chunk.payload.toolName]: {\n toolCallId: chunk.payload.toolCallId,\n toolName: chunk.payload.toolName,\n args: chunk.payload.args as Record<string, unknown>,\n },\n },\n },\n },\n });\n }\n\n case 'tool-call-suspended':\n case 'background-task-suspended': {\n const isBgTaskEvent = chunk.type === 'background-task-suspended';\n // Narrow merged payloads explicitly. Both shapes carry the fields below.\n let suspToolCallId: string;\n let suspToolName: string;\n let suspArgs: Record<string, unknown>;\n let suspPayload: unknown;\n let suspSuspendedAt: Date | undefined;\n let suspTaskId: string | undefined;\n if (chunk.type === 'background-task-suspended') {\n suspToolCallId = chunk.payload.toolCallId;\n suspToolName = chunk.payload.toolName;\n suspArgs = chunk.payload.args;\n suspPayload = chunk.payload.suspendPayload;\n suspSuspendedAt = chunk.payload.suspendedAt;\n suspTaskId = chunk.payload.taskId;\n } else {\n suspToolCallId = chunk.payload.toolCallId;\n suspToolName = chunk.payload.toolName;\n suspArgs = chunk.payload.args as Record<string, unknown>;\n suspPayload = chunk.payload.suspendPayload;\n }\n\n const location = isBgTaskEvent\n ? locateToolPart(result, suspToolCallId, true)\n : { messageIndex: result.length - 1 };\n if (!location) return result;\n const { messageIndex } = location;\n const targetMessage = result[messageIndex];\n if (!targetMessage || targetMessage.role !== 'assistant') return result;\n\n const existingMeta = (targetMessage.content.metadata as MastraDBMessageMetadata | undefined) ?? {};\n const lastSuspendedTools = existingMeta.mode === 'stream' ? (existingMeta.suspendedTools ?? {}) : {};\n\n const nextMetadata = mergeBgTaskMetadata(\n existingMeta,\n 'stream',\n {\n resetRunningCount: isBgTaskEvent,\n perTaskEntry:\n isBgTaskEvent && suspTaskId\n ? {\n toolCallId: suspToolCallId,\n suspendedAt: suspSuspendedAt,\n taskId: suspTaskId,\n }\n : undefined,\n },\n {\n suspendedTools: {\n ...lastSuspendedTools,\n [suspToolName]: {\n toolCallId: suspToolCallId,\n toolName: suspToolName,\n args: suspArgs,\n suspendPayload: suspPayload,\n runId: chunk.runId,\n },\n },\n },\n );\n\n return replaceAt(result, messageIndex, withMetadata(targetMessage, nextMetadata));\n }\n\n case 'finish':\n case 'abort': {\n return finishStreamingAssistantMessage(result);\n }\n\n case 'error': {\n const newMessage = newAssistantMessage(\n `error-${chunk.runId + Date.now()}`,\n [\n {\n type: 'text',\n text: typeof chunk.payload.error === 'string' ? chunk.payload.error : JSON.stringify(chunk.payload.error),\n } as MastraMessagePart,\n ],\n {\n ...metadata,\n status: 'error',\n },\n );\n return [...result, newMessage];\n }\n\n // ----- Lifecycle / step / framing chunks (not surfaced on DB messages) -----\n case 'step-start':\n case 'step-finish':\n case 'step-output':\n case 'raw':\n case 'watch':\n case 'response-metadata':\n return result;\n\n // ----- Goal evaluation signal (feedback is already injected into the\n // message history by the core goal step; the chunk is a consumer-only\n // signal and is not surfaced as its own DB message). -----\n case 'goal':\n return result;\n\n // ----- Object chunks (object/object-result are not stored on DB messages) -----\n case 'object':\n case 'object-result':\n return result;\n\n // ----- Background-task lifecycle markers not folded into messages -----\n case 'background-task-started':\n case 'background-task-cancelled':\n case 'background-task-resumed':\n return result;\n\n // ----- Workflow lifecycle passthroughs (handled by mapWorkflowStreamChunkToWatchResult inside tool-output) -----\n case 'workflow-start':\n case 'workflow-finish':\n case 'workflow-canceled':\n case 'workflow-paused':\n case 'workflow-step-start':\n case 'workflow-step-finish':\n case 'workflow-step-suspended':\n case 'workflow-step-waiting':\n case 'workflow-step-output':\n case 'workflow-step-progress':\n case 'workflow-step-result':\n return result;\n\n // ----- Nested-execution / routing / network passthroughs -----\n case 'agent-execution-start':\n case 'agent-execution-approval':\n case 'agent-execution-suspended':\n case 'agent-execution-end':\n case 'agent-execution-abort':\n case 'tool-execution-start':\n case 'tool-execution-end':\n case 'tool-execution-approval':\n case 'tool-execution-suspended':\n case 'tool-execution-abort':\n case 'routing-agent-start':\n case 'routing-agent-text-delta':\n case 'routing-agent-text-start':\n case 'routing-agent-end':\n case 'routing-agent-abort':\n case 'workflow-execution-start':\n case 'workflow-execution-end':\n case 'workflow-execution-suspended':\n case 'workflow-execution-abort':\n case 'network-execution-event-step-finish':\n case 'network-execution-event-finish':\n case 'network-validation-start':\n case 'network-validation-end':\n case 'network-object':\n case 'network-object-result':\n return result;\n\n default:\n // Exhaustiveness check: any new `ChunkType` variant must be added above.\n return assertExhaustive(chunk, result);\n }\n};\n\n/**\n * Compile-time exhaustiveness helper. At runtime, returns the conversation\n * unchanged so unexpected chunk variants never throw inside the React stream\n * pump; TypeScript will fail to compile if `ChunkType` ever grows a new branch\n * that isn't enumerated above.\n */\nconst assertExhaustive = (_chunk: never, fallback: MastraDBMessage[]): MastraDBMessage[] => fallback;\n\n// ----- Nested agent-chunk accumulation (mirrors `toUIMessageFromAgent`) -----\n\nconst accumulateAgentChunk = (\n chunk: AgentChunkType,\n conversation: MastraDBMessage[],\n _metadata: MastraDBMessageMetadata,\n parentToolCallId?: string,\n parentToolName?: string,\n): MastraDBMessage[] => {\n const lastMessage = conversation[conversation.length - 1];\n if (!lastMessage || lastMessage.role !== 'assistant') return conversation;\n\n const parts = [...lastMessage.content.parts];\n\n const findToolPartIndex = () =>\n parts.findIndex(\n part =>\n isToolPart(part) &&\n ((parentToolCallId && part.toolInvocation.toolCallId === parentToolCallId) ||\n (parentToolName && part.toolInvocation.toolName === parentToolName)),\n );\n\n if (chunk.type === 'text-delta') {\n const agentChunk = chunk.payload as any;\n const toolPartIndex = findToolPartIndex();\n if (toolPartIndex === -1) return conversation;\n\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart;\n const existingResult = (toolPart.toolInvocation as any).result || {};\n const childMessages = existingResult.childMessages || [];\n const lastChildMessage = childMessages[childMessages.length - 1];\n\n const textMessage = { type: 'text', content: (lastChildMessage?.content || '') + agentChunk.text };\n const nextChildren =\n lastChildMessage?.type === 'text'\n ? [...childMessages.slice(0, -1), textMessage]\n : [...childMessages, textMessage];\n\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n ...toolPart.toolInvocation,\n result: { ...existingResult, childMessages: nextChildren },\n } as MastraToolInvocation,\n };\n } else if (chunk.type === 'tool-call') {\n const agentChunk = chunk.payload as any;\n const toolPartIndex = findToolPartIndex();\n if (toolPartIndex === -1) return conversation;\n\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart;\n const existingResult = (toolPart.toolInvocation as any).result || {};\n const childMessages = existingResult.childMessages || [];\n\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n ...toolPart.toolInvocation,\n result: {\n ...existingResult,\n childMessages: [\n ...childMessages,\n {\n type: 'tool',\n toolCallId: agentChunk.toolCallId,\n toolName: agentChunk.toolName,\n args: agentChunk.args,\n },\n ],\n },\n } as MastraToolInvocation,\n };\n } else if (chunk.type === 'tool-output') {\n const agentChunk = chunk.payload as any;\n const toolPartIndex = findToolPartIndex();\n if (toolPartIndex === -1) return conversation;\n\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart;\n if (agentChunk?.output?.type?.startsWith('workflow-')) {\n const existingResult = (toolPart.toolInvocation as any).result || {};\n const childMessages = existingResult.childMessages || [];\n const lastIndex = childMessages.length - 1;\n const currentMessage = childMessages[lastIndex];\n const actualExistingWorkflowState = (currentMessage as any)?.toolOutput || {};\n const updated = mapWorkflowStreamChunkToWatchResult(actualExistingWorkflowState, agentChunk.output);\n\n if (lastIndex >= 0 && childMessages[lastIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n ...toolPart.toolInvocation,\n result: {\n ...existingResult,\n childMessages: [\n ...childMessages.slice(0, -1),\n {\n ...currentMessage,\n toolOutput: { ...updated, runId: agentChunk.output.runId },\n },\n ],\n },\n } as MastraToolInvocation,\n };\n }\n }\n } else if (chunk.type === 'tool-result') {\n const agentChunk = chunk.payload as any;\n const toolPartIndex = findToolPartIndex();\n if (toolPartIndex === -1) return conversation;\n\n const toolPart = parts[toolPartIndex] as MastraToolInvocationPart;\n const existingResult = (toolPart.toolInvocation as any).result || {};\n const childMessages = existingResult.childMessages || [];\n const lastIndex = childMessages.length - 1;\n const isWorkflow = agentChunk?.toolName?.startsWith('workflow-');\n\n if (lastIndex >= 0 && childMessages[lastIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n toolInvocation: {\n ...toolPart.toolInvocation,\n result: {\n ...existingResult,\n childMessages: [\n ...childMessages.slice(0, -1),\n {\n ...childMessages[lastIndex],\n toolOutput: isWorkflow\n ? { ...(agentChunk.result as any)?.result, runId: (agentChunk.result as any)?.runId }\n : agentChunk.result,\n },\n ],\n },\n } as MastraToolInvocation,\n };\n }\n }\n\n return replaceLast(conversation, withParts(lastMessage, parts));\n};\n\nexport interface AccumulateNetworkChunkArgs {\n chunk: NetworkChunkType;\n conversation: MastraDBMessage[];\n metadata: MastraDBMessageMetadata;\n}\n\n// Network-mode helpers\n// --------------------\n// These mirror the historical `AISdkNetworkTransformer` from the AI-SDK layer,\n// translating `NetworkChunkType` into `MastraDBMessage[]`. The transformer's\n// `MastraUIMessage` model (`{ parts, metadata }`) maps onto `MastraDBMessage`\n// (`content.parts` / `content.metadata`). Text and `dynamic-tool` parts are\n// stored as the same V5-flavored superset of `MastraMessagePart` documented in\n// the boundary-cast policy at the top of this file. This is a temporary bridge\n// to keep network mode rendering until the next major.\n\nconst networkMode = (metadata: MastraDBMessageMetadata): MastraDBMessageMetadata => ({ ...metadata, mode: 'network' });\n\nconst findPartIndex = (parts: MastraMessagePart[], predicate: (part: MastraMessagePart) => boolean): number =>\n parts.findIndex(predicate);\n\n// `dynamic-tool` is a V5 part type stored via the boundary-cast policy; it is\n// not present in the V4 `MastraMessagePart` union, so match on the raw string.\nconst isDynamicToolPart = (part: MastraMessagePart): boolean => (part as { type: string }).type === 'dynamic-tool';\n\nconst lastAssistant = (conversation: MastraDBMessage[]): MastraDBMessage | undefined => {\n const last = conversation[conversation.length - 1];\n return last && last.role === 'assistant' ? last : undefined;\n};\n\n/**\n * Try to parse the buffered routing-agent text as a JSON object. Returns the\n * parsed object on success, or `null` while the buffer is still incomplete or\n * not JSON at all.\n */\nconst tryParseRoutingDecision = (buffered: string): Record<string, unknown> | null => {\n const trimmed = buffered.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) return null;\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === 'object') {\n return parsed as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n};\n\n/**\n * Routing-agent text deltas describe the network's routing decision (often a\n * JSON object such as `{ \"isNetwork\": true, \"agentId\": \"...\", ... }`). The raw\n * payload is never useful in the rendered thread, so we buffer it in\n * message-level metadata, promote it to `routingDecision` when it parses as\n * JSON, and fall back to `routingDecisionText` for non-JSON routing models.\n * No visible text part is produced.\n */\nconst handleRoutingAgentDelta = (\n chunk: NetworkChunkType,\n conversation: MastraDBMessage[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] => {\n const delta = (chunk.payload as { text?: string })?.text ?? '';\n if (!delta) return conversation;\n\n const lastMessage = lastAssistant(conversation);\n\n const mergeRoutingMetadata = (existing: MastraDBMessageMetadata): MastraDBMessageMetadata => {\n const buffered = (existing.routingDecisionBuffer ?? '') + delta;\n const next: MastraDBMessageMetadata = { ...cloneMetadata(existing), mode: 'network' };\n const parsed = tryParseRoutingDecision(buffered);\n if (parsed) {\n next.routingDecision = parsed;\n delete next.routingDecisionBuffer;\n delete next.routingDecisionText;\n } else {\n next.routingDecisionBuffer = buffered;\n next.routingDecisionText = buffered;\n }\n return next;\n };\n\n if (!lastMessage) {\n const seed = mergeRoutingMetadata({});\n return appendAssistantMessage(\n conversation,\n `routing-agent-${(chunk.payload as { runId?: string })?.runId ?? 'unknown'}-${Date.now()}`,\n [],\n { ...networkMode(metadata), ...seed },\n );\n }\n\n return replaceLast(conversation, withMetadata(lastMessage, mergeRoutingMetadata(lastMessage.content.metadata ?? {})));\n};\n\nconst handleAgentNetworkChunk = (\n chunk: NetworkChunkType,\n conversation: MastraDBMessage[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] => {\n if (chunk.type === 'agent-execution-start') {\n const primitiveId = (chunk.payload as any)?.args?.primitiveId;\n const runId = (chunk.payload as any).runId;\n if (!primitiveId || !runId) return conversation;\n\n const toolPart = {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: (chunk.payload as any).args,\n } as unknown as MastraMessagePart;\n\n return appendAssistantMessage(conversation, `agent-execution-start-${runId}-${Date.now()}`, [toolPart], {\n ...networkMode(metadata),\n selectionReason: (chunk.payload as any)?.args?.selectionReason || '',\n agentInput: (chunk.payload as any)?.args?.task,\n from: 'AGENT',\n });\n }\n\n if (chunk.type === 'agent-execution-end') {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n\n const parts = [...lastMessage.content.parts];\n const toolPartIndex = findPartIndex(parts, part => isDynamicToolPart(part));\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex] as any;\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: { ...currentOutput, result: currentOutput?.result || (chunk.payload as any)?.result || '' },\n } as unknown as MastraMessagePart;\n }\n\n return replaceLast(conversation, withParts(lastMessage, parts));\n }\n\n if (chunk.type.startsWith('agent-execution-event-')) {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n\n const agentChunk = chunk.payload as any;\n const parts = [...lastMessage.content.parts];\n const toolPartIndex = findPartIndex(parts, part => isDynamicToolPart(part));\n if (toolPartIndex === -1) return conversation;\n const toolPart = parts[toolPartIndex] as any;\n\n if (agentChunk.type === 'text-delta') {\n const childMessages = toolPart?.output?.childMessages || [];\n const lastChildMessage = childMessages[childMessages.length - 1];\n const textMessage = { type: 'text', content: (lastChildMessage?.content || '') + agentChunk.payload.text };\n const nextMessages =\n lastChildMessage?.type === 'text'\n ? [...childMessages.slice(0, -1), textMessage]\n : [...childMessages, textMessage];\n parts[toolPartIndex] = {\n ...toolPart,\n output: { childMessages: nextMessages },\n } as unknown as MastraMessagePart;\n } else if (agentChunk.type === 'tool-call') {\n const childMessages = toolPart?.output?.childMessages || [];\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n ...toolPart?.output,\n childMessages: [\n ...childMessages,\n {\n type: 'tool',\n toolCallId: agentChunk.payload.toolCallId,\n toolName: agentChunk.payload.toolName,\n args: agentChunk.payload.args,\n },\n ],\n },\n } as unknown as MastraMessagePart;\n } else if (agentChunk.type === 'tool-output') {\n if (agentChunk.payload?.output?.type?.startsWith('workflow-')) {\n const childMessages = toolPart?.output?.childMessages || [];\n const lastToolIndex = childMessages.length - 1;\n const currentMessage = childMessages[lastToolIndex];\n const actualExistingWorkflowState = currentMessage?.toolOutput || {};\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(\n actualExistingWorkflowState,\n agentChunk.payload.output,\n );\n if (lastToolIndex >= 0 && childMessages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n ...toolPart?.output,\n childMessages: [...childMessages.slice(0, -1), { ...currentMessage, toolOutput: updatedWorkflowState }],\n },\n } as unknown as MastraMessagePart;\n }\n }\n } else if (agentChunk.type === 'tool-result') {\n const childMessages = toolPart?.output?.childMessages || [];\n const lastToolIndex = childMessages.length - 1;\n const isWorkflow = Boolean(agentChunk.payload?.result?.result?.steps);\n if (lastToolIndex >= 0 && childMessages[lastToolIndex]?.type === 'tool') {\n parts[toolPartIndex] = {\n ...toolPart,\n output: {\n ...toolPart?.output,\n childMessages: [\n ...childMessages.slice(0, -1),\n {\n ...childMessages[lastToolIndex],\n toolOutput: isWorkflow ? agentChunk.payload.result.result : agentChunk.payload.result,\n },\n ],\n },\n } as unknown as MastraMessagePart;\n }\n }\n\n return replaceLast(conversation, withParts(lastMessage, parts));\n }\n\n return conversation;\n};\n\nconst handleWorkflowNetworkChunk = (\n chunk: NetworkChunkType,\n conversation: MastraDBMessage[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] => {\n if (chunk.type === 'workflow-execution-start') {\n const primitiveId = (chunk.payload as any)?.args?.primitiveId;\n const runId = (chunk.payload as any).runId;\n if (!primitiveId || !runId) return conversation;\n\n let agentInput: string | object;\n try {\n agentInput = JSON.parse((chunk.payload as any)?.args?.prompt);\n } catch {\n agentInput = (chunk.payload as any)?.args?.prompt;\n }\n\n const toolPart = {\n type: 'dynamic-tool',\n toolName: primitiveId,\n toolCallId: runId,\n state: 'input-available',\n input: (chunk.payload as any).args,\n } as unknown as MastraMessagePart;\n\n return appendAssistantMessage(conversation, `workflow-start-${runId}-${Date.now()}`, [toolPart], {\n ...networkMode(metadata),\n selectionReason: (chunk.payload as any)?.args?.selectionReason || '',\n from: 'WORKFLOW',\n agentInput,\n });\n }\n\n if (chunk.type === 'workflow-execution-suspended') {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n const existing = lastMessage.content.metadata?.suspendedTools ?? {};\n return replaceLast(\n conversation,\n withMetadata(lastMessage, {\n ...cloneMetadata(lastMessage.content.metadata),\n mode: 'network',\n suspendedTools: {\n ...existing,\n [(chunk.payload as any).toolName]: {\n toolCallId: (chunk.payload as any).toolCallId,\n toolName: (chunk.payload as any).toolName,\n args: (chunk.payload as any).args,\n suspendPayload: (chunk.payload as any).suspendPayload,\n runId: (chunk.payload as any).runId,\n },\n },\n }),\n );\n }\n\n if (chunk.type.startsWith('workflow-execution-event-')) {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n\n const parts = [...lastMessage.content.parts];\n const toolPartIndex = findPartIndex(parts, part => isDynamicToolPart(part));\n if (toolPartIndex === -1) return conversation;\n const toolPart = parts[toolPartIndex] as any;\n\n const existingWorkflowState = (toolPart.output as WorkflowStreamResult<any, any, any, any>) || ({} as any);\n const updatedWorkflowState = mapWorkflowStreamChunkToWatchResult(existingWorkflowState, chunk.payload as any);\n\n parts[toolPartIndex] = { ...toolPart, output: updatedWorkflowState } as unknown as MastraMessagePart;\n return replaceLast(conversation, withParts(lastMessage, parts));\n }\n\n return conversation;\n};\n\nconst handleToolNetworkChunk = (\n chunk: NetworkChunkType,\n conversation: MastraDBMessage[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] => {\n if (chunk.type === 'tool-execution-start') {\n const argsData = (chunk.payload as any).args;\n const nestedArgs = argsData.args || {};\n const lastMessage = lastAssistant(conversation);\n\n const toolPart = {\n type: 'dynamic-tool',\n toolName: argsData.toolName || 'unknown',\n toolCallId: argsData.toolCallId || 'unknown',\n state: 'input-available',\n input: nestedArgs,\n } as unknown as MastraMessagePart;\n\n if (!lastMessage) {\n return appendAssistantMessage(\n conversation,\n `tool-start-${(chunk.payload as any).runId}-${Date.now()}`,\n [toolPart],\n {\n ...networkMode(metadata),\n selectionReason: metadata.mode === 'network' ? metadata.selectionReason || argsData.selectionReason : '',\n agentInput: nestedArgs,\n },\n );\n }\n\n const parts = [...lastMessage.content.parts, toolPart];\n return replaceLast(conversation, withParts(lastMessage, parts));\n }\n\n if (chunk.type === 'tool-execution-approval') {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n const existing = lastMessage.content.metadata?.requireApprovalMetadata ?? {};\n return replaceLast(\n conversation,\n withMetadata(lastMessage, {\n ...cloneMetadata(lastMessage.content.metadata),\n mode: 'network',\n requireApprovalMetadata: {\n ...existing,\n [(chunk.payload as any).toolName]: {\n toolCallId: (chunk.payload as any).toolCallId,\n toolName: (chunk.payload as any).toolName,\n args: (chunk.payload as any).args,\n runId: (chunk.payload as any).runId,\n },\n },\n }),\n );\n }\n\n if (chunk.type === 'tool-execution-suspended') {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n const existing = lastMessage.content.metadata?.suspendedTools ?? {};\n return replaceLast(\n conversation,\n withMetadata(lastMessage, {\n ...cloneMetadata(lastMessage.content.metadata),\n mode: 'network',\n suspendedTools: {\n ...existing,\n [(chunk.payload as any).toolName]: {\n toolCallId: (chunk.payload as any).toolCallId,\n toolName: (chunk.payload as any).toolName,\n args: (chunk.payload as any).args,\n suspendPayload: (chunk.payload as any).suspendPayload,\n runId: (chunk.payload as any).runId,\n },\n },\n }),\n );\n }\n\n if (chunk.type === 'tool-execution-end') {\n const lastMessage = lastAssistant(conversation);\n if (!lastMessage) return conversation;\n\n const parts = [...lastMessage.content.parts];\n const toolPartIndex = findPartIndex(\n parts,\n part => isDynamicToolPart(part) && (part as any).toolCallId === (chunk.payload as any).toolCallId,\n );\n if (toolPartIndex !== -1) {\n const toolPart = parts[toolPartIndex] as any;\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: currentOutput?.result || (chunk.payload as any)?.result || '',\n } as unknown as MastraMessagePart;\n }\n\n return replaceLast(conversation, withParts(lastMessage, parts));\n }\n\n return conversation;\n};\n\n/**\n * Reduce a single network-mode chunk into the running `MastraDBMessage[]`\n * conversation. Ports the historical `AISdkNetworkTransformer` so the playground\n * keeps rendering network badges (routing text, agent/workflow/tool execution,\n * suspensions, approvals, completion feedback) until the next major.\n */\nexport const accumulateNetworkChunk = ({\n chunk,\n conversation,\n metadata,\n}: AccumulateNetworkChunkArgs): MastraDBMessage[] => {\n const newConversation = [...conversation];\n\n if (chunk.type === 'routing-agent-text-delta') {\n return handleRoutingAgentDelta(chunk, newConversation, metadata);\n }\n\n if (chunk.type.startsWith('agent-execution-')) {\n return handleAgentNetworkChunk(chunk, newConversation, metadata);\n }\n\n if (chunk.type.startsWith('workflow-execution-')) {\n return handleWorkflowNetworkChunk(chunk, newConversation, metadata);\n }\n\n if (chunk.type.startsWith('tool-execution-')) {\n return handleToolNetworkChunk(chunk, newConversation, metadata);\n }\n\n if (chunk.type === 'network-validation-end') {\n if ((chunk.payload as any).suppressFeedback) return newConversation;\n\n const feedback = formatCompletionFeedback(\n {\n complete: (chunk.payload as any).passed,\n scorers: (chunk.payload as any).results,\n totalDuration: (chunk.payload as any).duration,\n timedOut: (chunk.payload as any).timedOut,\n completionReason: (chunk.payload as any).reason,\n },\n (chunk.payload as any).maxIterationReached,\n );\n\n const textPart = { type: 'text', text: feedback } as unknown as MastraMessagePart;\n return appendAssistantMessage(\n newConversation,\n `network-validation-end-${(chunk.payload as any).runId}-${Date.now()}`,\n [textPart],\n {\n ...networkMode(metadata),\n completionResult: { passed: (chunk.payload as any).passed },\n },\n );\n }\n\n if (chunk.type === 'network-execution-event-step-finish') {\n const lastMessage = lastAssistant(newConversation);\n if (!lastMessage) return newConversation;\n\n const agentChunk = chunk.payload as any;\n const parts = [...lastMessage.content.parts];\n const textPartIndex = findPartIndex(parts, part => part.type === 'text');\n\n if (textPartIndex === -1) {\n parts.push({ type: 'text', text: agentChunk.result, state: 'done' } as unknown as MastraMessagePart);\n return replaceLast(newConversation, withParts(lastMessage, parts));\n }\n\n const textPart = parts[textPartIndex];\n if (textPart.type === 'text') {\n parts[textPartIndex] = {\n ...(textPart as MastraTextPart),\n state: 'done',\n } as unknown as MastraMessagePart;\n return replaceLast(newConversation, withParts(lastMessage, parts));\n }\n\n return newConversation;\n }\n\n return newConversation;\n};\n\n// Re-export the provider-metadata helper for inspection in tests.\nexport { partProviderMetadata as __partProviderMetadata };\n","import type { MastraDBMessage, MastraMessagePart } from '@mastra/core/agent/message-list';\nimport type { CoreUserMessage } from '@mastra/core/llm';\n\n/**\n * Convert a CoreUserMessage into a canonical `MastraDBMessage` (`format: 2`).\n *\n * Image and file inputs are emitted as the canonical V4 `file` part shape\n * (`{ type: 'file', mimeType, data }`) — the exact shape memory resolves on\n * reload (see `AIV4Adapter`), so optimistic-send and reload render identically.\n *\n * Handles all CoreUserMessage content types:\n * - String content → single text part\n * - Array content with text/image/file parts → corresponding `MastraMessagePart`s\n */\nconst coreUserMessageToParts = (coreUserMessage: CoreUserMessage): MastraMessagePart[] =>\n typeof coreUserMessage.content === 'string'\n ? [{ type: 'text' as const, text: coreUserMessage.content }]\n : coreUserMessage.content.map((part): MastraMessagePart => {\n switch (part.type) {\n case 'text': {\n return { type: 'text' as const, text: part.text };\n }\n case 'image': {\n const data =\n typeof part.image === 'string' ? part.image : part.image instanceof URL ? part.image.toString() : '';\n return {\n type: 'file' as const,\n mimeType: part.mimeType ?? 'image/*',\n data,\n };\n }\n case 'file': {\n const data =\n typeof part.data === 'string' ? part.data : part.data instanceof URL ? part.data.toString() : '';\n return {\n type: 'file' as const,\n mimeType: part.mimeType,\n data,\n ...(part.filename !== undefined ? { filename: part.filename } : {}),\n };\n }\n default: {\n const exhaustiveCheck: never = part;\n throw new Error(`Unhandled content part type: ${(exhaustiveCheck as { type: string }).type}`);\n }\n }\n });\n\nconst newUserMessage = (parts: MastraMessagePart[]): MastraDBMessage => ({\n id: `user-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`,\n role: 'user',\n createdAt: new Date(),\n content: {\n format: 2,\n parts,\n },\n});\n\nexport const fromCoreUserMessageToMastraDBMessage = (coreUserMessage: CoreUserMessage): MastraDBMessage =>\n newUserMessage(coreUserMessageToParts(coreUserMessage));\n\n/**\n * Merge multiple `CoreUserMessage`s into a single canonical `MastraDBMessage`.\n *\n * A user turn that carries attachments arrives as several `CoreUserMessage`s\n * (one for the text, one per attachment). Memory/reload persists and resolves\n * that whole turn as a single multi-part user message, so the optimistic\n * streaming display must do the same — flatten every message's parts into one\n * `parts` array — to render identically (one bubble, not one per message).\n */\nexport const fromCoreUserMessagesToMastraDBMessage = (coreUserMessages: CoreUserMessage[]): MastraDBMessage =>\n newUserMessage(coreUserMessages.flatMap(coreUserMessageToParts));\n","import type { MastraDBMessage } from '@mastra/core/agent/message-list';\n\ntype RunIdMetadataEntry = { runId?: unknown };\ntype RunIdMetadataSource = Record<string, RunIdMetadataEntry>;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => value !== null && typeof value === 'object';\n\nconst runIdMetadataKeys = ['pendingToolApprovals', 'requireApprovalMetadata', 'suspendedTools'] as const;\n\nconst isRunIdMetadataSource = (value: unknown): value is RunIdMetadataSource =>\n isRecord(value) && Object.values(value).every(entry => isRecord(entry));\n\nconst getRunIdMetadataSources = (metadata: unknown): RunIdMetadataSource[] => {\n if (!isRecord(metadata)) return [];\n\n const sources: RunIdMetadataSource[] = [];\n for (const key of runIdMetadataKeys) {\n const source = metadata[key];\n if (isRunIdMetadataSource(source)) {\n sources.push(source);\n }\n }\n return sources;\n};\n\n/**\n * Scan initial DB-shape messages for any pending approvals, suspended tools, or\n * `requireApprovalMetadata` entries and return the first non-empty `runId`.\n *\n * Metadata is read off `message.content.metadata`, the canonical location for\n * MastraDBMessage UX hints.\n */\nexport const extractRunIdFromMessages = (messages: MastraDBMessage[]): string | undefined => {\n for (const message of messages) {\n for (const source of getRunIdMetadataSources(message.content?.metadata)) {\n for (const entry of Object.values(source)) {\n if (isRecord(entry) && typeof entry.runId === 'string' && entry.runId.length > 0) {\n return entry.runId;\n }\n }\n }\n }\n\n return undefined;\n};\n","export function convertSignalDataToBase64String(content: string | ArrayBuffer | Uint8Array): string {\n if (typeof content === 'string') {\n return content;\n }\n\n const bytes = content instanceof ArrayBuffer ? new Uint8Array(content) : content;\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n\n return btoa(binary);\n}\n","import { v4 as uuid } from '@lukeed/uuid';\nimport { MastraClient } from '@mastra/client-js';\nimport type { AIV5Type, MastraDBMessage, MastraToolInvocationPart } from '@mastra/core/agent/message-list';\nimport { AIV5Adapter } from '@mastra/core/agent/message-list';\nimport type { CoreUserMessage } from '@mastra/core/llm';\nimport type { TracingOptions } from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ChunkType, DataChunkType, NetworkChunkType } from '@mastra/core/stream';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n accumulateChunk,\n accumulateNetworkChunk,\n CLIENT_MESSAGE_ID_KEY,\n finishStreamingAssistantMessage,\n fromCoreUserMessagesToMastraDBMessage,\n} from '../lib/mastra-db';\nimport type { MastraDBMessageMetadata } from '../lib/mastra-db';\nimport { useMastraClient } from '../mastra-client-context';\nimport { extractRunIdFromMessages } from './extractRunIdFromMessages';\nimport { convertSignalDataToBase64String } from './signal-data';\nimport type { ClientToolsInput, ModelSettings } from './types';\n\nconst extractPendingToolApprovalIdsFromMessages = (messages: MastraDBMessage[]) => {\n const pendingToolApprovalIds = new Set<string>();\n\n for (const message of messages) {\n const metadata = message.content?.metadata as MastraDBMessageMetadata | undefined;\n if (!metadata) continue;\n\n const metadataSources = [\n metadata.pendingToolApprovals,\n metadata.requireApprovalMetadata,\n metadata.suspendedTools,\n ] as Array<Record<string, { toolCallId?: unknown }> | undefined>;\n\n for (const source of metadataSources) {\n if (!source || typeof source !== 'object') continue;\n\n for (const suspensionData of Object.values(source)) {\n const toolCallId = suspensionData?.toolCallId;\n if (typeof toolCallId === 'string' && toolCallId.length > 0) {\n pendingToolApprovalIds.add(toolCallId);\n }\n }\n }\n }\n\n return pendingToolApprovalIds;\n};\n\nconst toolCallHasOutput = (parts: MastraDBMessage['content']['parts'], toolCallId: string): boolean =>\n parts.some(part => {\n if (part.type !== 'tool-invocation') return false;\n const invocation = (part as MastraToolInvocationPart).toolInvocation;\n if (invocation.toolCallId !== toolCallId) return false;\n return invocation.state === 'result' || (invocation as { result?: unknown }).result != null;\n });\n\n/**\n * Normalize persisted initial messages back into the stream-friendly shape the\n * UI renders from. Mirrors `main`'s `resolveInitialMessages`:\n *\n * - Converts persisted `pendingToolApprovals` (DB shape) into\n * `requireApprovalMetadata` (stream shape) so reloaded threads still render\n * approve/decline buttons, filtering out approvals whose tool already\n * produced output, and marks the message `mode: 'stream'`.\n * - Drops assistant completion messages flagged `suppressFeedback`, which are\n * persisted by the supervisor agent but must stay hidden on reload.\n */\nconst resolveInitialMessages = (messages: MastraDBMessage[]): MastraDBMessage[] =>\n messages\n .filter(message => {\n const metadata = message.content?.metadata as MastraDBMessageMetadata | undefined;\n if (metadata?.completionResult?.suppressFeedback || metadata?.isTaskCompleteResult?.suppressFeedback) {\n return false;\n }\n return true;\n })\n .map(message => {\n const metadata = message.content?.metadata as MastraDBMessageMetadata | undefined;\n\n // A persisted/refetched thread must never show a stuck \"sending\" bubble\n // and must never carry the optimistic correlation key: the pending status\n // and its `clientMessageId` are transient UI state. The `clientMessageId`\n // can survive into storage (it is sent to the server with the message), so\n // strip it on every reload regardless of pending status; the rendered row\n // key falls back to the stable server `id`.\n const normalizedMessage =\n metadata && (metadata.status === 'pending' || CLIENT_MESSAGE_ID_KEY in metadata)\n ? (() => {\n const { [CLIENT_MESSAGE_ID_KEY]: _omitClientMessageId, ...rest } = metadata;\n const { status: _omitStatus, ...restWithoutStatus } = rest;\n return {\n ...message,\n content: {\n ...message.content,\n metadata: metadata.status === 'pending' ? restWithoutStatus : rest,\n },\n };\n })()\n : message;\n\n const normalizedMetadata = normalizedMessage.content?.metadata as MastraDBMessageMetadata | undefined;\n const pendingToolApprovals = normalizedMetadata?.pendingToolApprovals;\n if (!pendingToolApprovals || typeof pendingToolApprovals !== 'object') {\n return normalizedMessage;\n }\n\n const stillPending = Object.fromEntries(\n Object.entries(pendingToolApprovals).filter(\n ([, approval]) =>\n approval &&\n typeof approval === 'object' &&\n typeof approval.toolCallId === 'string' &&\n !toolCallHasOutput(normalizedMessage.content.parts, approval.toolCallId),\n ),\n );\n\n const { pendingToolApprovals: _omit, ...restMetadata } = normalizedMetadata;\n const hasStillPending = Object.keys(stillPending).length > 0;\n\n return {\n ...normalizedMessage,\n content: {\n ...normalizedMessage.content,\n metadata: {\n ...restMetadata,\n mode: 'stream' as const,\n ...(hasStillPending ? { pendingToolApprovals: stillPending, requireApprovalMetadata: stillPending } : {}),\n },\n },\n };\n });\n\ntype SignalContinuationOptions = {\n maxSteps?: number;\n modelSettings?: {\n frequencyPenalty?: number;\n presencePenalty?: number;\n maxRetries?: number;\n maxOutputTokens?: number;\n temperature?: number;\n topK?: number;\n topP?: number;\n };\n instructions?: ModelSettings['instructions'];\n providerOptions?: ModelSettings['providerOptions'];\n requireToolApproval?: boolean;\n tracingOptions?: TracingOptions;\n};\n\nexport interface MastraChatProps {\n agentId: string;\n resourceId?: string;\n threadId?: string;\n initialMessages?: MastraDBMessage[];\n /** Persistent request context used for tool approval/decline calls (e.g. agentVersionId). */\n requestContext?: RequestContext;\n /**\n * Client-side tool definitions. Forwarded once to `subscribeToThread` so\n * the client-js subscription drives the full client-tool execution loop\n * (execute, emit tool-result, continuation) without any logic in React.\n */\n clientTools?: ClientToolsInput;\n onSignalSent?: (signalId: string, preview: string) => void;\n onSignalEcho?: (signalId: string) => void;\n onThreadSignalsUnsupported?: () => void;\n /**\n * Use the agent-signals streaming path (sendSignal + subscribeToThread).\n * Defaults to `false`; set to `true` to opt into thread signals.\n */\n enableThreadSignals?: boolean;\n}\n\ninterface SharedArgs {\n coreUserMessages: CoreUserMessage[];\n requestContext?: RequestContext;\n threadId?: string;\n modelSettings?: ModelSettings;\n signal?: AbortSignal;\n tracingOptions?: TracingOptions;\n}\n\nexport type SendMessageArgs = { message: string; coreUserMessages?: CoreUserMessage[] } & (\n | ({ mode: 'generate' } & Omit<GenerateArgs, 'coreUserMessages'>)\n | ({ mode: 'stream' } & Omit<StreamArgs, 'coreUserMessages'>)\n | ({ mode: 'network' } & Omit<NetworkArgs, 'coreUserMessages'>)\n | ({ mode?: undefined } & Omit<StreamArgs, 'coreUserMessages'>)\n);\n\nexport type GenerateArgs = SharedArgs & {\n onFinish?: (messages: MastraDBMessage[]) => Promise<void>;\n clientTools?: ClientToolsInput;\n};\n\nexport type StreamArgs = SharedArgs & {\n onChunk?: (chunk: ChunkType) => Promise<void>;\n clientTools?: ClientToolsInput;\n signalId?: string;\n /**\n * Client-generated correlation id stamped on the optimistic pending bubble\n * and the outgoing message metadata so the server echo can reconcile them.\n */\n clientMessageId?: string;\n};\n\nexport type NetworkArgs = SharedArgs & {\n onNetworkChunk?: (chunk: NetworkChunkType) => Promise<void>;\n};\n\nconst isObject = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null;\n\nconst getErrorName = (error: unknown) => (isObject(error) && typeof error.name === 'string' ? error.name : undefined);\n\nconst isAbortError = (error: unknown) => getErrorName(error) === 'AbortError';\n\nconst isThreadSignalUnsupportedError = (error: unknown) => {\n if (!isObject(error)) return false;\n\n const status = error.status;\n if (status === 404 || status === 405 || status === 501) {\n return true;\n }\n\n return (\n status === 400 &&\n typeof error.message === 'string' &&\n error.message.includes('No active agent run found for signal target')\n );\n};\n\ntype DataChunk = Extract<ChunkType, DataChunkType>;\n\nconst isDataChunk = (chunk: ChunkType): chunk is DataChunk =>\n typeof chunk.type === 'string' && chunk.type.startsWith('data-');\n\n/**\n * Convert AI-SDK v5 UIMessages returned by the server (generate mode) into\n * `MastraDBMessage[]`, stamping the supplied metadata onto each message's\n * `content.metadata`. Private helper — `useChat` never exposes the AI-SDK\n * shape to consumers.\n */\nconst dbFromServerUiMessages = (\n uiMessages: AIV5Type.UIMessage[],\n metadata: MastraDBMessageMetadata,\n): MastraDBMessage[] =>\n uiMessages.map(uiMsg => {\n const dbMsg = AIV5Adapter.fromUIMessage(uiMsg);\n return {\n ...dbMsg,\n content: {\n ...dbMsg.content,\n metadata: {\n ...(dbMsg.content.metadata ?? {}),\n ...metadata,\n },\n },\n };\n });\n\nexport const useChat = ({\n agentId,\n resourceId,\n threadId,\n initialMessages,\n requestContext: propsRequestContext,\n clientTools: hookClientTools,\n onSignalSent,\n onSignalEcho,\n onThreadSignalsUnsupported,\n enableThreadSignals = false,\n}: MastraChatProps) => {\n const threadSignalsDisabled = enableThreadSignals === false;\n const _currentRunId = useRef<string | undefined>(undefined);\n const _onChunk = useRef<((chunk: ChunkType) => Promise<void>) | undefined>(undefined);\n const _networkRunId = useRef<string | undefined>(undefined);\n const _onNetworkChunk = useRef<((chunk: NetworkChunkType) => Promise<void>) | undefined>(undefined);\n const _requestContext = useRef<RequestContext | undefined>(propsRequestContext);\n // Tracks the active stream (untilIdle) request so a subsequent stream() call\n // can abort the previous one. Without this, a still-open prior stream keeps\n // its background-task pubsub subscription alive and fans events into a second\n // concurrent UI consumer, producing duplicate bg-task events and duplicate\n // continuation turns on the server.\n const _streamAbortRef = useRef<AbortController | null>(null);\n const _threadSubscriptionAbortRef = useRef<AbortController | null>(null);\n const _threadSubscriptionRef = useRef<{ abort?: () => Promise<boolean> | boolean; unsubscribe?: () => void } | null>(\n null,\n );\n const _threadSubscriptionKeyRef = useRef<string | undefined>(undefined);\n const _threadSubscriptionPromiseRef = useRef<Promise<void> | null>(null);\n const _threadSignalsUnsupportedRef = useRef(false);\n const [messages, setMessages] = useState<MastraDBMessage[]>([]);\n const [toolCallApprovals, setToolCallApprovals] = useState<{\n [toolCallId: string]: { status: 'approved' | 'declined' };\n }>({});\n const [networkToolCallApprovals, setNetworkToolCallApprovals] = useState<{\n [toolName: string]: { status: 'approved' | 'declined' };\n }>({});\n const pendingToolApprovalIdsRef = useRef(new Set<string>());\n const [isAwaitingToolApproval, setIsAwaitingToolApproval] = useState(false);\n\n const baseClient = useMastraClient();\n const [isRunning, setIsRunning] = useState(false);\n\n useEffect(() => {\n const formattedMessages = resolveInitialMessages(initialMessages ?? []);\n setMessages(formattedMessages);\n pendingToolApprovalIdsRef.current = extractPendingToolApprovalIdsFromMessages(formattedMessages);\n setIsAwaitingToolApproval(pendingToolApprovalIdsRef.current.size > 0);\n _currentRunId.current = extractRunIdFromMessages(formattedMessages);\n }, [initialMessages]);\n\n useEffect(() => {\n _requestContext.current = propsRequestContext;\n }, [propsRequestContext]);\n\n type SignalContentPart =\n | { type: 'text'; text: string }\n | { type: 'file'; data: string; mediaType: string; filename?: string };\n type UserMessageSignalContents = string | SignalContentPart[];\n\n const normalizeSignalFileData = (data: string | URL | ArrayBuffer | Uint8Array) => {\n if (data instanceof URL) return data.toString();\n return convertSignalDataToBase64String(data);\n };\n\n const getSignalContents = (coreUserMessages: CoreUserMessage[]): UserMessageSignalContents => {\n const parts = coreUserMessages.reduce<SignalContentPart[]>((allParts, message) => {\n if (typeof message.content === 'string') {\n allParts.push({ type: 'text', text: message.content });\n return allParts;\n }\n\n for (const part of message.content) {\n if (part.type === 'text') {\n allParts.push({ type: 'text', text: part.text });\n } else if (part.type === 'file') {\n allParts.push({\n type: 'file',\n data: normalizeSignalFileData(part.data),\n mediaType: part.mimeType,\n ...(part.filename ? { filename: part.filename } : {}),\n });\n } else if (part.type === 'image') {\n allParts.push({\n type: 'file',\n data: normalizeSignalFileData(part.image),\n mediaType: part.mimeType ?? 'image/png',\n });\n }\n }\n\n return allParts;\n }, []);\n\n return parts.length === 1 && parts[0]?.type === 'text' ? parts[0].text : parts;\n };\n\n const markThreadSignalsUnsupported = useCallback(() => {\n _threadSignalsUnsupportedRef.current = true;\n onThreadSignalsUnsupported?.();\n }, [onThreadSignalsUnsupported]);\n\n const getSignalPreview = (coreUserMessages: CoreUserMessage[]) => {\n const preview = coreUserMessages\n .flatMap(message => {\n if (typeof message.content === 'string') {\n return [message.content];\n }\n\n return message.content.map(part => {\n if (part.type === 'text') return part.text;\n if (part.type === 'image') return 'Image';\n return part.filename ? `File: ${part.filename}` : 'File';\n });\n })\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n return preview || 'Attachment';\n };\n\n const closeThreadSubscription = useCallback(() => {\n const subscription = _threadSubscriptionRef.current;\n if (subscription?.unsubscribe) {\n subscription.unsubscribe();\n } else {\n _threadSubscriptionAbortRef.current?.abort();\n }\n _threadSubscriptionRef.current = null;\n _threadSubscriptionAbortRef.current = null;\n _threadSubscriptionKeyRef.current = undefined;\n _threadSubscriptionPromiseRef.current = null;\n }, []);\n\n const processStreamChunk = useCallback(\n async (chunk: ChunkType, onChunk?: (chunk: ChunkType) => Promise<void>) => {\n setMessages(prev => accumulateChunk({ chunk, conversation: prev, metadata: { mode: 'stream' } }));\n\n if (\n chunk.type === 'data-user-message' &&\n isDataChunk(chunk) &&\n (chunk.data?.type === 'user-message' || chunk.data?.type === 'user') &&\n typeof chunk.data?.id === 'string'\n ) {\n onSignalEcho?.(chunk.data.id);\n }\n\n if (chunk.type === 'start') {\n setIsRunning(true);\n if ('runId' in chunk && typeof chunk.runId === 'string') {\n _currentRunId.current = chunk.runId;\n }\n }\n\n if (chunk.type === 'tool-call-approval' || chunk.type === 'tool-call-suspended') {\n const toolCallId = chunk.payload?.toolCallId;\n if (typeof toolCallId === 'string') {\n pendingToolApprovalIdsRef.current.add(toolCallId);\n setIsAwaitingToolApproval(true);\n }\n setIsRunning(false);\n }\n\n if (chunk.type === 'finish' || chunk.type === 'abort' || chunk.type === 'error') {\n pendingToolApprovalIdsRef.current.clear();\n setIsAwaitingToolApproval(false);\n setIsRunning(false);\n }\n\n void (onChunk ?? _onChunk.current)?.(chunk);\n },\n [onSignalEcho],\n );\n\n const ensureThreadSubscription = useCallback(\n async ({ threadId, resourceId }: { threadId: string; resourceId?: string }) => {\n const subscriptionKey = `${agentId}:${resourceId ?? ''}:${threadId}`;\n if (_threadSubscriptionKeyRef.current === subscriptionKey && _threadSubscriptionPromiseRef.current) {\n await _threadSubscriptionPromiseRef.current;\n return;\n }\n\n closeThreadSubscription();\n const subscriptionAbort = new AbortController();\n _threadSubscriptionAbortRef.current = subscriptionAbort;\n _threadSubscriptionKeyRef.current = subscriptionKey;\n\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: subscriptionAbort.signal,\n });\n const subscriptionAgent = clientWithAbort.getAgent(agentId);\n\n _threadSubscriptionPromiseRef.current = subscriptionAgent\n .subscribeToThread({ resourceId, threadId })\n .then(response => {\n const subscription = response;\n if (_threadSubscriptionAbortRef.current !== subscriptionAbort) {\n subscription.unsubscribe();\n return;\n }\n\n _threadSubscriptionRef.current = subscription;\n void subscription\n .processDataStream({\n onChunk: chunk => processStreamChunk(chunk),\n })\n .catch(error => {\n if (!isAbortError(error)) {\n console.error('[useChat] Thread subscription failed', error);\n setIsRunning(false);\n }\n })\n .finally(() => {\n if (_threadSubscriptionRef.current === subscription) {\n _threadSubscriptionRef.current = null;\n }\n if (_threadSubscriptionAbortRef.current === subscriptionAbort) {\n _threadSubscriptionAbortRef.current = null;\n _threadSubscriptionKeyRef.current = undefined;\n _threadSubscriptionPromiseRef.current = null;\n }\n });\n })\n .catch(error => {\n if (isThreadSignalUnsupportedError(error)) {\n markThreadSignalsUnsupported();\n if (_threadSubscriptionAbortRef.current === subscriptionAbort) {\n _threadSubscriptionRef.current = null;\n _threadSubscriptionAbortRef.current = null;\n _threadSubscriptionKeyRef.current = undefined;\n _threadSubscriptionPromiseRef.current = null;\n }\n return;\n }\n\n if (!isAbortError(error)) {\n console.error('[useChat] Thread subscription failed', error);\n setIsRunning(false);\n }\n throw error;\n });\n\n await _threadSubscriptionPromiseRef.current;\n },\n [agentId, baseClient, closeThreadSubscription, markThreadSignalsUnsupported, processStreamChunk],\n );\n\n useEffect(() => {\n _threadSignalsUnsupportedRef.current = false;\n return closeThreadSubscription;\n }, [agentId, resourceId, threadId, closeThreadSubscription]);\n\n useEffect(() => {\n if (!threadId || threadSignalsDisabled) {\n closeThreadSubscription();\n return;\n }\n\n void ensureThreadSubscription({ threadId, resourceId: resourceId || agentId }).catch(error => {\n if (!isAbortError(error)) {\n console.error('[useChat] Thread subscription failed', error);\n }\n });\n }, [agentId, closeThreadSubscription, ensureThreadSubscription, resourceId, threadId, threadSignalsDisabled]);\n\n const generate = async ({\n coreUserMessages,\n requestContext,\n threadId,\n modelSettings,\n signal,\n onFinish,\n tracingOptions,\n clientTools,\n }: GenerateArgs) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n maxSteps,\n requireToolApproval,\n } = modelSettings || {};\n const resolvedRequestContext = requestContext ?? propsRequestContext;\n const resolvedClientTools = clientTools ?? hookClientTools;\n _requestContext.current = resolvedRequestContext;\n setIsRunning(true);\n\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const runId = uuid();\n _currentRunId.current = runId;\n\n const response = await agent.generate(coreUserMessages, {\n runId,\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n requestContext: resolvedRequestContext,\n ...(threadId ? { memory: { thread: threadId, resource: resourceId || agentId } } : {}),\n providerOptions,\n tracingOptions,\n requireToolApproval,\n clientTools: resolvedClientTools,\n });\n\n // Check if suspended for tool approval\n if (response.finishReason === 'suspended' && response.suspendPayload) {\n const { toolCallId, toolName, args } = response.suspendPayload;\n\n // Add uiMessages with requireApprovalMetadata so UI shows approval buttons\n if (response.response?.uiMessages) {\n const dbMessages = dbFromServerUiMessages(response.response.uiMessages, {\n mode: 'generate',\n requireApprovalMetadata: {\n [toolName]: { toolCallId, toolName, args },\n },\n });\n\n setMessages(prev => [...prev, ...dbMessages]);\n }\n\n // Set isRunning to false so approval buttons are enabled\n // The approval/decline functions will set isRunning to true when clicked\n setIsRunning(false);\n return;\n }\n\n setIsRunning(false);\n\n if (response && 'uiMessages' in response.response && response.response.uiMessages) {\n const dbMessages = dbFromServerUiMessages(response.response.uiMessages, { mode: 'generate' });\n void onFinish?.(dbMessages);\n setMessages(prev => [...prev, ...dbMessages]);\n }\n };\n\n const stream = async ({\n coreUserMessages,\n requestContext,\n threadId,\n onChunk,\n modelSettings,\n signal,\n tracingOptions,\n clientTools,\n signalId,\n clientMessageId,\n }: StreamArgs) => {\n const {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxTokens,\n temperature,\n topK,\n topP,\n instructions,\n providerOptions,\n maxSteps,\n requireToolApproval,\n } = modelSettings || {};\n\n const resolvedRequestContext = requestContext ?? propsRequestContext;\n const resolvedClientTools = clientTools ?? hookClientTools;\n const signalContinuationOptions: SignalContinuationOptions = {\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n providerOptions,\n requireToolApproval,\n tracingOptions,\n };\n _requestContext.current = resolvedRequestContext;\n setIsRunning(true);\n\n _streamAbortRef.current?.abort();\n const internalAbort = new AbortController();\n _streamAbortRef.current = internalAbort;\n\n if (signal) {\n if (signal.aborted) internalAbort.abort();\n else signal.addEventListener('abort', () => internalAbort.abort(), { once: true });\n }\n\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: internalAbort.signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const streamWithLegacyRoute = async () => {\n const runId = uuid();\n const response = await agent.stream(coreUserMessages, {\n runId,\n maxSteps,\n untilIdle: true,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n requestContext: resolvedRequestContext,\n ...(threadId ? { memory: { thread: threadId, resource: resourceId || agentId } } : {}),\n providerOptions,\n requireToolApproval,\n tracingOptions,\n clientTools: resolvedClientTools,\n });\n\n _onChunk.current = onChunk;\n _currentRunId.current = runId;\n\n await response.processDataStream({\n onChunk: chunk => processStreamChunk(chunk, onChunk),\n });\n\n if (_streamAbortRef.current === internalAbort) {\n _streamAbortRef.current = null;\n }\n setIsRunning(false);\n };\n\n if (!threadId || _threadSignalsUnsupportedRef.current || threadSignalsDisabled) {\n await streamWithLegacyRoute();\n return;\n }\n\n _onChunk.current = onChunk;\n\n await ensureThreadSubscription({ threadId, resourceId: resourceId || agentId });\n\n if (_threadSignalsUnsupportedRef.current) {\n await streamWithLegacyRoute();\n return;\n }\n\n const resolvedSignalId = signalId ?? uuid();\n const messageContents = getSignalContents(coreUserMessages);\n const streamOptions = {\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n instructions,\n requestContext: resolvedRequestContext,\n providerOptions: providerOptions as any,\n requireToolApproval,\n tracingOptions,\n };\n\n try {\n const result = await agent.sendMessage({\n message: clientMessageId\n ? { contents: messageContents, metadata: { [CLIENT_MESSAGE_ID_KEY]: clientMessageId } }\n : messageContents,\n resourceId: resourceId || agentId,\n threadId,\n ifIdle: {\n streamOptions: {\n ...signalContinuationOptions,\n requestContext: resolvedRequestContext,\n clientTools: resolvedClientTools,\n },\n },\n });\n const echoedSignalId =\n result.signal &&\n typeof result.signal === 'object' &&\n 'id' in result.signal &&\n typeof result.signal.id === 'string'\n ? result.signal.id\n : resolvedSignalId;\n onSignalSent?.(echoedSignalId, getSignalPreview(coreUserMessages));\n if (pendingToolApprovalIdsRef.current.size > 0) {\n setIsRunning(false);\n }\n } catch (error) {\n if (isThreadSignalUnsupportedError(error)) {\n onSignalSent?.(resolvedSignalId, getSignalPreview(coreUserMessages));\n try {\n await agent.sendSignal({\n signal: {\n id: resolvedSignalId,\n type: 'user-message',\n contents: messageContents,\n },\n resourceId: resourceId || agentId,\n threadId,\n ifIdle: { streamOptions },\n });\n return;\n } catch (signalError) {\n onSignalEcho?.(resolvedSignalId);\n if (isThreadSignalUnsupportedError(signalError)) {\n markThreadSignalsUnsupported();\n setMessages(prev => [...prev, fromCoreUserMessagesToMastraDBMessage(coreUserMessages)]);\n await streamWithLegacyRoute();\n return;\n }\n throw signalError;\n }\n }\n throw error;\n }\n\n if (_streamAbortRef.current === internalAbort) {\n _streamAbortRef.current = null;\n }\n };\n\n const network = async ({\n coreUserMessages,\n requestContext,\n threadId,\n onNetworkChunk,\n modelSettings,\n signal,\n tracingOptions,\n }: NetworkArgs) => {\n const { frequencyPenalty, presencePenalty, maxRetries, maxTokens, temperature, topK, topP, maxSteps } =\n modelSettings || {};\n\n const resolvedRequestContext = requestContext ?? propsRequestContext;\n _requestContext.current = resolvedRequestContext;\n setIsRunning(true);\n\n const clientWithAbort = new MastraClient({\n ...baseClient!.options,\n abortSignal: signal,\n });\n\n const agent = clientWithAbort.getAgent(agentId);\n\n const runId = uuid();\n\n const response = await agent.network(coreUserMessages, {\n maxSteps,\n modelSettings: {\n frequencyPenalty,\n presencePenalty,\n maxRetries,\n maxOutputTokens: maxTokens,\n temperature,\n topK,\n topP,\n },\n runId,\n requestContext: resolvedRequestContext,\n ...(threadId ? { memory: { thread: threadId, resource: resourceId || agentId } } : {}),\n tracingOptions,\n });\n\n _onNetworkChunk.current = onNetworkChunk;\n _networkRunId.current = runId;\n\n // Accumulate network chunks into `messages` as `MastraDBMessage` (temporary\n // bridge until the next major), while still forwarding chunks to the\n // consumer for side-effects (OM, working memory, thread list, errors).\n await response.processDataStream({\n onChunk: async (chunk: NetworkChunkType) => {\n setMessages(prev => accumulateNetworkChunk({ chunk, conversation: prev, metadata: { mode: 'network' } }));\n void onNetworkChunk?.(chunk);\n },\n });\n\n setMessages(prev => finishStreamingAssistantMessage(prev));\n setIsRunning(false);\n };\n\n const handleCancelRun = () => {\n _streamAbortRef.current?.abort();\n _streamAbortRef.current = null;\n const threadSubscription = _threadSubscriptionRef.current;\n void Promise.resolve(threadSubscription?.abort?.()).catch(error => {\n console.error('[useChat] Failed to abort thread subscription', error);\n });\n closeThreadSubscription();\n setMessages(prev => finishStreamingAssistantMessage(prev));\n pendingToolApprovalIdsRef.current.clear();\n setIsAwaitingToolApproval(false);\n setIsRunning(false);\n _currentRunId.current = undefined;\n _onChunk.current = undefined;\n _networkRunId.current = undefined;\n _onNetworkChunk.current = undefined;\n _requestContext.current = undefined;\n };\n\n const approveToolCall = async (toolCallId: string) => {\n const onChunk = _onChunk.current;\n const currentRunId = _currentRunId.current;\n\n if (!currentRunId)\n return console.info('[approveToolCall] approveToolCall can only be called after a stream has started');\n\n setIsRunning(true);\n setToolCallApprovals(prev => ({ ...prev, [toolCallId]: { status: 'approved' } }));\n\n const agent = baseClient.getAgent(agentId);\n if (_threadSubscriptionKeyRef.current && threadId) {\n try {\n await agent.sendToolApproval({\n resourceId: resourceId || agentId,\n threadId,\n toolCallId,\n approved: true,\n requestContext: _requestContext.current,\n });\n pendingToolApprovalIdsRef.current.delete(toolCallId);\n setIsAwaitingToolApproval(pendingToolApprovalIdsRef.current.size > 0);\n setIsRunning(false);\n } catch (error) {\n setToolCallApprovals(prev => {\n const next = { ...prev };\n delete next[toolCallId];\n return next;\n });\n setIsRunning(false);\n throw error;\n }\n return;\n }\n\n const response = await agent.approveToolCall({\n runId: currentRunId,\n toolCallId,\n requestContext: _requestContext.current,\n });\n\n await response.processDataStream({\n onChunk: async (chunk: ChunkType) => {\n await processStreamChunk(chunk, onChunk);\n },\n });\n setIsRunning(false);\n };\n\n const declineToolCall = async (toolCallId: string) => {\n const onChunk = _onChunk.current;\n const currentRunId = _currentRunId.current;\n\n if (!currentRunId)\n return console.info('[declineToolCall] declineToolCall can only be called after a stream has started');\n\n setIsRunning(true);\n setToolCallApprovals(prev => ({ ...prev, [toolCallId]: { status: 'declined' } }));\n const agent = baseClient.getAgent(agentId);\n if (_threadSubscriptionKeyRef.current && threadId) {\n try {\n await agent.sendToolApproval({\n resourceId: resourceId || agentId,\n threadId,\n toolCallId,\n approved: false,\n requestContext: _requestContext.current,\n });\n pendingToolApprovalIdsRef.current.delete(toolCallId);\n setIsAwaitingToolApproval(pendingToolApprovalIdsRef.current.size > 0);\n setIsRunning(false);\n } catch (error) {\n setToolCallApprovals(prev => {\n const next = { ...prev };\n delete next[toolCallId];\n return next;\n });\n setIsRunning(false);\n throw error;\n }\n return;\n }\n\n const response = await agent.declineToolCall({\n runId: currentRunId,\n toolCallId,\n requestContext: _requestContext.current,\n });\n\n await response.processDataStream({\n onChunk: async (chunk: ChunkType) => {\n await processStreamChunk(chunk, onChunk);\n },\n });\n setIsRunning(false);\n };\n\n const approveToolCallGenerate = async (toolCallId: string) => {\n const currentRunId = _currentRunId.current;\n\n if (!currentRunId)\n return console.info(\n '[approveToolCallGenerate] approveToolCallGenerate can only be called after a generate has started',\n );\n\n setIsRunning(true);\n setToolCallApprovals(prev => ({ ...prev, [toolCallId]: { status: 'approved' } }));\n\n const agent = baseClient.getAgent(agentId);\n const response = await agent.approveToolCallGenerate({\n runId: currentRunId,\n toolCallId,\n requestContext: _requestContext.current,\n });\n\n if (response && 'uiMessages' in response.response && response.response.uiMessages) {\n const dbMessages = dbFromServerUiMessages(response.response.uiMessages, { mode: 'generate' });\n setMessages(prev => [...prev, ...dbMessages]);\n }\n\n setIsRunning(false);\n };\n\n const declineToolCallGenerate = async (toolCallId: string) => {\n const currentRunId = _currentRunId.current;\n\n if (!currentRunId)\n return console.info(\n '[declineToolCallGenerate] declineToolCallGenerate can only be called after a generate has started',\n );\n\n setIsRunning(true);\n setToolCallApprovals(prev => ({ ...prev, [toolCallId]: { status: 'declined' } }));\n\n const agent = baseClient.getAgent(agentId);\n const response = await agent.declineToolCallGenerate({\n runId: currentRunId,\n toolCallId,\n requestContext: _requestContext.current,\n });\n\n if (response && 'uiMessages' in response.response && response.response.uiMessages) {\n const dbMessages = dbFromServerUiMessages(response.response.uiMessages, { mode: 'generate' });\n setMessages(prev => [...prev, ...dbMessages]);\n }\n\n setIsRunning(false);\n };\n\n const approveNetworkToolCall = async (toolName: string, runId?: string) => {\n const onNetworkChunk = _onNetworkChunk.current;\n const networkRunId = runId || _networkRunId.current;\n\n if (!networkRunId)\n return console.info(\n '[approveNetworkToolCall] approveNetworkToolCall can only be called after a network stream has started',\n );\n\n setIsRunning(true);\n setNetworkToolCallApprovals(prev => ({\n ...prev,\n [runId ? `${runId}-${toolName}` : toolName]: { status: 'approved' },\n }));\n\n const agent = baseClient.getAgent(agentId);\n const response = await agent.approveNetworkToolCall({\n runId: networkRunId,\n requestContext: _requestContext.current,\n });\n\n await response.processDataStream({\n onChunk: async (chunk: NetworkChunkType) => {\n setMessages(prev => accumulateNetworkChunk({ chunk, conversation: prev, metadata: { mode: 'network' } }));\n void onNetworkChunk?.(chunk);\n },\n });\n\n setMessages(prev => finishStreamingAssistantMessage(prev));\n setIsRunning(false);\n };\n\n const declineNetworkToolCall = async (toolName: string, runId?: string) => {\n const onNetworkChunk = _onNetworkChunk.current;\n const networkRunId = runId || _networkRunId.current;\n\n if (!networkRunId)\n return console.info(\n '[declineNetworkToolCall] declineNetworkToolCall can only be called after a network stream has started',\n );\n\n setIsRunning(true);\n setNetworkToolCallApprovals(prev => ({\n ...prev,\n [runId ? `${runId}-${toolName}` : toolName]: { status: 'declined' },\n }));\n\n const agent = baseClient.getAgent(agentId);\n const response = await agent.declineNetworkToolCall({\n runId: networkRunId,\n requestContext: _requestContext.current,\n });\n\n await response.processDataStream({\n onChunk: async (chunk: NetworkChunkType) => {\n setMessages(prev => accumulateNetworkChunk({ chunk, conversation: prev, metadata: { mode: 'network' } }));\n void onNetworkChunk?.(chunk);\n },\n });\n\n setMessages(prev => finishStreamingAssistantMessage(prev));\n setIsRunning(false);\n };\n\n const sendMessage = async ({ mode = 'stream', ...args }: SendMessageArgs) => {\n const nextMessage: Omit<CoreUserMessage, 'id'> = { role: 'user', content: [{ type: 'text', text: args.message }] };\n const coreUserMessages = [nextMessage];\n\n if (args.coreUserMessages) {\n coreUserMessages.push(...args.coreUserMessages);\n }\n\n // The whole user turn (text + any attachments) is merged into a single\n // optimistic message so streaming renders one bubble, matching how\n // memory/reload resolves the persisted multi-part user message.\n const dbUserMessage = fromCoreUserMessagesToMastraDBMessage(coreUserMessages);\n const clientSetId =\n mode === 'stream' && args.threadId && !_threadSignalsUnsupportedRef.current && !threadSignalsDisabled\n ? `client-set-${uuid()}`\n : undefined;\n const signalId = clientSetId;\n const clientMessageId = clientSetId;\n\n if (signalId) {\n // Signal path: append the user turn optimistically as `pending` with a\n // visibly client-owned id. The server echo can replace the final message\n // id while the matching client id reconciles the pending bubble.\n const metadata: MastraDBMessageMetadata = {\n ...dbUserMessage.content.metadata,\n mode: 'stream',\n status: 'pending',\n [CLIENT_MESSAGE_ID_KEY]: clientMessageId,\n };\n const pendingMessage = { ...dbUserMessage, id: clientSetId, content: { ...dbUserMessage.content, metadata } };\n setMessages(s => [...s, pendingMessage]);\n } else {\n setMessages(s => [...s, dbUserMessage]);\n }\n\n if (mode === 'generate') {\n await generate({ ...args, coreUserMessages });\n } else if (mode === 'stream') {\n await stream({ ...args, coreUserMessages, signalId, clientMessageId });\n } else if (mode === 'network') {\n await network({ ...args, coreUserMessages });\n }\n };\n\n return {\n setMessages,\n sendMessage,\n isRunning,\n isAwaitingToolApproval,\n messages,\n approveToolCall,\n declineToolCall,\n approveToolCallGenerate,\n declineToolCallGenerate,\n cancelRun: handleCancelRun,\n toolCallApprovals,\n approveNetworkToolCall,\n declineNetworkToolCall,\n networkToolCallApprovals,\n };\n};\n","import React from 'react';\n\nexport interface IconProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const IconSizes = {\n sm: 'mastra:[&>svg]:size-3',\n md: 'mastra:[&>svg]:size-4',\n lg: 'mastra:[&>svg]:size-5',\n};\n\nexport const Icon = ({ children, className, size = 'md', ...props }: IconProps) => {\n return (\n <div className={className || IconSizes[size]} {...props}>\n {children}\n </div>\n );\n};\n","import { createContext, useContext } from 'react';\nimport type { EntityVariant } from './types';\n\nexport type EntityContextType = {\n expanded: boolean;\n setExpanded: (expanded: boolean) => void;\n variant: EntityVariant;\n disabled: boolean;\n};\n\nexport const EntityContext = createContext<EntityContextType>({\n expanded: false,\n setExpanded: () => {},\n variant: 'initial',\n disabled: false,\n});\n\nexport const EntityProvider = EntityContext.Provider;\n\nexport const useEntity = () => useContext(EntityContext);\n","import { ChevronDownIcon } from 'lucide-react';\nimport { useState } from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { Icon } from '../Icon/Icon';\nimport { EntityProvider, useEntity } from './context';\n\nimport type { EntityVariant } from './types';\n\nexport interface EntityProps extends React.ComponentPropsWithoutRef<'div'> {\n variant?: EntityVariant;\n initialExpanded?: boolean;\n disabled?: boolean;\n}\n\nexport const Entity = ({\n className,\n variant = 'initial',\n initialExpanded = false,\n disabled = false,\n ...props\n}: EntityProps) => {\n const [expanded, setExpanded] = useState(initialExpanded);\n\n return (\n <EntityProvider value={{ expanded, setExpanded, variant, disabled }}>\n <div className={className} {...props} />\n </EntityProvider>\n );\n};\n\nexport const EntityTriggerClass = twMerge(\n 'mastra:aria-disabled:cursor-not-allowed mastra:aria-disabled:bg-surface5 mastra:aria-disabled:text-text3',\n 'mastra:aria-expanded:rounded-b-none mastra:aria-expanded:border-b-0',\n 'mastra:bg-surface3 mastra:text-text6 mastra:hover:bg-surface4 mastra:active:bg-surface5',\n 'mastra:rounded-lg mastra:py-2 mastra:px-4 mastra:border mastra:border-border1',\n 'mastra:cursor-pointer mastra:inline-flex mastra:items-center mastra:gap-1 mastra:font-mono',\n);\n\nexport const EntityTriggerVariantClasses: Record<EntityVariant, string> = {\n agent: 'mastra:[&_svg.mastra-icon]:text-accent1',\n workflow: 'mastra:[&_svg.mastra-icon]:text-accent3',\n tool: 'mastra:[&_svg.mastra-icon]:text-accent6',\n memory: 'mastra:[&_svg.mastra-icon]:text-accent2',\n initial: 'mastra:[&_svg.mastra-icon]:text-text3',\n};\n\nexport const EntityTrigger = ({ className, children, ...props }: React.ComponentPropsWithoutRef<'button'>) => {\n const { expanded, setExpanded, variant, disabled } = useEntity();\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (disabled) return;\n setExpanded(!expanded);\n props?.onClick?.(e);\n };\n\n return (\n <button\n className={className || twMerge(EntityTriggerClass, !disabled && EntityTriggerVariantClasses[variant])}\n {...props}\n onClick={handleClick}\n aria-expanded={expanded}\n aria-disabled={disabled}\n >\n {children}\n </button>\n );\n};\n\nexport const EntityContentClass = twMerge(\n 'mastra:space-y-4',\n 'mastra:rounded-lg mastra:rounded-tl-none mastra:p-4 mastra:border mastra:border-border1 mastra:-mt-[0.5px]',\n 'mastra:bg-surface3 mastra:text-text6',\n);\n\nexport const EntityContent = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n const { expanded } = useEntity();\n\n if (!expanded) return null;\n\n return <div className={className || EntityContentClass} {...props} />;\n};\n\nexport const EntityCaret = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n const { expanded } = useEntity();\n\n return (\n <Icon>\n <ChevronDownIcon\n className={twMerge(\n `mastra:text-text3 mastra:transition-transform mastra:duration-200 mastra:ease-in-out`,\n expanded ? 'mastra:rotate-0' : 'mastra:-rotate-90',\n className,\n )}\n {...props}\n />\n </Icon>\n );\n};\n","import { twMerge } from 'tailwind-merge';\n\nexport const ToolApprovalClass = twMerge(\n 'mastra:rounded-lg mastra:border mastra:border-border1 mastra:max-w-1/2 mastra:mt-2',\n 'mastra:bg-surface3 mastra:text-text6',\n);\n\nexport const ToolApproval = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalClass} {...props} />;\n};\n\nexport const ToolApprovalTitleClass = twMerge('mastra:text-text6 mastra:inline-flex mastra:items-center mastra:gap-1');\nexport const ToolApprovalTitle = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalTitleClass} {...props} />;\n};\n\nexport const ToolApprovalHeaderClass = twMerge(\n 'mastra:flex mastra:justify-between mastra:items-center mastra:gap-2',\n 'mastra:border-b mastra:border-border1 mastra:px-4 mastra:py-2',\n);\nexport const ToolApprovalHeader = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalHeaderClass} {...props} />;\n};\n\nexport const ToolApprovalContentClass = twMerge('mastra:text-text6 mastra:p-4');\nexport const ToolApprovalContent = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalContentClass} {...props} />;\n};\n\nexport const ToolApprovalActionsClass = twMerge('mastra:flex mastra:gap-2 mastra:items-center');\nexport const ToolApprovalActions = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || ToolApprovalActionsClass} {...props} />;\n};\n","import type { ElementType } from 'react';\n\nexport const EntryClass = 'mastra:space-y-2';\nexport const Entry = ({ className, ...props }: React.ComponentPropsWithoutRef<'div'>) => {\n return <div className={className || EntryClass} {...props} />;\n};\n\ntype EntryTitleProps = React.ComponentPropsWithoutRef<'div'> & {\n as?: ElementType;\n};\n\nexport const EntryTitleClass = 'mastra:font-mono mastra:text-sm mastra:text-text3';\nexport const EntryTitle = ({ className, as: Root = 'h3', ...props }: EntryTitleProps) => {\n return <Root className={className || EntryTitleClass} {...props} />;\n};\n","import type { TooltipTriggerProps, TooltipContentProps } from '@radix-ui/react-tooltip';\nimport {\n TooltipTrigger as RTooltipTrigger,\n TooltipProvider as RTooltipProvider,\n Root as RTooltipRoot,\n TooltipPortal as RTooltipPortal,\n TooltipContent as RTooltipContent,\n} from '@radix-ui/react-tooltip';\n\nexport interface TooltipProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n}\n\nexport const Tooltip = ({ children }: TooltipProps) => {\n return (\n <RTooltipProvider>\n <RTooltipRoot>{children}</RTooltipRoot>\n </RTooltipProvider>\n );\n};\n\nexport const TooltipContentClass =\n 'mastra:bg-surface4 mastra:text-text6 mastra mastra:rounded-lg mastra:py-1 mastra:px-2 mastra:text-xs mastra:border mastra:border-border1 mastra-tooltip-enter';\nexport const TooltipContent = ({ children, className, ...props }: TooltipContentProps) => {\n return (\n <RTooltipPortal>\n <RTooltipContent className={className || TooltipContentClass} {...props}>\n {children}\n </RTooltipContent>\n </RTooltipPortal>\n );\n};\n\nexport const TooltipTrigger = (props: TooltipTriggerProps) => {\n return <RTooltipTrigger {...props} asChild />;\n};\n","import { twMerge } from 'tailwind-merge';\nimport type { IconProps } from '../Icon/Icon';\nimport { Icon } from '../Icon/Icon';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../Tooltip/Tooltip';\n\nexport interface IconButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n children: React.ReactNode;\n tooltip: React.ReactNode;\n size?: IconProps['size'];\n}\n\nexport const IconButtonClass =\n 'mastra:text-text3 mastra:hover:text-text6 mastra:active:text-text6 mastra:hover:bg-surface4 mastra:active:bg-surface5 mastra:rounded-md mastra:cursor-pointer';\n\nexport const IconButton = ({ children, tooltip, size = 'md', className, ...props }: IconButtonProps) => {\n return (\n <Tooltip>\n <TooltipTrigger>\n <button\n {...props}\n className={\n className || twMerge(IconButtonClass, size === 'md' && 'mastra:p-0.5', size === 'lg' && 'mastra:p-1')\n }\n >\n <Icon size={size}>{children}</Icon>\n </button>\n </TooltipTrigger>\n\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n};\n","import { toJsxRuntime } from 'hast-util-to-jsx-runtime';\nimport type { JSX } from 'react';\nimport { Fragment } from 'react';\nimport { jsx, jsxs } from 'react/jsx-runtime';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { codeToHast } from 'shiki/bundle/web';\n\nexport async function highlight(code: string, lang: BundledLanguage) {\n const out = await codeToHast(code, {\n lang,\n theme: 'dracula-soft',\n });\n\n return toJsxRuntime(out, {\n Fragment,\n jsx,\n jsxs,\n }) as JSX.Element;\n}\n","import { CheckIcon, CopyIcon } from 'lucide-react';\nimport type { JSX } from 'react';\nimport { useLayoutEffect, useState } from 'react';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { IconButton } from '../IconButton/IconButton';\nimport { highlight } from './highlight';\n\nexport interface CodeBlockProps {\n code: string;\n language: BundledLanguage;\n className?: string;\n cta?: React.ReactNode;\n}\n\nexport const CodeBlockClass =\n 'mastra:rounded-lg mastra:[&>pre]:p-4 mastra:overflow-hidden mastra:[&>pre]:!bg-surface4 mastra:[&>pre>code]:leading-5 mastra:relative';\n\nexport const CodeBlock = ({ code, language, className, cta }: CodeBlockProps) => {\n const [nodes, setNodes] = useState<JSX.Element | null>(null);\n\n useLayoutEffect(() => {\n void highlight(code, language).then(setNodes);\n }, [language]);\n\n return (\n <div className={className || CodeBlockClass}>\n {nodes ?? null}\n {cta}\n </div>\n );\n};\n\nexport interface CodeCopyButtonProps {\n code: string;\n}\n\nexport const CodeCopyButton = ({ code }: CodeCopyButtonProps) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const handleCopy = () => {\n void navigator.clipboard.writeText(code);\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 2000);\n };\n return (\n <div className=\"mastra:absolute mastra:top-2 mastra:right-2\">\n <IconButton tooltip=\"Copy\" onClick={handleCopy}>\n {isCopied ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n );\n};\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const AgentIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.5 15C10.3565 15 12.137 14.2625 13.4497 12.9497C14.7625 11.637 15.5 9.85652 15.5 8C15.5 6.14348 14.7625 4.36301 13.4497 3.05025C12.137 1.7375 10.3565 1 8.5 1C6.64348 1 4.86301 1.7375 3.55025 3.05025C2.2375 4.36301 1.5 6.14348 1.5 8C1.5 9.85652 2.2375 11.637 3.55025 12.9497C4.86301 14.2625 6.64348 15 8.5 15ZM5.621 10.879L4.611 11.889C3.84179 11.1198 3.31794 10.1398 3.1057 9.07291C2.89346 8.00601 3.00236 6.90013 3.41864 5.89512C3.83491 4.89012 4.53986 4.03112 5.44434 3.42676C6.34881 2.8224 7.41219 2.49983 8.5 2.49983C9.58781 2.49983 10.6512 2.8224 11.5557 3.42676C12.4601 4.03112 13.1651 4.89012 13.5814 5.89512C13.9976 6.90013 14.1065 8.00601 13.8943 9.07291C13.6821 10.1398 13.1582 11.1198 12.389 11.889L11.379 10.879C11.1004 10.6003 10.7696 10.3792 10.4055 10.2284C10.0414 10.0776 9.6511 9.99995 9.257 10H7.743C7.3489 9.99995 6.95865 10.0776 6.59455 10.2284C6.23045 10.3792 5.89963 10.6003 5.621 10.879Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.5 4C7.96957 4 7.46086 4.21071 7.08579 4.58579C6.71071 4.96086 6.5 5.46957 6.5 6V6.5C6.5 7.03043 6.71071 7.53914 7.08579 7.91421C7.46086 8.28929 7.96957 8.5 8.5 8.5C9.03043 8.5 9.53914 8.28929 9.91421 7.91421C10.2893 7.53914 10.5 7.03043 10.5 6.5V6C10.5 5.46957 10.2893 4.96086 9.91421 4.58579C9.53914 4.21071 9.03043 4 8.5 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const ToolsIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.5605 1.42351C8.0791 0.904904 8.92215 0.906157 9.4395 1.42351L10.6922 2.67617C11.2108 3.19477 11.2095 4.03782 10.6922 4.55517L9.4395 5.80783C8.9209 6.32643 8.07785 6.32518 7.5605 5.80783L6.30784 4.55517C5.78923 4.03656 5.79049 3.19352 6.30784 2.67617L7.5605 1.42351ZM3.17618 5.80783C3.69478 5.28923 4.53782 5.29048 5.05517 5.80783L6.30784 7.0605C6.82644 7.5791 6.82519 8.42214 6.30784 8.93949L5.05517 10.1922C4.53657 10.7108 3.69353 10.7095 3.17618 10.1922L1.92351 8.93949C1.40491 8.42089 1.40616 7.57785 1.92351 7.0605L3.17618 5.80783ZM11.9448 5.80783C12.4634 5.28923 13.3065 5.29048 13.8238 5.80783L15.0765 7.0605C15.5951 7.5791 15.5938 8.42214 15.0765 8.93949L13.8238 10.1922C13.3052 10.7108 12.4622 10.7095 11.9448 10.1922L10.6922 8.93949C10.1736 8.42089 10.1748 7.57785 10.6922 7.0605L11.9448 5.80783ZM7.5605 10.1922C8.0791 9.67355 8.92215 9.67481 9.4395 10.1922L10.6922 11.4448C11.2108 11.9634 11.2095 12.8065 10.6922 13.3238L9.4395 14.5765C8.9209 15.0951 8.07785 15.0938 7.5605 14.5765L6.30784 13.3238C5.78923 12.8052 5.79049 11.9622 6.30784 11.4448L7.5605 10.1922Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport const WorkflowIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={twMerge('mastra-icon', className)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.24388 2.4018C6.24388 2.0394 6.53767 1.74561 6.90008 1.74561H10.0991C10.4614 1.74561 10.7553 2.0394 10.7553 2.4018V4.57546C10.7553 4.93787 10.4614 5.23166 10.0991 5.23166H9.31982V7.35469L10.0033 9.22664C9.90442 9.20146 9.80035 9.1761 9.6915 9.14986L9.62652 9.13422C9.30473 9.05687 8.92256 8.96501 8.61993 8.84491C8.5819 8.82981 8.54147 8.81292 8.49957 8.79391C8.45767 8.81292 8.41724 8.82981 8.3792 8.84491C8.07657 8.96501 7.6944 9.05687 7.37261 9.13422L7.30763 9.14986C7.19879 9.1761 7.09471 9.20146 6.99577 9.22664L7.67932 7.35469V5.23166H6.90008C6.53767 5.23166 6.24388 4.93787 6.24388 4.57546V2.4018ZM6.99577 9.22664C6.99577 9.22664 6.99578 9.22664 6.99577 9.22664L6.43283 10.7683H6.81806C7.18047 10.7683 7.47426 11.0622 7.47426 11.4245V13.5982C7.47426 13.9606 7.18047 14.2544 6.81806 14.2544H3.61909C3.25668 14.2544 2.96289 13.9606 2.96289 13.5982V11.4245C2.96289 11.0622 3.25668 10.7683 3.61909 10.7683H4.26617C4.2921 10.4663 4.32783 10.1494 4.37744 9.85171C4.43762 9.49063 4.52982 9.08135 4.68998 8.76102C4.93975 8.2615 5.44743 8.01751 5.7771 7.88788C6.14684 7.74249 6.57537 7.63889 6.92317 7.55505C7.24707 7.47696 7.49576 7.41679 7.67932 7.35469L6.99577 9.22664ZM6.43283 10.7683L6.99577 9.22664C6.75846 9.28705 6.55067 9.34646 6.37745 9.41458C6.22784 9.47341 6.1623 9.51712 6.14023 9.53254C6.09752 9.63631 6.04409 9.83055 5.99562 10.1214C5.96201 10.3231 5.93498 10.5439 5.91341 10.7683H6.43283ZM10.0033 9.22664L9.31982 7.35469C9.50338 7.41679 9.75206 7.47696 10.076 7.55505C10.4238 7.63889 10.8523 7.74249 11.2221 7.88788C11.5517 8.01751 12.0594 8.2615 12.3091 8.76102C12.4693 9.08135 12.5615 9.49063 12.6217 9.85171C12.6713 10.1494 12.707 10.4663 12.733 10.7683H13.38C13.7424 10.7683 14.0362 11.0622 14.0362 11.4245V13.5982C14.0362 13.9606 13.7424 14.2544 13.38 14.2544H10.1811C9.81867 14.2544 9.52488 13.9606 9.52488 13.5982V11.4245C9.52488 11.0622 9.81867 10.7683 10.1811 10.7683H10.5663L10.0033 9.22664ZM10.0033 9.22664L10.5663 10.7683H11.0857C11.0642 10.5439 11.0372 10.3231 11.0035 10.1214C10.9551 9.83055 10.9016 9.63631 10.8589 9.53254C10.8369 9.51712 10.7713 9.47341 10.6217 9.41458C10.4485 9.34646 10.2407 9.28705 10.0033 9.22664Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import type { HTMLAttributes } from 'react';\nimport { useEffect, useRef } from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport interface MessageProps extends HTMLAttributes<HTMLDivElement> {\n position: 'left' | 'right';\n}\n\nexport const MessageClass = 'mastra:flex mastra:flex-col mastra:w-full mastra:py-4 mastra:gap-2 mastra:group';\nexport const Message = ({ position, className, children, ...props }: MessageProps) => {\n return (\n <div\n className={\n className ||\n twMerge(\n MessageClass,\n position === 'left'\n ? ''\n : 'mastra:items-end mastra:[&_.mastra-message-content]:bg-surface4 mastra:[&_.mastra-message-content]:px-4',\n )\n }\n {...props}\n >\n {children}\n </div>\n );\n};\n\nexport interface MessageContentProps extends HTMLAttributes<HTMLDivElement> {\n isStreaming?: boolean;\n}\nexport const MessageContentClass =\n 'mastra:max-w-4/5 mastra:py-2 mastra:text-text6 mastra:rounded-lg mastra-message-content mastra:text-md';\nexport const MessageContent = ({ children, className, isStreaming, ...props }: MessageContentProps) => {\n return (\n <div className={className || MessageContentClass} {...props}>\n {children}\n {isStreaming && <MessageStreaming />}\n </div>\n );\n};\n\nexport const MessageActionsClass =\n 'mastra:gap-2 mastra:flex mastra:opacity-0 mastra:group-hover:opacity-100 mastra:group-focus-within:opacity-100 mastra:items-center';\nexport const MessageActions = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n return (\n <div className={className || MessageActionsClass} {...props}>\n {children}\n </div>\n );\n};\n\nexport const MessageUsagesClass = 'mastra:flex mastra:gap-2 mastra:items-center';\nexport const MessageUsages = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n return (\n <div className={className || MessageUsagesClass} {...props}>\n {children}\n </div>\n );\n};\n\nexport const MessageUsageClass =\n 'mastra:flex mastra:gap-2 mastra:items-center mastra:font-mono mastra:text-xs mastra:bg-surface3 mastra:rounded-lg mastra:px-2 mastra:py-1';\nexport const MessageUsage = ({ children, className, ...props }: HTMLAttributes<HTMLDListElement>) => {\n return (\n <dl className={className || MessageUsageClass} {...props}>\n {children}\n </dl>\n );\n};\n\nexport const MessageUsageEntryClass = 'mastra:text-text3 mastra:text-xs mastra:flex mastra:gap-1 mastra:items-center';\nexport const MessageUsageEntry = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return (\n <dt className={className || MessageUsageEntryClass} {...props}>\n {children}\n </dt>\n );\n};\n\nexport const MessageUsageValueClass = 'mastra:text-text6 mastra:text-xs';\nexport const MessageUsageValue = ({ children, className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return (\n <dd className={className || MessageUsageValueClass} {...props}>\n {children}\n </dd>\n );\n};\n\nexport const MessageListClass = 'mastra:overflow-y-auto mastra:h-full mastra-list';\n\nexport const MessageList = ({ children, className, ...props }: HTMLAttributes<HTMLDivElement>) => {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n // Force scroll to bottom after DOM update\n const scrollToBottom = () => {\n if (!listRef.current) return;\n listRef.current.scrollTo({ top: listRef.current.scrollHeight, behavior: 'smooth' });\n };\n\n requestAnimationFrame(scrollToBottom);\n });\n\n return (\n <div className={className || MessageListClass} {...props} ref={listRef}>\n {children}\n </div>\n );\n};\n\nexport const MessageStreamingClass =\n 'mastra:inline-block mastra:w-[2px] mastra:h-[1em] mastra:bg-text5 mastra:ml-0.5 mastra:align-text-bottom mastra:animate-pulse';\n\nexport const MessageStreaming = ({ className, ...props }: HTMLAttributes<HTMLSpanElement>) => {\n return <span className={className || MessageStreamingClass} {...props} />;\n};\n","import type { MastraDBMessage, AIV5Type } from '@mastra/core/agent/message-list';\nimport type { ReactNode } from 'react';\nimport { memo } from 'react';\nimport type { AccumulatorPart, MastraDBMessageMetadata } from '../../lib/mastra-db';\nimport type {\n DataPart,\n DynamicToolPart,\n MessageFactoryPart,\n MessageRenderers,\n MessageRoleRendererProps,\n MessageRoleRenderers,\n MessageStatusRenderers,\n PartByType,\n} from './types';\n\nexport interface MessageFactoryProps extends MessageRenderers {\n /** The message whose `content.parts` are rendered. */\n message: MastraDBMessage;\n /** Optional wrappers keyed off `message.role`. */\n roles?: MessageRoleRenderers;\n /** Optional message-level slots dispatched off `message.content.metadata`. */\n status?: MessageStatusRenderers;\n /** Rendered for any part that has no matching renderer. Defaults to `null`. */\n fallback?: (part: AccumulatorPart | DynamicToolPart) => ReactNode;\n}\n\n/** A part as it actually appears at runtime, including boundary-cast tool parts. */\ntype RuntimePart = MessageFactoryPart;\n\nconst isDynamicToolPart = (part: RuntimePart): part is DynamicToolPart =>\n // `tool-invocation` is the v4 typed discriminant and must NOT be treated as a\n // v5 `tool-${string}` streaming part, even though it shares the `tool-` prefix.\n part.type === 'dynamic-tool' || (part.type.startsWith('tool-') && part.type !== 'tool-invocation');\n\nconst isDataPart = (part: RuntimePart): part is DataPart => part.type.startsWith('data-');\n\n/**\n * Normalize the legacy persisted `type: 'source'` part (nested\n * `source: { id, url, title }`) into the flat `AIV5Type.SourceUrlUIPart` shape\n * the runtime accumulator emits, so the `SourceUrl` renderer receives one\n * stable prop contract regardless of which discriminant produced the citation.\n */\nconst sourceToSourceUrl = (part: PartByType<'source'>): AIV5Type.SourceUrlUIPart => ({\n type: 'source-url',\n sourceId: part.source.id,\n url: part.source.url,\n title: part.source.title,\n providerMetadata: part.providerMetadata,\n});\n\n/**\n * Resolve a stable key for a part so unchanged parts keep their identity across\n * streaming updates (and don't needlessly re-render).\n */\nconst getPartKey = (part: RuntimePart, index: number): string => {\n if (isDynamicToolPart(part)) {\n return part.toolCallId ?? `${part.type}-${index}`;\n }\n switch (part.type) {\n case 'text':\n // Intrinsic cast: the `'text'`-narrowed member is `(v4 text part) | MastraTextPart`;\n // only `MastraTextPart` carries `textId`, so this is an optional structural read.\n return (part as { textId?: string }).textId ?? `text-${index}`;\n case 'reasoning':\n // Intrinsic cast: same as `textId` — only the Mastra reasoning member has `reasoningId`.\n return (part as { reasoningId?: string }).reasoningId ?? `reasoning-${index}`;\n case 'tool-invocation':\n return part.toolInvocation.toolCallId ?? `tool-invocation-${index}`;\n case 'source-url':\n return part.sourceId || `source-url-${index}`;\n case 'source':\n return part.source.id ?? `source-${index}`;\n default:\n break;\n }\n // Intrinsic cast: fallback key over a heterogeneous union whose members do not\n // share an `id` field; an optional structural read is the minimal honest form.\n const id = (part as { id?: string }).id;\n return id ?? `${part.type}-${index}`;\n};\n\n/**\n * Dispatch a single part to the one matching renderer. Only the renderer whose\n * discriminant matches `part.type` is invoked, so unrelated renderers never run\n * for a given part. Returns `fallback?.(part) ?? null` when no renderer matches.\n */\nconst renderPart = (\n part: RuntimePart,\n renderers: MessageRenderers,\n fallback?: MessageFactoryProps['fallback'],\n): ReactNode => {\n // Runtime-only tool parts (`dynamic-tool` / `tool-${string}`) are not in the\n // typed union, so they are dispatched explicitly before the typed switch.\n if (isDynamicToolPart(part)) {\n return renderers.DynamicTool?.(part) ?? fallback?.(part) ?? null;\n }\n\n // `data-${string}` cannot be a `case` label, so match it by prefix first.\n if (isDataPart(part)) {\n return renderers.Data?.(part) ?? fallback?.(part) ?? null;\n }\n\n switch (part.type) {\n case 'text':\n return renderers.Text?.(part) ?? fallback?.(part) ?? null;\n case 'reasoning':\n return renderers.Reasoning?.(part) ?? fallback?.(part) ?? null;\n case 'file':\n return renderers.File?.(part) ?? fallback?.(part) ?? null;\n case 'step-start':\n return renderers.StepStart?.(part) ?? fallback?.(part) ?? null;\n case 'tool-invocation':\n return renderers.ToolInvocation?.(part) ?? fallback?.(part) ?? null;\n case 'source':\n // Legacy nested `type: 'source'` part — normalize to the flat shape the\n // `SourceUrl` renderer expects so both discriminants share one contract.\n return renderers.SourceUrl?.(sourceToSourceUrl(part)) ?? fallback?.(part) ?? null;\n case 'source-url':\n // Flat runtime/V5 citation part emitted by the accumulator.\n return renderers.SourceUrl?.(part) ?? fallback?.(part) ?? null;\n case 'source-document':\n return renderers.SourceDocument?.(part) ?? fallback?.(part) ?? null;\n default: {\n // Compile-time exhaustiveness: if a new TYPED part discriminant is added\n // to the union and not handled above, this assignment fails to compile.\n const _exhaustive: never = part;\n void _exhaustive;\n // Runtime-only / unrecognized parts degrade gracefully.\n return fallback?.(part) ?? null;\n }\n }\n};\n\ninterface PartRendererProps {\n part: RuntimePart;\n renderers: MessageRenderers;\n fallback?: MessageFactoryProps['fallback'];\n}\n\n/**\n * Memoized per-part renderer. Keeping each part isolated means a streaming\n * update to one part does not re-render the completed parts around it.\n */\nconst PartRenderer = memo(({ part, renderers, fallback }: PartRendererProps) => (\n <>{renderPart(part, renderers, fallback)}</>\n));\nPartRenderer.displayName = 'PartRenderer';\n\n/**\n * Concatenate the text of every `text` part into a single string. Used as the\n * body forwarded to the replacement (`Tripwire`/`Warning`/`Error`) and adjacent\n * (`Task`) status slots, so consumers don't re-derive it from parts.\n */\nconst joinText = (parts: RuntimePart[]): string =>\n parts\n .filter((part): part is PartByType<'text'> => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n/**\n * Normalize the two task-completion metadata fields into one\n * `{ passed, suppressFeedback }` verdict, or `undefined` when neither is set.\n * `completionResult` (network mode) takes precedence; `isTaskCompleteResult`\n * (supervisor mode) is the fallback. Both share the same persisted shape.\n */\nconst resolveTaskVerdict = (\n metadata: MastraDBMessageMetadata | undefined,\n): { passed: boolean; suppressFeedback?: boolean } | undefined => {\n const verdict = metadata?.completionResult ?? metadata?.isTaskCompleteResult;\n if (!verdict) return undefined;\n return { passed: !!verdict.passed, suppressFeedback: verdict.suppressFeedback };\n};\n\nconst roleRendererFor = (\n role: MastraDBMessage['role'],\n roles?: MessageRoleRenderers,\n): ((props: MessageRoleRendererProps) => ReactNode) | undefined => {\n switch (role) {\n case 'user':\n return roles?.User;\n case 'assistant':\n return roles?.Assistant;\n case 'system':\n return roles?.System;\n case 'signal':\n return roles?.Signal;\n default:\n return undefined;\n }\n};\n\nconst MessageFactoryComponent = ({ message, roles, status, fallback, ...renderers }: MessageFactoryProps) => {\n // `MastraMessagePart[]` widens into `RuntimePart[]` (`AccumulatorPart` is a\n // member of `MessageFactoryPart`), so no cast is needed here.\n const parts: RuntimePart[] = message.content.parts ?? [];\n // Intrinsic cast: core types `content.metadata` as `Record<string, unknown>`\n // (message-list/state/types.ts), so narrowing to the SDK's typed metadata\n // shape requires a cast. This matches the convention used across the accumulator.\n const metadata = message.content.metadata as MastraDBMessageMetadata | undefined;\n\n // Replacement status slots: when the message-level status matches and a slot\n // is provided, the slot renders *instead of* the parts walk. If the status\n // matches but no slot is provided, fall through to the normal parts walk.\n let content: ReactNode;\n if (metadata?.status === 'tripwire' && status?.Tripwire) {\n content = status.Tripwire({ text: joinText(parts), tripwire: metadata.tripwire, message });\n } else if (metadata?.status === 'warning' && status?.Warning) {\n content = status.Warning({ text: joinText(parts), message });\n } else if (metadata?.status === 'error' && status?.Error) {\n content = status.Error({ text: joinText(parts), message });\n } else {\n content = (\n <>\n {parts.map((part, index) => (\n <PartRenderer key={getPartKey(part, index)} part={part} renderers={renderers} fallback={fallback} />\n ))}\n </>\n );\n\n // Wrapping `Pending` slot: when the optimistic user bubble is still\n // \"sending\", wrap the parts walk so the consumer can apply a sending style\n // without the message disappearing from the list.\n if (metadata?.status === 'pending' && status?.Pending) {\n content = status.Pending({ children: content, text: joinText(parts), message });\n }\n\n // Adjacent `Task` slot: when a completion verdict exists it renders after\n // the parts. The factory always invokes `Task` when a verdict is present —\n // it does not filter on `suppressFeedback` (the consumer decides).\n const verdict = resolveTaskVerdict(metadata);\n if (verdict && status?.Task) {\n content = (\n <>\n {content}\n {status.Task({ ...verdict, text: joinText(parts), message })}\n </>\n );\n }\n }\n\n const RoleWrapper = roleRendererFor(message.role, roles);\n if (RoleWrapper) {\n return <>{RoleWrapper({ message, children: content })}</>;\n }\n\n return <>{content}</>;\n};\n\n/**\n * Renders a single {@link MastraDBMessage} by dispatching each part in\n * `content.parts` to an optional, type-safe, per-part-type render function.\n * Only the renderer matching a part's `type` is invoked, and each renderer\n * receives fully narrowed props.\n */\nexport const MessageFactory = memo(MessageFactoryComponent);\nMessageFactory.displayName = 'MessageFactory';\n","import { useState, useCallback, useRef } from 'react';\n\n/**\n * Represents the state of a mutation operation.\n * Mimics the essential return type of react-query's useMutation.\n */\nexport interface MutationState<TData, TError extends Error, TVariables> {\n /** Execute the mutation without waiting for the result */\n mutate: (variables: TVariables) => void;\n /** Execute the mutation and return a promise with the result */\n mutateAsync: (variables: TVariables) => Promise<TData>;\n /** Whether the mutation is currently executing */\n isPending: boolean;\n /** Whether the mutation completed successfully */\n isSuccess: boolean;\n /** Whether the mutation failed with an error */\n isError: boolean;\n /** The error if the mutation failed, null otherwise */\n error: TError | null;\n /** The data returned by the mutation if successful */\n data: TData | undefined;\n /** Reset the mutation state to initial values */\n reset: () => void;\n}\n\n/**\n * Internal helper hook that provides mutation-like functionality without react-query.\n * Tracks pending, success, and error states for async operations.\n */\nexport function useMutation<TData, TError extends Error, TVariables>(\n mutationFn: (variables: TVariables) => Promise<TData>,\n): MutationState<TData, TError, TVariables> {\n const [isPending, setIsPending] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [error, setError] = useState<TError | null>(null);\n const [data, setData] = useState<TData | undefined>(undefined);\n\n const mutationFnRef = useRef(mutationFn);\n mutationFnRef.current = mutationFn;\n\n const reset = useCallback(() => {\n setIsPending(false);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n setData(undefined);\n }, []);\n\n const mutateAsync = useCallback(async (variables: TVariables): Promise<TData> => {\n setIsPending(true);\n setIsSuccess(false);\n setIsError(false);\n setError(null);\n\n try {\n const result = await mutationFnRef.current(variables);\n setData(result);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const typedError = err as TError;\n setError(typedError);\n setIsError(true);\n throw err;\n } finally {\n setIsPending(false);\n }\n }, []);\n\n const mutate = useCallback(\n (variables: TVariables) => {\n mutateAsync(variables).catch(() => {\n // Error is already captured in state\n });\n },\n [mutateAsync],\n );\n\n return {\n mutate,\n mutateAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data,\n reset,\n };\n}\n","import type { StreamVNextChunkType } from '@mastra/client-js';\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport { mapWorkflowStreamChunkToWatchResult } from '../lib/mastra-db';\nimport { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n UseStreamWorkflowParams,\n WorkflowStreamResult,\n StreamWorkflowParams,\n ObserveWorkflowStreamParams,\n ResumeWorkflowStreamParams,\n TimeTravelWorkflowStreamParams,\n} from './types';\n\n/**\n * Hook for streaming workflow execution with support for observing, resuming, and time-travel.\n *\n * @example\n * ```tsx\n * const {\n * streamWorkflow,\n * streamResult,\n * isStreaming,\n * observeWorkflowStream,\n * closeStreamsAndReset,\n * resumeWorkflowStream,\n * timeTravelWorkflowStream,\n * } = useStreamWorkflow({\n * debugMode: true,\n * tracingOptions: { enabled: true },\n * onError: (error, defaultMessage) => console.error(defaultMessage, error),\n * });\n *\n * // Start streaming a workflow\n * await streamWorkflow.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123',\n * inputData: { key: 'value' },\n * requestContext: {},\n * });\n * ```\n */\nexport function useStreamWorkflow({ debugMode, tracingOptions, onError }: UseStreamWorkflowParams) {\n const client = useMastraClient();\n const [streamResult, setStreamResult] = useState<WorkflowStreamResult>({} as WorkflowStreamResult);\n const [isStreaming, setIsStreaming] = useState(false);\n const readerRef = useRef<ReadableStreamDefaultReader<StreamVNextChunkType> | null>(null);\n const observerRef = useRef<ReadableStreamDefaultReader<StreamVNextChunkType> | null>(null);\n const resumeStreamRef = useRef<ReadableStreamDefaultReader<StreamVNextChunkType> | null>(null);\n const timeTravelStreamRef = useRef<ReadableStreamDefaultReader<StreamVNextChunkType> | null>(null);\n const isMountedRef = useRef(true);\n\n // Cleanup on unmount\n useEffect(() => {\n isMountedRef.current = true;\n return () => {\n isMountedRef.current = false;\n if (readerRef.current) {\n try {\n readerRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n readerRef.current = null;\n }\n if (observerRef.current) {\n try {\n observerRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n observerRef.current = null;\n }\n if (resumeStreamRef.current) {\n try {\n resumeStreamRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n resumeStreamRef.current = null;\n }\n if (timeTravelStreamRef.current) {\n try {\n timeTravelStreamRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n timeTravelStreamRef.current = null;\n }\n };\n }, []);\n\n const handleStreamError = useCallback(\n (err: unknown, defaultMessage: string, setStreamingState?: (isStreaming: boolean) => void) => {\n // Expected error during cleanup - safe to ignore\n if (err instanceof TypeError) {\n return;\n }\n const error = err instanceof Error ? err : new Error(defaultMessage);\n onError?.(error, defaultMessage);\n setStreamingState?.(false);\n },\n [onError],\n );\n\n const handleWorkflowFinish = useCallback((value: StreamVNextChunkType) => {\n if (value.type === 'workflow-finish') {\n const streamStatus = value.payload?.workflowStatus;\n const metadata = value.payload?.metadata;\n setStreamResult(prev => ({\n ...prev,\n status: streamStatus,\n }));\n if (streamStatus === 'failed') {\n throw new Error(metadata?.errorMessage || 'Workflow execution failed');\n }\n // Tripwire status is not an error - it's handled separately in the UI\n // Don't throw an error for tripwire status\n }\n }, []);\n\n const streamWorkflow = useMutation<void, Error, StreamWorkflowParams>(\n async ({ workflowId, runId, inputData, initialState, requestContext: playgroundRequestContext, perStep }) => {\n // Clean up any existing reader before starting new stream\n if (readerRef.current) {\n readerRef.current.releaseLock();\n }\n\n if (!isMountedRef.current) return;\n\n setIsStreaming(true);\n setStreamResult({ input: inputData } as WorkflowStreamResult);\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n const stream = await run.stream({\n inputData,\n initialState,\n requestContext: playgroundRequestContext,\n closeOnSuspend: true,\n tracingOptions,\n perStep: perStep ?? debugMode,\n });\n\n if (!stream) {\n return handleStreamError(new Error('No stream returned'), 'No stream returned', setIsStreaming);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n readerRef.current = reader;\n\n try {\n while (true) {\n if (!isMountedRef.current) break;\n\n const { done, value } = await reader.read();\n if (done) break;\n\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setStreamResult(prev => {\n const newResult = mapWorkflowStreamChunkToWatchResult(prev, value);\n return newResult;\n });\n\n if (value.type === 'workflow-step-start') {\n setIsStreaming(true);\n }\n\n if (value.type === 'workflow-step-suspended') {\n setIsStreaming(false);\n }\n\n if (value.type === 'workflow-finish') {\n handleWorkflowFinish(value);\n }\n }\n }\n } catch (err) {\n handleStreamError(err, 'Error streaming workflow');\n } finally {\n if (isMountedRef.current) {\n setIsStreaming(false);\n }\n if (readerRef.current) {\n readerRef.current.releaseLock();\n readerRef.current = null;\n }\n }\n },\n );\n\n const observeWorkflowStream = useMutation<void, Error, ObserveWorkflowStreamParams>(\n async ({ workflowId, runId, storeRunResult }) => {\n // Clean up any existing reader before starting new stream\n if (observerRef.current) {\n observerRef.current.releaseLock();\n }\n\n if (!isMountedRef.current) return;\n\n setIsStreaming(true);\n\n setStreamResult((storeRunResult || {}) as WorkflowStreamResult);\n if (storeRunResult?.status === 'suspended') {\n setIsStreaming(false);\n return;\n }\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n const stream = await run.observeStream();\n\n if (!stream) {\n return handleStreamError(new Error('No stream returned'), 'No stream returned', setIsStreaming);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n observerRef.current = reader;\n\n try {\n while (true) {\n if (!isMountedRef.current) break;\n\n const { done, value } = await reader.read();\n if (done) break;\n\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setStreamResult(prev => {\n const newResult = mapWorkflowStreamChunkToWatchResult(prev, value);\n return newResult;\n });\n\n if (value.type === 'workflow-step-start') {\n setIsStreaming(true);\n }\n\n if (value.type === 'workflow-step-suspended') {\n setIsStreaming(false);\n }\n\n if (value.type === 'workflow-finish') {\n handleWorkflowFinish(value);\n }\n }\n }\n } catch (err) {\n handleStreamError(err, 'Error observing workflow');\n } finally {\n if (isMountedRef.current) {\n setIsStreaming(false);\n }\n if (observerRef.current) {\n observerRef.current.releaseLock();\n observerRef.current = null;\n }\n }\n },\n );\n\n const resumeWorkflowStream = useMutation<void, Error, ResumeWorkflowStreamParams>(\n async ({ workflowId, runId, step, resumeData, requestContext: playgroundRequestContext, perStep }) => {\n // Clean up any existing reader before starting new stream\n if (resumeStreamRef.current) {\n resumeStreamRef.current.releaseLock();\n }\n\n if (!isMountedRef.current) return;\n\n setIsStreaming(true);\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n const stream = await run.resumeStream({\n step,\n resumeData,\n requestContext: playgroundRequestContext,\n tracingOptions,\n perStep: perStep ?? debugMode,\n });\n\n if (!stream) {\n return handleStreamError(new Error('No stream returned'), 'No stream returned', setIsStreaming);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n resumeStreamRef.current = reader;\n\n try {\n while (true) {\n if (!isMountedRef.current) break;\n\n const { done, value } = await reader.read();\n if (done) break;\n\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setStreamResult(prev => {\n const newResult = mapWorkflowStreamChunkToWatchResult(prev, value);\n return newResult;\n });\n\n if (value.type === 'workflow-step-start') {\n setIsStreaming(true);\n }\n\n if (value.type === 'workflow-step-suspended') {\n setIsStreaming(false);\n }\n\n if (value.type === 'workflow-finish') {\n handleWorkflowFinish(value);\n }\n }\n }\n } catch (err) {\n handleStreamError(err, 'Error resuming workflow stream');\n } finally {\n if (isMountedRef.current) {\n setIsStreaming(false);\n }\n if (resumeStreamRef.current) {\n resumeStreamRef.current.releaseLock();\n resumeStreamRef.current = null;\n }\n }\n },\n );\n\n const timeTravelWorkflowStream = useMutation<void, Error, TimeTravelWorkflowStreamParams>(\n async ({ workflowId, requestContext: playgroundRequestContext, runId, perStep, ...params }) => {\n // Clean up any existing reader before starting new stream\n if (timeTravelStreamRef.current) {\n timeTravelStreamRef.current.releaseLock();\n }\n\n if (!isMountedRef.current) return;\n\n setIsStreaming(true);\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n const stream = await run.timeTravelStream({\n ...params,\n perStep: perStep ?? debugMode,\n requestContext: playgroundRequestContext,\n tracingOptions,\n });\n\n if (!stream) {\n return handleStreamError(new Error('No stream returned'), 'No stream returned', setIsStreaming);\n }\n\n // Get a reader from the ReadableStream and store it in ref\n const reader = stream.getReader();\n timeTravelStreamRef.current = reader;\n\n try {\n while (true) {\n if (!isMountedRef.current) break;\n\n const { done, value } = await reader.read();\n if (done) break;\n\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setStreamResult(prev => {\n const newResult = mapWorkflowStreamChunkToWatchResult(prev, value);\n return newResult;\n });\n\n if (value.type === 'workflow-step-start') {\n setIsStreaming(true);\n }\n\n if (value.type === 'workflow-step-suspended') {\n setIsStreaming(false);\n }\n\n if (value.type === 'workflow-finish') {\n handleWorkflowFinish(value);\n }\n }\n }\n } catch (err) {\n handleStreamError(err, 'Error time traveling workflow stream');\n } finally {\n if (isMountedRef.current) {\n setIsStreaming(false);\n }\n if (timeTravelStreamRef.current) {\n timeTravelStreamRef.current.releaseLock();\n timeTravelStreamRef.current = null;\n }\n }\n },\n );\n\n const closeStreamsAndReset = useCallback(() => {\n setIsStreaming(false);\n setStreamResult({} as WorkflowStreamResult);\n if (readerRef.current) {\n try {\n readerRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n readerRef.current = null;\n }\n if (observerRef.current) {\n try {\n observerRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n observerRef.current = null;\n }\n if (resumeStreamRef.current) {\n try {\n resumeStreamRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n resumeStreamRef.current = null;\n }\n if (timeTravelStreamRef.current) {\n try {\n timeTravelStreamRef.current.releaseLock();\n } catch {\n // Reader might already be released, ignore the error\n }\n timeTravelStreamRef.current = null;\n }\n }, []);\n\n return {\n streamWorkflow,\n streamResult,\n isStreaming,\n observeWorkflowStream,\n closeStreamsAndReset,\n resumeWorkflowStream,\n timeTravelWorkflowStream,\n };\n}\n","import { useMutation } from '../lib/use-mutation';\nimport { useMastraClient } from '../mastra-client-context';\nimport type {\n CreateWorkflowRunParams,\n CreateWorkflowRunResult,\n CancelWorkflowRunParams,\n CancelWorkflowRunResult,\n} from './types';\n\nexport { useStreamWorkflow } from './use-stream-workflow';\n\n/**\n * Hook for creating workflow runs.\n * Returns a mutation for creating a new workflow run.\n *\n * @example\n * ```tsx\n * const createWorkflowRun = useCreateWorkflowRun();\n *\n * // Create a run\n * const { runId } = await createWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow'\n * });\n * ```\n */\nexport function useCreateWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CreateWorkflowRunResult, Error, CreateWorkflowRunParams>(async ({ workflowId, prevRunId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const { runId: newRunId } = await workflow.createRun({ runId: prevRunId });\n return { runId: newRunId };\n } catch (error) {\n console.error('Error creating workflow run:', error);\n throw error;\n }\n });\n}\n\n/**\n * Hook for canceling workflow runs.\n * Returns a mutation for canceling a running workflow.\n *\n * @example\n * ```tsx\n * const cancelWorkflowRun = useCancelWorkflowRun();\n *\n * // Cancel a run\n * await cancelWorkflowRun.mutateAsync({\n * workflowId: 'my-workflow',\n * runId: 'run-123'\n * });\n * ```\n */\nexport function useCancelWorkflowRun() {\n const client = useMastraClient();\n\n return useMutation<CancelWorkflowRunResult, Error, CancelWorkflowRunParams>(async ({ workflowId, runId }) => {\n try {\n const workflow = client.getWorkflow(workflowId);\n const run = await workflow.createRun({ runId });\n return run.cancelRun();\n } catch (error) {\n console.error('Error canceling workflow run:', error);\n throw error;\n }\n });\n}\n","import { memo } from 'react';\nimport type { ReactNode } from 'react';\nimport type { ResolvedWorkflowStep, WorkflowStepRenderers } from './types';\n\nexport interface WorkflowStepFactoryProps<\n TStep extends ResolvedWorkflowStep = ResolvedWorkflowStep,\n> extends WorkflowStepRenderers<TStep> {\n step: TStep;\n}\n\nconst renderUnknown = <TStep extends ResolvedWorkflowStep>(\n step: TStep,\n UnknownStep?: WorkflowStepRenderers<TStep>['UnknownStep'],\n): ReactNode => UnknownStep?.(step) ?? null;\n\nconst WorkflowStepFactoryComponent = <TStep extends ResolvedWorkflowStep>({\n step,\n Step,\n MapStep,\n ForEachStep,\n ParallelStep,\n Conditional,\n LoopStep,\n SleepStep,\n SleepUntilStep,\n NestedWorkflowStep,\n UnknownStep,\n}: WorkflowStepFactoryProps<TStep>) => {\n switch (step.kind) {\n case 'step':\n return <>{Step?.(step as Extract<TStep, { kind: 'step' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'map-step':\n return <>{MapStep?.(step as Extract<TStep, { kind: 'map-step' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'foreach-step':\n return <>{ForEachStep?.(step as Extract<TStep, { kind: 'foreach-step' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'parallel-step':\n return (\n <>{ParallelStep?.(step as Extract<TStep, { kind: 'parallel-step' }>) ?? renderUnknown(step, UnknownStep)}</>\n );\n case 'conditional':\n return <>{Conditional?.(step as Extract<TStep, { kind: 'conditional' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'loop-step':\n return <>{LoopStep?.(step as Extract<TStep, { kind: 'loop-step' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'sleep-step':\n return <>{SleepStep?.(step as Extract<TStep, { kind: 'sleep-step' }>) ?? renderUnknown(step, UnknownStep)}</>;\n case 'sleep-until-step':\n return (\n <>\n {SleepUntilStep?.(step as Extract<TStep, { kind: 'sleep-until-step' }>) ?? renderUnknown(step, UnknownStep)}\n </>\n );\n case 'nested-workflow-step':\n return (\n <>\n {NestedWorkflowStep?.(step as Extract<TStep, { kind: 'nested-workflow-step' }>) ??\n renderUnknown(step, UnknownStep)}\n </>\n );\n default:\n return <>{renderUnknown(step, UnknownStep)}</>;\n }\n};\n\nexport const WorkflowStepFactory = memo(WorkflowStepFactoryComponent) as typeof WorkflowStepFactoryComponent;\n","export async function recordMicrophoneToFile(onFinish: (file: File) => void) {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const mediaRecorder = new MediaRecorder(stream);\n\n let chunks: BlobPart[] = [];\n\n mediaRecorder.ondataavailable = e => {\n chunks.push(e.data);\n };\n\n mediaRecorder.onstop = () => {\n const blob = new Blob(chunks, { type: 'audio/webm' });\n const file = new File([blob], `recording-${Date.now()}.webm`, {\n type: 'audio/webm',\n lastModified: Date.now(),\n });\n\n stream.getTracks().forEach(track => track.stop());\n onFinish(file);\n };\n\n return mediaRecorder;\n}\n","export async function playStreamWithWebAudio(stream: ReadableStream, onEnded?: () => void) {\n const audioContext = new window.AudioContext();\n\n const reader = stream.getReader();\n const chunks = [];\n\n try {\n // Read all chunks\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n\n // Combine chunks into single ArrayBuffer\n const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combinedBuffer = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const chunk of chunks) {\n combinedBuffer.set(chunk, offset);\n offset += chunk.length;\n }\n\n // Decode and play\n const audioBuffer = await audioContext.decodeAudioData(combinedBuffer.buffer);\n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.onended = onEnded ?? null;\n source.connect(audioContext.destination);\n source.start();\n\n return () => {\n source.onended = null;\n source.stop();\n void audioContext.close();\n };\n } catch (error) {\n await reader.cancel().catch(() => undefined);\n await audioContext.close().catch(() => undefined);\n throw error;\n } finally {\n reader.releaseLock();\n }\n}\n","import type { MastraClient } from '@mastra/client-js';\nimport { useEffect, useRef, useState } from 'react';\nimport { useMastraClient } from '../mastra-client-context';\nimport { recordMicrophoneToFile } from './record-mic-to-file';\n\ntype Agent = ReturnType<MastraClient['getAgent']>;\ntype VoiceRequestContext = Parameters<Agent['voice']['getSpeakers']>[0];\n\nexport interface SpeechRecognitionState {\n isListening: boolean;\n transcript: string;\n error: string | null;\n}\n\nexport interface UseSpeechRecognitionArgs {\n language?: string;\n agentId?: string;\n requestContext?: VoiceRequestContext;\n}\n\ntype SpeechRecognitionResult = SpeechRecognitionState & {\n start: () => void;\n stop: () => void;\n};\n\nexport const useSpeechRecognition = ({\n language = 'en-US',\n agentId,\n requestContext,\n}: UseSpeechRecognitionArgs): SpeechRecognitionResult => {\n const client = useMastraClient();\n const [agent, setAgent] = useState<Agent | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n if (!agentId) {\n setAgent(null);\n return () => {\n cancelled = true;\n };\n }\n\n const agent = client.getAgent(agentId);\n\n const check = async () => {\n try {\n const speakers = await agent.voice.getSpeakers(requestContext);\n if (!cancelled) {\n setAgent(speakers.length > 0 ? agent : null);\n }\n } catch {\n if (!cancelled) {\n setAgent(null);\n }\n }\n };\n\n void check();\n\n return () => {\n cancelled = true;\n };\n }, [agentId, client, requestContext]);\n\n const browserSpeechRecognition = useBrowserSpeechRecognition({ language });\n const mastraSpeechRecognition = useMastraSpeechToText({ agent, language });\n\n if (!agent) {\n return browserSpeechRecognition;\n }\n\n return mastraSpeechRecognition;\n};\n\nconst useBrowserSpeechRecognition = ({ language = 'en-US' }: { language?: string }): SpeechRecognitionResult => {\n const speechRecognitionRef = useRef<any>(null);\n const [state, setState] = useState<SpeechRecognitionState>({\n isListening: false,\n transcript: '',\n error: null,\n });\n\n const start = () => {\n if (!speechRecognitionRef.current) return;\n speechRecognitionRef.current.start();\n };\n\n const stop = () => {\n if (!speechRecognitionRef.current) return;\n speechRecognitionRef.current.stop();\n };\n\n useEffect(() => {\n if (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) {\n setState(prev => ({ ...prev, error: 'Speech Recognition not supported in this browser' }));\n return;\n }\n\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n const recognition = new SpeechRecognition();\n speechRecognitionRef.current = recognition;\n\n recognition.continuous = true;\n recognition.lang = language;\n\n recognition.onstart = () => {\n setState(prev => ({ ...prev, isListening: true, error: null }));\n };\n\n recognition.onresult = (event: any) => {\n let finalTranscript = '';\n\n for (let i = event.resultIndex; i < event.results.length; i++) {\n const transcript = event.results[i][0].transcript;\n if (event.results[i].isFinal) {\n finalTranscript += transcript + ' ';\n }\n }\n\n setState(prev => ({ ...prev, transcript: finalTranscript }));\n };\n\n recognition.onerror = (event: any) => {\n setState(prev => ({ ...prev, error: `Error: ${event.error}` }));\n };\n\n recognition.onend = () => setState(prev => ({ ...prev, isListening: false }));\n\n return () => {\n try {\n recognition.stop();\n } catch {\n // ignore: recognition may not be running\n }\n recognition.onstart = null;\n recognition.onresult = null;\n recognition.onerror = null;\n recognition.onend = null;\n speechRecognitionRef.current = null;\n };\n }, [language]);\n\n return {\n ...state,\n start,\n stop,\n };\n};\n\nconst useMastraSpeechToText = ({\n agent,\n language,\n}: {\n agent: Agent | null;\n language: string;\n}): SpeechRecognitionResult => {\n const [state, setState] = useState<SpeechRecognitionState>({\n isListening: false,\n transcript: '',\n error: null,\n });\n const recorderRef = useRef<MediaRecorder | null>(null);\n const sessionRef = useRef(0);\n const startInFlightRef = useRef(false);\n\n useEffect(() => {\n return () => {\n sessionRef.current += 1;\n startInFlightRef.current = false;\n recorderRef.current?.stop();\n recorderRef.current = null;\n };\n }, [agent]);\n\n const handleFinish = (session: number) => (file: File) => {\n if (!agent || session !== sessionRef.current) return;\n\n recorderRef.current = null;\n setState(prev => ({ ...prev, isListening: false }));\n\n void agent.voice\n .listen(file, { language })\n .then(res => {\n if (session !== sessionRef.current) return;\n setState(prev => ({ ...prev, transcript: res.text, error: null }));\n })\n .catch(error => {\n if (session !== sessionRef.current) return;\n const message = error instanceof Error ? error.message : 'Failed to transcribe speech';\n setState(prev => ({ ...prev, error: message }));\n });\n };\n\n const start = () => {\n if (!agent || startInFlightRef.current || recorderRef.current) return;\n\n startInFlightRef.current = true;\n const session = sessionRef.current;\n\n void recordMicrophoneToFile(handleFinish(session))\n .then(recorder => {\n startInFlightRef.current = false;\n if (session !== sessionRef.current) {\n try {\n recorder.stop();\n } catch {\n // ignore: recorder was never started\n }\n return;\n }\n recorderRef.current = recorder;\n setState(prev => ({ ...prev, isListening: true, error: null }));\n recorder.start();\n })\n .catch(error => {\n startInFlightRef.current = false;\n if (session !== sessionRef.current) return;\n const message = error instanceof Error ? error.message : 'Failed to start speech recording';\n setState(prev => ({ ...prev, isListening: false, error: message }));\n });\n };\n\n const stop = () => {\n sessionRef.current += 1;\n startInFlightRef.current = false;\n recorderRef.current?.stop();\n recorderRef.current = null;\n setState(prev => ({ ...prev, isListening: false }));\n };\n\n return {\n ...state,\n start,\n stop,\n };\n};\n"]}
|