{"version":3,"sources":["../src/tools/payload-transform.ts","../src/agent/message-list/prompt/data-content.ts","../src/agent/signals.ts","../src/agent/message-list/detection/TypeDetector.ts","../src/agent/message-list/prompt/image-utils.ts","../src/agent/message-list/utils/response-item-metadata.ts","../src/agent/message-list/utils/provider-compat.ts","../src/agent/message-list/adapters/AIV4Adapter.ts","../src/agent/message-list/utils/tool-name.ts","../src/agent/message-list/adapters/AIV5Adapter.ts","../src/agent/message-list/adapters/AIV6Adapter.ts","../src/agent/message-list/cache/stable-stringify.ts","../src/agent/message-list/cache/CacheKeyGenerator.ts","../src/agent/message-list/conversion/to-prompt.ts","../src/agent/message-list/conversion/utils.ts","../src/agent/message-list/utils/stamp-part.ts","../src/agent/message-list/conversion/input-converter.ts","../src/agent/message-list/conversion/output-converter.ts","../src/stream/aisdk/v5/file.ts","../src/agent/message-list/conversion/step-content.ts","../src/agent/message-list/merge/MessageMerger.ts","../src/stream/aisdk/v5/compat/content.ts","../src/stream/aisdk/v5/compat/media.ts","../src/agent/message-list/prompt/convert-file.ts","../src/agent/message-list/prompt/attachments-to-parts.ts","../src/agent/message-list/prompt/convert-to-mastra-v1.ts","../src/agent/message-list/prompt/download-assets.ts","../src/agent/message-list/state/serialization.ts","../src/agent/message-list/state/MessageStateManager.ts","../src/agent/message-list/message-list.ts","../src/agent/message-list/utils/convert-messages.ts"],"names":["convertUint8ArrayToBase64","decoded","part","uiMessage","MastraError","ErrorDomain","ErrorCategory","filterEmptyTextParts","getSignalType","getSignalTagName","isUserSignalType","toSignalDataPart","getDisplayTransform","isToolUIPart","toolResultPart","matchingCall","convertToCoreMessages","convertToModelMessages","convertBase64ToUint8Array","stepParts","processBlock","content","toolInvocations","i","fetchWithRetry","response","isUrlSupported","message","randomUUID"],"mappings":"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","file":"chunk-2TATDSHU.cjs","sourcesContent":["import type { IMastraLogger } from '../logger';\nimport type {\n ToolPayloadTransform,\n ToolPayloadTransformContext,\n ToolPayloadTransformFunction,\n ToolPayloadTransformPhase,\n ToolPayloadTransformPolicy,\n ToolPayloadTransformTarget,\n} from './types';\n\nexport type TransformedToolPayloadState = {\n transformed?: unknown;\n suppress?: boolean;\n failed?: boolean;\n};\n\nexport type ToolPayloadTransformMetadata = Partial<\n Record>>\n>;\n\nexport type ToolPayloadTransformSource = {\n policy?: ToolPayloadTransformPolicy;\n toolTransform?: ToolPayloadTransform;\n};\n\ntype LegacyToolPayloadProjectionPolicy = {\n projectToolPayload?: ToolPayloadTransformFunction;\n targets?: ToolPayloadTransformTarget[];\n};\n\nexport function normalizeToolPayloadTransformPolicy(\n policy: ToolPayloadTransformPolicy | LegacyToolPayloadProjectionPolicy | undefined,\n): ToolPayloadTransformPolicy | undefined {\n if (!policy) {\n return undefined;\n }\n\n if ('transformToolPayload' in policy) {\n return policy;\n }\n\n if ('projectToolPayload' in policy && policy.projectToolPayload) {\n return {\n transformToolPayload: policy.projectToolPayload,\n targets: policy.targets,\n };\n }\n\n return undefined;\n}\n\nconst PHASE_TO_TOOL_TRANSFORMER: Record> =\n {\n 'input-delta': 'inputDelta',\n 'input-available': 'input',\n 'output-available': 'output',\n error: 'error',\n approval: 'approval',\n suspend: 'suspend',\n resume: 'resume',\n };\n\nfunction isPolicyConfiguredForTarget(\n policy: ToolPayloadTransformPolicy | undefined,\n target: ToolPayloadTransformTarget,\n) {\n return Boolean(policy?.transformToolPayload && (!policy.targets || policy.targets.includes(target)));\n}\n\nfunction isTransformConfigured(source: ToolPayloadTransformSource | undefined, target: ToolPayloadTransformTarget) {\n return Boolean(isPolicyConfiguredForTarget(source?.policy, target) || source?.toolTransform?.[target]);\n}\n\nfunction getToolTransformer(\n source: ToolPayloadTransformSource | undefined,\n target: ToolPayloadTransformTarget,\n phase: ToolPayloadTransformPhase,\n): ToolPayloadTransformFunction | undefined {\n return source?.toolTransform?.[target]?.[PHASE_TO_TOOL_TRANSFORMER[phase]];\n}\n\nfunction safePlaceholder(context: ToolPayloadTransformContext) {\n return {\n message: `Tool ${context.phase} payload unavailable`,\n };\n}\n\nasync function transformOneTarget(\n context: ToolPayloadTransformContext,\n source: ToolPayloadTransformSource | undefined,\n logger?: IMastraLogger,\n): Promise {\n const configured = isTransformConfigured(source, context.target);\n if (!configured) {\n return undefined;\n }\n\n const transformers = [\n isPolicyConfiguredForTarget(source?.policy, context.target) ? source?.policy?.transformToolPayload : undefined,\n getToolTransformer(source, context.target, context.phase),\n ].filter(Boolean) as ToolPayloadTransformFunction[];\n\n if (transformers.length === 0) {\n return context.phase === 'input-delta' ? { suppress: true } : { transformed: safePlaceholder(context) };\n }\n\n for (const transformer of transformers) {\n try {\n const transformed = await transformer(context);\n if (transformed !== undefined) {\n return { transformed };\n }\n } catch (error) {\n logger?.warn?.('Tool payload transform failed', {\n toolName: context.toolName,\n toolCallId: context.toolCallId,\n target: context.target,\n phase: context.phase,\n error,\n });\n return context.phase === 'input-delta'\n ? { suppress: true, failed: true }\n : { transformed: safePlaceholder(context), failed: true };\n }\n }\n\n return context.phase === 'input-delta' ? { suppress: true } : { transformed: safePlaceholder(context) };\n}\n\nexport async function transformToolPayloadForTargets(\n context: Omit,\n source: ToolPayloadTransformSource | undefined,\n logger?: IMastraLogger,\n): Promise {\n const display = await transformOneTarget({ ...context, target: 'display' }, source, logger);\n const transcript = await transformOneTarget({ ...context, target: 'transcript' }, source, logger);\n\n if (!display && !transcript) {\n return undefined;\n }\n\n return {\n ...(display ? { display: { [context.phase]: display } } : {}),\n ...(transcript ? { transcript: { [context.phase]: transcript } } : {}),\n };\n}\n\nexport function getTransformedToolPayload(\n metadata: unknown,\n target: ToolPayloadTransformTarget,\n phase: ToolPayloadTransformPhase,\n): TransformedToolPayloadState | undefined {\n const mastraMetadata = (metadata as { mastra?: Record } | undefined)?.mastra;\n const state =\n mastraMetadata?.toolPayloadTransform?.[target]?.[phase] ?? mastraMetadata?.toolPayloadProjection?.[target]?.[phase];\n\n if (\n state &&\n Object.prototype.hasOwnProperty.call(state, 'projected') &&\n !Object.prototype.hasOwnProperty.call(state, 'transformed')\n ) {\n const { projected, ...rest } = state;\n return { ...rest, transformed: projected };\n }\n\n return state;\n}\n\nexport function hasTransformedToolPayload(\n transform: TransformedToolPayloadState | undefined,\n): transform is TransformedToolPayloadState & { transformed: unknown } {\n return Boolean(transform && Object.prototype.hasOwnProperty.call(transform, 'transformed'));\n}\n\nfunction mergeTransformMetadata(\n existing: ToolPayloadTransformMetadata | undefined,\n next: ToolPayloadTransformMetadata | undefined,\n): ToolPayloadTransformMetadata | undefined {\n if (!existing) {\n return next;\n }\n if (!next) {\n return existing;\n }\n\n return {\n display: {\n ...(existing.display ?? {}),\n ...(next.display ?? {}),\n },\n transcript: {\n ...(existing.transcript ?? {}),\n ...(next.transcript ?? {}),\n },\n };\n}\n\nexport function withToolPayloadTransformProviderMetadata | undefined>(\n providerMetadata: T,\n transformMetadata: { mastra?: { toolPayloadTransform?: ToolPayloadTransformMetadata } } | undefined,\n): T | Record | undefined {\n const transform = transformMetadata?.mastra?.toolPayloadTransform;\n if (!transform) {\n return providerMetadata;\n }\n\n return {\n ...(providerMetadata ?? {}),\n mastra: {\n ...(providerMetadata?.mastra ?? {}),\n toolPayloadTransform: mergeTransformMetadata(providerMetadata?.mastra?.toolPayloadTransform, transform),\n },\n };\n}\n\nexport function withToolPayloadTransformMetadata }>(\n chunk: T,\n transform: ToolPayloadTransformMetadata | undefined,\n): T {\n if (!transform) {\n return chunk;\n }\n\n return {\n ...chunk,\n metadata: {\n ...(chunk.metadata ?? {}),\n mastra: {\n ...(chunk.metadata?.mastra ?? {}),\n toolPayloadTransform: mergeTransformMetadata(chunk.metadata?.mastra?.toolPayloadTransform, transform),\n },\n },\n };\n}\n","import type { DataContent } from '@ai-sdk/provider-utils-v5';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\n\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n}\n","import type { FilePart, TextPart, UserModelMessage } from '@internal/ai-sdk-v5';\n\nimport { convertDataContentToBase64String } from './message-list/prompt/data-content';\nimport type { MastraDBMessage, MastraMessagePart, MastraProviderMetadata } from './message-list/state/types';\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalCategory = 'user' | 'state' | 'reactive' | 'notification';\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentLegacySignalType = 'user-message' | 'system-reminder';\nexport type AgentSignalType = AgentSignalCategory | AgentLegacySignalType;\n\nexport type AgentSignalTagName = string;\n\nexport type SignalPart = TextPart | SignalFilePart;\ntype SignalFilePart = {\n type: 'file';\n data: string;\n mediaType: string;\n filename?: string;\n providerOptions?: MastraProviderMetadata;\n};\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalContents = string | Array;\nexport type AgentSignalAttributes = Record;\nexport type AgentStateSignalMode = 'snapshot' | 'delta';\n\nexport type AgentStateSignalInput = {\n id: string;\n cacheKey: string;\n contents: AgentSignalContents;\n mode?: AgentStateSignalMode;\n value?: unknown;\n delta?: unknown;\n attributes?: AgentSignalAttributes;\n metadata?: Record;\n providerOptions?: MastraProviderMetadata;\n tagName?: AgentSignalTagName;\n};\n\nexport type AgentMessageInput =\n | AgentSignalContents\n | {\n contents: AgentSignalContents;\n attributes?: AgentSignalAttributes;\n metadata?: Record;\n providerOptions?: MastraProviderMetadata;\n };\n\nexport type AgentSignalInput = {\n id?: string;\n createdAt?: Date | string;\n acceptedAt?: Date | string;\n type: AgentSignalType;\n tagName?: AgentSignalTagName;\n contents: AgentSignalContents;\n attributes?: AgentSignalAttributes;\n metadata?: Record;\n /**\n * Provider options attached to the resulting prompt turn. Surfaces as `providerOptions` on the\n * `UserModelMessage` sent to the model and as `content.providerMetadata` on the persisted DB\n * message (also visible to UI consumers via `useChat` message metadata).\n */\n providerOptions?: MastraProviderMetadata;\n};\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalDataPart = {\n type: 'data-user-message' | 'data-signal';\n data: {\n id: string;\n type: AgentSignalCategory;\n tagName?: AgentSignalTagName;\n contents: AgentSignalContents;\n createdAt: string;\n acceptedAt?: string;\n attributes?: AgentSignalAttributes;\n metadata?: Record;\n };\n transient: true;\n};\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type CreatedAgentSignal = AgentSignalInput & {\n __isCreatedSignal: true;\n id: string;\n createdAt: Date;\n acceptedAt?: Date;\n toDBMessage: (options?: { threadId?: string; resourceId?: string }) => MastraDBMessage;\n toLLMMessage: () => UserModelMessage;\n toDataPart: () => AgentSignalDataPart;\n};\n\nexport function isMastraSignalMessage(message: MastraDBMessage): message is MastraDBMessage & { role: 'signal' } {\n return message.role === 'signal';\n}\n\nfunction normalizeSignalType(input: Pick): {\n type: AgentSignalCategory;\n tagName: AgentSignalTagName;\n} {\n if (input.type === 'user-message') {\n return { type: 'user', tagName: input.tagName ?? 'user' };\n }\n\n if (input.type === 'system-reminder') {\n return { type: 'reactive', tagName: input.tagName ?? 'system-reminder' };\n }\n\n if (input.type === 'user' || input.type === 'state' || input.type === 'notification') {\n return { type: input.type, tagName: input.tagName ?? input.type };\n }\n\n if (input.type === 'reactive') {\n return { type: 'reactive', tagName: input.tagName ?? 'system-reminder' };\n }\n\n throw new Error(\n `Invalid signal type: ${input.type}. Use a supported signal type and set tagName for custom XML tags.`,\n );\n}\n\nfunction normalizeSignal(signal: AgentSignalInput | CreatedAgentSignal) {\n const { type, tagName } = normalizeSignalType(signal);\n return {\n ...signal,\n type,\n tagName,\n id: signal.id ?? crypto.randomUUID(),\n createdAt:\n signal.createdAt instanceof Date ? signal.createdAt : signal.createdAt ? new Date(signal.createdAt) : new Date(),\n acceptedAt:\n signal.acceptedAt instanceof Date\n ? signal.acceptedAt\n : signal.acceptedAt\n ? new Date(signal.acceptedAt)\n : undefined,\n };\n}\n\nfunction escapeXml(value: string): string {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');\n}\n\nfunction escapeXmlAttribute(value: string): string {\n return escapeXml(value).replaceAll('\"', '"');\n}\n\nconst XML_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_.-]*$/;\n\nfunction assertXmlName(name: string, label: string): void {\n if (!XML_NAME_PATTERN.test(name)) {\n throw new Error(`Invalid signal XML ${label}: ${name}`);\n }\n}\n\nfunction signalAttributesToXml(attributes?: AgentSignalAttributes): string {\n if (!attributes) {\n return '';\n }\n\n const serialized = Object.entries(attributes)\n .filter((entry): entry is [string, string | number | boolean] => entry[1] !== null && entry[1] !== undefined)\n .map(([key, value]) => {\n assertXmlName(key, 'attribute name');\n return `${key}=\"${escapeXmlAttribute(String(value))}\"`;\n })\n .join(' ');\n\n return serialized ? ` ${serialized}` : '';\n}\n\nexport function signalToXmlMarkup(\n signal: Pick & { contents?: string },\n): string {\n const tagName = signal.tagName ?? normalizeSignalType(signal).tagName;\n assertXmlName(tagName, 'tag name');\n const attributesXml = signalAttributesToXml(signal.attributes);\n if (!signal.contents) return `<${tagName}${attributesXml} />`;\n return `<${tagName}${attributesXml}>${escapeXml(signal.contents)}`;\n}\n\n// Recover legacy metadata.signal.contents shapes (pre-narrowing) into the current\n// AgentSignalContents. Older rows could stash any of:\n// - string (most signals)\n// - Array with mediaType (TUI image messages)\n// - { role: 'user', content: string | Array<...> } (TUI createUserSignalContent)\n// - CoreUserMessage[] / string[] (React hook BaseMessageListInput)\n// Anything that doesn't decode cleanly returns undefined so the caller can fall back to\n// the canonical content.parts projection.\nfunction legacyContentsToSignalContents(value: unknown): AgentSignalContents | undefined {\n if (typeof value === 'string') return value;\n\n if (Array.isArray(value)) {\n const parts: Array = [];\n for (const entry of value) {\n if (typeof entry === 'string') {\n parts.push({ type: 'text', text: entry });\n continue;\n }\n const decoded = legacyEntryToParts(entry);\n if (!decoded) return undefined;\n parts.push(...decoded);\n }\n return collapseLegacyParts(parts);\n }\n\n const decoded = legacyEntryToParts(value);\n return decoded ? collapseLegacyParts(decoded) : undefined;\n}\n\nfunction legacyEntryToParts(entry: unknown): Array | undefined {\n if (!entry || typeof entry !== 'object') return undefined;\n const record = entry as Record;\n\n // CoreUserMessage wrapper: { role: 'user', content: string | Array<...> }.\n if (record.role === 'user' && 'content' in record) {\n const content = record.content;\n if (typeof content === 'string') return [{ type: 'text', text: content }];\n if (Array.isArray(content)) {\n const inner: Array = [];\n for (const part of content) {\n const decoded = legacyPartToSignalPart(part);\n if (!decoded) return undefined;\n inner.push(decoded);\n }\n return inner;\n }\n return undefined;\n }\n\n // Bare TextPart / FilePart / ImagePart.\n const part = legacyPartToSignalPart(record);\n return part ? [part] : undefined;\n}\n\nfunction legacyPartToSignalPart(part: unknown): TextPart | FilePart | undefined {\n if (!part || typeof part !== 'object') return undefined;\n const record = part as Record;\n const providerOptions =\n record.providerOptions && typeof record.providerOptions === 'object' && !Array.isArray(record.providerOptions)\n ? (record.providerOptions as MastraProviderMetadata)\n : undefined;\n\n if (record.type === 'text' && typeof record.text === 'string') {\n return { type: 'text', text: record.text, ...(providerOptions ? { providerOptions } : {}) };\n }\n\n // Accept both shapes here: rows written by main + the v4-shaped narrowed branch used\n // `mimeType`; rows that came in as v5 user input (and current canonical) use `mediaType`.\n if (record.type === 'file' || record.type === 'image') {\n const data = record.type === 'image' ? (record.image ?? record.data) : record.data;\n if (typeof data !== 'string') return undefined;\n const mediaType =\n typeof record.mediaType === 'string'\n ? record.mediaType\n : typeof record.mimeType === 'string'\n ? record.mimeType\n : record.type === 'image'\n ? 'image/png'\n : '';\n if (!mediaType) return undefined;\n return {\n type: 'file',\n data,\n mediaType,\n ...(typeof record.filename === 'string' ? { filename: record.filename } : {}),\n ...(providerOptions ? { providerOptions } : {}),\n };\n }\n\n return undefined;\n}\n\nfunction collapseLegacyParts(parts: Array): AgentSignalContents | undefined {\n if (parts.length === 0) return undefined;\n const first = parts[0];\n if (parts.length === 1 && first?.type === 'text') return first.text;\n return parts;\n}\n\nfunction contentsToSignalParts(contents: AgentSignalContents): SignalPart[] {\n if (typeof contents === 'string') return [{ type: 'text', text: contents }];\n return contents.map(part => {\n if (part.type === 'file') {\n const data = part.data instanceof URL ? part.data.toString() : convertDataContentToBase64String(part.data);\n return {\n type: 'file',\n data,\n mediaType: part.mediaType,\n ...(part.filename ? { filename: part.filename } : {}),\n ...(part.providerOptions ? { providerOptions: part.providerOptions as MastraProviderMetadata } : {}),\n };\n }\n return {\n type: 'text',\n text: part.text,\n ...(part.providerOptions ? { providerOptions: part.providerOptions as MastraProviderMetadata } : {}),\n };\n });\n}\n\n// Narrow a storage parts array down to SignalPart. Signal rows should only ever contain text/file\n// parts (that's what contentsToSignalParts produces), but the storage type permits richer parts —\n// so the read boundary filters defensively.\nfunction storagePartsToSignalParts(parts: MastraMessagePart[]): SignalPart[] {\n const out: SignalPart[] = [];\n for (const part of parts) {\n const providerOptions = (part as { providerMetadata?: MastraProviderMetadata }).providerMetadata;\n if (part.type === 'text') {\n out.push({\n type: 'text',\n text: part.text,\n ...(providerOptions ? { providerOptions } : {}),\n });\n } else if (part.type === 'file' && typeof (part as { data?: unknown }).data === 'string') {\n const file = part as { data: string; mimeType?: string; filename?: string };\n out.push({\n type: 'file',\n data: file.data,\n mediaType: typeof file.mimeType === 'string' ? file.mimeType : '',\n ...(typeof file.filename === 'string' ? { filename: file.filename } : {}),\n ...(providerOptions ? { providerOptions } : {}),\n });\n }\n }\n return out;\n}\n\n// Project canonical signal parts back into the public AgentSignalContents shape. Collapses a\n// single text part to a bare string; otherwise returns the parts unchanged (both internal\n// SignalPart and the public v5 FilePart use `mediaType`).\nfunction partsToSignalContents(parts: SignalPart[]): AgentSignalContents {\n if (parts.length === 1 && parts[0]?.type === 'text' && !parts[0].providerOptions) return parts[0].text;\n return parts.map(part =>\n part.type === 'file'\n ? {\n type: 'file',\n data: part.data,\n mediaType: part.mediaType,\n ...(part.filename ? { filename: part.filename } : {}),\n ...(part.providerOptions ? { providerOptions: part.providerOptions } : {}),\n }\n : {\n type: 'text',\n text: part.text,\n ...(part.providerOptions ? { providerOptions: part.providerOptions } : {}),\n },\n );\n}\n\nfunction hasMeaningfulAttributes(attributes?: AgentSignalAttributes): boolean {\n if (!attributes) return false;\n return Object.keys(attributes).some(key => {\n const value = attributes[key];\n return value !== null && value !== undefined;\n });\n}\n\n// Inline-wrap the first text part with the signal's XML tag. If there's no text part, prepend\n// a self-closing marker as a synthetic first part so attributes still surface alongside the\n// file/image payload on the same turn.\nfunction injectMarkerInline(\n signal: Pick,\n parts: SignalPart[],\n): SignalPart[] {\n let wrapped = false;\n const out: SignalPart[] = [];\n for (const part of parts) {\n if (!wrapped && part.type === 'text') {\n wrapped = true;\n out.push({ ...part, text: signalToXmlMarkup({ ...signal, contents: part.text }) });\n } else {\n out.push(part);\n }\n }\n if (!wrapped) {\n const markerText = signalToXmlMarkup({ type: signal.type, tagName: signal.tagName, attributes: signal.attributes });\n out.unshift({ type: 'text', text: markerText });\n }\n return out;\n}\n\n// Build the LLM-facing projection from the canonical parts. Returns a v5 UserModelMessage\n// (a prompt turn the model sees, not a signal row). The XML wrapper carries the attributes\n// inline so there's no metadata.signal here.\nfunction signalToLLMMessage(\n signal: Pick,\n parts: SignalPart[],\n): UserModelMessage {\n const isUserMessage = signal.type === 'user';\n const hasAttrs = hasMeaningfulAttributes(signal.attributes);\n\n const anyPartProviderOptions = parts.some(part => part.providerOptions);\n\n let content: UserModelMessage['content'];\n if (isUserMessage && !hasAttrs) {\n // user-message with no attributes — pass parts through unchanged. Collapse a single text\n // part to a bare string so providers get their natural prompt shape (unless the part\n // carries providerOptions, in which case we keep the parts array to preserve them).\n content = parts.length === 1 && parts[0]?.type === 'text' && !parts[0].providerOptions ? parts[0].text : parts;\n } else if (parts.every(part => part.type === 'text') && !anyPartProviderOptions) {\n // Text-only with no per-part providerOptions: flatten to one wrapped string.\n content = signalToXmlMarkup({ ...signal, contents: parts.map(part => part.text).join('\\n') });\n } else {\n // Multimodal or per-part providerOptions present: inline-wrap the marker alongside the\n // payload so each part (and its providerOptions) is preserved.\n content = injectMarkerInline(signal, parts);\n }\n\n return {\n role: 'user',\n content,\n ...(signal.providerOptions ? { providerOptions: signal.providerOptions } : {}),\n };\n}\n\nfunction signalToDataPart(signal: ReturnType, parts: SignalPart[]): AgentSignalDataPart {\n return {\n type: signal.type === 'user' ? 'data-user-message' : 'data-signal',\n data: {\n id: signal.id,\n type: signal.type,\n tagName: signal.tagName,\n contents: partsToSignalContents(parts),\n createdAt: signal.createdAt.toISOString(),\n ...(signal.acceptedAt ? { acceptedAt: signal.acceptedAt.toISOString() } : {}),\n ...(signal.attributes ? { attributes: signal.attributes } : {}),\n ...(signal.metadata ? { metadata: signal.metadata } : {}),\n },\n transient: true,\n };\n}\n\nfunction signalToDBMessage(\n signal: ReturnType,\n parts: SignalPart[],\n options?: { threadId?: string; resourceId?: string },\n): MastraDBMessage {\n const storageParts: MastraMessagePart[] =\n parts.length > 0\n ? parts.map(part =>\n part.type === 'file'\n ? {\n type: 'file',\n data: part.data,\n mimeType: part.mediaType,\n ...(part.filename ? { filename: part.filename } : {}),\n ...(part.providerOptions ? { providerMetadata: part.providerOptions } : {}),\n }\n : {\n type: 'text',\n text: part.text,\n ...(part.providerOptions ? { providerMetadata: part.providerOptions } : {}),\n },\n )\n : [{ type: 'text', text: '' }];\n return {\n id: signal.id,\n role: 'signal',\n createdAt: signal.createdAt,\n threadId: options?.threadId,\n resourceId: options?.resourceId,\n type: signal.tagName,\n content: {\n format: 2,\n parts: storageParts,\n ...(signal.providerOptions ? { providerMetadata: signal.providerOptions } : {}),\n metadata: {\n signal: {\n id: signal.id,\n type: signal.type,\n tagName: signal.tagName,\n createdAt: signal.createdAt.toISOString(),\n ...(signal.acceptedAt ? { acceptedAt: signal.acceptedAt.toISOString() } : {}),\n ...(signal.attributes ? { attributes: signal.attributes } : {}),\n ...(signal.metadata ? { metadata: signal.metadata } : {}),\n },\n },\n },\n };\n}\n\nexport function isCreatedAgentSignal(input: unknown): input is CreatedAgentSignal {\n if (!input || typeof input !== 'object' || Array.isArray(input)) return false;\n\n const candidate = input as Partial;\n return candidate.__isCreatedSignal === true;\n}\n\nexport function createSignal(input: AgentSignalInput): CreatedAgentSignal {\n const signal = normalizeSignal(input);\n const parts = contentsToSignalParts(signal.contents);\n\n return {\n ...signal,\n __isCreatedSignal: true as const,\n toDBMessage: options => signalToDBMessage(signal, parts, options),\n toLLMMessage: () => signalToLLMMessage(signal, parts),\n toDataPart: () => signalToDataPart(signal, parts),\n };\n}\n\n/**\n * Resolve delivery option attributes into concrete `attributes` on a signal.\n * Returns a new signal with the selected branch's `attributes` merged into\n * top-level `attributes`.\n *\n * @experimental\n */\nexport function resolveDeliveryAttributes(\n signal: CreatedAgentSignal,\n attributes: AgentSignalAttributes | undefined,\n): CreatedAgentSignal {\n if (!attributes || Object.keys(attributes).length === 0) return signal;\n\n return createSignal({\n ...signal,\n attributes: { ...signal.attributes, ...attributes },\n });\n}\n\nexport function signalToMessage(signal: AgentSignalInput | CreatedAgentSignal): UserModelMessage {\n return createSignal(signal).toLLMMessage();\n}\n\nexport function signalToMastraDBMessage(\n signal: AgentSignalInput | CreatedAgentSignal,\n options?: { threadId?: string; resourceId?: string },\n): MastraDBMessage {\n return createSignal(signal).toDBMessage(options);\n}\n\nexport function signalToDataPartFormat(signal: AgentSignalInput | CreatedAgentSignal): AgentSignalDataPart {\n return createSignal(signal).toDataPart();\n}\n\nexport function mastraDBMessageToSignal(message: MastraDBMessage): CreatedAgentSignal {\n const metadataSignal = message.content.metadata?.signal;\n const signalMetadata =\n metadataSignal && typeof metadataSignal === 'object' && !Array.isArray(metadataSignal)\n ? (metadataSignal as Record)\n : undefined;\n\n const rawType = typeof signalMetadata?.type === 'string' ? signalMetadata.type : (message.type ?? 'user-message');\n const type = rawType as AgentSignalType;\n const tagName = typeof signalMetadata?.tagName === 'string' ? signalMetadata.tagName : undefined;\n // Reconstruct contents from content.parts — the canonical source. Legacy rows (pre stash\n // removal) preserved the original input shape on metadata.signal.contents; recover whatever\n // we can from it (string, parts array, CoreUserMessage wrapper, CoreUserMessage[]) so files\n // and other non-text payloads keep loading. If the stash is unrecognisable, fall back to the\n // canonical parts projection.\n const rawLegacyContents = signalMetadata && 'contents' in signalMetadata ? signalMetadata.contents : undefined;\n const legacyContents = legacyContentsToSignalContents(rawLegacyContents);\n const partsContents = partsToSignalContents(storagePartsToSignalParts(message.content.parts));\n const contents = legacyContents ?? partsContents;\n const providerMetadata = message.content.providerMetadata;\n const base = {\n id: typeof signalMetadata?.id === 'string' ? signalMetadata.id : message.id,\n createdAt: typeof signalMetadata?.createdAt === 'string' ? signalMetadata.createdAt : message.createdAt,\n acceptedAt: typeof signalMetadata?.acceptedAt === 'string' ? signalMetadata.acceptedAt : undefined,\n attributes:\n signalMetadata?.attributes &&\n typeof signalMetadata.attributes === 'object' &&\n !Array.isArray(signalMetadata.attributes)\n ? (signalMetadata.attributes as AgentSignalAttributes)\n : undefined,\n metadata:\n signalMetadata?.metadata && typeof signalMetadata.metadata === 'object' && !Array.isArray(signalMetadata.metadata)\n ? (signalMetadata.metadata as AgentSignalInput['metadata'])\n : undefined,\n providerOptions:\n providerMetadata && typeof providerMetadata === 'object' && !Array.isArray(providerMetadata)\n ? (providerMetadata as MastraProviderMetadata)\n : undefined,\n };\n\n return createSignal({ ...base, type, tagName, contents });\n}\n\nexport function createMessageSignal(\n input: AgentMessageInput,\n options?: Pick,\n): CreatedAgentSignal {\n const message = typeof input === 'string' || Array.isArray(input) ? { contents: input } : input;\n return createSignal({\n ...message,\n ...options,\n type: 'user',\n tagName: 'user',\n });\n}\n\nexport function dataPartToSignal(part: AgentSignalDataPart): CreatedAgentSignal {\n return createSignal(part.data);\n}\n","import type { Message as AIV4Message, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\n\nimport type { MastraDBMessage, MastraMessageV1 } from '../state/types';\nimport type { AIV5Type, AIV6Type, CoreMessageV4 } from '../types';\n\n/**\n * Type representing all possible message input formats\n */\nexport type MessageInput =\n | AIV6Type.UIMessage\n | AIV6Type.ModelMessage\n | AIV5Type.UIMessage\n | AIV5Type.ModelMessage\n | (UIMessageV4 & { metadata?: Record })\n | AIV4Message\n | CoreMessageV4\n | MastraMessageV1\n | MastraDBMessage;\n\n/**\n * TypeDetector - Centralized type detection for different message formats\n *\n * This class provides consistent type detection across all message formats,\n * which is critical for:\n * - Determining which conversion path to use\n * - Validating incoming message formats\n * - Providing better TypeScript type narrowing\n *\n * The detection order is important because some formats share similar properties.\n */\nexport class TypeDetector {\n /**\n * Check if a message is a MastraDBMessage (format 2)\n */\n static isMastraDBMessage(msg: MessageInput): msg is MastraDBMessage {\n return Boolean(\n 'content' in msg &&\n msg.content &&\n !Array.isArray(msg.content) &&\n typeof msg.content !== 'string' &&\n 'format' in msg.content &&\n msg.content.format === 2,\n );\n }\n\n /**\n * Check if a message is a MastraMessageV1 (legacy format)\n */\n static isMastraMessageV1(msg: MessageInput): msg is MastraMessageV1 {\n return !TypeDetector.isMastraDBMessage(msg) && ('threadId' in msg || 'resourceId' in msg);\n }\n\n /**\n * Check if a message is either Mastra format (V1 or V2/DB)\n */\n static isMastraMessage(msg: MessageInput): msg is MastraDBMessage | MastraMessageV1 {\n return TypeDetector.isMastraDBMessage(msg) || TypeDetector.isMastraMessageV1(msg);\n }\n\n /**\n * Check if a message is an AIV4 UIMessage\n */\n static isAIV4UIMessage(msg: MessageInput): msg is UIMessageV4 {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV4CoreMessage(msg) &&\n 'parts' in msg &&\n !TypeDetector.hasAIV5UIMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV6 UIMessage.\n *\n * At runtime, the v5 and v6 UI shapes overlap heavily. We only treat a\n * message as distinctly v6 if it uses v6-only parts or tool states.\n */\n static isAIV6UIMessage(msg: MessageInput): msg is AIV6Type.UIMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV4CoreMessage(msg) &&\n 'parts' in msg &&\n TypeDetector.hasAIV6UIMessageCharacteristics(\n msg as AIV6Type.UIMessage | AIV5Type.UIMessage | UIMessageV4 | AIV4Message,\n )\n );\n }\n\n /**\n * Check if a message is an AIV5 UIMessage\n */\n static isAIV5UIMessage(msg: MessageInput): msg is AIV5Type.UIMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV6UIMessage(msg) &&\n !TypeDetector.isAIV5CoreMessage(msg) &&\n 'parts' in msg &&\n TypeDetector.hasAIV5UIMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV4 CoreMessage\n */\n static isAIV4CoreMessage(msg: MessageInput): msg is CoreMessageV4 {\n // V4 CoreMessage has role and content like V5/V6, but content can be an\n // array of parts with v4-specific field names.\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !('parts' in msg) &&\n 'content' in msg &&\n !TypeDetector.hasAIV5CoreMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV6 ModelMessage (CoreMessage equivalent).\n */\n static isAIV6CoreMessage(msg: MessageInput): msg is AIV6Type.ModelMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !('parts' in msg) &&\n 'content' in msg &&\n TypeDetector.hasAIV6CoreMessageCharacteristics(\n msg as CoreMessageV4 | AIV5Type.ModelMessage | AIV6Type.ModelMessage | AIV4Message,\n )\n );\n }\n\n /**\n * Check if a message is an AIV5 ModelMessage (CoreMessage equivalent)\n */\n static isAIV5CoreMessage(msg: MessageInput): msg is AIV5Type.ModelMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV6CoreMessage(msg) &&\n !('parts' in msg) &&\n 'content' in msg &&\n TypeDetector.hasAIV5CoreMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message has AIV6-only UI characteristics.\n */\n static hasAIV6UIMessageCharacteristics(\n msg: AIV6Type.UIMessage | AIV5Type.UIMessage | UIMessageV4 | AIV4Message,\n ): msg is AIV6Type.UIMessage {\n if (!('parts' in msg) || !msg.parts) return false;\n\n for (const part of msg.parts) {\n if (part.type === 'source-document') return true;\n if (part.type === 'dynamic-tool') return true;\n\n if (\n 'toolCallId' in part &&\n 'state' in part &&\n (part.state === 'approval-requested' || part.state === 'approval-responded' || part.state === 'output-denied')\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if a message has AIV5 UIMessage characteristics\n *\n * V5 UIMessages have specific part types and field names that differ from V4.\n */\n static hasAIV5UIMessageCharacteristics(\n msg: AIV6Type.UIMessage | AIV5Type.UIMessage | UIMessageV4 | AIV4Message,\n ): msg is AIV5Type.UIMessage {\n // AI SDK v4 has separate arrays of tool invocations, reasoning, and\n // attachments that do not preserve overall part ordering, so their\n // presence is a quick early signal that this is not a v5/v6 UI message.\n if (\n 'toolInvocations' in msg ||\n 'reasoning' in msg ||\n 'experimental_attachments' in msg ||\n 'data' in msg ||\n 'annotations' in msg\n // Don't check `content` here. That would fully narrow to v5 and is more\n // likely to misclassify a loosely constructed v5/v6 UI message.\n )\n return false;\n\n if (!msg.parts) return false; // likely an AIV4 Message\n\n for (const part of msg.parts) {\n if ('metadata' in part) return true;\n\n // Tool parts are the cleanest discriminator:\n // - v4 uses `tool-invocation`\n // - v5/v6 use `tool-${toolName}` / `dynamic-tool`\n if ('toolInvocation' in part) return false;\n if ('toolCallId' in part) return true;\n if (part.type === 'source') return false;\n if (part.type === 'source-url') return true;\n\n if (part.type === 'reasoning') {\n if ('state' in part || 'text' in part) return true; // v5/v6\n if ('reasoning' in part || 'details' in part) return false; // v4\n }\n\n if (part.type === 'file' && 'mediaType' in part) return true;\n }\n\n return false; // default to v4 for backwards compatibility\n }\n\n /**\n * Check if a message has AIV6-only core characteristics.\n */\n static hasAIV6CoreMessageCharacteristics(\n msg: CoreMessageV4 | AIV5Type.ModelMessage | AIV6Type.ModelMessage | AIV4Message,\n ): msg is AIV6Type.ModelMessage {\n if ('parts' in msg || typeof msg.content === 'string') return false;\n\n return msg.content.some(part => part.type === 'tool-approval-request' || part.type === 'tool-approval-response');\n }\n\n /**\n * Check if a message has AIV5 CoreMessage characteristics\n *\n * V5 ModelMessages use different field names from v4\n * (for example `output` vs `result`, `input` vs `args`,\n * `mediaType` vs `mimeType`).\n */\n static hasAIV5CoreMessageCharacteristics(\n msg:\n | CoreMessageV4\n | AIV6Type.ModelMessage\n | AIV5Type.ModelMessage\n // This is here because the AIV4 Message type can omit parts entirely.\n | AIV4Message,\n ): msg is AIV5Type.ModelMessage {\n if ('experimental_providerMetadata' in msg) return false;\n // String content is identical in v4/v5/v6, so treat it as v5-compatible.\n if (typeof msg.content === 'string') return true;\n\n for (const part of msg.content) {\n if (part.type === 'tool-result' && 'output' in part) return true;\n if (part.type === 'tool-call' && 'input' in part) return true;\n if (part.type === 'tool-result' && 'result' in part) return false;\n if (part.type === 'tool-call' && 'args' in part) return false;\n if ('mediaType' in part) return true;\n if ('mimeType' in part) return false;\n if ('experimental_providerMetadata' in part) return false;\n if (part.type === 'reasoning' && 'signature' in part) return false;\n if (part.type === 'redacted-reasoning') return false;\n }\n\n // If no distinguishing features are found, the message shape is still\n // compatible with the v5 model format.\n return true;\n }\n\n /**\n * Get the normalized role for a message\n * Maps `tool` to `assistant` because tool messages are displayed as part of\n * the assistant conversation.\n */\n static getRole(message: MessageInput): MastraDBMessage['role'] {\n if (message.role === 'assistant' || message.role === 'tool') return 'assistant';\n if (message.role === 'user') return 'user';\n if (message.role === 'system') return 'system';\n throw new Error(\n `BUG: add handling for message role ${message.role} in message ${JSON.stringify(message, null, 2)}`,\n );\n }\n}\n","import { convertDataContentToBase64String } from './data-content';\n\n/**\n * Image content can be a string (URL or data URI), a URL object, or binary data\n */\nexport type ImageContent = string | URL | Uint8Array | ArrayBuffer | Buffer;\n\n/**\n * Represents the parsed components of a data URI\n */\nexport interface DataUriParts {\n mimeType?: string;\n base64Content: string;\n isDataUri: boolean;\n}\n\n/**\n * Parses a data URI string into its components.\n * Format: data:[][;base64],\n *\n * @param dataUri - The data URI string to parse\n * @returns Parsed components including MIME type and base64 content\n */\nexport function parseDataUri(dataUri: string): DataUriParts {\n if (!dataUri.startsWith('data:')) {\n return {\n isDataUri: false,\n base64Content: dataUri,\n };\n }\n\n const base64Index = dataUri.indexOf(',');\n if (base64Index === -1) {\n // Malformed data URI, return as-is\n return {\n isDataUri: true,\n base64Content: dataUri,\n };\n }\n\n const header = dataUri.substring(5, base64Index); // Skip 'data:' prefix\n const base64Content = dataUri.substring(base64Index + 1);\n\n // Extract MIME type from header (before ';base64' or ';')\n const semicolonIndex = header.indexOf(';');\n const mimeType = semicolonIndex !== -1 ? header.substring(0, semicolonIndex) : header;\n\n return {\n isDataUri: true,\n mimeType: mimeType || undefined,\n base64Content,\n };\n}\n\n/**\n * Creates a data URI from base64 content and MIME type.\n *\n * @param base64Content - The base64 encoded content\n * @param mimeType - The MIME type (defaults to 'application/octet-stream')\n * @returns A properly formatted data URI\n */\nexport function createDataUri(base64Content: string, mimeType: string = 'application/octet-stream'): string {\n // If it's already a data URI, return as-is\n if (base64Content.startsWith('data:')) {\n return base64Content;\n }\n return `data:${mimeType};base64,${base64Content}`;\n}\n\n/**\n * Converts various image data formats to a string representation.\n * - Strings are returned as-is (could be URLs or data URIs)\n * - URL objects are converted to strings\n * - Binary data (Uint8Array, ArrayBuffer, Buffer) is converted to base64\n *\n * @param image - The image data in various formats\n * @param fallbackMimeType - MIME type to use when creating data URIs from binary data\n * @returns String representation of the image (URL, data URI, or base64)\n */\nexport function imageContentToString(image: ImageContent, fallbackMimeType?: string): string {\n if (typeof image === 'string') {\n return image;\n }\n\n if (image instanceof URL) {\n return image.toString();\n }\n\n if (image instanceof Uint8Array || image instanceof ArrayBuffer || (globalThis.Buffer && Buffer.isBuffer(image))) {\n // Convert binary data to base64\n const base64 = convertDataContentToBase64String(image);\n // If it's not already a data URI, create one\n if (fallbackMimeType && !base64.startsWith('data:')) {\n return `data:${fallbackMimeType};base64,${base64}`;\n }\n return base64;\n }\n\n // Fallback for unknown types - try to convert to string\n return String(image);\n}\n\n/**\n * Converts various image data formats to a data URI string.\n *\n * @param image - The image data in various formats\n * @param mimeType - MIME type for the data URI (defaults to 'image/png')\n * @returns Data URI string\n */\nexport function imageContentToDataUri(image: ImageContent, mimeType: string = 'image/png'): string {\n const imageStr = imageContentToString(image, mimeType);\n\n // If it's already a data URI, return as-is\n if (imageStr.startsWith('data:')) {\n return imageStr;\n }\n\n // If it's an HTTP(S) URL, return as-is (can't convert to data URI)\n if (imageStr.startsWith('http://') || imageStr.startsWith('https://')) {\n return imageStr;\n }\n\n // Otherwise, assume it's base64 and create a data URI\n return `data:${mimeType};base64,${imageStr}`;\n}\n\n/**\n * Gets a stable cache key component for image content.\n * Used for generating hash keys for caching purposes.\n *\n * @param image - The image data in various formats\n * @returns A string or number suitable for cache key generation\n */\nexport function getImageCacheKey(image: ImageContent): string | number {\n if (image instanceof URL) {\n return image.toString();\n }\n\n if (typeof image === 'string') {\n return image.length;\n }\n\n if (image instanceof Uint8Array) {\n return image.byteLength;\n }\n\n if (image instanceof ArrayBuffer) {\n return image.byteLength;\n }\n\n return image;\n}\n\n/**\n * Checks if a string is a valid URL (including protocol-relative URLs).\n *\n * @param str - The string to check\n * @returns true if the string is a valid URL\n */\nexport function isValidUrl(str: string): boolean {\n try {\n new URL(str);\n return true;\n } catch {\n // Try as protocol-relative URL\n if (str.startsWith('//')) {\n try {\n new URL(`https:${str}`);\n return true;\n } catch {\n return false;\n }\n }\n return false;\n }\n}\n\n/**\n * Categorizes a string as a URL, data URI, or raw data (base64/other).\n * Also extracts MIME type from data URIs when present.\n *\n * @param data - The string data to categorize\n * @param fallbackMimeType - Optional fallback MIME type\n * @returns Categorized data with type and extracted MIME type\n */\nexport function categorizeFileData(\n data: string,\n fallbackMimeType?: string,\n): {\n type: 'url' | 'dataUri' | 'raw';\n mimeType?: string;\n data: string;\n} {\n // Parse as data URI first to extract MIME type\n const parsed = parseDataUri(data);\n const mimeType = parsed.isDataUri && parsed.mimeType ? parsed.mimeType : fallbackMimeType;\n\n // Check if it's a data URI\n if (parsed.isDataUri) {\n return {\n type: 'dataUri',\n mimeType,\n data,\n };\n }\n\n // Check if it's a URL\n if (isValidUrl(data)) {\n return {\n type: 'url',\n mimeType,\n data,\n };\n }\n\n // Otherwise it's raw data (likely base64 or other string data)\n return {\n type: 'raw',\n mimeType,\n data,\n };\n}\n\n/**\n * Classifies a string as a URL, data URI, or raw data.\n *\n * @param data - The string to classify\n * @returns Object with classification and extracted metadata\n */\nexport function classifyFileData(data: string): {\n type: 'url' | 'dataUri' | 'base64' | 'other';\n mimeType?: string;\n} {\n // Check if it's a data URI\n const parsed = parseDataUri(data);\n if (parsed.isDataUri) {\n return {\n type: 'dataUri',\n mimeType: parsed.mimeType,\n };\n }\n\n // Check if it's a URL\n if (isValidUrl(data)) {\n return { type: 'url' };\n }\n\n // Check if it looks like base64 (simple heuristic)\n if (/^[A-Za-z0-9+/\\-_]+=*$/.test(data) && data.length > 20) {\n return { type: 'base64' };\n }\n\n return { type: 'other' };\n}\n","const RESPONSE_ITEM_ID_PROVIDERS = ['openai', 'azure'] as const;\n\nexport type ResponseItemIdProvider = (typeof RESPONSE_ITEM_ID_PROVIDERS)[number];\n\nfunction formatResponseProviderItemKey(provider: ResponseItemIdProvider, itemId: string): string {\n // Keep the provider namespace in the key so matching Azure/OpenAI item IDs\n // cannot merge across provider-specific response streams.\n return `${provider}:${itemId}`;\n}\n\nexport function getResponseProviderItemId(\n providerMetadata: Record | undefined,\n): { provider: ResponseItemIdProvider; itemId: string } | undefined {\n return getResponseProviderItemIds(providerMetadata)[0];\n}\n\nexport function getResponseProviderItemKey(providerMetadata: Record | undefined): string | undefined {\n const item = getResponseProviderItemId(providerMetadata);\n return item ? formatResponseProviderItemKey(item.provider, item.itemId) : undefined;\n}\n\nexport function getResponseProviderItemIds(\n providerMetadata: Record | undefined,\n): Array<{ provider: ResponseItemIdProvider; itemId: string }> {\n if (!providerMetadata) return [];\n\n const azureMetadata = providerMetadata.azure as Record | undefined;\n const azureItemId = azureMetadata?.itemId;\n const openaiMetadata = providerMetadata.openai as Record | undefined;\n const openaiItemId = openaiMetadata?.itemId;\n if (typeof azureItemId === 'string' && azureItemId === openaiItemId) {\n return [{ provider: 'azure', itemId: azureItemId }];\n }\n\n // AI SDK Responses metadata is expected to use exactly one provider namespace\n // per part. If a future proxy adds both, keep this deterministic.\n return RESPONSE_ITEM_ID_PROVIDERS.flatMap(provider => {\n const metadata = providerMetadata[provider] as Record | undefined;\n const itemId = metadata?.itemId;\n return typeof itemId === 'string' ? [{ provider, itemId }] : [];\n });\n}\n\nexport function getResponseProviderItemKeys(providerMetadata: Record | undefined): string[] {\n return getResponseProviderItemIds(providerMetadata).map(({ provider, itemId }) =>\n formatResponseProviderItemKey(provider, itemId),\n );\n}\n","import type { CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\nimport type { ModelMessage, ToolResultPart } from '@internal/ai-sdk-v5';\n\nimport type { IMastraLogger } from '../../../logger';\nimport type { MastraDBMessage } from '../state/types';\nimport { getResponseProviderItemId } from './response-item-metadata';\nimport type { ResponseItemIdProvider } from './response-item-metadata';\n\n/**\n * Tool result with input field (Anthropic requirement)\n */\nexport type ToolResultWithInput = ToolResultPart & {\n input: Record;\n};\n\n// ============================================================================\n// Gemini Compatibility\n// ============================================================================\n\n/**\n * Ensures message array is compatible with Gemini API requirements.\n *\n * Gemini API requires:\n * 1. The first non-system message must be from the user role\n * 2. Cannot have only system messages - at least one user/assistant is required\n *\n * @param messages - Array of model messages to validate and fix\n * @param logger - Optional logger for warnings\n * @returns Modified messages array that satisfies Gemini requirements\n *\n * @see https://github.com/mastra-ai/mastra/issues/7287 - Tool call ordering\n * @see https://github.com/mastra-ai/mastra/issues/8053 - Single turn validation\n * @see https://github.com/mastra-ai/mastra/issues/13045 - Empty thread support\n */\nexport function ensureGeminiCompatibleMessages(\n messages: T[],\n logger?: IMastraLogger,\n): T[] {\n const result = [...messages];\n\n // Ensure first non-system message is user\n const firstNonSystemIndex = result.findIndex(m => m.role !== 'system');\n\n if (firstNonSystemIndex === -1) {\n // Only system messages or empty — warn and pass through unchanged.\n // Providers that support system-only prompts (Anthropic, OpenAI) will work natively.\n // Providers that don't (Gemini) will return their own error.\n if (result.length > 0) {\n logger?.warn(\n 'No user or assistant messages in the request. Some providers (e.g. Gemini) require at least one user message to generate a response.',\n );\n }\n } else if (result[firstNonSystemIndex]?.role === 'assistant') {\n // First non-system is assistant, insert user message before it\n result.splice(firstNonSystemIndex, 0, {\n role: 'user',\n content: '.',\n } as T);\n }\n\n return result;\n}\n\n// ============================================================================\n// Anthropic Compatibility\n// ============================================================================\n\n/**\n * Ensures model messages are compatible with Anthropic API requirements.\n *\n * Anthropic API requires tool-result parts to include an 'input' field\n * that matches the original tool call arguments.\n *\n * @param messages - Array of model messages to transform\n * @param dbMessages - MastraDB messages to look up tool call args from\n * @returns Messages with tool-result parts enriched with input field\n *\n * @see https://github.com/mastra-ai/mastra/issues/11376 - Anthropic models fail with empty object tool input\n */\nexport function ensureAnthropicCompatibleMessages(\n messages: ModelMessage[],\n dbMessages: MastraDBMessage[],\n): ModelMessage[] {\n return messages.map(msg => enrichToolResultsWithInput(msg, dbMessages));\n}\n\n/**\n * Removes orphan tool_use / tool_result blocks. Anthropic requires every tool_result\n * to be in the message immediately after its matching tool_use, and every tool_use\n * to have a matching tool_result in the next message. Recall windows can slice\n * through a parallel tool-call group and leave behind half a pair.\n */\nexport function sanitizeOrphanedToolPairs(messages: ModelMessage[]): ModelMessage[] {\n const filteredContents = messages.map(m => (Array.isArray(m.content) ? [...m.content] : null));\n\n for (let i = 0; i < messages.length; i++) {\n const current = messages[i]!;\n\n if (current.role === 'assistant' && Array.isArray(current.content)) {\n const useIds = new Set();\n const inlineResultIds = new Set();\n for (const part of current.content) {\n if (part.type === 'tool-call') useIds.add(part.toolCallId);\n else if (part.type === 'tool-result') inlineResultIds.add(part.toolCallId);\n }\n\n const next = messages[i + 1];\n const nextResultIds = new Set();\n if (next && next.role === 'tool' && Array.isArray(next.content)) {\n for (const part of next.content) {\n if (part.type === 'tool-result') nextResultIds.add(part.toolCallId);\n }\n }\n\n const validPairs = new Set([...useIds].filter(id => inlineResultIds.has(id) || nextResultIds.has(id)));\n\n filteredContents[i] = filteredContents[i]!.filter(p => {\n if (p.type !== 'tool-call') return true;\n const tc = p as { toolCallId: string; providerExecuted?: boolean };\n // Provider-executed tools may be deferred (e.g. Anthropic web_search): the tool_use\n // can appear without a matching tool_result until the provider resumes on the next call.\n return tc.providerExecuted === true || validPairs.has(tc.toolCallId);\n });\n\n if (next && next.role === 'tool' && Array.isArray(next.content)) {\n filteredContents[i + 1] = filteredContents[i + 1]!.filter(\n p => p.type !== 'tool-result' || validPairs.has((p as { toolCallId: string }).toolCallId),\n );\n }\n } else if (current.role === 'tool' && Array.isArray(current.content)) {\n const prev = messages[i - 1];\n if (!prev || prev.role !== 'assistant' || !Array.isArray(prev.content)) {\n filteredContents[i] = filteredContents[i]!.filter(p => p.type !== 'tool-result');\n }\n }\n }\n\n const result: ModelMessage[] = [];\n for (let i = 0; i < messages.length; i++) {\n const original = messages[i]!;\n const filtered = filteredContents[i];\n if (filtered == null) {\n result.push(original);\n continue;\n }\n if (filtered.length === 0) continue;\n if (Array.isArray(original.content) && filtered.length === original.content.length) {\n result.push(original);\n continue;\n }\n result.push({ ...original, content: filtered } as ModelMessage);\n }\n\n return result;\n}\n\n/**\n * Enriches a single message's tool-result parts with input field\n */\nfunction enrichToolResultsWithInput(message: ModelMessage, dbMessages: MastraDBMessage[]): ModelMessage {\n if (message.role !== 'tool' || !Array.isArray(message.content)) {\n return message;\n }\n\n return {\n ...message,\n content: message.content.map(part => {\n if (part.type === 'tool-result') {\n return {\n ...part,\n input: findToolCallArgs(dbMessages, part.toolCallId),\n } as ToolResultWithInput;\n }\n return part;\n }),\n } as ModelMessage;\n}\n\n// ============================================================================\n// OpenAI-compatible Responses Compatibility\n// ============================================================================\n\n/**\n * Checks if a message part has an OpenAI reasoning itemId.\n *\n * OpenAI Responses reasoning items are tracked via `providerMetadata.openai.itemId`.\n * Each reasoning item has a unique itemId that must be preserved for proper deduplication.\n *\n * @param part - A message part to check\n * @returns true if the part has an OpenAI itemId\n *\n * @see https://github.com/mastra-ai/mastra/issues/9005 - OpenAI reasoning items filtering\n */\nexport function hasOpenAIReasoningItemId(part: unknown): boolean {\n return Boolean(getOpenAIReasoningItemId(part));\n}\n\n/**\n * Checks if a message part has an OpenAI-compatible Responses itemId.\n *\n * Provider-neutral Responses item IDs are tracked via provider metadata or\n * provider options fields such as `openai.itemId` or `azure.itemId`.\n */\nexport function hasResponseProviderItemId(part: unknown): boolean {\n return Boolean(getResponseProviderItemIdFromPart(part));\n}\n\n/**\n * Extracts an OpenAI itemId from a message part if present.\n *\n * This only inspects `providerMetadata.openai.itemId`; use\n * `getResponseProviderItemIdFromPart` for provider-aware Azure/OpenAI lookups.\n *\n * @param part - A message part to extract from\n * @returns The itemId string or undefined if not present\n */\nexport function getOpenAIReasoningItemId(part: unknown): string | undefined {\n if (!part || typeof part !== 'object') return undefined;\n const partAny = part as Record;\n const providerMetadata = partAny.providerMetadata as Record | undefined;\n const openaiMetadata = providerMetadata?.openai as Record | undefined;\n return typeof openaiMetadata?.itemId === 'string' ? openaiMetadata.itemId : undefined;\n}\n\nexport function getResponseProviderItemIdFromPart(\n part: unknown,\n): { provider: ResponseItemIdProvider; itemId: string } | undefined {\n if (!part || typeof part !== 'object') return undefined;\n const partAny = part as Record;\n\n return (\n getResponseProviderItemId(partAny.providerMetadata as Record | undefined) ||\n getResponseProviderItemId(partAny.providerOptions as Record | undefined)\n );\n}\n\n// ============================================================================\n// Tool Call Args Lookup\n// ============================================================================\n\n/**\n * Finds the tool call args for a given toolCallId by searching through messages.\n * This is used to reconstruct the input field when converting tool-result parts to StaticToolResult.\n *\n * Searches through messages in reverse order (most recent first) for better performance.\n * Checks both content.parts (v2 format) and toolInvocations (legacy AIV4 format).\n *\n * @param messages - Array of MastraDB messages to search through\n * @param toolCallId - The ID of the tool call to find args for\n * @returns The args object from the matching tool call, or an empty object if not found\n */\nexport function findToolCallArgs(messages: MastraDBMessage[], toolCallId: string): Record {\n // Search through all messages in reverse order (most recent first) for better performance\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (!msg || msg.role !== 'assistant') {\n continue;\n }\n\n // Check both content.parts (v2 format) and toolInvocations (legacy format)\n if (msg.content.parts) {\n // Look for tool-invocation with matching toolCallId (can be in 'call' or 'result' state)\n const toolCallPart = msg.content.parts.find(\n p => p.type === 'tool-invocation' && p.toolInvocation.toolCallId === toolCallId,\n );\n\n if (toolCallPart && toolCallPart.type === 'tool-invocation') {\n const args = toolCallPart.toolInvocation.args || {};\n if (typeof args === 'object' && Object.keys(args).length > 0) {\n return args;\n }\n }\n }\n\n // Also check toolInvocations array (AIV4 format)\n if (msg.content.toolInvocations) {\n const toolInvocation = msg.content.toolInvocations.find(inv => inv.toolCallId === toolCallId);\n\n if (toolInvocation) {\n const args = toolInvocation.args || {};\n if (typeof args === 'object' && Object.keys(args).length > 0) {\n return args;\n }\n }\n }\n }\n\n // If not found in DB messages, return empty object\n return {};\n}\n","import type {\n UIMessage as UIMessageV4,\n CoreMessage as CoreMessageV4,\n ToolInvocation as ToolInvocationV4,\n} from '@internal/ai-sdk-v4';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../../error';\nimport { getTransformedToolPayload, hasTransformedToolPayload } from '../../../tools/payload-transform';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { categorizeFileData, createDataUri, imageContentToString } from '../prompt/image-utils';\nimport type {\n MastraDBMessage,\n MastraMessageContentV2,\n MastraMessagePart,\n UIMessageV4Part,\n MessageSource,\n UIMessageWithMetadata,\n} from '../state/types';\nimport { findToolCallArgs } from '../utils/provider-compat';\n\nfunction getDisplayTransform(\n providerMetadata: unknown,\n phase: 'input-available' | 'output-available' | 'error',\n fallback: unknown,\n enabled = true,\n) {\n if (!enabled) {\n return fallback;\n }\n const transform = getTransformedToolPayload(providerMetadata, 'display', phase);\n return hasTransformedToolPayload(transform) ? transform.transformed : fallback;\n}\n\nfunction transformV4ToolInvocationForDisplay(\n invocation: NonNullable[number],\n providerMetadata: unknown,\n enabled: boolean,\n) {\n return {\n ...invocation,\n args: getDisplayTransform(providerMetadata, 'input-available', invocation.args, enabled),\n ...(invocation.state === 'result'\n ? {\n result: getDisplayTransform(\n providerMetadata,\n 'output-available',\n getDisplayTransform(providerMetadata, 'error', invocation.result, enabled),\n enabled,\n ),\n }\n : {}),\n };\n}\n\n/**\n * Cast Mastra parts (including data-* extensions) to the V4 UI parts type.\n * Data-* parts (e.g. data-tool-call-suspended) are not natively typed in AI SDK V4,\n * but must be preserved so features like HITL workflow resumption work after a page refresh.\n */\nfunction preserveExtendedParts(parts: MastraMessagePart[]): UIMessageV4Part[] {\n return parts as UIMessageV4Part[];\n}\n\n/**\n * Filter out empty text parts from message parts array.\n * Empty text blocks are not allowed by Anthropic's API and cause request failures.\n * This can happen during streaming when text-start/text-end events occur without actual content.\n * However, if the only part is an empty text part, it is preserved as a legitimate placeholder\n * (e.g. empty assistant messages between tool results and user messages).\n */\nfunction filterEmptyTextParts(parts: MastraMessagePart[]): MastraMessagePart[] {\n const hasNonEmptyParts = parts.some(part => !(part.type === 'text' && part.text === ''));\n if (!hasNonEmptyParts) return parts;\n return parts.filter(part => {\n if (part.type === 'text') {\n return part.text !== '';\n }\n return true;\n });\n}\n\nfunction getSignalType(message: MastraDBMessage): string | undefined {\n const signal = message.content.metadata?.signal;\n if (signal && typeof signal === 'object' && !Array.isArray(signal)) {\n const type = (signal as Record).type;\n return typeof type === 'string' ? type : message.type;\n }\n\n return message.type;\n}\n\nfunction getSignalTagName(message: MastraDBMessage): string | undefined {\n const signal = message.content.metadata?.signal;\n if (signal && typeof signal === 'object' && !Array.isArray(signal)) {\n const tagName = (signal as Record).tagName;\n if (typeof tagName === 'string') return tagName;\n }\n\n const type = getSignalType(message);\n if (type === 'user') return 'user';\n if (type === 'reactive') return message.type;\n return type;\n}\n\nfunction isUserSignalType(type: string | undefined): boolean {\n return type === 'user' || type === 'user-message';\n}\n\nfunction toSignalDataPart(message: MastraDBMessage, contents: string): MastraMessagePart {\n const signal =\n message.content.metadata?.signal && typeof message.content.metadata.signal === 'object'\n ? (message.content.metadata.signal as Record)\n : {};\n const metadata =\n signal.metadata && typeof signal.metadata === 'object' && !Array.isArray(signal.metadata)\n ? (signal.metadata as Record)\n : {};\n const attributes =\n signal.attributes && typeof signal.attributes === 'object' && !Array.isArray(signal.attributes)\n ? (signal.attributes as Record)\n : {};\n\n const type = getSignalType(message) ?? 'signal';\n const tagName = getSignalTagName(message) ?? type;\n return {\n type: type === 'user' ? 'data-user-message' : 'data-signal',\n data: {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type,\n tagName,\n contents: 'contents' in signal ? signal.contents : contents,\n createdAt: typeof signal.createdAt === 'string' ? signal.createdAt : message.createdAt.toISOString(),\n ...(typeof signal.acceptedAt === 'string' ? { acceptedAt: signal.acceptedAt } : {}),\n ...(Object.keys(attributes).length ? { attributes } : {}),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n },\n } as MastraMessagePart;\n}\n\n// Re-export for backward compatibility\nexport type { UIMessageWithMetadata };\n\nexport interface AIV4AdapterContext {\n memoryInfo: { threadId?: string; resourceId?: string } | null;\n newMessageId(): string;\n generateCreatedAt(messageSource: MessageSource, start?: unknown): Date;\n /** Messages array for looking up tool call args */\n dbMessages?: MastraDBMessage[];\n}\n\n/**\n * AIV4Adapter - Handles conversions between MastraDBMessage and AI SDK V4 formats\n *\n * This adapter centralizes all AI SDK V4 (UIMessage and CoreMessage) conversion logic.\n */\nexport class AIV4Adapter {\n /**\n * Convert MastraDBMessage to AI SDK V4 UIMessage\n */\n static toUIMessage(m: MastraDBMessage, options?: { transformToolPayloads?: boolean }): UIMessageWithMetadata {\n const transformToolPayloads = options?.transformToolPayloads ?? true;\n const experimentalAttachments: UIMessageWithMetadata['experimental_attachments'] = m.content\n .experimental_attachments\n ? [...m.content.experimental_attachments]\n : [];\n const contentString =\n typeof m.content.content === `string` && m.content.content !== ''\n ? m.content.content\n : (m.content.parts ?? []).reduce((prev, part) => {\n if (part.type === `text`) {\n // return only the last text part like AI SDK does\n return part.text;\n }\n return prev;\n }, '');\n\n const parts: MastraMessageContentV2['parts'] = [];\n const sourceParts = m.content.parts ?? [];\n\n if (sourceParts.length) {\n for (const part of sourceParts) {\n if (part.type === `file`) {\n // Normalize part.data to ensure it's a valid URL or data URI\n let normalizedUrl: string;\n if (typeof part.data === 'string') {\n const categorized = categorizeFileData(part.data, part.mimeType);\n if (categorized.type === 'raw') {\n // Raw base64 - convert to data URI\n normalizedUrl = createDataUri(part.data, part.mimeType || 'application/octet-stream');\n } else {\n // Already a URL or data URI\n normalizedUrl = part.data;\n }\n } else {\n // It's a non-string (shouldn't happen in practice for file parts, but handle it)\n normalizedUrl = part.data;\n }\n\n experimentalAttachments.push({\n contentType: part.mimeType,\n url: normalizedUrl,\n });\n } else if (\n part.type === 'tool-invocation' &&\n (part.toolInvocation.state === 'call' || part.toolInvocation.state === 'partial-call')\n ) {\n // Filter out tool invocations with call or partial-call states\n continue;\n } else if (part.type === 'tool-invocation') {\n // Handle tool invocations with step number logic\n const toolInvocation = {\n ...part.toolInvocation,\n args: getDisplayTransform(\n part.providerMetadata,\n 'input-available',\n part.toolInvocation.args,\n transformToolPayloads,\n ),\n ...(part.toolInvocation.state === 'result'\n ? {\n result: getDisplayTransform(\n part.providerMetadata,\n 'output-available',\n getDisplayTransform(\n part.providerMetadata,\n 'error',\n part.toolInvocation.result,\n transformToolPayloads,\n ),\n transformToolPayloads,\n ),\n }\n : {}),\n };\n\n // Find the step number for this tool invocation\n let currentStep = -1;\n let toolStep = -1;\n for (const innerPart of sourceParts) {\n if (innerPart.type === `step-start`) currentStep++;\n if (\n innerPart.type === `tool-invocation` &&\n innerPart.toolInvocation.toolCallId === part.toolInvocation.toolCallId\n ) {\n toolStep = currentStep;\n break;\n }\n }\n\n if (toolStep >= 0) {\n const preparedInvocation = {\n step: toolStep,\n ...toolInvocation,\n };\n parts.push({\n type: 'tool-invocation',\n toolInvocation: preparedInvocation,\n });\n } else {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n } else {\n parts.push(part);\n }\n }\n }\n\n if (parts.length === 0 && experimentalAttachments.length > 0) {\n // make sure we have atleast one part so this message doesn't get removed when converting to core message\n parts.push({ type: 'text', text: '' });\n }\n\n const signalType = m.role === 'signal' ? getSignalType(m) : undefined;\n const isUserMessageSignal = isUserSignalType(signalType);\n const v4Parts = preserveExtendedParts(\n m.role === 'signal' && !isUserMessageSignal ? [toSignalDataPart(m, m.content.content || contentString)] : parts,\n );\n\n if (m.role === `user`) {\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role,\n content: m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n experimental_attachments: experimentalAttachments,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n } else if (m.role === `assistant`) {\n const isSingleTextContentArray =\n Array.isArray(m.content.content) && m.content.content.length === 1 && m.content.content[0].type === `text`;\n\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role,\n content: isSingleTextContentArray ? contentString : m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n reasoning: undefined,\n toolInvocations:\n `toolInvocations` in m.content\n ? m.content.toolInvocations\n ?.filter(t => t.state === 'result')\n .map(toolInvocation => {\n const partProviderMetadata = m.content.parts?.find(\n part =>\n part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolInvocation.toolCallId,\n )?.providerMetadata;\n return transformV4ToolInvocationForDisplay(\n toolInvocation,\n partProviderMetadata,\n transformToolPayloads,\n );\n })\n : undefined,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n }\n\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role === 'signal' ? (isUserMessageSignal ? 'user' : 'system') : m.role,\n content: m.role === 'signal' && !isUserMessageSignal ? '' : m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n experimental_attachments: experimentalAttachments,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n }\n\n /**\n * Converts a MastraDBMessage system message directly to AIV4 CoreMessage format\n */\n static systemToV4Core(message: MastraDBMessage): CoreMessageV4 {\n if (message.role !== `system` || !message.content.content)\n throw new MastraError({\n id: 'INVALID_SYSTEM_MESSAGE_FORMAT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Invalid system message format. System messages must include 'role' and 'content' properties. The content should be a string.`,\n details: {\n receivedMessage: JSON.stringify(message, null, 2),\n },\n });\n\n const coreMessage: CoreMessageV4 = { role: 'system', content: message.content.content };\n\n // Preserve message-level providerMetadata as experimental_providerMetadata (V4 field name)\n if (message.content.providerMetadata) {\n coreMessage.experimental_providerMetadata = message.content.providerMetadata;\n }\n\n return coreMessage;\n }\n\n /**\n * Convert AI SDK V4 UIMessage to MastraDBMessage\n */\n static fromUIMessage(\n message: UIMessageV4 | UIMessageWithMetadata,\n ctx: AIV4AdapterContext,\n messageSource: MessageSource,\n ): MastraDBMessage {\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredParts = message.parts ? filterEmptyTextParts(message.parts) : [];\n\n const content: MastraMessageContentV2 = {\n format: 2,\n parts: filteredParts,\n };\n\n if (message.toolInvocations) content.toolInvocations = message.toolInvocations;\n if (message.reasoning) content.reasoning = message.reasoning;\n if (message.annotations) content.annotations = message.annotations;\n if (message.experimental_attachments) {\n content.experimental_attachments = message.experimental_attachments;\n }\n // Preserve metadata field if present\n if ('metadata' in message && message.metadata !== null && message.metadata !== undefined) {\n content.metadata = message.metadata as Record;\n }\n\n return {\n id: message.id || ctx.newMessageId(),\n role: TypeDetector.getRole(message),\n createdAt: ctx.generateCreatedAt(messageSource, message.createdAt),\n threadId: ctx.memoryInfo?.threadId,\n resourceId: ctx.memoryInfo?.resourceId,\n content,\n } satisfies MastraDBMessage;\n }\n\n /**\n * Convert AI SDK V4 CoreMessage to MastraDBMessage\n */\n static fromCoreMessage(\n coreMessage: CoreMessageV4,\n ctx: AIV4AdapterContext,\n messageSource: MessageSource,\n ): MastraDBMessage {\n const id = `id` in coreMessage ? (coreMessage.id as string) : ctx.newMessageId();\n const parts: UIMessageV4['parts'] = [];\n const experimentalAttachments: UIMessageV4['experimental_attachments'] = [];\n const toolInvocations: ToolInvocationV4[] = [];\n\n const isSingleTextContent =\n messageSource === `response` &&\n Array.isArray(coreMessage.content) &&\n coreMessage.content.length === 1 &&\n coreMessage.content[0] &&\n coreMessage.content[0].type === `text` &&\n `text` in coreMessage.content[0] &&\n coreMessage.content[0].text;\n\n if (isSingleTextContent && messageSource === `response`) {\n coreMessage.content = isSingleTextContent;\n }\n\n if (typeof coreMessage.content === 'string') {\n parts.push({\n type: 'text',\n text: coreMessage.content,\n });\n } else if (Array.isArray(coreMessage.content)) {\n for (const aiV4Part of coreMessage.content) {\n switch (aiV4Part.type) {\n case 'text': {\n // Add step-start only after tool invocations, not at the beginning\n const prevPart = parts.at(-1);\n if (coreMessage.role === 'assistant' && prevPart && prevPart.type === 'tool-invocation') {\n parts.push({ type: 'step-start' });\n }\n\n const part: UIMessageV4Part = {\n type: 'text' as const,\n text: aiV4Part.text,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n\n case 'tool-call': {\n const part: UIMessageV4Part = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n state: 'call',\n toolCallId: aiV4Part.toolCallId,\n toolName: aiV4Part.toolName,\n args: aiV4Part.args,\n },\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n\n case 'tool-result':\n {\n // Try to find args from the corresponding tool-call in previous messages\n let toolArgs: Record = {};\n\n // First, check if there's a tool-call in the same message\n const toolCallInSameMsg = coreMessage.content.find(\n p => p.type === 'tool-call' && p.toolCallId === aiV4Part.toolCallId,\n );\n if (toolCallInSameMsg && toolCallInSameMsg.type === 'tool-call') {\n toolArgs = toolCallInSameMsg.args as Record;\n }\n\n // If not found, look in previous messages for the corresponding tool-call\n if (Object.keys(toolArgs).length === 0 && ctx.dbMessages) {\n toolArgs = findToolCallArgs(ctx.dbMessages, aiV4Part.toolCallId);\n }\n\n // Only use part-level providerOptions if present\n const invocation: ToolInvocationV4 = {\n state: 'result' as const,\n toolCallId: aiV4Part.toolCallId,\n toolName: aiV4Part.toolName,\n result: aiV4Part.result ?? '',\n args: toolArgs,\n };\n\n const part: UIMessageV4Part = {\n type: 'tool-invocation',\n toolInvocation: invocation,\n };\n\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n\n parts.push(part);\n toolInvocations.push(invocation);\n }\n break;\n\n case 'reasoning':\n {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'text', text: aiV4Part.text, signature: aiV4Part.signature }],\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n }\n break;\n case 'redacted-reasoning':\n {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'redacted', data: aiV4Part.data }],\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n }\n break;\n case 'image': {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: imageContentToString(aiV4Part.image),\n mimeType: aiV4Part.mimeType!,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n case 'file': {\n if (aiV4Part.data instanceof URL) {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: aiV4Part.data.toString(),\n mimeType: aiV4Part.mimeType,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record).filename = aiV4Part.filename;\n }\n parts.push(part);\n } else if (typeof aiV4Part.data === 'string') {\n const categorized = categorizeFileData(aiV4Part.data, aiV4Part.mimeType);\n\n if (categorized.type === 'url' || categorized.type === 'dataUri') {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: aiV4Part.data,\n mimeType: categorized.mimeType || 'image/png',\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record).filename = aiV4Part.filename;\n }\n parts.push(part);\n } else {\n try {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n mimeType: categorized.mimeType || 'image/png',\n data: convertDataContentToBase64String(aiV4Part.data),\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record).filename = aiV4Part.filename;\n }\n parts.push(part);\n } catch (error) {\n console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);\n }\n }\n } else {\n try {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n mimeType: aiV4Part.mimeType,\n data: convertDataContentToBase64String(aiV4Part.data),\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record).filename = aiV4Part.filename;\n }\n parts.push(part);\n } catch (error) {\n console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);\n }\n }\n break;\n }\n }\n }\n }\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredParts = filterEmptyTextParts(parts);\n\n const content: MastraDBMessage['content'] = {\n format: 2,\n parts: filteredParts,\n };\n\n if (toolInvocations.length) content.toolInvocations = toolInvocations;\n if (typeof coreMessage.content === `string`) content.content = coreMessage.content;\n\n if (experimentalAttachments.length) content.experimental_attachments = experimentalAttachments;\n\n // V4 uses experimental_providerMetadata, V5 uses providerOptions\n if (coreMessage.providerOptions) {\n content.providerMetadata = coreMessage.providerOptions;\n } else if ('experimental_providerMetadata' in coreMessage && coreMessage.experimental_providerMetadata) {\n content.providerMetadata = coreMessage.experimental_providerMetadata;\n }\n\n if ('metadata' in coreMessage && coreMessage.metadata !== null && coreMessage.metadata !== undefined) {\n content.metadata = coreMessage.metadata as Record;\n }\n\n const rawCreatedAt =\n 'metadata' in coreMessage &&\n coreMessage.metadata &&\n typeof coreMessage.metadata === 'object' &&\n 'createdAt' in coreMessage.metadata\n ? coreMessage.metadata.createdAt\n : undefined;\n\n return {\n id,\n role: TypeDetector.getRole(coreMessage),\n createdAt: ctx.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: ctx.memoryInfo?.threadId,\n resourceId: ctx.memoryInfo?.resourceId,\n content,\n } satisfies MastraDBMessage;\n }\n}\n","const TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\nexport const FALLBACK_TOOL_NAME = 'unknown_tool';\n\nexport function sanitizeToolName(toolName: unknown): string {\n if (typeof toolName !== 'string') {\n return FALLBACK_TOOL_NAME;\n }\n\n return TOOL_NAME_PATTERN.test(toolName) ? toolName : FALLBACK_TOOL_NAME;\n}\n","import * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../../error';\nimport { getTransformedToolPayload, hasTransformedToolPayload } from '../../../tools/payload-transform';\nimport { categorizeFileData, createDataUri, parseDataUri } from '../prompt/image-utils';\nimport type {\n MastraDBMessage,\n MastraMessageContentV2,\n MastraMessagePart,\n MastraToolInvocationPart,\n MessageSource,\n} from '../state/types';\nimport type { AIV5Type } from '../types';\nimport { sanitizeToolName } from '../utils/tool-name';\n\n/**\n * Filter out empty text parts from message parts array.\n * Empty text blocks are not allowed by Anthropic's API and cause request failures.\n * This can happen during streaming when text-start/text-end events occur without actual content.\n * However, if the only part is an empty text part, it is preserved as a legitimate placeholder\n * (e.g. empty assistant messages between tool results and user messages).\n */\nfunction filterEmptyTextParts(parts: MastraMessagePart[]): MastraMessagePart[] {\n const hasNonEmptyParts = parts.some(part => !(part.type === 'text' && part.text === ''));\n if (!hasNonEmptyParts) return parts;\n return parts.filter(part => {\n if (part.type === 'text') {\n return part.text !== '';\n }\n return true;\n });\n}\n\nfunction getSignalType(message: MastraDBMessage): string | undefined {\n const signal = message.content.metadata?.signal;\n if (signal && typeof signal === 'object' && !Array.isArray(signal)) {\n const type = (signal as Record).type;\n return typeof type === 'string' ? type : message.type;\n }\n\n return message.type;\n}\n\nfunction getSignalTagName(message: MastraDBMessage): string | undefined {\n const signal = message.content.metadata?.signal;\n if (signal && typeof signal === 'object' && !Array.isArray(signal)) {\n const tagName = (signal as Record).tagName;\n if (typeof tagName === 'string') return tagName;\n }\n\n const type = getSignalType(message);\n if (type === 'user') return 'user';\n if (type === 'reactive') return message.type;\n return type;\n}\n\nfunction isUserSignalType(type: string | undefined): boolean {\n return type === 'user' || type === 'user-message';\n}\n\nfunction getTextContent(message: MastraDBMessage): string {\n return typeof message.content.content === 'string'\n ? message.content.content\n : (message.content.parts.find(part => part.type === 'text')?.text ?? '');\n}\n\nfunction toSignalDataPart(message: MastraDBMessage): AIV5Type.DataUIPart {\n const signal =\n message.content.metadata?.signal && typeof message.content.metadata.signal === 'object'\n ? (message.content.metadata.signal as Record)\n : {};\n const metadata =\n signal.metadata && typeof signal.metadata === 'object' && !Array.isArray(signal.metadata)\n ? (signal.metadata as Record)\n : {};\n const attributes =\n signal.attributes && typeof signal.attributes === 'object' && !Array.isArray(signal.attributes)\n ? (signal.attributes as Record)\n : {};\n\n const type = getSignalType(message) ?? 'signal';\n const tagName = getSignalTagName(message) ?? type;\n return {\n type: type === 'user' ? 'data-user-message' : 'data-signal',\n data: {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type,\n tagName,\n contents: 'contents' in signal ? signal.contents : getTextContent(message),\n createdAt: typeof signal.createdAt === 'string' ? signal.createdAt : message.createdAt.toISOString(),\n ...(typeof signal.acceptedAt === 'string' ? { acceptedAt: signal.acceptedAt } : {}),\n ...(Object.keys(attributes).length ? { attributes } : {}),\n ...(Object.keys(metadata).length ? { metadata } : {}),\n },\n } as AIV5Type.DataUIPart;\n}\n\n/**\n * Extract tool name from AI SDK v5 tool type string\n *\n * V5 format: \"tool-${toolName}\" or \"dynamic-tool\"\n * V4 format: \"tool-invocation\"\n *\n * @param type - The tool type string from AI SDK v5\n * @returns The tool name or 'dynamic-tool' if it's a dynamic tool\n */\nfunction getToolName(type: string | { type: string }): string {\n // Handle objects with type property\n if (typeof type === 'object' && type && 'type' in type) {\n type = type.type;\n }\n\n // Ensure type is a string\n if (typeof type !== 'string') {\n return sanitizeToolName(type);\n }\n\n if (type === 'dynamic-tool') {\n return 'dynamic-tool';\n }\n\n // Extract tool name from \"tool-${toolName}\" format\n if (type.startsWith('tool-')) {\n return sanitizeToolName(type.slice('tool-'.length)); // Remove \"tool-\" prefix\n }\n\n // Fallback for unexpected formats\n return sanitizeToolName(type);\n}\n\nfunction mergeMastraCreatedAt(metadata: AIV5Type.ProviderMetadata | undefined, createdAt?: number) {\n if (createdAt == null) {\n return metadata;\n }\n\n return {\n ...(metadata || {}),\n mastra: {\n ...(((metadata || {}).mastra as Record | undefined) || {}),\n createdAt,\n },\n } satisfies AIV5Type.ProviderMetadata;\n}\n\nfunction getMastraCreatedAt(providerMetadata?: AIV5Type.ProviderMetadata): number | undefined {\n const value = providerMetadata?.mastra;\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n const createdAt = (value as Record).createdAt;\n return typeof createdAt === 'number' ? createdAt : undefined;\n}\n\nfunction getDisplayTransform(\n providerMetadata: unknown,\n phase: 'input-available' | 'output-available' | 'error' | 'approval' | 'suspend',\n fallback: unknown,\n enabled = true,\n) {\n if (!enabled) {\n return fallback;\n }\n const transform = getTransformedToolPayload(providerMetadata, 'display', phase);\n return hasTransformedToolPayload(transform) ? transform.transformed : fallback;\n}\n\nfunction transformToolStateDataForDisplay(data: unknown, phase: 'approval' | 'suspend', enabled = true): unknown {\n if (!enabled) {\n return data;\n }\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n const stateData = data as Record;\n const metadata = stateData.metadata ?? stateData.providerMetadata;\n const argsTransform = getTransformedToolPayload(metadata, 'display', phase);\n const inputTransform = getTransformedToolPayload(metadata, 'display', 'input-available');\n const transformedArgs =\n phase === 'approval'\n ? hasTransformedToolPayload(argsTransform)\n ? argsTransform.transformed\n : hasTransformedToolPayload(inputTransform)\n ? inputTransform.transformed\n : undefined\n : hasTransformedToolPayload(inputTransform)\n ? inputTransform.transformed\n : hasTransformedToolPayload(argsTransform)\n ? argsTransform.transformed\n : undefined;\n const transformedSuspendPayload =\n phase === 'suspend' && hasTransformedToolPayload(argsTransform) ? argsTransform.transformed : undefined;\n\n return {\n ...stateData,\n ...(transformedArgs !== undefined ? { args: transformedArgs } : {}),\n ...(transformedSuspendPayload !== undefined ? { suspendPayload: transformedSuspendPayload } : {}),\n };\n}\n\nexport interface AIV5AdapterContext {\n memoryInfo: { threadId?: string; resourceId?: string } | null;\n newMessageId?(): string;\n generateCreatedAt?(messageSource: MessageSource, start?: unknown): Date;\n}\n\n/**\n * AIV5Adapter - Handles conversions between MastraDBMessage and AI SDK V5 formats\n *\n * This adapter centralizes all AI SDK V5 (UIMessage and ModelMessage) conversion logic.\n */\nexport class AIV5Adapter {\n /**\n * Direct conversion from MastraDBMessage to AIV5 UIMessage\n */\n static toUIMessage(dbMsg: MastraDBMessage, options?: { transformToolPayloads?: boolean }): AIV5Type.UIMessage {\n const signalType = dbMsg.role === 'signal' ? getSignalType(dbMsg) : undefined;\n const isUserMessageSignal = isUserSignalType(signalType);\n const transformToolPayloads = options?.transformToolPayloads ?? true;\n const parts: AIV5Type.UIMessage['parts'] = [];\n const metadata: Record = { ...(dbMsg.content.metadata || {}) };\n\n if (dbMsg.role === 'signal' && !isUserMessageSignal) {\n parts.push(toSignalDataPart(dbMsg));\n }\n\n // Add Mastra-specific metadata\n if (dbMsg.createdAt) metadata.createdAt = dbMsg.createdAt;\n if (dbMsg.threadId) metadata.threadId = dbMsg.threadId;\n if (dbMsg.resourceId) metadata.resourceId = dbMsg.resourceId;\n\n // Preserve message-level providerMetadata in metadata so it survives UI → Model conversion\n if (dbMsg.content.providerMetadata) {\n metadata.providerMetadata = dbMsg.content.providerMetadata;\n }\n\n if (dbMsg.role === 'signal' && !isUserMessageSignal) {\n return {\n id: dbMsg.id,\n role: 'system',\n metadata,\n parts,\n };\n }\n\n // 1. Handle tool invocations (only if not already in parts array)\n const hasToolInvocationParts = dbMsg.content.parts?.some(p => p.type === 'tool-invocation');\n if (dbMsg.content.toolInvocations && !hasToolInvocationParts) {\n for (const invocation of dbMsg.content.toolInvocations) {\n if (invocation.state === 'result') {\n parts.push({\n type: `tool-${invocation.toolName}`,\n toolCallId: invocation.toolCallId,\n state: 'output-available',\n input: invocation.args,\n output: invocation.result,\n });\n } else {\n parts.push({\n type: `tool-${invocation.toolName}`,\n toolCallId: invocation.toolCallId,\n state: invocation.state === 'call' ? 'input-available' : 'input-streaming',\n input: invocation.args,\n });\n }\n }\n }\n\n // 2. Check if we have parts with providerMetadata first\n const hasReasoningInParts = dbMsg.content.parts?.some(p => p.type === 'reasoning');\n const hasFileInParts = dbMsg.content.parts?.some(p => p.type === 'file');\n\n // 3. Handle reasoning (AIV4 reasoning is a string) - only if not in parts\n if (dbMsg.content.reasoning && !hasReasoningInParts) {\n parts.push({\n type: 'reasoning',\n text: dbMsg.content.reasoning,\n });\n }\n\n // 4. Handle files (experimental_attachments) - only if not in parts\n const attachmentUrls = new Set();\n if (dbMsg.content.experimental_attachments && !hasFileInParts) {\n for (const attachment of dbMsg.content.experimental_attachments) {\n attachmentUrls.add(attachment.url);\n parts.push({\n type: 'file',\n url: attachment.url,\n mediaType: attachment.contentType || 'unknown',\n });\n }\n }\n\n // 5. Handle parts directly (if present in V2)\n let hasNonToolReasoningParts = false;\n if (dbMsg.content.parts) {\n for (const part of dbMsg.content.parts) {\n // Handle tool-invocation parts\n if (part.type === 'tool-invocation' && part.toolInvocation) {\n const inv = part.toolInvocation;\n\n if (inv.state === 'result') {\n parts.push({\n type: `tool-${inv.toolName}`,\n toolCallId: inv.toolCallId,\n input: getDisplayTransform(part.providerMetadata, 'input-available', inv.args, transformToolPayloads),\n output: getDisplayTransform(\n part.providerMetadata,\n 'output-available',\n getDisplayTransform(part.providerMetadata, 'error', inv.result, transformToolPayloads),\n transformToolPayloads,\n ),\n state: 'output-available',\n callProviderMetadata: mergeMastraCreatedAt(part.providerMetadata, part.createdAt),\n providerExecuted: (part as { providerExecuted?: boolean }).providerExecuted,\n } satisfies AIV5Type.ToolUIPart);\n } else if (inv.state === 'output-error') {\n parts.push({\n type: `tool-${inv.toolName}`,\n toolCallId: inv.toolCallId,\n input: getDisplayTransform(part.providerMetadata, 'input-available', inv.args, transformToolPayloads),\n errorText: getDisplayTransform(\n part.providerMetadata,\n 'error',\n inv.errorText || '',\n transformToolPayloads,\n ) as string,\n state: 'output-error',\n callProviderMetadata: mergeMastraCreatedAt(part.providerMetadata, part.createdAt),\n providerExecuted: (part as { providerExecuted?: boolean }).providerExecuted,\n } satisfies AIV5Type.ToolUIPart);\n } else {\n parts.push({\n type: `tool-${inv.toolName}`,\n toolCallId: inv.toolCallId,\n input: getDisplayTransform(part.providerMetadata, 'input-available', inv.args, transformToolPayloads),\n state: 'input-available',\n callProviderMetadata: mergeMastraCreatedAt(part.providerMetadata, part.createdAt),\n providerExecuted: (part as { providerExecuted?: boolean }).providerExecuted,\n } satisfies AIV5Type.ToolUIPart);\n }\n continue;\n }\n\n // Handle reasoning parts\n if (part.type === 'reasoning') {\n const text =\n part.reasoning ||\n (part.details?.reduce((p: string, c) => {\n if (c.type === `text` && c.text) return p + c.text;\n return p;\n }, '') ??\n '');\n if (text || part.details?.length) {\n const v5UIPart: AIV5Type.ReasoningUIPart = {\n type: 'reasoning' as const,\n text: text || '',\n state: 'done' as const,\n };\n v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);\n parts.push(v5UIPart);\n }\n continue;\n }\n\n // Skip tool-invocation parts without toolInvocation object and other tool- parts\n if (part.type === 'tool-invocation' || part.type.startsWith('tool-')) {\n continue;\n }\n\n // Convert file parts from V2 format (data) to AIV5 format (url)\n if (part.type === 'file') {\n // Skip file parts that came from experimental_attachments to avoid duplicates\n if (typeof part.data === 'string' && attachmentUrls.has(part.data)) {\n continue;\n }\n\n const categorized =\n typeof part.data === 'string'\n ? categorizeFileData(part.data, part.mimeType)\n : { type: 'raw' as const, mimeType: part.mimeType, data: part.data };\n\n if (categorized.type === 'url' && typeof part.data === 'string') {\n const v5UIPart: AIV5Type.FileUIPart = {\n type: 'file' as const,\n url: part.data,\n mediaType: categorized.mimeType || 'image/png',\n };\n v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);\n parts.push(v5UIPart);\n } else {\n let filePartData: string;\n let extractedMimeType = part.mimeType;\n\n if (typeof part.data === 'string') {\n const parsed = parseDataUri(part.data);\n\n if (parsed.isDataUri) {\n filePartData = parsed.base64Content;\n if (parsed.mimeType) {\n extractedMimeType = extractedMimeType || parsed.mimeType;\n }\n } else {\n filePartData = part.data;\n }\n } else {\n filePartData = part.data;\n }\n\n const finalMimeType = extractedMimeType || 'image/png';\n\n let dataUri: string;\n if (typeof filePartData === 'string' && filePartData.startsWith('data:')) {\n dataUri = filePartData;\n } else {\n dataUri = createDataUri(filePartData, finalMimeType);\n }\n\n const v5UIPart: AIV5Type.FileUIPart = {\n type: 'file' as const,\n url: dataUri,\n mediaType: finalMimeType,\n };\n v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);\n parts.push(v5UIPart);\n }\n } else if (part.type === 'source') {\n const v5UIPart: AIV5Type.SourceUrlUIPart = {\n type: 'source-url' as const,\n url: part.source.url,\n sourceId: part.source.id,\n title: part.source.title,\n };\n v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);\n\n parts.push(v5UIPart);\n } else if (part.type === 'source-document') {\n continue;\n } else if (part.type === 'text') {\n const v5UIPart: AIV5Type.TextUIPart = {\n type: 'text' as const,\n text: part.text,\n };\n v5UIPart.providerMetadata = mergeMastraCreatedAt(part.providerMetadata, part.createdAt);\n parts.push(v5UIPart);\n hasNonToolReasoningParts = true;\n } else if (part.type === 'data-tool-call-suspended' || part.type === 'data-tool-call-approval') {\n parts.push({\n ...part,\n data: transformToolStateDataForDisplay(\n part.data,\n part.type === 'data-tool-call-suspended' ? 'suspend' : 'approval',\n transformToolPayloads,\n ),\n });\n } else {\n // Other parts (step-start, etc.) can be pushed as-is\n parts.push(part);\n hasNonToolReasoningParts = true;\n }\n }\n }\n\n // 6. Handle text content (fallback if no parts)\n if (dbMsg.content.content && !hasNonToolReasoningParts) {\n parts.push({ type: 'text', text: dbMsg.content.content });\n }\n\n const existingToolStateDataPartIds = new Set(\n parts\n .filter(\n (part): part is AIV5Type.DataUIPart =>\n part.type === 'data-tool-call-suspended' || part.type === 'data-tool-call-approval',\n )\n .map(part => {\n const data = part.data as Record | undefined;\n return typeof data?.toolCallId === 'string' ? data.toolCallId : undefined;\n })\n .filter((toolCallId): toolCallId is string => typeof toolCallId === 'string'),\n );\n\n const insertToolStateDataPart = (toolCallId: string, toolStateDataPart: AIV5Type.DataUIPart) => {\n const toolPartIndex = parts.findIndex(\n part => part.type.startsWith('tool-') && (part as { toolCallId?: unknown }).toolCallId === toolCallId,\n );\n\n if (toolPartIndex === -1) {\n parts.push(toolStateDataPart);\n return;\n }\n\n parts.splice(toolPartIndex + 1, 0, toolStateDataPart);\n };\n\n const suspendedTools = metadata.suspendedTools;\n if (suspendedTools && typeof suspendedTools === 'object') {\n for (const suspendedTool of Object.values(suspendedTools)) {\n if (!suspendedTool || typeof suspendedTool !== 'object') {\n continue;\n }\n\n const toolCallId = 'toolCallId' in suspendedTool ? suspendedTool.toolCallId : undefined;\n if (typeof toolCallId !== 'string' || existingToolStateDataPartIds.has(toolCallId)) {\n continue;\n }\n\n insertToolStateDataPart(toolCallId, {\n type: 'data-tool-call-suspended',\n data: transformToolStateDataForDisplay(suspendedTool, 'suspend', transformToolPayloads),\n } as AIV5Type.DataUIPart);\n existingToolStateDataPartIds.add(toolCallId);\n }\n }\n\n const pendingToolApprovals = metadata.pendingToolApprovals;\n if (pendingToolApprovals && typeof pendingToolApprovals === 'object') {\n for (const pendingToolApproval of Object.values(pendingToolApprovals)) {\n if (!pendingToolApproval || typeof pendingToolApproval !== 'object') {\n continue;\n }\n\n const toolCallId = 'toolCallId' in pendingToolApproval ? pendingToolApproval.toolCallId : undefined;\n if (typeof toolCallId !== 'string' || existingToolStateDataPartIds.has(toolCallId)) {\n continue;\n }\n\n insertToolStateDataPart(toolCallId, {\n type: 'data-tool-call-approval',\n data: transformToolStateDataForDisplay(pendingToolApproval, 'approval', transformToolPayloads),\n } as AIV5Type.DataUIPart);\n existingToolStateDataPartIds.add(toolCallId);\n }\n }\n\n return {\n id: dbMsg.id,\n role: dbMsg.role === 'signal' ? (isUserMessageSignal ? 'user' : 'system') : dbMsg.role,\n metadata,\n parts,\n };\n }\n\n /**\n * Direct conversion from AIV5 UIMessage to MastraDBMessage\n */\n static fromUIMessage(uiMsg: AIV5Type.UIMessage): MastraDBMessage {\n const { parts, metadata: rawMetadata } = uiMsg;\n const metadata = (rawMetadata || {}) as Record;\n\n // Extract Mastra-specific metadata\n const createdAtValue = metadata.createdAt;\n const createdAt = createdAtValue\n ? typeof createdAtValue === 'string'\n ? new Date(createdAtValue)\n : createdAtValue instanceof Date\n ? createdAtValue\n : new Date()\n : new Date();\n const threadId = metadata.threadId as string | undefined;\n const resourceId = metadata.resourceId as string | undefined;\n\n // Remove Mastra-specific metadata from the metadata object\n const cleanMetadata = { ...metadata };\n delete cleanMetadata.createdAt;\n delete cleanMetadata.threadId;\n delete cleanMetadata.resourceId;\n\n // Process parts to build V2 content\n const toolInvocationParts = parts.filter(p => AIV5.isToolUIPart(p));\n const reasoningParts = parts.filter(p => p.type === 'reasoning');\n const fileParts = parts.filter(p => p.type === 'file');\n const textParts = parts.filter(p => p.type === 'text');\n\n // Build tool invocations array\n let toolInvocations: MastraDBMessage['content']['toolInvocations'] = undefined;\n if (toolInvocationParts.length > 0) {\n toolInvocations = toolInvocationParts.map(p => {\n const toolName = getToolName(p);\n if (p.state === 'output-available') {\n return {\n args: p.input,\n result:\n typeof p.output === 'object' && p.output && 'value' in p.output\n ? (p.output as { value: unknown }).value\n : p.output,\n toolCallId: p.toolCallId,\n toolName,\n state: 'result',\n } satisfies NonNullable[0];\n }\n return {\n args: p.input,\n toolCallId: p.toolCallId,\n toolName,\n state: 'call',\n } satisfies NonNullable[0];\n });\n }\n\n // Build reasoning string (AIV4 reasoning is a string, not an array)\n let reasoning: MastraDBMessage['content']['reasoning'] = undefined;\n if (reasoningParts.length > 0) {\n reasoning = reasoningParts.map(p => p.text).join('\\n');\n }\n\n // Build experimental_attachments from file parts\n let experimental_attachments: MastraDBMessage['content']['experimental_attachments'] = undefined;\n if (fileParts.length > 0) {\n experimental_attachments = fileParts.map(p => ({\n url: p.url || '',\n contentType: p.mediaType,\n }));\n }\n\n // Build content from text parts (AIV4 content is a string)\n let content: MastraDBMessage['content']['content'] = undefined;\n if (textParts.length > 0) {\n content = textParts.map(p => p.text).join('');\n }\n // Build V2-compatible parts array\n const v2Parts = parts\n .map(p => {\n // Convert AIV5 UI parts to V2 parts\n if (AIV5.isToolUIPart(p)) {\n const toolName = getToolName(p);\n const callProviderMetadata = 'callProviderMetadata' in p ? p.callProviderMetadata : undefined;\n if (p.state === 'output-available') {\n return {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: p.toolCallId,\n toolName,\n args: p.input,\n result:\n typeof p.output === 'object' && p.output && 'value' in p.output\n ? (p.output as { value: unknown }).value\n : p.output,\n state: 'result' as const,\n },\n providerMetadata: callProviderMetadata,\n createdAt: getMastraCreatedAt(callProviderMetadata),\n } satisfies MastraToolInvocationPart;\n }\n return {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: p.toolCallId,\n toolName,\n args: p.input,\n state: 'call' as const,\n },\n providerMetadata: callProviderMetadata,\n createdAt: getMastraCreatedAt(callProviderMetadata),\n } satisfies MastraToolInvocationPart;\n }\n\n if (p.type === 'reasoning') {\n return {\n type: 'reasoning' as const,\n reasoning: '',\n details: [\n {\n type: 'text' as const,\n text: p.text,\n },\n ],\n providerMetadata: p.providerMetadata,\n createdAt: getMastraCreatedAt(p.providerMetadata),\n };\n }\n\n if (p.type === 'file') {\n return {\n type: 'file' as const,\n mimeType: p.mediaType,\n data: p.url || '',\n providerMetadata: p.providerMetadata,\n createdAt: getMastraCreatedAt(p.providerMetadata),\n ...((p as { filename?: string }).filename ? { filename: (p as { filename?: string }).filename } : {}),\n };\n }\n\n if (p.type === 'source-url') {\n return {\n type: 'source' as const,\n source: {\n url: p.url,\n sourceType: 'url',\n id: p.url,\n providerMetadata: p.providerMetadata,\n },\n providerMetadata: p.providerMetadata,\n createdAt: getMastraCreatedAt(p.providerMetadata),\n };\n }\n\n if (p.type === 'text') {\n type V2TextPart = {\n type: 'text';\n text: string;\n providerMetadata?: AIV5Type.ProviderMetadata;\n createdAt?: number;\n };\n return {\n type: 'text' as const,\n text: p.text,\n providerMetadata: p.providerMetadata,\n createdAt: getMastraCreatedAt(p.providerMetadata),\n } satisfies V2TextPart;\n }\n\n if (p.type === 'step-start') {\n return p;\n }\n\n // Handle data-* parts (custom parts emitted by tools via writer.custom())\n if (typeof p.type === 'string' && p.type.startsWith('data-')) {\n return {\n type: p.type,\n data: 'data' in p ? (p as any).data : undefined,\n };\n }\n\n return null;\n })\n .filter((p): p is NonNullable => p !== null);\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredV2Parts = filterEmptyTextParts(v2Parts as MastraMessagePart[]);\n\n return {\n id: uiMsg.id,\n role: uiMsg.role,\n createdAt,\n threadId,\n resourceId,\n content: {\n format: 2,\n parts: filteredV2Parts as MastraMessageContentV2['parts'],\n toolInvocations,\n reasoning,\n experimental_attachments,\n content,\n metadata: Object.keys(cleanMetadata).length > 0 ? cleanMetadata : undefined,\n },\n };\n }\n\n /**\n * Convert image or file to data URI or URL for V2 file part\n */\n private static getDataStringFromAIV5DataPart(part: AIV5Type.ImagePart | AIV5Type.FilePart): string {\n let mimeType: string;\n let data: AIV5.FilePart['data'] | AIV5.ImagePart['image'];\n if ('data' in part) {\n mimeType = part.mediaType || 'application/octet-stream';\n data = part.data;\n } else if ('image' in part) {\n mimeType = part.mediaType || 'image/jpeg';\n data = part.image;\n } else if ('url' in part && typeof (part as any).url === 'string') {\n return (part as any).url;\n } else {\n throw new MastraError({\n id: 'MASTRA_AIV5_DATA_PART_INVALID',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: 'Invalid AIV5 data part in getDataStringFromAIV5DataPart',\n details: {\n part,\n },\n });\n }\n\n if (data instanceof URL) {\n return data.toString();\n } else {\n if (data instanceof Buffer) {\n const base64 = data.toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else if (typeof data === 'string') {\n return data.startsWith('data:') || data.startsWith('http') ? data : `data:${mimeType};base64,${data}`;\n } else if (data instanceof Uint8Array) {\n const base64 = Buffer.from(data).toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else if (data instanceof ArrayBuffer) {\n const base64 = Buffer.from(data).toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else {\n return '';\n }\n }\n }\n\n /**\n * Direct conversion from AIV5 ModelMessage to MastraDBMessage\n */\n static fromModelMessage(modelMsg: AIV5Type.ModelMessage, _messageSource?: MessageSource): MastraDBMessage {\n const content = Array.isArray(modelMsg.content)\n ? modelMsg.content\n : [{ type: 'text', text: modelMsg.content } satisfies AIV5.TextPart];\n\n const mastraDBParts: MastraMessageContentV2['parts'] = [];\n const toolInvocations: NonNullable = [];\n const reasoningParts: string[] = [];\n const experimental_attachments: NonNullable = [];\n\n for (const part of content) {\n if (part.type === 'text') {\n const textPart: MastraDBMessage['content']['parts'][number] = {\n type: 'text' as const,\n text: part.text,\n };\n if (part.providerOptions) {\n textPart.providerMetadata = part.providerOptions;\n textPart.createdAt = getMastraCreatedAt(part.providerOptions);\n }\n mastraDBParts.push(textPart);\n } else if (part.type === 'tool-call') {\n const toolCallPart = part as AIV5Type.ToolCallPart;\n const toolInvocationPart: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: toolCallPart.toolCallId,\n toolName: sanitizeToolName(toolCallPart.toolName),\n args: toolCallPart.input,\n state: 'call',\n },\n };\n if (part.providerOptions) {\n toolInvocationPart.providerMetadata = part.providerOptions;\n toolInvocationPart.createdAt = getMastraCreatedAt(part.providerOptions);\n }\n mastraDBParts.push(toolInvocationPart);\n toolInvocations.push({\n toolCallId: toolCallPart.toolCallId,\n toolName: sanitizeToolName(toolCallPart.toolName),\n args: toolCallPart.input,\n state: 'call',\n });\n } else if (part.type === 'tool-result') {\n const toolResultPart = part;\n const matchingCall = toolInvocations.find(inv => inv.toolCallId === toolResultPart.toolCallId);\n\n const matchingV2Part = mastraDBParts.find(\n (p): p is Extract =>\n p.type === 'tool-invocation' &&\n 'toolInvocation' in p &&\n p.toolInvocation.toolCallId === toolResultPart.toolCallId,\n );\n\n const updateMatchingCallInvocationResult = (toolResultPart: AIV5Type.ToolResultPart, matchingCall: any) => {\n matchingCall.state = 'result';\n matchingCall.result =\n typeof toolResultPart.output === 'object' && toolResultPart.output && 'value' in toolResultPart.output\n ? toolResultPart.output.value\n : toolResultPart.output;\n };\n\n if (matchingCall) {\n updateMatchingCallInvocationResult(toolResultPart, matchingCall);\n } else {\n const call: any = {\n state: 'call',\n toolCallId: toolResultPart.toolCallId,\n toolName: sanitizeToolName(toolResultPart.toolName),\n args: {},\n };\n updateMatchingCallInvocationResult(toolResultPart, call);\n toolInvocations.push(call);\n }\n\n if (matchingV2Part && matchingV2Part.type === 'tool-invocation') {\n updateMatchingCallInvocationResult(toolResultPart, matchingV2Part.toolInvocation);\n if (toolResultPart.providerOptions) {\n matchingV2Part.providerMetadata = toolResultPart.providerOptions;\n matchingV2Part.createdAt = getMastraCreatedAt(toolResultPart.providerOptions) ?? matchingV2Part.createdAt;\n }\n } else {\n const toolInvocationPart: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: toolResultPart.toolCallId,\n toolName: sanitizeToolName(toolResultPart.toolName),\n args: {},\n state: 'call',\n },\n };\n updateMatchingCallInvocationResult(toolResultPart, toolInvocationPart.toolInvocation);\n if (toolResultPart.providerOptions) {\n toolInvocationPart.providerMetadata = toolResultPart.providerOptions;\n toolInvocationPart.createdAt = getMastraCreatedAt(toolResultPart.providerOptions);\n }\n mastraDBParts.push(toolInvocationPart);\n }\n } else if (part.type === 'reasoning') {\n const v2ReasoningPart: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'text', text: part.text }],\n };\n if (part.providerOptions) {\n v2ReasoningPart.providerMetadata = part.providerOptions;\n v2ReasoningPart.createdAt = getMastraCreatedAt(part.providerOptions);\n }\n mastraDBParts.push(v2ReasoningPart);\n reasoningParts.push(part.text);\n } else if (part.type === 'image') {\n const imagePart = part;\n const mimeType = imagePart.mediaType || 'image/jpeg';\n const imageData = this.getDataStringFromAIV5DataPart(imagePart);\n\n const imageFilePart: MastraDBMessage['content']['parts'][number] = {\n type: 'file',\n data: imageData,\n mimeType,\n };\n if (part.providerOptions) {\n imageFilePart.providerMetadata = part.providerOptions;\n imageFilePart.createdAt = getMastraCreatedAt(part.providerOptions);\n }\n mastraDBParts.push(imageFilePart);\n experimental_attachments.push({\n url: imageData,\n contentType: mimeType,\n });\n } else if (part.type === 'file') {\n const filePart = part;\n const mimeType = filePart.mediaType || 'application/octet-stream';\n const fileData = this.getDataStringFromAIV5DataPart(filePart);\n\n const v2FilePart: MastraDBMessage['content']['parts'][number] = {\n type: 'file',\n data: fileData,\n mimeType,\n };\n if (part.providerOptions) {\n v2FilePart.providerMetadata = part.providerOptions;\n v2FilePart.createdAt = getMastraCreatedAt(part.providerOptions);\n }\n if ((filePart as { filename?: string }).filename) {\n (v2FilePart as Record).filename = (filePart as { filename?: string }).filename;\n }\n mastraDBParts.push(v2FilePart);\n experimental_attachments.push({\n url: fileData,\n contentType: mimeType,\n });\n }\n }\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredMastraDBParts = filterEmptyTextParts(mastraDBParts);\n\n // Build V2 content string\n const contentString = filteredMastraDBParts\n .filter(p => p.type === 'text')\n .map(p => p.text)\n .join('\\n');\n\n // Preserve metadata from the input message if present\n const metadata: Record =\n 'metadata' in modelMsg && modelMsg.metadata !== null && modelMsg.metadata !== undefined\n ? (modelMsg.metadata as Record)\n : {};\n\n // Generate ID from modelMsg if available, otherwise create a new one\n const id =\n `id` in modelMsg && typeof modelMsg.id === `string`\n ? modelMsg.id\n : `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n const message: MastraDBMessage = {\n id,\n role: modelMsg.role === 'tool' ? 'assistant' : modelMsg.role,\n createdAt: new Date(),\n content: {\n format: 2,\n parts: filteredMastraDBParts,\n toolInvocations: toolInvocations.length > 0 ? toolInvocations : undefined,\n reasoning: reasoningParts.length > 0 ? reasoningParts.join('\\n') : undefined,\n experimental_attachments: experimental_attachments.length > 0 ? experimental_attachments : undefined,\n content: contentString || undefined,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n },\n };\n // Add message-level providerOptions if present\n if (modelMsg.providerOptions) {\n message.content.providerMetadata = modelMsg.providerOptions;\n }\n\n return message;\n }\n}\n","import * as AIV5 from '@internal/ai-sdk-v5';\nimport * as AIV6 from '@internal/ai-v6';\n\nimport { getTransformedToolPayload, hasTransformedToolPayload } from '../../../tools/payload-transform';\nimport type {\n MastraDBMessage,\n MastraMessagePart,\n MastraProviderMetadata,\n MastraToolApproval,\n MastraToolInvocation,\n MastraToolInvocationPart,\n} from '../state/types';\nimport type { AIV5Type, AIV6Type, MessageSource } from '../types';\nimport { sanitizeToolName } from '../utils/tool-name';\nimport { AIV5Adapter } from './AIV5Adapter';\n\ntype AIV6AdapterContext = {\n dbMessages?: MastraDBMessage[];\n};\n\nfunction withOptionalFields, U extends Record>(\n target: T,\n fields: U,\n): T & Partial {\n for (const [key, value] of Object.entries(fields)) {\n if (value !== undefined) {\n (target as Record)[key] = value;\n }\n }\n return target as T & Partial;\n}\n\nfunction getDisplayTransform(\n providerMetadata: unknown,\n phase: 'input-available' | 'output-available' | 'error',\n fallback: unknown,\n) {\n const transform = getTransformedToolPayload(providerMetadata, 'display', phase);\n return hasTransformedToolPayload(transform) ? transform.transformed : fallback;\n}\n\nfunction getToolNameFromType(type: string): string {\n return type.startsWith('tool-') ? sanitizeToolName(type.slice('tool-'.length)) : sanitizeToolName(type);\n}\n\nfunction normalizeToolArgs(input: unknown): Record {\n return typeof input === 'object' && input !== null && !Array.isArray(input) ? (input as Record) : {};\n}\n\nfunction normalizeToolResult(output: unknown): unknown {\n return typeof output === 'object' && output && 'value' in output ? (output as { value: unknown }).value : output;\n}\n\nfunction isV6OnlyToolState(\n state: string,\n): state is Extract {\n return state === 'approval-requested' || state === 'approval-responded' || state === 'output-denied';\n}\n\nfunction toMastraApproval(\n approval: AIV6Type.UIToolInvocation['approval'],\n): MastraToolApproval | undefined {\n if (!approval) return undefined;\n\n return {\n id: approval.id,\n approved: 'approved' in approval ? approval.approved : undefined,\n reason: 'reason' in approval ? approval.reason : undefined,\n };\n}\n\nfunction toMastraProviderMetadata(\n providerMetadata: AIV6Type.ProviderMetadata | undefined,\n): MastraProviderMetadata | undefined {\n return providerMetadata as MastraProviderMetadata | undefined;\n}\n\nfunction getToolNameFromUIPart(part: AIV6Type.ToolUIPart | AIV6Type.DynamicToolUIPart): string {\n return part.type === 'dynamic-tool' ? sanitizeToolName(part.toolName) : getToolNameFromType(part.type);\n}\n\nfunction createToolInvocationPartFromUIPart(part: AIV6Type.ToolUIPart | AIV6Type.DynamicToolUIPart) {\n const base = {\n toolCallId: part.toolCallId,\n toolName: getToolNameFromUIPart(part),\n args: normalizeToolArgs(part.input),\n approval: 'approval' in part ? toMastraApproval(part.approval) : undefined,\n providerMetadata: 'callProviderMetadata' in part ? toMastraProviderMetadata(part.callProviderMetadata) : undefined,\n providerExecuted: part.providerExecuted,\n title: part.title,\n preliminary: 'preliminary' in part ? part.preliminary : undefined,\n };\n\n switch (part.state) {\n case 'input-streaming':\n return createToolInvocationPart({\n ...base,\n state: 'partial-call',\n });\n\n case 'input-available':\n return createToolInvocationPart({\n ...base,\n state: 'call',\n });\n\n case 'output-available':\n return createToolInvocationPart({\n ...base,\n state: 'result',\n result: normalizeToolResult(part.output),\n });\n\n case 'output-error':\n return createToolInvocationPart({\n ...base,\n state: 'output-error',\n errorText: part.errorText,\n rawInput: 'rawInput' in part ? part.rawInput : undefined,\n });\n\n case 'approval-requested':\n case 'approval-responded':\n case 'output-denied':\n return createToolInvocationPart({\n ...base,\n state: part.state,\n });\n }\n}\n\nfunction normalizeV6PartForV5Bridge(part: AIV6Type.UIMessage['parts'][number]): AIV5Type.UIMessage['parts'][number] {\n if (part.type === 'dynamic-tool' && !isV6OnlyToolState(part.state)) {\n return {\n ...part,\n type: `tool-${sanitizeToolName(part.toolName)}`,\n } as unknown as AIV5Type.UIMessage['parts'][number];\n }\n\n return part as unknown as AIV5Type.UIMessage['parts'][number];\n}\n\nfunction createToolInvocationPart({\n toolCallId,\n toolName,\n args,\n state,\n approval,\n result,\n errorText,\n rawInput,\n providerMetadata,\n providerExecuted,\n title,\n preliminary,\n}: {\n toolCallId: string;\n toolName: string;\n args: Record;\n state: MastraToolInvocation['state'];\n approval?: MastraToolApproval;\n result?: unknown;\n errorText?: string;\n rawInput?: unknown;\n providerMetadata?: MastraToolInvocationPart['providerMetadata'];\n providerExecuted?: boolean;\n title?: string;\n preliminary?: boolean;\n}): MastraToolInvocationPart {\n return withOptionalFields(\n {\n type: 'tool-invocation',\n toolInvocation: withOptionalFields(\n {\n toolCallId,\n toolName,\n args,\n state,\n },\n {\n approval,\n result,\n errorText,\n rawInput,\n },\n ),\n } satisfies MastraToolInvocationPart,\n {\n providerMetadata,\n providerExecuted,\n title,\n preliminary,\n },\n );\n}\n\nfunction findToolInvocationPart(parts: MastraMessagePart[], toolCallId: string): MastraToolInvocationPart | undefined {\n for (const part of parts) {\n if (part.type === 'tool-invocation' && part.toolInvocation.toolCallId === toolCallId) {\n return part;\n }\n }\n\n return undefined;\n}\n\nfunction findApprovalRequest(\n dbMessages: MastraDBMessage[] | undefined,\n approvalId: string,\n): MastraToolInvocationPart | undefined {\n if (!dbMessages) return undefined;\n\n for (const message of [...dbMessages].reverse()) {\n for (const part of [...(message.content.parts || [])].reverse()) {\n if (\n part.type === 'tool-invocation' &&\n part.toolInvocation.approval?.id === approvalId &&\n part.toolInvocation.state === 'approval-requested'\n ) {\n return part;\n }\n }\n }\n\n return undefined;\n}\n\nfunction createLegacyToolInvocations(\n parts: MastraMessagePart[],\n): MastraDBMessage['content']['toolInvocations'] | undefined {\n const toolInvocations: NonNullable = [];\n\n for (const part of parts) {\n if (part.type !== 'tool-invocation') continue;\n\n const invocation = part.toolInvocation;\n\n if (invocation.state === 'result') {\n toolInvocations.push({\n args: invocation.args,\n result: invocation.result,\n toolCallId: invocation.toolCallId,\n toolName: invocation.toolName,\n state: 'result',\n });\n continue;\n }\n\n if (invocation.state === 'call' || invocation.state === 'partial-call') {\n toolInvocations.push({\n args: invocation.args,\n toolCallId: invocation.toolCallId,\n toolName: invocation.toolName,\n state: invocation.state,\n });\n }\n }\n\n return toolInvocations.length > 0 ? toolInvocations : undefined;\n}\n\n/**\n * AIV6Adapter - Handles conversions between MastraDBMessage and AI SDK v6 formats.\n */\nexport class AIV6Adapter {\n static toUIMessage(dbMsg: MastraDBMessage): AIV6Type.UIMessage {\n const v5Message = AIV5Adapter.toUIMessage(dbMsg);\n const metadata = (v5Message.metadata || {}) as Record;\n const parts: AIV6Type.UIMessage['parts'] = [];\n\n if (dbMsg.role === 'signal' && v5Message.role !== 'user') {\n return {\n id: dbMsg.id,\n role: 'system',\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n parts: v5Message.parts.map(part => AIV6Adapter.toUIPartFromV5(part)),\n };\n }\n\n const dbParts = dbMsg.content.parts || [];\n const hasToolInvocationParts = dbParts.some(part => part.type === 'tool-invocation');\n const hasReasoningParts = dbParts.some(part => part.type === 'reasoning');\n const hasFileParts = dbParts.some(part => part.type === 'file');\n const hasTextParts = dbParts.some(part => part.type === 'text');\n\n for (const part of dbParts) {\n parts.push(AIV6Adapter.toUIPart(part));\n }\n\n if (!hasToolInvocationParts || !hasReasoningParts || !hasFileParts || !hasTextParts) {\n for (const part of v5Message.parts) {\n if (AIV5.isToolUIPart(part)) {\n if (!hasToolInvocationParts) {\n parts.push(AIV6Adapter.toUIPartFromV5(part));\n }\n continue;\n }\n\n if (part.type === 'reasoning') {\n if (!hasReasoningParts) {\n parts.push(AIV6Adapter.toUIPartFromV5(part));\n }\n continue;\n }\n\n if (part.type === 'file') {\n if (!hasFileParts) {\n parts.push(AIV6Adapter.toUIPartFromV5(part));\n }\n continue;\n }\n\n if (part.type === 'text' && !hasTextParts) {\n parts.push(AIV6Adapter.toUIPartFromV5(part));\n }\n }\n }\n\n return {\n id: dbMsg.id,\n role: dbMsg.role === 'signal' ? v5Message.role : dbMsg.role,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n parts,\n };\n }\n\n static fromUIMessage(uiMsg: AIV6Type.UIMessage): MastraDBMessage {\n const compatibleParts = uiMsg.parts.filter(part => {\n if (part.type === 'source-document') return false;\n if (AIV6.isToolUIPart(part)) return false;\n return true;\n });\n\n const baseDb = AIV5Adapter.fromUIMessage({\n ...uiMsg,\n parts: compatibleParts.map(part => normalizeV6PartForV5Bridge(part)) as AIV5Type.UIMessage['parts'],\n } as AIV5Type.UIMessage);\n\n const baseParts = baseDb.content.parts || [];\n const parts: MastraMessagePart[] = [];\n let basePartIndex = 0;\n\n for (const part of uiMsg.parts) {\n if (part.type === 'source-document') {\n parts.push(\n withOptionalFields(\n {\n type: 'source-document',\n sourceId: part.sourceId,\n mediaType: part.mediaType,\n title: part.title,\n },\n {\n filename: part.filename,\n providerMetadata: toMastraProviderMetadata(part.providerMetadata),\n },\n ) as MastraMessagePart,\n );\n continue;\n }\n\n if (!AIV6.isToolUIPart(part)) {\n const basePart = baseParts[basePartIndex++];\n if (basePart) {\n parts.push(basePart);\n }\n continue;\n }\n\n parts.push(createToolInvocationPartFromUIPart(part));\n }\n\n return {\n ...baseDb,\n content: {\n ...baseDb.content,\n parts,\n toolInvocations: createLegacyToolInvocations(parts) || baseDb.content.toolInvocations,\n },\n };\n }\n\n static fromModelMessage(\n modelMsg: AIV6Type.ModelMessage,\n _messageSource?: MessageSource,\n context: AIV6AdapterContext = {},\n ): MastraDBMessage {\n const content = Array.isArray(modelMsg.content)\n ? modelMsg.content\n : [{ type: 'text', text: modelMsg.content } satisfies AIV6Type.TextPart];\n\n const compatibleContent = content.filter(\n part => part.type !== 'tool-approval-request' && part.type !== 'tool-approval-response',\n );\n\n const baseDb = AIV5Adapter.fromModelMessage(\n {\n ...modelMsg,\n content: compatibleContent as unknown as AIV5Type.ModelMessage['content'],\n } as AIV5Type.ModelMessage,\n _messageSource,\n );\n\n const parts = [...baseDb.content.parts];\n\n if (modelMsg.role === 'assistant') {\n const toolCalls = new Map<\n string,\n {\n toolName: string;\n args: Record;\n }\n >();\n\n for (const part of content) {\n if (part.type === 'tool-call') {\n toolCalls.set(part.toolCallId, {\n toolName: sanitizeToolName(part.toolName),\n args: normalizeToolArgs(part.input),\n });\n continue;\n }\n\n if (part.type !== 'tool-approval-request') {\n continue;\n }\n\n const call = toolCalls.get(part.toolCallId);\n const existingPart = findToolInvocationPart(parts, part.toolCallId);\n\n if (existingPart) {\n existingPart.toolInvocation.state = 'approval-requested';\n existingPart.toolInvocation.approval = { id: part.approvalId };\n continue;\n }\n\n parts.push(\n createToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName: call?.toolName || 'unknown',\n args: call?.args || {},\n state: 'approval-requested',\n approval: { id: part.approvalId },\n }),\n );\n }\n } else if (modelMsg.role === 'tool') {\n for (const part of content) {\n if (part.type !== 'tool-approval-response') {\n continue;\n }\n\n const request = findApprovalRequest(context.dbMessages, part.approvalId);\n if (!request) {\n continue;\n }\n\n parts.push(\n createToolInvocationPart({\n toolCallId: request.toolInvocation.toolCallId,\n toolName: request.toolInvocation.toolName,\n args: request.toolInvocation.args,\n state: 'approval-responded',\n approval: {\n id: part.approvalId,\n approved: part.approved,\n reason: part.reason,\n },\n providerMetadata: request.providerMetadata,\n providerExecuted: request.providerExecuted,\n title: request.title,\n }),\n );\n }\n }\n\n return {\n ...baseDb,\n content: {\n ...baseDb.content,\n parts,\n },\n };\n }\n\n private static toUIPart(part: MastraMessagePart): AIV6Type.UIMessage['parts'][number] {\n if (part.type === 'tool-invocation') {\n const base = withOptionalFields(\n {\n type: `tool-${sanitizeToolName(part.toolInvocation.toolName)}`,\n toolCallId: part.toolInvocation.toolCallId,\n providerExecuted: part.providerExecuted,\n },\n {\n callProviderMetadata: part.providerMetadata,\n title: part.title,\n },\n );\n\n switch (part.toolInvocation.state) {\n case 'partial-call':\n return {\n ...base,\n state: 'input-streaming',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n } as AIV6Type.UIMessage['parts'][number];\n\n case 'call':\n return {\n ...base,\n state: 'input-available',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n } as AIV6Type.UIMessage['parts'][number];\n\n case 'approval-requested':\n return {\n ...base,\n state: 'approval-requested',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n approval: {\n id: part.toolInvocation.approval?.id || part.toolInvocation.toolCallId,\n },\n } as AIV6Type.UIMessage['parts'][number];\n\n case 'approval-responded':\n return {\n ...base,\n state: 'approval-responded',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n approval: {\n id: part.toolInvocation.approval?.id || part.toolInvocation.toolCallId,\n approved: part.toolInvocation.approval?.approved ?? false,\n reason: part.toolInvocation.approval?.reason,\n },\n } as AIV6Type.UIMessage['parts'][number];\n\n case 'output-error':\n return withOptionalFields(\n {\n ...base,\n state: 'output-error',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n errorText: getDisplayTransform(\n part.providerMetadata,\n 'error',\n part.toolInvocation.errorText || '',\n ) as string,\n },\n {\n rawInput: part.toolInvocation.rawInput,\n approval:\n part.toolInvocation.approval?.approved === true\n ? {\n id: part.toolInvocation.approval.id,\n approved: true,\n reason: part.toolInvocation.approval.reason,\n }\n : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'output-denied':\n return {\n ...base,\n state: 'output-denied',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n approval: {\n id: part.toolInvocation.approval?.id || part.toolInvocation.toolCallId,\n approved: false,\n reason: part.toolInvocation.approval?.reason,\n },\n } as AIV6Type.UIMessage['parts'][number];\n\n case 'result':\n return withOptionalFields(\n {\n ...base,\n state: 'output-available',\n input: getDisplayTransform(part.providerMetadata, 'input-available', part.toolInvocation.args),\n output: getDisplayTransform(\n part.providerMetadata,\n 'output-available',\n getDisplayTransform(part.providerMetadata, 'error', part.toolInvocation.result),\n ),\n },\n {\n preliminary: part.preliminary,\n approval:\n part.toolInvocation.approval?.approved === true\n ? {\n id: part.toolInvocation.approval.id,\n approved: true,\n reason: part.toolInvocation.approval.reason,\n }\n : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n default:\n throw new Error(`Unhandled toolInvocation.state: ${String(part.toolInvocation.state)}`);\n }\n }\n\n if (part.type === 'source-document') {\n return withOptionalFields(\n {\n type: 'source-document',\n sourceId: part.sourceId,\n mediaType: part.mediaType,\n title: part.title,\n },\n {\n filename: part.filename,\n providerMetadata: part.providerMetadata,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n }\n\n return AIV6Adapter.toUIPartFromV5(\n AIV5Adapter.toUIMessage({\n id: 'tmp',\n role: 'assistant',\n createdAt: new Date(),\n content: {\n format: 2,\n parts: [part],\n },\n }).parts[0]!,\n );\n }\n\n private static toUIPartFromV5(part: AIV5Type.UIMessage['parts'][number]): AIV6Type.UIMessage['parts'][number] {\n if (AIV5.isToolUIPart(part)) {\n const base = {\n type: part.type,\n toolCallId: part.toolCallId,\n providerExecuted: part.providerExecuted,\n };\n\n switch (part.state) {\n case 'input-streaming':\n return withOptionalFields(\n {\n ...base,\n state: 'input-streaming',\n input: part.input,\n },\n {\n callProviderMetadata: 'callProviderMetadata' in part ? part.callProviderMetadata : undefined,\n title: 'title' in part ? part.title : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'input-available':\n return withOptionalFields(\n {\n ...base,\n state: 'input-available',\n input: part.input,\n },\n {\n callProviderMetadata: 'callProviderMetadata' in part ? part.callProviderMetadata : undefined,\n title: 'title' in part ? part.title : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'output-available':\n return withOptionalFields(\n {\n ...base,\n state: 'output-available',\n input: part.input,\n output: part.output,\n },\n {\n callProviderMetadata: 'callProviderMetadata' in part ? part.callProviderMetadata : undefined,\n preliminary: 'preliminary' in part ? part.preliminary : undefined,\n title: 'title' in part ? part.title : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'output-error':\n return withOptionalFields(\n {\n ...base,\n state: 'output-error',\n input: part.input,\n errorText: part.errorText,\n },\n {\n rawInput: 'rawInput' in part ? part.rawInput : undefined,\n callProviderMetadata: 'callProviderMetadata' in part ? part.callProviderMetadata : undefined,\n title: 'title' in part ? part.title : undefined,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n }\n }\n\n switch (part.type) {\n case 'text':\n return withOptionalFields(\n { type: 'text', text: part.text },\n { providerMetadata: part.providerMetadata },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'reasoning':\n return withOptionalFields(\n {\n type: 'reasoning',\n text: part.text,\n state: part.state,\n },\n { providerMetadata: part.providerMetadata },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'file':\n return withOptionalFields(\n {\n type: 'file',\n url: part.url,\n mediaType: part.mediaType,\n },\n {\n filename: 'filename' in part ? part.filename : undefined,\n providerMetadata: part.providerMetadata,\n },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'source-url':\n return withOptionalFields(\n {\n type: 'source-url',\n sourceId: part.sourceId,\n url: part.url,\n },\n { title: part.title, providerMetadata: part.providerMetadata },\n ) as AIV6Type.UIMessage['parts'][number];\n\n case 'step-start':\n return { type: 'step-start' };\n\n default:\n if (typeof part.type === 'string' && part.type.startsWith('data-')) {\n return {\n type: part.type,\n data: 'data' in part ? part.data : undefined,\n } as AIV6Type.UIMessage['parts'][number];\n }\n\n return part as unknown as AIV6Type.UIMessage['parts'][number];\n }\n }\n}\n","/**\n * `JSON.stringify` with deterministic key ordering at every level.\n *\n * Required because object key order is preserved by `JSON.stringify`, and we\n * don't want `{ a: 1, b: 2 }` and `{ b: 2, a: 1 }` to hash to different keys.\n *\n * This is critical for cache key generation when comparing messages restored\n * from different storage backends: jsonb columns (e.g. mastra_workflow_snapshot\n * in PostgreSQL) normalize key order, while text columns (mastra_messages)\n * preserve insertion order. Without stable stringification, functionally-equal\n * data-* parts produce different cache keys, causing false dedup misses.\n */\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(value, (_key, val) => {\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n const sorted: Record = {};\n for (const k of Object.keys(val as Record).sort()) {\n sorted[k] = (val as Record)[k];\n }\n return sorted;\n }\n return val;\n });\n}\n","import type { UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { getImageCacheKey } from '../prompt/image-utils';\nimport type { AIV5Type, CoreMessageV4 } from '../types';\nimport { getResponseProviderItemKeys } from '../utils/response-item-metadata';\nimport { stableStringify } from './stable-stringify';\nimport type { MastraMessagePart, UIMessageV4Part } from './types';\n\nfunction appendResponseProviderItemKeys(cacheKey: string, ...providerSources: unknown[]): string {\n const itemKeys = new Set(\n providerSources.flatMap(source => getResponseProviderItemKeys(source as Record | undefined)),\n );\n\n for (const itemKey of itemKeys) {\n cacheKey += `|${itemKey}`;\n }\n\n return cacheKey;\n}\n\n/**\n * CacheKeyGenerator - Centralized cache key generation for message equality checks\n *\n * This class provides consistent cache key generation across all message formats,\n * which is critical for:\n * - Deduplication of messages\n * - Detecting when messages have been updated\n * - Comparing messages across different formats\n *\n * Cache key invariants:\n * - Same message content should always produce the same key\n * - Different content should produce different keys\n * - Provider metadata (e.g., OpenAI/Azure OpenAI text, reasoning, and tool itemId) must be included for proper distinction\n */\nexport class CacheKeyGenerator {\n /**\n * Generate cache key from AIV4 UIMessage parts\n */\n static fromAIV4Parts(parts: UIMessageV4['parts']): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n key += CacheKeyGenerator.fromAIV4Part(part);\n }\n return key;\n }\n\n /**\n * Generate cache key from a single AIV4 UIMessage part\n */\n static fromAIV4Part(part: UIMessageV4['parts'][number]): string {\n let cacheKey = '';\n if (part.type === 'text') {\n cacheKey += part.text;\n cacheKey = appendResponseProviderItemKeys(cacheKey, (part as any).providerMetadata);\n }\n if (part.type === 'tool-invocation') {\n if (!part.toolInvocation) return cacheKey;\n cacheKey += part.toolInvocation.toolCallId;\n cacheKey += part.toolInvocation.state;\n }\n if (part.type === 'reasoning') {\n cacheKey += part.reasoning;\n cacheKey += part.details.reduce((prev, current) => {\n if (current.type === 'text') {\n return prev + current.text.length + (current.signature?.length || 0);\n }\n return prev;\n }, 0);\n\n // OpenAI-compatible Responses providers send reasoning items (rs_...) inside\n // provider metadata itemId fields such as openai.itemId or azure.itemId.\n // When the reasoning text is empty, the default cache key logic produces \"reasoning0\"\n // for *all* reasoning parts. This makes distinct rs_ entries appear identical, so the\n // message-merging logic drops the latest reasoning item. The result is that subsequent\n // OpenAI-compatible calls fail with:\n //\n // \"Item 'fc_...' was provided without its required 'reasoning' item\"\n //\n // To fix this, we incorporate the provider itemId into the cache key so each\n // rs_ entry is treated as distinct.\n //\n // Note: We cast `part` to `any` here because the AI SDK's ReasoningUIPart V4 type does\n // NOT declare `providerMetadata` (even though Mastra attaches it at runtime). This\n // access is safe in JavaScript, but TypeScript cannot type it without augmentation,\n // so we intentionally narrow to `any` only for this metadata lookup.\n\n const partAny = part as any;\n\n if (partAny && Object.hasOwn(partAny, 'providerMetadata')) {\n cacheKey = appendResponseProviderItemKeys(cacheKey, partAny.providerMetadata);\n }\n }\n if (part.type === 'file') {\n cacheKey += part.data;\n cacheKey += part.mimeType;\n }\n\n return cacheKey;\n }\n\n /**\n * Generate cache key from MastraDB message parts\n */\n static fromDBParts(parts: MastraMessagePart[]): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n if (part.type.startsWith('data-')) {\n // Stringify data for proper cache key comparison since data can be any type\n const data = (part as AIV5Type.DataUIPart).data;\n key += stableStringify(data); // order-independent: jsonb vs text storage may reorder keys\n } else {\n // Cast to UIMessageV4Part since we've already handled data-* parts above\n key += CacheKeyGenerator.fromAIV4Part(part as UIMessageV4Part);\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV4 CoreMessage content\n */\n static fromAIV4CoreMessageContent(content: CoreMessageV4['content']): string {\n if (typeof content === 'string') return content;\n let key = '';\n for (const part of content) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text.length;\n const partAny = part as any;\n key = appendResponseProviderItemKeys(key, partAny.providerMetadata, partAny.providerOptions);\n }\n if (part.type === 'reasoning') {\n key += part.text.length;\n const partAny = part as any;\n key = appendResponseProviderItemKeys(key, partAny.providerMetadata, partAny.providerOptions);\n }\n if (part.type === 'tool-call') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'tool-result') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'file') {\n key += part.filename;\n key += part.mimeType;\n }\n if (part.type === 'image') {\n key += getImageCacheKey(part.image);\n key += part.mimeType;\n }\n if (part.type === 'redacted-reasoning') {\n key += part.data.length;\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV5 UIMessage parts\n */\n static fromAIV5Parts(parts: AIV5Type.UIMessage['parts']): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text;\n key = appendResponseProviderItemKeys(key, (part as any).providerMetadata);\n }\n if (AIV5.isToolUIPart(part) || part.type === 'dynamic-tool') {\n key += part.toolCallId;\n key += part.state;\n }\n if (part.type === 'reasoning') {\n key += part.text;\n key = appendResponseProviderItemKeys(key, (part as any).providerMetadata);\n }\n if (part.type === 'file') {\n key += part.url.length;\n key += part.mediaType;\n key += part.filename || '';\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV5 ModelMessage content\n */\n static fromAIV5ModelMessageContent(content: AIV5Type.ModelMessage['content']): string {\n if (typeof content === 'string') return content;\n let key = '';\n for (const part of content) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text.length;\n key = appendResponseProviderItemKeys(key, (part as any).providerOptions);\n }\n if (part.type === 'reasoning') {\n key += part.text.length;\n key = appendResponseProviderItemKeys(key, (part as any).providerOptions);\n }\n if (part.type === 'tool-call') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'tool-result') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'file') {\n key += part.filename;\n key += part.mediaType;\n }\n if (part.type === 'image') {\n key += getImageCacheKey(part.image);\n key += part.mediaType;\n }\n }\n return key;\n }\n}\n","import type { LanguageModelV2Prompt } from '@ai-sdk/provider-v5';\nimport type { LanguageModelV1Prompt, CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { categorizeFileData } from '../prompt/image-utils';\nimport type { AIV5Type } from '../types';\nimport { sanitizeToolName } from '../utils/tool-name';\n\ntype AIV5LanguageModelV2Message = LanguageModelV2Prompt[0];\ntype LanguageModelV1Message = LanguageModelV1Prompt[0];\n\n/**\n * Convert an AI SDK V4 CoreMessage to a V1 LanguageModel prompt message.\n * Used for creating LLM prompt messages without AI SDK streamText/generateText.\n */\nexport function aiV4CoreMessageToV1PromptMessage(coreMessage: CoreMessageV4): LanguageModelV1Message {\n if (coreMessage.role === `system`) {\n return coreMessage;\n }\n\n if (typeof coreMessage.content === `string` && (coreMessage.role === `assistant` || coreMessage.role === `user`)) {\n return {\n ...coreMessage,\n content: [{ type: 'text', text: coreMessage.content }],\n };\n }\n\n if (typeof coreMessage.content === `string`) {\n throw new Error(\n `Saw text content for input CoreMessage, but the role is ${coreMessage.role}. This is only allowed for \"system\", \"assistant\", and \"user\" roles.`,\n );\n }\n\n const roleContent: {\n user: Exclude['content'], string>;\n assistant: Exclude['content'], string>;\n tool: Exclude['content'], string>;\n } = {\n user: [],\n assistant: [],\n tool: [],\n };\n\n const role = coreMessage.role;\n\n for (const part of coreMessage.content) {\n const incompatibleMessage = `Saw incompatible message content part type ${part.type} for message role ${role}`;\n\n switch (part.type) {\n case 'text': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'redacted-reasoning':\n case 'reasoning': {\n if (role !== `assistant`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'tool-call': {\n if (role === `tool` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'tool-result': {\n if (role === `assistant` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'image': {\n if (role === `tool` || role === `assistant`) {\n throw new Error(incompatibleMessage);\n }\n\n let processedImage: URL | Uint8Array;\n\n if (part.image instanceof URL || part.image instanceof Uint8Array) {\n processedImage = part.image;\n } else if (Buffer.isBuffer(part.image) || part.image instanceof ArrayBuffer) {\n processedImage = new Uint8Array(part.image);\n } else {\n // part.image is a string - could be a URL, data URI, or raw base64\n const categorized = categorizeFileData(part.image, part.mimeType);\n\n if (categorized.type === 'raw') {\n // Raw base64 — keep as Uint8Array so providers receive raw bytes\n // and don't double-wrap in a data URI (e.g. Gemini inline_data.data)\n processedImage = new Uint8Array(Buffer.from(part.image, 'base64'));\n } else {\n processedImage = new URL(part.image);\n }\n }\n\n roleContent[role].push({\n ...part,\n image: processedImage,\n });\n break;\n }\n\n case 'file': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n data:\n part.data instanceof URL\n ? part.data\n : typeof part.data === 'string'\n ? part.data\n : convertDataContentToBase64String(part.data),\n });\n break;\n }\n }\n }\n\n if (role === `tool`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n if (role === `user`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n if (role === `assistant`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n\n throw new Error(\n `Encountered unknown role ${role} when converting V4 CoreMessage -> V4 LanguageModelV1Prompt, input message: ${JSON.stringify(coreMessage, null, 2)}`,\n );\n}\n\n/**\n * Convert an AI SDK V5 ModelMessage to a V2 LanguageModel prompt message.\n * Used for creating LLM prompt messages without AI SDK streamText/generateText.\n */\nexport function aiV5ModelMessageToV2PromptMessage(modelMessage: AIV5Type.ModelMessage): AIV5LanguageModelV2Message {\n if (modelMessage.role === `system`) {\n return modelMessage;\n }\n\n if (typeof modelMessage.content === `string` && (modelMessage.role === `assistant` || modelMessage.role === `user`)) {\n return {\n role: modelMessage.role,\n content: [{ type: 'text', text: modelMessage.content }],\n providerOptions: modelMessage.providerOptions,\n };\n }\n\n if (typeof modelMessage.content === `string`) {\n throw new Error(\n `Saw text content for input ModelMessage, but the role is ${modelMessage.role}. This is only allowed for \"system\", \"assistant\", and \"user\" roles.`,\n );\n }\n\n const roleContent: {\n user: Extract['content'];\n assistant: Extract['content'];\n tool: Extract['content'];\n } = {\n user: [],\n assistant: [],\n tool: [],\n };\n\n const role = modelMessage.role;\n\n for (const part of modelMessage.content) {\n const incompatibleMessage = `Saw incompatible message content part type ${part.type} for message role ${role}`;\n\n switch (part.type) {\n case 'text': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'reasoning': {\n if (role === `tool` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'tool-call': {\n if (role !== `assistant`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'tool-result': {\n if (role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'file': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n data: part.data instanceof ArrayBuffer ? new Uint8Array(part.data) : part.data,\n });\n break;\n }\n\n case 'image': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n mediaType: part.mediaType || 'image/unknown',\n type: 'file',\n data: part.image instanceof ArrayBuffer ? new Uint8Array(part.image) : part.image,\n });\n break;\n }\n }\n }\n\n if (role === `tool`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n if (role === `user`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n if (role === `assistant`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n\n throw new Error(\n `Encountered unknown role ${role} when converting V5 ModelMessage -> V5 LanguageModelV2Message, input message: ${JSON.stringify(modelMessage, null, 2)}`,\n );\n}\n","import type { CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { CacheKeyGenerator } from '../cache/CacheKeyGenerator';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type { MessageInput } from '../types';\n\n/**\n * Convert CoreMessage content to a plain string.\n * Extracts text from text parts and concatenates them.\n */\nexport function coreContentToString(content: CoreMessageV4['content']): string {\n if (typeof content === `string`) return content;\n\n return content.reduce((p, c) => {\n if (c.type === `text`) {\n p += c.text;\n }\n return p;\n }, '');\n}\n\n/**\n * Compare two messages for equality based on their content.\n * Uses cache keys for efficient comparison across different message formats.\n */\nexport function messagesAreEqual(one: MessageInput, two: MessageInput): boolean {\n const oneUIV4 = TypeDetector.isAIV4UIMessage(one) && one;\n const twoUIV4 = TypeDetector.isAIV4UIMessage(two) && two;\n if (oneUIV4 && !twoUIV4) return false;\n if (oneUIV4 && twoUIV4) {\n return CacheKeyGenerator.fromAIV4Parts(one.parts) === CacheKeyGenerator.fromAIV4Parts(two.parts);\n }\n\n const oneCMV4 = TypeDetector.isAIV4CoreMessage(one) && one;\n const twoCMV4 = TypeDetector.isAIV4CoreMessage(two) && two;\n if (oneCMV4 && !twoCMV4) return false;\n if (oneCMV4 && twoCMV4) {\n return (\n CacheKeyGenerator.fromAIV4CoreMessageContent(oneCMV4.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(twoCMV4.content)\n );\n }\n\n const oneMM1 = TypeDetector.isMastraMessageV1(one) && one;\n const twoMM1 = TypeDetector.isMastraMessageV1(two) && two;\n if (oneMM1 && !twoMM1) return false;\n if (oneMM1 && twoMM1) {\n return (\n oneMM1.id === twoMM1.id &&\n CacheKeyGenerator.fromAIV4CoreMessageContent(oneMM1.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(twoMM1.content)\n );\n }\n\n const oneMM2 = TypeDetector.isMastraDBMessage(one) && one;\n const twoMM2 = TypeDetector.isMastraDBMessage(two) && two;\n if (oneMM2 && !twoMM2) return false;\n if (oneMM2 && twoMM2) {\n return (\n oneMM2.id === twoMM2.id &&\n CacheKeyGenerator.fromDBParts(oneMM2.content.parts) === CacheKeyGenerator.fromDBParts(twoMM2.content.parts)\n );\n }\n\n const oneUIV5 = TypeDetector.isAIV5UIMessage(one) && one;\n const twoUIV5 = TypeDetector.isAIV5UIMessage(two) && two;\n if (oneUIV5 && !twoUIV5) return false;\n if (oneUIV5 && twoUIV5) {\n return CacheKeyGenerator.fromAIV5Parts(one.parts) === CacheKeyGenerator.fromAIV5Parts(two.parts);\n }\n\n const oneCMV5 = TypeDetector.isAIV5CoreMessage(one) && one;\n const twoCMV5 = TypeDetector.isAIV5CoreMessage(two) && two;\n if (oneCMV5 && !twoCMV5) return false;\n if (oneCMV5 && twoCMV5) {\n return (\n CacheKeyGenerator.fromAIV5ModelMessageContent(oneCMV5.content) ===\n CacheKeyGenerator.fromAIV5ModelMessageContent(twoCMV5.content)\n );\n }\n\n // default to it did change. we'll likely never reach this codepath\n return true;\n}\n","import type { MastraDBMessage, MastraMessagePart, MessageSource } from '../state/types';\n\nexport function stampPart(part: T): T {\n if (part.createdAt == null) {\n part.createdAt = Date.now();\n }\n\n return part;\n}\n\nexport function stampMessageParts(message: T, source: MessageSource): T {\n if (source === 'memory' || !Array.isArray(message.content.parts)) {\n return message;\n }\n\n message.content.parts = message.content.parts.map(part => stampPart(part));\n return message;\n}\n","import type { CoreMessage as CoreMessageV4, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { AIV4Adapter, AIV5Adapter, AIV6Adapter } from '../adapters';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type {\n MastraDBMessage,\n MastraMessageV1,\n MessageSource,\n MemoryInfo,\n UIMessageWithMetadata,\n} from '../state/types';\nimport type { MessageInput } from '../types';\nimport { stampMessageParts } from '../utils/stamp-part';\n\n/**\n * Context required for input conversion functions.\n * This is passed from MessageList to provide access to instance-specific utilities.\n */\nexport interface InputConversionContext {\n memoryInfo: MemoryInfo | null;\n newMessageId: () => string;\n generateCreatedAt: (messageSource: MessageSource, start?: unknown) => Date;\n /** Messages array for looking up tool call args */\n dbMessages: MastraDBMessage[];\n}\n\n/**\n * Convert any supported message input format to MastraDBMessage.\n * Routes to the appropriate converter based on message type detection.\n */\nexport function inputToMastraDBMessage(\n message: MessageInput,\n messageSource: MessageSource,\n context: InputConversionContext,\n): MastraDBMessage {\n // Validate threadId matches (except for memory messages which can come from other threads)\n if (\n messageSource !== `memory` &&\n `threadId` in message &&\n message.threadId &&\n context.memoryInfo &&\n message.threadId !== context.memoryInfo.threadId\n ) {\n throw new Error(\n `Received input message with wrong threadId. Input ${message.threadId}, expected ${context.memoryInfo.threadId}`,\n );\n }\n\n // Validate resourceId matches\n if (\n `resourceId` in message &&\n message.resourceId &&\n context.memoryInfo?.resourceId &&\n message.resourceId !== context.memoryInfo.resourceId\n ) {\n throw new Error(\n `Received input message with wrong resourceId. Input ${message.resourceId}, expected ${context.memoryInfo.resourceId}`,\n );\n }\n\n if (TypeDetector.isMastraMessageV1(message)) {\n return stampMessageParts(mastraMessageV1ToMastraDBMessage(message, messageSource, context), messageSource);\n }\n if (TypeDetector.isMastraDBMessage(message)) {\n return stampMessageParts(hydrateMastraDBMessageFields(message, context, messageSource), messageSource);\n }\n if (TypeDetector.isAIV4CoreMessage(message)) {\n return stampMessageParts(AIV4Adapter.fromCoreMessage(message, context, messageSource), messageSource);\n }\n if (TypeDetector.isAIV4UIMessage(message)) {\n return stampMessageParts(\n AIV4Adapter.fromUIMessage(message as UIMessageV4 | UIMessageWithMetadata, context, messageSource),\n messageSource,\n );\n }\n\n // Use custom ID generator if message doesn't have an ID, otherwise keep the original\n const hasOriginalId = 'id' in message && typeof message.id === 'string';\n const id = hasOriginalId ? message.id : context.newMessageId();\n\n if (TypeDetector.isAIV6CoreMessage(message)) {\n const dbMsg = AIV6Adapter.fromModelMessage(message, messageSource, context);\n const rawCreatedAt =\n 'metadata' in message &&\n message.metadata &&\n typeof message.metadata === 'object' &&\n 'createdAt' in message.metadata\n ? message.metadata.createdAt\n : undefined;\n return {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n };\n }\n if (TypeDetector.isAIV6UIMessage(message)) {\n const dbMsg = AIV6Adapter.fromUIMessage(message);\n const rawCreatedAt = 'createdAt' in message ? message.createdAt : undefined;\n return {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n };\n }\n\n if (TypeDetector.isAIV5CoreMessage(message)) {\n const dbMsg = AIV5Adapter.fromModelMessage(message, messageSource);\n // Only use the original createdAt from input message metadata, not the generated one from the static method\n // This fixes issue #10683 where messages without createdAt would get shuffled\n const rawCreatedAt =\n 'metadata' in message &&\n message.metadata &&\n typeof message.metadata === 'object' &&\n 'createdAt' in message.metadata\n ? message.metadata.createdAt\n : undefined;\n return stampMessageParts(\n {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n },\n messageSource,\n );\n }\n if (TypeDetector.isAIV5UIMessage(message)) {\n const dbMsg = AIV5Adapter.fromUIMessage(message);\n // Only use the original createdAt from input message, not the generated one from the static method\n // This fixes issue #10683 where messages without createdAt would get shuffled\n const rawCreatedAt = 'createdAt' in message ? message.createdAt : undefined;\n return stampMessageParts(\n {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n },\n messageSource,\n );\n }\n\n throw new Error(`Found unhandled message ${JSON.stringify(message)}`);\n}\n\n/**\n * Convert MastraMessageV1 format to MastraDBMessage.\n */\nexport function mastraMessageV1ToMastraDBMessage(\n message: MastraMessageV1,\n messageSource: MessageSource,\n context: InputConversionContext,\n): MastraDBMessage {\n const coreV2 = AIV4Adapter.fromCoreMessage(\n {\n content: message.content,\n role: message.role,\n } as CoreMessageV4,\n context,\n messageSource,\n );\n\n return {\n id: message.id,\n role: coreV2.role,\n createdAt: context.generateCreatedAt(messageSource, message.createdAt),\n threadId: message.threadId,\n resourceId: message.resourceId,\n content: coreV2.content,\n };\n}\n\n/**\n * Hydrate a MastraDBMessage with missing fields (id, createdAt, threadId, resourceId).\n * Also fixes toolInvocations with empty args by looking in the parts array.\n */\nexport function hydrateMastraDBMessageFields(\n message: MastraDBMessage,\n context: InputConversionContext,\n messageSource: MessageSource,\n): MastraDBMessage {\n // Generate ID if missing\n if (!message.id) {\n message.id = context.newMessageId();\n }\n\n if (message.createdAt === undefined || message.createdAt === null) {\n message.createdAt = context.generateCreatedAt(messageSource);\n } else if (!(message.createdAt instanceof Date)) {\n message.createdAt = new Date(message.createdAt);\n }\n\n // Fix toolInvocations with empty args by looking in the parts array\n // This handles messages restored from database where toolInvocations might have lost their args\n if (message.content.toolInvocations && message.content.parts) {\n message.content.toolInvocations = message.content.toolInvocations.map(ti => {\n if (!ti.args || Object.keys(ti.args).length === 0) {\n // Find the corresponding tool-invocation part with args\n const partWithArgs = message.content.parts.find(\n part =>\n part.type === 'tool-invocation' &&\n part.toolInvocation &&\n part.toolInvocation.toolCallId === ti.toolCallId &&\n part.toolInvocation.args &&\n Object.keys(part.toolInvocation.args).length > 0,\n );\n if (partWithArgs && partWithArgs.type === 'tool-invocation') {\n return { ...ti, args: partWithArgs.toolInvocation.args };\n }\n }\n return ti;\n });\n }\n\n if (!message.threadId && context.memoryInfo?.threadId) {\n message.threadId = context.memoryInfo.threadId;\n\n if (!message.resourceId && context.memoryInfo?.resourceId) {\n message.resourceId = context.memoryInfo.resourceId;\n }\n }\n\n return message;\n}\n","import { convertToCoreMessages as convertToCoreMessagesV4 } from '@internal/ai-sdk-v4';\nimport type { CoreMessage as CoreMessageV4, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { AIV4Adapter, AIV5Adapter, AIV6Adapter } from '../adapters';\nimport type { AdapterContext } from '../adapters';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type { MastraDBMessage, MessageSource } from '../state/types';\nimport type { AIV5Type, AIV6Type } from '../types';\nimport { ensureAnthropicCompatibleMessages, sanitizeOrphanedToolPairs } from '../utils/provider-compat';\nimport { getResponseProviderItemKey } from '../utils/response-item-metadata';\n\n/**\n * Merges text parts that share the same OpenAI-compatible itemId.\n *\n * When OpenAI streams a response with web search, it interleaves `source` chunks\n * with text-deltas. If the streaming pipeline flushes text on these source chunks,\n * it creates multiple text parts all sharing the same `providerMetadata.openai.itemId`.\n *\n * When these parts are later converted to model messages, each part with an itemId\n * becomes an `item_reference` pointing to the same ID, causing OpenAI to reject\n * the request with: \"Duplicate item found with id msg_*\"\n *\n * This function merges consecutive text parts with the same itemId into a single part,\n * allowing source annotations between those text flushes, concatenating their text\n * content, and keeping the metadata from the first part.\n */\nfunction isTextMergePassThroughPart(part: { type: string }): boolean {\n // Only source annotations are transparent for text-item merging. Tool,\n // reasoning, file, and step parts are merge boundaries.\n return part.type.startsWith('source-');\n}\n\nfunction mergeTextPartsWithDuplicateItemIds(parts: T[]): T[] {\n const result: T[] = [];\n\n for (const part of parts) {\n // Only process text parts with OpenAI-compatible itemId\n if (part.type !== 'text') {\n result.push(part);\n continue;\n }\n\n const textPart = part as T & { text: string; providerMetadata?: Record };\n const itemId = getResponseProviderItemKey(textPart.providerMetadata);\n if (!itemId) {\n result.push(part);\n continue;\n }\n\n let merged = false;\n for (let index = result.length - 1; index >= 0; index--) {\n const previous = result[index]!;\n if (previous.type === 'text') {\n const previousTextPart = previous as T & { text: string; providerMetadata?: Record };\n const previousItemId = getResponseProviderItemKey(previousTextPart.providerMetadata);\n\n if (previousItemId === itemId) {\n result[index] = {\n ...previousTextPart,\n text: previousTextPart.text + textPart.text,\n };\n merged = true;\n }\n\n break;\n }\n\n if (!isTextMergePassThroughPart(previous)) {\n break;\n }\n }\n\n if (merged) {\n continue;\n }\n\n result.push(part);\n }\n\n return result;\n}\n\n/**\n * Sanitizes AIV4 UI messages by filtering out incomplete tool calls.\n * Removes messages with empty parts arrays after sanitization.\n */\nexport function sanitizeAIV4UIMessages(messages: UIMessageV4[]): UIMessageV4[] {\n const msgs = messages\n .map(m => {\n if (m.parts.length === 0) return false;\n const safeParts = m.parts.filter(\n p =>\n p.type !== `tool-invocation` ||\n // calls and partial-calls should be updated to be results at this point\n // if they haven't we can't send them back to the llm and need to remove them.\n (p.toolInvocation.state !== `call` && p.toolInvocation.state !== `partial-call`),\n );\n\n // fully remove this message if it has an empty parts array after stripping out incomplete tool calls.\n if (!safeParts.length) return false;\n\n const sanitized = {\n ...m,\n parts: safeParts,\n };\n\n // ensure toolInvocations are also updated to only show results\n if (`toolInvocations` in m && m.toolInvocations) {\n sanitized.toolInvocations = m.toolInvocations.filter(t => t.state === `result`);\n }\n\n return sanitized;\n })\n .filter((m): m is UIMessageV4 => Boolean(m));\n return msgs;\n}\n\n/**\n * Sanitizes AIV5 UI messages by filtering out streaming states, data-* parts, empty text parts, and optionally incomplete tool calls.\n * Handles legacy data by filtering empty text parts that may exist in pre-existing DB records.\n */\nexport function sanitizeV5UIMessages(\n messages: AIV5Type.UIMessage[],\n filterIncompleteToolCalls = false,\n): AIV5Type.UIMessage[] {\n // Precompute the index of the last user message. A deferred provider-executed\n // tool call (e.g. Anthropic non-deterministically defers web_search across\n // steps N→N+1 within the same run) may legitimately carry `input-available`\n // state ONLY on the most recent surviving assistant message, AND only if no\n // user turn has followed it. On any earlier assistant turn (or after a later\n // user message) an unresolved provider-executed call is an orphan — provider\n // dropped the result chunk (#15668), run aborted mid-stream (#14148), or a\n // stale call from an earlier step (#14192) — and must be dropped to keep the\n // tool-call/tool-result invariant.\n let lastUserIdx = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i]!.role === 'user') {\n lastUserIdx = i;\n break;\n }\n }\n\n const getSafeParts = (m: AIV5Type.UIMessage, assistantTurnStillOpen: boolean) =>\n m.parts.filter(p => {\n // Filter out data-* parts (custom streaming data from writer.custom())\n // These are Mastra extensions not supported by LLM providers.\n // If not filtered, convertToModelMessages produces empty content arrays\n // which causes some models to fail with \"must include at least one parts field\"\n if (typeof p.type === 'string' && p.type.startsWith('data-')) {\n return false;\n }\n\n // Filter out empty text parts to handle legacy data from before this filtering was implemented.\n // For assistant messages, preserve empty text parts if they are the only parts (placeholder messages).\n // For user messages, always filter them out — Anthropic rejects empty user text content blocks.\n if (p.type === 'text' && (!('text' in p) || p.text === '' || p.text?.trim() === '')) {\n // Always filter empty text parts from user messages\n if (m.role === 'user') return false;\n\n // For non-user messages, only filter if there are other non-empty parts\n const hasNonEmptyParts = m.parts.some(\n part => !(part.type === 'text' && (!('text' in part) || part.text === '' || part.text?.trim() === '')),\n );\n if (hasNonEmptyParts) return false;\n }\n\n if (!AIV5.isToolUIPart(p)) return true;\n\n // When sending messages TO the LLM: keep completed tool calls and provider-executed tools.\n // Filter out incomplete client-side tool calls (input-available without providerExecuted)\n // and input-streaming states.\n if (filterIncompleteToolCalls) {\n // Completed tools (client or provider) — keep them\n if (p.state === 'output-available' || p.state === 'output-error') return true;\n // Provider-executed tools may be deferred by the provider (e.g. Anthropic non-deterministically\n // defers web_search when mixed with client tool calls). Keep these so the provider API sees\n // the server_tool_use block on the next request — but ONLY on the most recent surviving\n // assistant message. On any earlier assistant turn an unresolved provider-executed call is\n // an orphan (provider dropped the result chunk, or the run aborted mid-stream) and must be\n // dropped to keep the tool-call/tool-result invariant required by provider APIs. See #15668, #14148.\n if (p.state === 'input-available' && p.providerExecuted && assistantTurnStillOpen) return true;\n return false;\n }\n\n // When processing response messages FROM the LLM: keep input-available states\n // (tool calls waiting for client-side execution) but filter out input-streaming\n return p.state !== 'input-streaming';\n });\n\n let lastSurvivingAssistantIdx = -1;\n if (lastUserIdx !== messages.length - 1) {\n for (let i = messages.length - 1; i > lastUserIdx; i--) {\n const message = messages[i]!;\n if (message.role !== 'assistant' || message.parts.length === 0) continue;\n if (getSafeParts(message, true).length > 0) {\n lastSurvivingAssistantIdx = i;\n break;\n }\n }\n }\n\n const msgs = messages\n .map((m, idx) => {\n if (m.parts.length === 0) return false;\n\n // Deferred-provider-tool behavior is ONLY valid on the most recent surviving\n // assistant message AND only when no user turn has followed it.\n const assistantTurnStillOpen = m.role === 'assistant' && idx === lastSurvivingAssistantIdx;\n\n // Filter out streaming states and optionally input-available (which aren't supported by convertToModelMessages)\n const safeParts = getSafeParts(m, assistantTurnStillOpen);\n\n if (!safeParts.length) return false;\n\n // Merge text parts with duplicate OpenAI-compatible itemIds to prevent \"Duplicate item found\" errors.\n // This can happen when streaming flushes text multiple times for the same response\n // (e.g., when source citations are interleaved with text-deltas).\n const mergedParts = mergeTextPartsWithDuplicateItemIds(safeParts);\n\n const sanitized = {\n ...m,\n parts: mergedParts.map(part => {\n if (AIV5.isToolUIPart(part) && part.state === 'output-available') {\n return {\n ...part,\n output: (() => {\n const o = part.output;\n if (o == null || typeof o !== 'object') return o;\n const obj = o as Record;\n // Preserve { type: 'content', value: [...] } — this is the AI SDK's\n // native multimodal tool result shape. Unwrapping it here causes\n // convertToModelMessages to receive a raw array which gets stringified.\n // See: https://github.com/mastra-ai/mastra/issues/17876\n if (obj.type === 'content' && Array.isArray(obj.value)) return o;\n // For other wrapped shapes (legacy), unwrap as before\n if ('value' in obj) return obj.value;\n return o;\n })(),\n };\n }\n return part;\n }),\n };\n\n return sanitized;\n })\n .filter((m): m is AIV5Type.UIMessage => Boolean(m));\n return msgs;\n}\n\n/**\n * Adds step-start parts between tool parts and non-tool parts for proper AIV5 message conversion.\n * This ensures AIV5.convertToModelMessages produces the correct message order.\n */\nexport function addStartStepPartsForAIV5(messages: AIV5Type.UIMessage[]): AIV5Type.UIMessage[] {\n for (const message of messages) {\n if (message.role !== `assistant`) continue;\n for (const [index, part] of message.parts.entries()) {\n if (!AIV5.isToolUIPart(part)) continue;\n const nextPart = message.parts.at(index + 1);\n // If we don't insert step-start between tools and other parts, AIV5.convertToModelMessages will incorrectly add extra tool parts in the wrong order\n // ex: ui message with parts: [tool-result, text] becomes [assistant-message-with-both-parts, tool-result-message], when it should become [tool-call-message, tool-result-message, text-message]\n // However, we should NOT add step-start between consecutive tool parts (parallel tool calls)\n if (nextPart && nextPart.type !== `step-start` && !AIV5.isToolUIPart(nextPart)) {\n message.parts.splice(index + 1, 0, { type: 'step-start' });\n }\n\n // Split client tools from completed provider-executed tools.\n // Anthropic requires tool_result to immediately follow tool_use. When a client tool_use and\n // a server_tool_use (with inline result) are in the same block, convertToModelMessages produces:\n // assistant: [tool_use(client), server_tool_use(provider), tool_result(provider)]\n // user: [tool_result(client)]\n // Anthropic rejects this because tool_result(client) doesn't immediately follow tool_use(client).\n // Splitting them into separate blocks fixes the ordering.\n if (\n nextPart &&\n AIV5.isToolUIPart(nextPart) &&\n !part.providerExecuted &&\n nextPart.providerExecuted &&\n (nextPart.state === 'output-available' || nextPart.state === 'output-error')\n ) {\n message.parts.splice(index + 1, 0, { type: 'step-start' });\n }\n }\n }\n return messages;\n}\n\n/**\n * Converts AIV4 UI messages to AIV4 Core messages.\n */\nexport function aiV4UIMessagesToAIV4CoreMessages(messages: UIMessageV4[]): CoreMessageV4[] {\n return convertToCoreMessagesV4(sanitizeAIV4UIMessages(messages));\n}\n\n/**\n * Converts MCP-style tool results (`{ content: [...] }`) to model-native\n * multimodal tool result output without persisting a duplicate modelOutput copy.\n */\nfunction convertMcpContentToolResultOutput(output: unknown): unknown {\n if (!output || typeof output !== 'object') return undefined;\n\n const content = (output as Record).content;\n if (!Array.isArray(content)) return undefined;\n\n const hasValidMultimodal = content.some(part => {\n if (!part || typeof part !== 'object') return false;\n const typedPart = part as Record;\n return (typedPart.type === 'image' || typedPart.type === 'audio') && typeof typedPart.data === 'string';\n });\n if (!hasValidMultimodal) return undefined;\n\n const value = content\n .map(part => {\n if (!part || typeof part !== 'object') return null;\n const typedPart = part as Record;\n switch (typedPart.type) {\n case 'text':\n return { type: 'text', text: String(typedPart.text ?? '') };\n case 'image':\n return typeof typedPart.data === 'string'\n ? { type: 'image-data', data: typedPart.data, mediaType: String(typedPart.mimeType ?? 'image/png') }\n : { type: 'text', text: JSON.stringify(typedPart) };\n case 'audio':\n return typeof typedPart.data === 'string'\n ? { type: 'file-data', data: typedPart.data, mediaType: String(typedPart.mimeType ?? 'audio/wav') }\n : { type: 'text', text: JSON.stringify(typedPart) };\n default:\n return { type: 'text', text: JSON.stringify(typedPart) };\n }\n })\n .filter(Boolean);\n\n return value.length > 0 ? { type: 'content', value } : undefined;\n}\n\nfunction collectRawToolResultOutputs(dbMessages: MastraDBMessage[]): Map {\n const outputs = new Map();\n for (const message of dbMessages) {\n if (message.content?.format !== 2 || !message.content.parts) continue;\n\n for (const part of message.content.parts) {\n if (part.type !== 'tool-invocation' || part.toolInvocation?.state !== 'result') continue;\n outputs.set(part.toolInvocation.toolCallId, part.toolInvocation.result);\n }\n }\n return outputs;\n}\n\nfunction isDefaultToolResultOutput(output: unknown, rawOutput: unknown): boolean {\n if (!output || typeof output !== 'object') return false;\n const typedOutput = output as Record;\n if (typedOutput.type !== 'json') return false;\n return JSON.stringify(typedOutput.value) === JSON.stringify(rawOutput);\n}\n\nfunction applyMcpContentToolResultOutputs(\n modelMessages: AIV5Type.ModelMessage[],\n dbMessages: MastraDBMessage[],\n): AIV5Type.ModelMessage[] {\n const rawOutputs = collectRawToolResultOutputs(dbMessages);\n if (rawOutputs.size === 0) return modelMessages;\n\n return modelMessages.map(message => {\n if (message.role !== 'tool' || !Array.isArray(message.content)) return message;\n\n let modified = false;\n const content = message.content.map(part => {\n if (part.type !== 'tool-result' || !rawOutputs.has(part.toolCallId)) return part;\n const rawOutput = rawOutputs.get(part.toolCallId);\n if (!isDefaultToolResultOutput(part.output, rawOutput)) return part;\n const converted = convertMcpContentToolResultOutput(rawOutput);\n if (!converted) return part;\n modified = true;\n return { ...part, output: converted } as typeof part;\n });\n\n return modified ? ({ ...message, content } as AIV5Type.ModelMessage) : message;\n });\n}\n\n/**\n * Restores `providerOptions` on assistant file parts after `convertToModelMessages`.\n *\n * The vendored AI SDK v5 `convertToModelMessages` drops `providerMetadata` from\n * assistant file parts (fixed in v6 but not backported). This causes providers\n * like Google Gemini to reject round-tripped responses that require metadata\n * (e.g. `thoughtSignature` on generated images).\n *\n * We collect all `providerMetadata` values from assistant `file` UI parts in\n * order, then walk the model messages and assign them to assistant `file` parts\n * in the same order. The ordering is guaranteed to be preserved.\n */\nfunction restoreAssistantFileProviderMetadata(\n modelMessages: AIV5Type.ModelMessage[],\n uiMessages: AIV5Type.UIMessage[],\n): AIV5Type.ModelMessage[] {\n // Collect providerMetadata from ALL assistant file UI parts in order,\n // using undefined as a placeholder for parts without metadata so that\n // the indices stay aligned with the model-side file parts.\n const fileMetadata: (AIV5Type.ProviderMetadata | undefined)[] = [];\n for (const msg of uiMessages) {\n if (msg.role !== 'assistant') continue;\n for (const part of msg.parts) {\n if (part.type === 'file') {\n fileMetadata.push(part.providerMetadata ?? undefined);\n }\n }\n }\n\n if (fileMetadata.length === 0 || fileMetadata.every(m => m == null)) return modelMessages;\n\n // Walk model messages and restore providerOptions on assistant file parts\n let metadataIndex = 0;\n return modelMessages.map(msg => {\n if (msg.role !== 'assistant' || typeof msg.content === 'string') return msg;\n\n let modified = false;\n const content = msg.content.map(part => {\n if (part.type !== 'file' || metadataIndex >= fileMetadata.length) return part;\n const metadata = fileMetadata[metadataIndex++];\n if (part.providerOptions || !metadata) return part;\n modified = true;\n return { ...part, providerOptions: metadata };\n });\n\n return modified ? { ...msg, content } : msg;\n });\n}\n\n/**\n * Converts AIV5 UI messages to AIV5 Model messages.\n * Handles sanitization, step-start insertion, provider options restoration, and Anthropic compatibility.\n *\n * @param messages - AIV5 UI messages to convert\n * @param dbMessages - MastraDB messages used to look up tool call args for Anthropic compatibility\n * @param filterIncompleteToolCalls - Whether to filter out incomplete tool calls\n */\nexport function aiV5UIMessagesToAIV5ModelMessages(\n messages: AIV5Type.UIMessage[],\n dbMessages: MastraDBMessage[],\n filterIncompleteToolCalls = false,\n): AIV5Type.ModelMessage[] {\n const sanitized = sanitizeV5UIMessages(messages, filterIncompleteToolCalls);\n const preprocessed = addStartStepPartsForAIV5(sanitized);\n\n // Convert per UI message: an assistant turn with a tool call splits into\n // [assistant, tool] model messages, so a batch convert + index-based attach\n // would misplace message-level providerOptions onto the tool message.\n const converted: AIV5Type.ModelMessage[] = [];\n for (const uiMsg of preprocessed) {\n const produced = AIV5.convertToModelMessages([uiMsg]);\n if (produced.length === 0) continue;\n\n const providerMetadata =\n uiMsg.metadata && typeof uiMsg.metadata === 'object' && 'providerMetadata' in uiMsg.metadata\n ? (uiMsg.metadata as { providerMetadata?: AIV5Type.ProviderMetadata }).providerMetadata\n : undefined;\n\n if (providerMetadata) {\n let target = -1;\n for (let index = produced.length - 1; index >= 0; index--) {\n if (produced[index]?.role === uiMsg.role) {\n target = index;\n break;\n }\n }\n if (target !== -1) {\n produced[target] = { ...produced[target], providerOptions: providerMetadata } as AIV5Type.ModelMessage;\n }\n }\n\n converted.push(...produced);\n }\n\n const withFileMetadata = restoreAssistantFileProviderMetadata(converted, preprocessed);\n const withMcpContentOutputs = applyMcpContentToolResultOutputs(withFileMetadata, dbMessages);\n\n // Add input field to tool-result parts for Anthropic API compatibility (fixes issue #11376)\n const anthropicCompat = ensureAnthropicCompatibleMessages(withMcpContentOutputs, dbMessages);\n\n return filterIncompleteToolCalls ? sanitizeOrphanedToolPairs(anthropicCompat) : anthropicCompat;\n}\n\n/**\n * Converts AIV4 Core messages to AIV5 Model messages.\n */\nexport function aiV4CoreMessagesToAIV5ModelMessages(\n messages: CoreMessageV4[],\n source: MessageSource,\n adapterContext: AdapterContext,\n dbMessages: MastraDBMessage[],\n): AIV5Type.ModelMessage[] {\n return aiV5UIMessagesToAIV5ModelMessages(\n messages.map(m => AIV4Adapter.fromCoreMessage(m, adapterContext, source)).map(m => AIV5Adapter.toUIMessage(m)),\n dbMessages,\n );\n}\n\n/**\n * Converts various message formats to AIV4 CoreMessage format for system messages.\n * Supports string, MastraDBMessage, or AI SDK message types.\n */\nexport function systemMessageToAIV4Core(\n message: CoreMessageV4 | AIV5Type.ModelMessage | AIV6Type.ModelMessage | MastraDBMessage | string,\n): CoreMessageV4 {\n if (typeof message === `string`) {\n return { role: 'system', content: message };\n }\n\n if (TypeDetector.isAIV6CoreMessage(message)) {\n const dbMsg = AIV6Adapter.fromModelMessage(message as AIV6Type.ModelMessage, 'system');\n return AIV4Adapter.systemToV4Core(dbMsg);\n }\n\n if (TypeDetector.isAIV5CoreMessage(message)) {\n const dbMsg = AIV5Adapter.fromModelMessage(message as AIV5Type.ModelMessage, 'system');\n return AIV4Adapter.systemToV4Core(dbMsg);\n }\n\n if (TypeDetector.isMastraDBMessage(message)) {\n return AIV4Adapter.systemToV4Core(message);\n }\n\n return message;\n}\n","import { convertBase64ToUint8Array, convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\n\n/**\n * A generated file.\n */\nexport interface GeneratedFile {\n /**\n File as a base64 encoded string.\n */\n readonly base64: string;\n\n /**\n File as a Uint8Array.\n */\n readonly uint8Array: Uint8Array;\n\n /**\n The IANA media type of the file.\n \n @see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n readonly mediaType: string;\n}\n\nexport class DefaultGeneratedFile implements GeneratedFile {\n private base64Data: string | undefined;\n private uint8ArrayData: Uint8Array | undefined;\n\n readonly mediaType: string;\n\n constructor({ data, mediaType }: { data: string | Uint8Array; mediaType: string }) {\n const isUint8Array = data instanceof Uint8Array;\n this.base64Data = isUint8Array ? undefined : data;\n this.uint8ArrayData = isUint8Array ? data : undefined;\n this.mediaType = mediaType;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get base64() {\n if (this.base64Data == null) {\n this.base64Data = convertUint8ArrayToBase64(this.uint8ArrayData!);\n }\n return this.base64Data;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get uint8Array() {\n if (this.uint8ArrayData == null) {\n this.uint8ArrayData = convertBase64ToUint8Array(this.base64Data!);\n }\n return this.uint8ArrayData;\n }\n}\n\nexport class DefaultGeneratedFileWithType extends DefaultGeneratedFile {\n readonly type = 'file';\n\n constructor(options: { data: string | Uint8Array; mediaType: string }) {\n super(options);\n }\n}\n","import * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { DefaultGeneratedFileWithType } from '../../../stream/aisdk/v5/file';\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { parseDataUri } from '../prompt/image-utils';\nimport type { MastraDBMessage } from '../state/types';\nimport type { AIV5Type } from '../types';\nimport { findToolCallArgs } from '../utils/provider-compat';\nimport { sanitizeV5UIMessages } from './output-converter';\n\n/**\n * StepContentExtractor - Handles extraction of step content from response messages\n *\n * This class encapsulates the complex logic for:\n * - Finding step boundaries by looking for step-start markers\n * - Handling special cases like -1 (last step) and tool-only steps\n * - Converting UI messages to model messages and extracting content\n */\nexport class StepContentExtractor {\n /**\n * Extract content for a specific step number from UI messages\n *\n * @param uiMessages - Array of AI SDK V5 UI messages\n * @param stepNumber - Step number to extract (1-indexed, or -1 for last step)\n * @param stepContentFn - Function to convert model messages to step content\n * @returns Step content array\n */\n static extractStepContent(\n uiMessages: AIV5Type.UIMessage[],\n stepNumber: number,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult['content'],\n ): AIV5Type.StepResult['content'] {\n const uiMessagesParts = uiMessages.flatMap(item => item.parts);\n\n // Find step boundaries by looking for step-start markers\n const stepBoundaries: number[] = [];\n uiMessagesParts.forEach((part, index) => {\n if (part.type === 'step-start') {\n stepBoundaries.push(index);\n }\n });\n\n // Handle -1 to get the last step (the current/most recent step)\n if (stepNumber === -1) {\n return StepContentExtractor.extractLastStep(uiMessagesParts, stepBoundaries, stepContentFn);\n }\n\n // Step 1 is everything before the first step-start\n if (stepNumber === 1) {\n return StepContentExtractor.extractFirstStep(uiMessagesParts, stepBoundaries, stepContentFn);\n }\n\n // For steps 2+, content is between (stepNumber-1)th and stepNumber-th step-start markers\n return StepContentExtractor.extractMiddleStep(uiMessagesParts, stepBoundaries, stepNumber, stepContentFn);\n }\n\n /**\n * Extract the last step content (stepNumber === -1)\n */\n private static extractLastStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult['content'],\n ): AIV5Type.StepResult['content'] {\n // For tool-only steps without step-start markers, we need different logic\n // Each tool part represents a complete step (tool call + result)\n const toolParts = uiMessagesParts.filter(p => p.type?.startsWith('tool-'));\n const hasStepStart = stepBoundaries.length > 0;\n\n if (!hasStepStart && toolParts.length > 0) {\n // No step-start markers but we have tool parts\n // Each tool part is a separate step, so return only the last tool\n const lastToolPart = toolParts[toolParts.length - 1];\n if (!lastToolPart) {\n return [];\n }\n const lastToolIndex = uiMessagesParts.indexOf(lastToolPart);\n const previousToolPart = toolParts[toolParts.length - 2];\n const previousToolIndex = previousToolPart ? uiMessagesParts.indexOf(previousToolPart) : -1;\n\n const startIndex = previousToolIndex + 1;\n const stepParts = uiMessagesParts.slice(startIndex, lastToolIndex + 1);\n\n return StepContentExtractor.convertPartsToContent(stepParts, 'last-step', stepContentFn);\n }\n\n // Count total steps (1 + number of step-start markers)\n const totalSteps = stepBoundaries.length + 1;\n\n // Get the content for the last step using the regular step logic\n if (totalSteps === 1 && !hasStepStart) {\n // Only one step, return all content\n return StepContentExtractor.convertPartsToContent(uiMessagesParts, 'last-step', stepContentFn);\n }\n\n // Multiple steps - get content after the last step-start marker\n const lastStepStart = stepBoundaries[stepBoundaries.length - 1];\n if (lastStepStart === undefined) {\n return [];\n }\n const stepParts = uiMessagesParts.slice(lastStepStart + 1);\n\n if (stepParts.length === 0) {\n return [];\n }\n\n return StepContentExtractor.convertPartsToContent(stepParts, 'last-step', stepContentFn);\n }\n\n /**\n * Extract the first step content (stepNumber === 1)\n */\n private static extractFirstStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult['content'],\n ): AIV5Type.StepResult['content'] {\n const firstStepStart = stepBoundaries[0] ?? uiMessagesParts.length;\n if (firstStepStart === 0) {\n // No content before first step-start\n return [];\n }\n\n const stepParts = uiMessagesParts.slice(0, firstStepStart);\n return StepContentExtractor.convertPartsToContent(stepParts, 'step-1', stepContentFn);\n }\n\n /**\n * Extract content for steps 2+ (between step-start markers)\n */\n private static extractMiddleStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepNumber: number,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult['content'],\n ): AIV5Type.StepResult['content'] {\n const stepIndex = stepNumber - 2; // -2 because step 2 is at index 0 in boundaries\n if (stepIndex < 0 || stepIndex >= stepBoundaries.length) {\n return [];\n }\n\n const startIndex = (stepBoundaries[stepIndex] ?? 0) + 1; // Start after the step-start marker\n const endIndex = stepBoundaries[stepIndex + 1] ?? uiMessagesParts.length;\n\n if (startIndex >= endIndex) {\n return [];\n }\n\n const stepParts = uiMessagesParts.slice(startIndex, endIndex);\n return StepContentExtractor.convertPartsToContent(stepParts, `step-${stepNumber}`, stepContentFn);\n }\n\n /**\n * Convert UI message parts to step content\n */\n private static convertPartsToContent(\n parts: AIV5Type.UIMessage['parts'],\n stepId: string,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult['content'],\n ): AIV5Type.StepResult['content'] {\n const stepUiMessages: AIV5Type.UIMessage[] = [\n {\n id: stepId,\n role: 'assistant',\n parts,\n },\n ];\n\n const modelMessages = AIV5.convertToModelMessages(sanitizeV5UIMessages(stepUiMessages));\n return modelMessages.flatMap(stepContentFn);\n }\n\n /**\n * Convert a single model message content to step result content\n *\n * This handles:\n * - Tool results: adding input field from DB messages\n * - Files: converting to GeneratedFile format\n * - Images: converting to file format with proper media type\n * - Other content: passed through as-is\n *\n * @param message - Model message to convert (or undefined to use latest)\n * @param dbMessages - Database messages for looking up tool call args\n * @param getLatestMessage - Function to get the latest model message if not provided\n */\n static convertToStepContent(\n message: AIV5Type.ModelMessage | undefined,\n dbMessages: MastraDBMessage[],\n getLatestMessage: () => AIV5Type.ModelMessage | undefined,\n ): AIV5Type.StepResult['content'] {\n const latest = message ? message : getLatestMessage();\n if (!latest) return [];\n\n if (typeof latest.content === 'string') {\n return [{ type: 'text', text: latest.content }];\n }\n\n return latest.content.map(c => {\n if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n input: findToolCallArgs(dbMessages, c.toolCallId),\n output: c.output,\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n } satisfies AIV5Type.StaticToolResult;\n }\n\n if (c.type === 'file') {\n return {\n type: 'file',\n file: new DefaultGeneratedFileWithType({\n data:\n typeof c.data === 'string'\n ? parseDataUri(c.data).base64Content // Strip data URI prefix if present\n : c.data instanceof URL\n ? c.data.toString()\n : convertDataContentToBase64String(c.data),\n mediaType: c.mediaType,\n }),\n } satisfies Extract['content'][number], { type: 'file' }>;\n }\n\n if (c.type === 'image') {\n return {\n type: 'file',\n file: new DefaultGeneratedFileWithType({\n data:\n typeof c.image === 'string'\n ? parseDataUri(c.image).base64Content // Strip data URI prefix if present\n : c.image instanceof URL\n ? c.image.toString()\n : convertDataContentToBase64String(c.image),\n mediaType: c.mediaType || 'unknown',\n }),\n };\n }\n\n return { ...c };\n });\n }\n}\n","import { CacheKeyGenerator } from '../cache/CacheKeyGenerator';\nimport type { MastraDBMessage, MastraMessageContentV2 } from '../state/types';\nimport { stampPart } from '../utils/stamp-part';\n\n/**\n * MessageMerger - Handles complex logic for merging assistant messages\n *\n * When streaming responses from LLMs, we often receive multiple messages that need to be\n * merged together:\n * - Tool calls that need to be updated with their results\n * - Text parts that need to be appended\n * - Step-start markers that need to be inserted\n *\n * This class encapsulates all the complex merging logic that was previously spread\n * throughout the MessageList.addOne method.\n */\nexport class MessageMerger {\n /**\n * Check if a message is sealed (should not be merged into).\n * Messages are sealed after observation to preserve observation markers.\n */\n static isSealed(message: MastraDBMessage): boolean {\n const metadata = message.content?.metadata as { mastra?: { sealed?: boolean } } | undefined;\n return metadata?.mastra?.sealed === true;\n }\n\n /**\n * Check if we should merge an incoming message with the latest message\n *\n * @param latestMessage - The most recent message in the list\n * @param incomingMessage - The message being added\n * @param messageSource - The source of the incoming message ('memory', 'input', 'response', 'context')\n * @param isLatestFromMemory - Whether the latest message is from memory\n * @param agentNetworkAppend - Whether agent network append mode is enabled\n */\n\n static shouldMerge(\n latestMessage: MastraDBMessage | undefined,\n incomingMessage: MastraDBMessage,\n messageSource: string,\n isLatestFromMemory: boolean,\n agentNetworkAppend: boolean = false,\n ): boolean {\n if (!latestMessage) return false;\n\n // Don't merge into sealed messages (e.g., messages that have been observed)\n if (MessageMerger.isSealed(latestMessage)) return false;\n\n if (\n (latestMessage.content?.metadata as { mastra?: { responseBoundary?: boolean } } | undefined)?.mastra\n ?.responseBoundary\n ) {\n return false;\n }\n\n // Don't merge completion result message (network uses completionResult, supervisor uses isTaskCompleteResult)\n if (\n incomingMessage.content.metadata?.completionResult ||\n latestMessage.content.metadata?.completionResult ||\n incomingMessage.content.metadata?.isTaskCompleteResult ||\n latestMessage.content.metadata?.isTaskCompleteResult\n ) {\n return false;\n }\n\n const latestParts = latestMessage.content?.parts ?? [];\n const latestOnlyHasDataParts = latestParts.length > 0 && latestParts.every(part => part.type.startsWith('data-'));\n if (latestOnlyHasDataParts && latestMessage.id !== incomingMessage.id) {\n return false;\n }\n\n // Basic merge conditions: both messages must be assistant messages from the same thread\n const shouldAppendToLastAssistantMessage =\n latestMessage.role === 'assistant' &&\n incomingMessage.role === 'assistant' &&\n latestMessage.threadId === incomingMessage.threadId &&\n // If the message is from memory, don't append to the last assistant message\n messageSource !== 'memory';\n\n // Agent network append flag handling\n // When enabled, only merge if the latest message is NOT from memory\n const appendNetworkMessage = agentNetworkAppend ? !isLatestFromMemory : true;\n\n return shouldAppendToLastAssistantMessage && appendNetworkMessage;\n }\n\n /**\n * Merge an incoming assistant message into the latest assistant message.\n *\n * This preserves the existing message-level createdAt. OM uses that timestamp\n * as its observation boundary, so moving it forward can make an already\n * observed message look unobserved and eligible for reprocessing.\n *\n * This handles:\n * - Updating tool invocations with their results\n * - Adding new parts in the correct order using anchor maps\n * - Inserting step-start markers where needed\n * - Updating content strings\n */\n static merge(latestMessage: MastraDBMessage, incomingMessage: MastraDBMessage): void {\n if (incomingMessage.content.metadata) {\n latestMessage.content.metadata = {\n ...(latestMessage.content.metadata ?? {}),\n ...incomingMessage.content.metadata,\n };\n }\n\n // Used for mapping indexes for incomingMessage parts to corresponding indexes in latestMessage\n const toolResultAnchorMap = new Map();\n const partsToAdd = new Map();\n\n for (const [index, part] of incomingMessage.content.parts.entries()) {\n // If the incoming part is a tool-invocation result, find the corresponding call in the latest message\n if (part.type === 'tool-invocation') {\n if (!part.toolInvocation) continue;\n const existingCallPart = [...latestMessage.content.parts]\n .reverse()\n .find(p => p.type === 'tool-invocation' && p.toolInvocation?.toolCallId === part.toolInvocation.toolCallId);\n\n const existingCallToolInvocation = !!existingCallPart && existingCallPart.type === 'tool-invocation';\n\n if (existingCallToolInvocation) {\n if (part.toolInvocation.state === 'result') {\n // Update the existing tool-call part with the result\n existingCallPart.toolInvocation = {\n ...existingCallPart.toolInvocation,\n step: part.toolInvocation.step,\n state: 'result',\n result: part.toolInvocation.result,\n args: {\n ...existingCallPart.toolInvocation.args,\n ...part.toolInvocation.args,\n },\n };\n // Preserve providerMetadata from the result part (e.g. toModelOutput stored at mastra.modelOutput)\n if (part.providerMetadata) {\n existingCallPart.providerMetadata = {\n ...existingCallPart.providerMetadata,\n ...part.providerMetadata,\n };\n }\n if (!latestMessage.content.toolInvocations) {\n latestMessage.content.toolInvocations = [];\n }\n const toolInvocationIndex = latestMessage.content.toolInvocations.findIndex(\n t => t.toolCallId === existingCallPart.toolInvocation.toolCallId,\n );\n if (toolInvocationIndex === -1) {\n latestMessage.content.toolInvocations.push(\n existingCallPart.toolInvocation as NonNullable[number],\n );\n } else {\n latestMessage.content.toolInvocations[toolInvocationIndex] =\n existingCallPart.toolInvocation as NonNullable[number];\n }\n } else if (\n part.toolInvocation.state === 'approval-requested' ||\n part.toolInvocation.state === 'approval-responded' ||\n part.toolInvocation.state === 'output-denied' ||\n part.toolInvocation.state === 'output-error'\n ) {\n existingCallPart.toolInvocation = {\n ...existingCallPart.toolInvocation,\n state: part.toolInvocation.state,\n approval: part.toolInvocation.approval,\n errorText: part.toolInvocation.errorText,\n rawInput: part.toolInvocation.rawInput,\n args: {\n ...existingCallPart.toolInvocation.args,\n ...part.toolInvocation.args,\n },\n };\n\n if (part.providerMetadata) {\n existingCallPart.providerMetadata = {\n ...existingCallPart.providerMetadata,\n ...part.providerMetadata,\n };\n }\n\n if ('providerExecuted' in part && part.providerExecuted !== undefined) {\n existingCallPart.providerExecuted = part.providerExecuted;\n }\n\n if ('title' in part && part.title !== undefined) {\n existingCallPart.title = part.title;\n }\n\n if ('preliminary' in part && part.preliminary !== undefined) {\n existingCallPart.preliminary = part.preliminary;\n }\n }\n // Map the index of the tool call in incomingMessage to the index of the tool call in latestMessage\n const existingIndex = latestMessage.content.parts.findIndex(p => p === existingCallPart);\n toolResultAnchorMap.set(index, existingIndex);\n // Otherwise we do nothing, as we're not updating the tool call\n } else {\n partsToAdd.set(index, part);\n }\n } else {\n partsToAdd.set(index, part);\n }\n }\n\n MessageMerger.addPartsToMessage({\n latestMessage,\n incomingMessage,\n anchorMap: toolResultAnchorMap,\n partsToAdd,\n });\n\n if (!latestMessage.content.content && incomingMessage.content.content) {\n latestMessage.content.content = incomingMessage.content.content;\n }\n if (\n latestMessage.content.content &&\n incomingMessage.content.content &&\n latestMessage.content.content !== incomingMessage.content.content\n ) {\n // Match what AI SDK does - content string is always the latest text part.\n latestMessage.content.content = incomingMessage.content.content;\n }\n }\n\n /**\n * Add parts from the incoming message to the latest message using anchor positions\n */\n private static addPartsToMessage({\n latestMessage,\n incomingMessage,\n anchorMap,\n partsToAdd,\n }: {\n latestMessage: MastraDBMessage;\n incomingMessage: MastraDBMessage;\n anchorMap: Map;\n partsToAdd: Map;\n }): void {\n // Walk through incomingMessage, inserting any part not present at the canonical position\n for (let i = 0; i < incomingMessage.content.parts.length; ++i) {\n const part = incomingMessage.content.parts[i];\n if (!part) continue;\n const key = CacheKeyGenerator.fromDBParts([part]);\n const partToAdd = partsToAdd.get(i);\n if (!key || !partToAdd) continue;\n if (anchorMap.size > 0) {\n if (anchorMap.has(i)) continue; // skip anchors\n // Find left anchor in incomingMessage\n const leftAnchorV2 = [...anchorMap.keys()].filter(idx => idx < i).pop() ?? -1;\n // Find right anchor in incomingMessage\n const rightAnchorV2 = [...anchorMap.keys()].find(idx => idx > i) ?? -1;\n\n // Map to latestMessage\n const leftAnchorLatest = leftAnchorV2 !== -1 ? anchorMap.get(leftAnchorV2)! : 0;\n\n // Compute offset from anchor\n const offset = leftAnchorV2 === -1 ? i : i - leftAnchorV2;\n\n // Insert at proportional position\n const insertAt = leftAnchorLatest + offset;\n\n const rightAnchorLatest =\n rightAnchorV2 !== -1 ? anchorMap.get(rightAnchorV2)! : latestMessage.content.parts.length;\n\n if (\n insertAt >= 0 &&\n insertAt <= rightAnchorLatest &&\n !latestMessage.content.parts\n .slice(insertAt, rightAnchorLatest)\n .some(p => CacheKeyGenerator.fromDBParts([p]) === CacheKeyGenerator.fromDBParts([part]))\n ) {\n MessageMerger.pushNewPart({\n latestMessage,\n newMessage: incomingMessage,\n part,\n insertAt,\n });\n for (const [v2Idx, latestIdx] of anchorMap.entries()) {\n if (latestIdx >= insertAt) {\n anchorMap.set(v2Idx, latestIdx + 1);\n }\n }\n }\n } else {\n MessageMerger.pushNewPart({\n latestMessage,\n newMessage: incomingMessage,\n part,\n });\n }\n }\n }\n\n /**\n * Push a new message part to the latest message\n */\n private static pushNewPart({\n latestMessage,\n newMessage,\n part,\n insertAt,\n }: {\n latestMessage: MastraDBMessage;\n newMessage: MastraDBMessage;\n part: MastraMessageContentV2['parts'][number];\n insertAt?: number;\n }): void {\n const partKey = CacheKeyGenerator.fromDBParts([part]);\n const latestPartCount = latestMessage.content.parts.filter(\n p => CacheKeyGenerator.fromDBParts([p]) === partKey,\n ).length;\n const newPartCount = newMessage.content.parts.filter(p => CacheKeyGenerator.fromDBParts([p]) === partKey).length;\n // If the number of parts in the latest message is less than the number of parts in the new message, insert the part\n if (latestPartCount < newPartCount) {\n // Check if we need to add a step-start before text parts when merging assistant messages\n // Only add after tool invocations, and only if the incoming message doesn't already have step-start\n const partIndex = newMessage.content.parts.indexOf(part);\n const hasStepStartBefore = partIndex > 0 && newMessage.content.parts[partIndex - 1]?.type === 'step-start';\n\n const needsStepStart =\n latestMessage.role === 'assistant' &&\n part.type === 'text' &&\n !hasStepStartBefore &&\n latestMessage.content.parts.length > 0 &&\n latestMessage.content.parts.at(-1)?.type === 'tool-invocation';\n\n const previousStepStart = [...latestMessage.content.parts].reverse().find(p => p.type === 'step-start');\n const stepStartPart = previousStepStart?.model\n ? stampPart({\n type: 'step-start' as const,\n model: previousStepStart.model,\n })\n : ({ type: 'step-start' as const } as MastraMessageContentV2['parts'][number]);\n\n if (typeof insertAt === 'number') {\n if (needsStepStart) {\n latestMessage.content.parts.splice(insertAt, 0, stepStartPart);\n latestMessage.content.parts.splice(insertAt + 1, 0, part);\n } else {\n latestMessage.content.parts.splice(insertAt, 0, part);\n }\n } else {\n if (needsStepStart) {\n latestMessage.content.parts.push(stepStartPart);\n }\n latestMessage.content.parts.push(part);\n }\n }\n }\n}\n","import type { LanguageModelV2DataContent } from '@ai-sdk/provider-v5';\nimport type { DataContent } from '@internal/ai-sdk-v5';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../../error';\n\nfunction splitDataUrl(dataUrl: string): {\n mediaType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mediaType: header?.split(';')[0]?.split(':')[1],\n base64Content,\n };\n } catch {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\n}\n\nexport function convertToDataContent(content: DataContent | URL): {\n data: LanguageModelV2DataContent;\n mediaType: string | undefined;\n} {\n // Buffer & Uint8Array:\n if (content instanceof Uint8Array) {\n return { data: content, mediaType: undefined };\n }\n\n // ArrayBuffer needs conversion to Uint8Array (lightweight):\n if (content instanceof ArrayBuffer) {\n return { data: new Uint8Array(content), mediaType: undefined };\n }\n\n // Attempt to create a URL from the data. If it fails, we can assume the data\n // is not a URL and likely some other sort of data.\n if (typeof content === 'string') {\n try {\n content = new URL(content);\n } catch {\n // ignored\n }\n }\n\n // Extract data from data URL:\n if (content instanceof URL && content.protocol === 'data:') {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(content.toString());\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new MastraError({\n id: 'INVALID_DATA_URL_FORMAT',\n text: `Invalid data URL format in content ${content.toString()}`,\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils-v5';\n\nexport const imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46],\n base64Prefix: 'R0lG',\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47],\n base64Prefix: 'iVBORw',\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8],\n base64Prefix: '/9j/',\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGRg',\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n base64Prefix: 'Qk',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n base64Prefix: 'SUkqAA',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n base64Prefix: 'TU0AKg',\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66],\n base64Prefix: 'AAAAIGZ0eXBhdmlm',\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63],\n base64Prefix: 'AAAAIGZ0eXBoZWlj',\n },\n] as const;\n\nexport const audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n base64Prefix: '//s=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n base64Prefix: '//o=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n base64Prefix: '//M=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n base64Prefix: '//I=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n base64Prefix: '/+M=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n base64Prefix: '/+I=',\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGR',\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n base64Prefix: 'T2dnUw',\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n base64Prefix: 'ZkxhQw',\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n base64Prefix: 'QBUA',\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n base64Prefix: 'ZnR5cA',\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n base64Prefix: 'GkXf',\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes = typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n // @ts-expect-error - bytes array access\n ((bytes[6] & 0x7f) << 21) |\n // @ts-expect-error - bytes array access\n ((bytes[7] & 0x7f) << 14) |\n // @ts-expect-error - bytes array access\n ((bytes[8] & 0x7f) << 7) |\n // @ts-expect-error - bytes array access\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\nexport function detectMediaType({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: typeof audioMediaTypeSignatures | typeof imageMediaTypeSignatures;\n}): (typeof signatures)[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n for (const signature of signatures) {\n if (\n typeof processedData === 'string'\n ? processedData.startsWith(signature.base64Prefix)\n : processedData.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every((byte, index) => processedData[index] === byte)\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n","import type { DataContent, ImagePart, FilePart } from '@ai-sdk/provider-utils-v5';\nimport type { LanguageModelV2FilePart, LanguageModelV2TextPart } from '@ai-sdk/provider-v5';\nimport { convertToDataContent, detectMediaType, imageMediaTypeSignatures } from '../../../stream/aisdk/v5/compat';\n\nexport function convertImageFilePart(\n part: ImagePart | FilePart,\n downloadedAssets?: Record,\n): LanguageModelV2TextPart | LanguageModelV2FilePart {\n let originalData: DataContent | URL;\n const type = part.type;\n switch (type) {\n case 'image':\n originalData = part.image;\n break;\n case 'file':\n originalData = part.data;\n\n break;\n default:\n throw new Error(`Unsupported part type: ${type}`);\n }\n\n const { data: convertedData, mediaType: convertedMediaType } = convertToDataContent(originalData);\n\n let mediaType: string | undefined = convertedMediaType ?? part.mediaType;\n let data: Uint8Array | string | URL = convertedData; // binary | base64 | url\n\n // If the content is a URL, we check if it was downloaded:\n if (data instanceof URL && downloadedAssets) {\n const downloadedFile = downloadedAssets[data.toString()];\n if (downloadedFile) {\n data = downloadedFile.data;\n mediaType ??= downloadedFile.mediaType;\n }\n }\n\n // Now that we have the normalized data either as a URL or a Uint8Array,\n // we can create the LanguageModelV2Part.\n switch (type) {\n case 'image': {\n // When possible, try to detect the media type automatically\n // to deal with incorrect media type inputs.\n // When detection fails, use provided media type.\n if (data instanceof Uint8Array || typeof data === 'string') {\n mediaType = detectMediaType({ data, signatures: imageMediaTypeSignatures }) ?? mediaType;\n }\n\n return {\n type: 'file',\n mediaType: mediaType ?? 'image/*', // any image\n filename: undefined,\n data,\n providerOptions: part.providerOptions,\n };\n }\n\n case 'file': {\n // We must have a mediaType for files, if not, throw an error.\n if (mediaType == null) {\n throw new Error(`Media type is missing for file part`);\n }\n\n return {\n type: 'file',\n mediaType,\n filename: part.filename,\n data,\n providerOptions: part.providerOptions,\n };\n }\n }\n}\n","import type { FilePart, ImagePart, TextPart, UIMessage } from '@internal/ai-sdk-v4';\nimport { categorizeFileData, createDataUri } from './image-utils';\n\ntype ContentPart = TextPart | ImagePart | FilePart;\nexport type Attachment = NonNullable[number];\n\n/**\n * Converts a list of attachments to a list of content parts\n * for consumption by `ai/core` functions.\n * Currently only supports images and text attachments.\n */\nexport function attachmentsToParts(attachments: Attachment[]): ContentPart[] {\n const parts: ContentPart[] = [];\n\n for (const attachment of attachments) {\n // Categorize the attachment URL to determine if it's a URL, data URI, or raw base64\n const categorized = categorizeFileData(attachment.url, attachment.contentType);\n\n // If it's raw data (base64), convert it to a data URI\n let urlString = attachment.url;\n if (categorized.type === 'raw') {\n urlString = createDataUri(attachment.url, attachment.contentType || 'application/octet-stream');\n }\n\n let url;\n try {\n url = new URL(urlString);\n } catch {\n throw new Error(`Invalid URL: ${attachment.url}`);\n }\n\n switch (url.protocol) {\n case 'http:':\n case 'https:':\n // Cloud storage protocols supported by AI providers (e.g., Vertex AI for gs://, Bedrock for s3://)\n case 'gs:':\n case 's3:': {\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({ type: 'image', image: url.toString(), mimeType: attachment.contentType });\n } else {\n if (!attachment.contentType) {\n throw new Error('If the attachment is not an image, it must specify a content type');\n }\n\n parts.push({\n type: 'file',\n data: url.toString(),\n mimeType: attachment.contentType,\n });\n }\n break;\n }\n\n case 'data:': {\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({\n type: 'image',\n image: urlString,\n mimeType: attachment.contentType,\n });\n } else if (attachment.contentType?.startsWith('text/')) {\n parts.push({\n type: 'file',\n data: urlString,\n mimeType: attachment.contentType,\n });\n } else {\n if (!attachment.contentType) {\n throw new Error('If the attachment is not an image or text, it must specify a content type');\n }\n\n parts.push({\n type: 'file',\n data: urlString,\n mimeType: attachment.contentType,\n });\n }\n\n break;\n }\n\n default: {\n throw new Error(`Unsupported URL protocol: ${url.protocol}`);\n }\n }\n }\n\n return parts;\n}\n","/**\n * This file is an adaptation of https://github.com/vercel/ai/blob/e14c066bf4d02c5ee2180c56a01fa0e5216bc582/packages/ai/core/prompt/convert-to-core-messages.ts\n * But has been modified to work with Mastra storage adapter messages (MastraMessageV1)\n */\nimport type { AssistantContent, ToolResultPart } from '@internal/ai-sdk-v4';\nimport type { MastraMessageV1 } from '../../../memory/types';\nimport type { MastraMessageContentV2, MastraDBMessage } from '../../message-list';\nimport { attachmentsToParts } from './attachments-to-parts';\n\nconst makePushOrCombine = (v1Messages: MastraMessageV1[]) => {\n // Track how many times each ID has been used to create unique IDs for split messages\n const idUsageCount = new Map();\n\n // Pattern to detect if an ID already has our split suffix\n const SPLIT_SUFFIX_PATTERN = /__split-\\d+$/;\n\n return (msg: MastraMessageV1) => {\n const previousMessage = v1Messages.at(-1);\n if (\n msg.role === previousMessage?.role &&\n Array.isArray(previousMessage.content) &&\n Array.isArray(msg.content) &&\n // we were creating new messages for tool calls before and not appending to the assistant message\n // so don't append here so everything works as before\n (msg.role !== `assistant` || (msg.role === `assistant` && msg.content.at(-1)?.type !== `tool-call`))\n ) {\n for (const part of msg.content) {\n // @ts-expect-error needs type gymnastics? msg.content and previousMessage.content are the same type here since both are arrays\n previousMessage.content.push(part);\n }\n } else {\n // When pushing a new message, check if we need to deduplicate the ID\n let baseId = msg.id;\n\n // Check if this ID already has a split suffix and extract the base ID\n const hasSplitSuffix = SPLIT_SUFFIX_PATTERN.test(baseId);\n if (hasSplitSuffix) {\n // This ID already has a split suffix, don't add another one\n v1Messages.push(msg);\n return;\n }\n\n const currentCount = idUsageCount.get(baseId) || 0;\n\n // If we've seen this ID before, append our unique split suffix\n if (currentCount > 0) {\n msg.id = `${baseId}__split-${currentCount}`;\n }\n\n // Increment the usage count for this base ID\n idUsageCount.set(baseId, currentCount + 1);\n\n v1Messages.push(msg);\n }\n };\n};\nexport function convertToV1Messages(messages: Array) {\n const v1Messages: MastraMessageV1[] = [];\n const pushOrCombine = makePushOrCombine(v1Messages);\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n const isLastMessage = i === messages.length - 1;\n if (!message?.content) continue;\n const { content, experimental_attachments: inputAttachments = [], parts: inputParts } = message.content;\n const { role } = message;\n\n const fields = {\n id: message.id,\n createdAt: message.createdAt,\n resourceId: message.resourceId!,\n threadId: message.threadId!,\n };\n\n const experimental_attachments = [...inputAttachments];\n const parts: typeof inputParts = [];\n for (const part of inputParts) {\n if (part.type === 'file') {\n experimental_attachments.push({\n url: part.data,\n contentType: part.mimeType,\n });\n } else {\n parts.push(part);\n }\n }\n\n switch (role) {\n case 'user': {\n if (parts == null) {\n const userContent = experimental_attachments\n ? [{ type: 'text', text: content || '' }, ...attachmentsToParts(experimental_attachments)]\n : { type: 'text', text: content || '' };\n pushOrCombine({\n role: 'user',\n ...fields,\n type: 'text',\n // @ts-expect-error - content type mismatch in conversion\n content: userContent,\n });\n } else {\n const textParts = message.content.parts\n .filter(part => part.type === 'text')\n .map(part => ({\n type: 'text' as const,\n text: part.text,\n }));\n\n const userContent = experimental_attachments\n ? [...textParts, ...attachmentsToParts(experimental_attachments)]\n : textParts;\n pushOrCombine({\n role: 'user',\n ...fields,\n type: 'text',\n content:\n Array.isArray(userContent) &&\n userContent.length === 1 &&\n userContent[0]?.type === `text` &&\n typeof content !== `undefined`\n ? content\n : userContent,\n });\n }\n break;\n }\n\n case 'assistant': {\n if (message.content.parts != null) {\n let currentStep = 0;\n let blockHasToolInvocations = false;\n let block: MastraMessageContentV2['parts'] = [];\n\n function processBlock() {\n const content: AssistantContent = [];\n\n for (const part of block) {\n switch (part.type) {\n case 'file':\n case 'text': {\n content.push(part);\n break;\n }\n case 'reasoning': {\n for (const detail of part.details) {\n switch (detail.type) {\n case 'text':\n content.push({\n type: 'reasoning' as const,\n text: detail.text,\n signature: detail.signature,\n });\n break;\n case 'redacted':\n content.push({\n type: 'redacted-reasoning' as const,\n data: detail.data,\n });\n break;\n }\n }\n break;\n }\n case 'tool-invocation':\n // Skip updateWorkingMemory tool calls as they should not be visible in history\n if (part.toolInvocation.toolName !== 'updateWorkingMemory') {\n content.push({\n type: 'tool-call' as const,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n });\n }\n break;\n }\n }\n\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: content.some(c => c.type === `tool-call`) ? 'tool-call' : 'text',\n content:\n typeof content !== `string` &&\n Array.isArray(content) &&\n content.length === 1 &&\n content[0]?.type === `text`\n ? content[0].text\n : content,\n });\n\n // check if there are tool invocations with results in the block\n const stepInvocations = block\n .filter(part => `type` in part && part.type === 'tool-invocation')\n .map(part => part.toolInvocation)\n .filter(ti => ti.toolName !== 'updateWorkingMemory');\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n\n // updates for next block\n block = [];\n blockHasToolInvocations = false;\n currentStep++;\n }\n\n for (const part of message.content.parts) {\n switch (part.type) {\n case 'text': {\n if (blockHasToolInvocations) {\n processBlock(); // text must come after tool invocations\n }\n block.push(part);\n break;\n }\n case 'file':\n case 'reasoning': {\n block.push(part);\n break;\n }\n case 'tool-invocation': {\n // If we have non-tool content (text/file/reasoning) in the block, process it first\n const hasNonToolContent = block.some(\n p => p.type === 'text' || p.type === 'file' || p.type === 'reasoning',\n );\n if (hasNonToolContent || (part.toolInvocation.step ?? 0) !== currentStep) {\n processBlock();\n }\n block.push(part);\n blockHasToolInvocations = true;\n break;\n }\n }\n }\n\n processBlock();\n\n // Check if there are toolInvocations that weren't processed from parts\n const toolInvocations = message.content.toolInvocations;\n if (toolInvocations && toolInvocations.length > 0) {\n // Find tool invocations that weren't already processed from parts\n const processedToolCallIds = new Set();\n for (const part of message.content.parts) {\n if (part.type === 'tool-invocation' && part.toolInvocation.toolCallId) {\n processedToolCallIds.add(part.toolInvocation.toolCallId);\n }\n }\n\n const unprocessedToolInvocations = toolInvocations.filter(\n ti => !processedToolCallIds.has(ti.toolCallId) && ti.toolName !== 'updateWorkingMemory',\n );\n\n if (unprocessedToolInvocations.length > 0) {\n // Group by step, handling undefined steps\n const invocationsByStep = new Map();\n\n for (const inv of unprocessedToolInvocations) {\n const step = inv.step ?? 0;\n if (!invocationsByStep.has(step)) {\n invocationsByStep.set(step, []);\n }\n invocationsByStep.get(step)!.push(inv);\n }\n\n // Process each step\n const sortedSteps = Array.from(invocationsByStep.keys()).sort((a, b) => a - b);\n\n for (const step of sortedSteps) {\n const stepInvocations = invocationsByStep.get(step)!;\n\n // Create tool-call message for all invocations (calls and results)\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: 'tool-call',\n content: [\n ...stepInvocations.map(({ toolCallId, toolName, args }) => ({\n type: 'tool-call' as const,\n toolCallId,\n toolName,\n args,\n })),\n ],\n });\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n }\n }\n }\n\n break;\n }\n\n const toolInvocations = message.content.toolInvocations;\n\n if (toolInvocations == null || toolInvocations.length === 0) {\n pushOrCombine({ role: 'assistant', ...fields, content: content || '', type: 'text' });\n break;\n }\n\n const maxStep = toolInvocations.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0);\n\n for (let i = 0; i <= maxStep; i++) {\n const stepInvocations = toolInvocations.filter(\n toolInvocation => (toolInvocation.step ?? 0) === i && toolInvocation.toolName !== 'updateWorkingMemory',\n );\n\n if (stepInvocations.length === 0) {\n continue;\n }\n\n // assistant message with tool calls\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: 'tool-call',\n content: [\n ...(isLastMessage && content && i === 0 ? [{ type: 'text' as const, text: content }] : []),\n ...stepInvocations.map(({ toolCallId, toolName, args }) => ({\n type: 'tool-call' as const,\n toolCallId,\n toolName,\n args,\n })),\n ],\n });\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n }\n\n if (content && !isLastMessage) {\n pushOrCombine({ role: 'assistant', ...fields, type: 'text', content: content || '' });\n }\n\n break;\n }\n }\n }\n\n return v1Messages;\n}\n","import { isUrlSupported } from '@ai-sdk/provider-utils-v5';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../error';\nimport { fetchWithRetry } from '../../../utils/fetchWithRetry';\nimport type { AIV5Type } from '../types';\n\n/**\n * Strip query string and fragment from a URL for inclusion in human-readable\n * error text. Signed-URL query params (e.g. AWS pre-signed `X-Amz-Signature`,\n * WhatsApp media tokens, GCS `X-Goog-Signature`) carry secrets that should not\n * land in logs — but the scheme, host, and path are still useful for diagnosis.\n *\n * The full, unredacted URL is preserved on `error.details.url` for callers that\n * need to react programmatically (e.g. matching a failing URL back to the\n * specific message part for recovery). Mirrors the project convention of\n * redacting at the human-facing log boundary while keeping structured fields\n * raw (see `SENSITIVE_KEYS` in `tools/validation.ts` and `redactHeaders` in\n * server config).\n */\nfunction redactUrlForLog(url: URL): string {\n return `${url.origin}${url.pathname}`;\n}\n\nexport const downloadFromUrl = async ({ url, downloadRetries }: { url: URL; downloadRetries: number }) => {\n const urlText = url.toString();\n const safeUrl = redactUrlForLog(url);\n\n try {\n const response = await fetchWithRetry(\n urlText,\n {\n method: 'GET',\n },\n downloadRetries,\n {\n shouldRetryResponse: response => response.status >= 500,\n },\n );\n\n if (!response.ok) {\n throw new MastraError({\n id: 'DOWNLOAD_ASSETS_FAILED',\n text: `Failed to download asset: ${safeUrl}`,\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: { url: urlText },\n });\n }\n return {\n data: new Uint8Array(await response.arrayBuffer()),\n mediaType: response.headers.get('content-type') ?? undefined,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'DOWNLOAD_ASSETS_FAILED',\n text: `Failed to download asset: ${safeUrl}`,\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: { url: urlText },\n },\n error,\n );\n }\n};\n\nexport async function downloadAssetsFromMessages({\n messages,\n downloadConcurrency = 10,\n downloadRetries = 3,\n supportedUrls,\n}: {\n messages: AIV5Type.ModelMessage[];\n downloadConcurrency?: number;\n downloadRetries?: number;\n supportedUrls?: Record;\n}) {\n const pMap = (await import('p-map')).default;\n\n const filesToDownload = messages\n .filter(message => message.role === 'user')\n .map(message => message.content)\n .filter(content => Array.isArray(content))\n .flat()\n .filter(part => part.type === 'image' || part.type === 'file')\n .map(part => {\n const mediaType = part.mediaType ?? (part.type === 'image' ? 'image/*' : undefined);\n\n let data = part.type === 'image' ? part.image : part.data;\n if (typeof data === 'string') {\n try {\n data = new URL(data);\n } catch {}\n }\n\n return { mediaType, data };\n })\n\n .filter((part): part is { mediaType: string | undefined; data: URL } => part.data instanceof URL)\n .map(part => {\n return {\n url: part.data,\n isUrlSupportedByModel:\n part.mediaType != null &&\n isUrlSupported({\n url: part.data.toString(),\n mediaType: part.mediaType,\n supportedUrls: supportedUrls ?? {},\n }),\n };\n });\n\n const downloadedFiles = await pMap(\n filesToDownload,\n async fileItem => {\n if (fileItem.isUrlSupportedByModel) {\n return null;\n }\n return {\n url: fileItem.url.toString(),\n ...(await downloadFromUrl({ url: fileItem.url, downloadRetries })),\n };\n },\n {\n concurrency: downloadConcurrency,\n },\n );\n\n const downloadFileList = downloadedFiles\n .filter(\n (\n downloadedFile,\n ): downloadedFile is {\n url: string;\n mediaType: string | undefined;\n data: Uint8Array;\n } => downloadedFile?.data != null,\n )\n .map(({ url, data, mediaType }) => [url, { data, mediaType }]);\n\n return Object.fromEntries(downloadFileList);\n}\n","import type { MastraDBMessage } from './types';\n\n/**\n * Serialized form of a MastraDBMessage where Date is converted to string\n */\nexport type SerializedMessage = Omit & {\n createdAt: string;\n};\n\n/**\n * Serialize a message by converting Date to string\n */\nexport function serializeMessage(message: MastraDBMessage): SerializedMessage {\n return {\n ...message,\n createdAt: message.createdAt.toISOString(),\n };\n}\n\n/**\n * Deserialize a message by converting string back to Date\n */\nexport function deserializeMessage(message: SerializedMessage): MastraDBMessage {\n return {\n ...message,\n createdAt: new Date(message.createdAt),\n } as MastraDBMessage;\n}\n\n/**\n * Serialize an array of messages\n */\nexport function serializeMessages(messages: MastraDBMessage[]): SerializedMessage[] {\n return messages.map(serializeMessage);\n}\n\n/**\n * Deserialize an array of messages\n */\nexport function deserializeMessages(messages: SerializedMessage[]): MastraDBMessage[] {\n return messages.map(deserializeMessage);\n}\n","import type { CoreSystemMessage } from '@internal/ai-sdk-v4';\n\nimport { serializeMessages, deserializeMessages } from './serialization';\nimport type { SerializedMessage } from './serialization';\nimport type { MastraDBMessage, MessageSource, MemoryInfo } from './types';\n\n// Re-export for backward compatibility\nexport type { MessageSource };\n\n/**\n * MessageStateManager - Manages the state of messages in a MessageList\n *\n * Handles:\n * - Tracking messages by their source (memory, input, response, context)\n * - Tracking which messages have been persisted\n * - Providing efficient lookups for message categorization\n *\n * This replaces the 8 Sets in the original MessageList with a more manageable interface.\n */\nexport class MessageStateManager {\n // Messages tracked by source\n private memoryMessages = new Set();\n private newUserMessages = new Set();\n private newResponseMessages = new Set();\n private userContextMessages = new Set();\n\n // Persisted message tracking\n private memoryMessagesPersisted = new Set();\n private newUserMessagesPersisted = new Set();\n private newResponseMessagesPersisted = new Set();\n private userContextMessagesPersisted = new Set();\n\n /**\n * Add a message to the appropriate source set and persisted set\n */\n addToSource(message: MastraDBMessage, source: MessageSource): void {\n switch (source) {\n case 'memory':\n this.memoryMessages.add(message);\n this.memoryMessagesPersisted.add(message);\n break;\n case 'response':\n // Promoting from memory (e.g. OM step prepare → merge step-2 text): keep a single\n // canonical source so clear.response.db() cannot drop merged content while the\n // message remains only in memoryMessages.\n if (this.memoryMessages.has(message)) {\n this.memoryMessages.delete(message);\n }\n this.newResponseMessages.add(message);\n this.newResponseMessagesPersisted.add(message);\n // Handle case where a client-side tool response was added as user input\n if (this.newUserMessages.has(message)) {\n this.newUserMessages.delete(message);\n }\n break;\n case 'input':\n case 'user': // deprecated alias for input\n this.newUserMessages.add(message);\n this.newUserMessagesPersisted.add(message);\n break;\n case 'context':\n this.userContextMessages.add(message);\n this.userContextMessagesPersisted.add(message);\n break;\n default:\n throw new Error(`Missing message source for message ${message}`);\n }\n }\n\n /**\n * Check if a message belongs to the memory source\n */\n isMemoryMessage(message: MastraDBMessage): boolean {\n return this.memoryMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the input source\n */\n isUserMessage(message: MastraDBMessage): boolean {\n return this.newUserMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the response source\n */\n isResponseMessage(message: MastraDBMessage): boolean {\n return this.newResponseMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the context source\n */\n isContextMessage(message: MastraDBMessage): boolean {\n return this.userContextMessages.has(message);\n }\n\n /**\n * Get all memory messages\n */\n getMemoryMessages(): Set {\n return this.memoryMessages;\n }\n\n /**\n * Get all user/input messages\n */\n getUserMessages(): Set {\n return this.newUserMessages;\n }\n\n /**\n * Get all response messages\n */\n getResponseMessages(): Set {\n return this.newResponseMessages;\n }\n\n /**\n * Get all context messages\n */\n getContextMessages(): Set {\n return this.userContextMessages;\n }\n\n /**\n * Get persisted memory messages\n */\n getMemoryMessagesPersisted(): Set {\n return this.memoryMessagesPersisted;\n }\n\n /**\n * Get persisted user/input messages\n */\n getUserMessagesPersisted(): Set {\n return this.newUserMessagesPersisted;\n }\n\n /**\n * Get persisted response messages\n */\n getResponseMessagesPersisted(): Set {\n return this.newResponseMessagesPersisted;\n }\n\n /**\n * Get persisted context messages\n */\n getContextMessagesPersisted(): Set {\n return this.userContextMessagesPersisted;\n }\n\n /**\n * Remove a message from all source sets\n */\n removeMessage(message: MastraDBMessage): void {\n this.memoryMessages.delete(message);\n this.newUserMessages.delete(message);\n this.newResponseMessages.delete(message);\n this.userContextMessages.delete(message);\n }\n\n /**\n * Clear all user messages\n */\n clearUserMessages(): void {\n this.newUserMessages.clear();\n }\n\n /**\n * Clear all response messages\n */\n clearResponseMessages(): void {\n this.newResponseMessages.clear();\n }\n\n /**\n * Clear all context messages\n */\n clearContextMessages(): void {\n this.userContextMessages.clear();\n }\n\n /**\n * Clear all messages from all sources (but not persisted tracking)\n */\n clearAll(): void {\n this.newUserMessages.clear();\n this.newResponseMessages.clear();\n this.userContextMessages.clear();\n }\n\n /**\n * Create a lookup function to determine message source\n */\n createSourceChecker(): {\n memory: Set;\n input: Set;\n output: Set;\n context: Set;\n getSource: (message: MastraDBMessage) => MessageSource | null;\n } {\n const sources = {\n memory: new Set(Array.from(this.memoryMessages.values()).map(m => m.id)),\n output: new Set(Array.from(this.newResponseMessages.values()).map(m => m.id)),\n input: new Set(Array.from(this.newUserMessages.values()).map(m => m.id)),\n context: new Set(Array.from(this.userContextMessages.values()).map(m => m.id)),\n };\n\n return {\n ...sources,\n getSource: (msg: MastraDBMessage): MessageSource | null => {\n if (sources.memory.has(msg.id)) return 'memory';\n if (sources.input.has(msg.id)) return 'input';\n if (sources.output.has(msg.id)) return 'response';\n if (sources.context.has(msg.id)) return 'context';\n return null;\n },\n };\n }\n\n /**\n * Check if a message is a new (unsaved) user or response message by ID\n */\n isNewMessage(messageOrId: MastraDBMessage | string): boolean {\n const id = typeof messageOrId === 'string' ? messageOrId : messageOrId.id;\n\n // Check by object reference first (fast path)\n if (typeof messageOrId !== 'string') {\n if (this.newUserMessages.has(messageOrId) || this.newResponseMessages.has(messageOrId)) {\n return true;\n }\n }\n\n // Check by ID (handles copies)\n return (\n Array.from(this.newUserMessages).some(m => m.id === id) ||\n Array.from(this.newResponseMessages).some(m => m.id === id)\n );\n }\n\n /**\n * Serialize source tracking state (message IDs only)\n */\n private serializeSourceTracking(): {\n memoryMessages: string[];\n newUserMessages: string[];\n newResponseMessages: string[];\n userContextMessages: string[];\n memoryMessagesPersisted: string[];\n newUserMessagesPersisted: string[];\n newResponseMessagesPersisted: string[];\n userContextMessagesPersisted: string[];\n } {\n const serializeSet = (set: Set) => Array.from(set).map(value => value.id);\n\n return {\n memoryMessages: serializeSet(this.memoryMessages),\n newUserMessages: serializeSet(this.newUserMessages),\n newResponseMessages: serializeSet(this.newResponseMessages),\n userContextMessages: serializeSet(this.userContextMessages),\n memoryMessagesPersisted: serializeSet(this.memoryMessagesPersisted),\n newUserMessagesPersisted: serializeSet(this.newUserMessagesPersisted),\n newResponseMessagesPersisted: serializeSet(this.newResponseMessagesPersisted),\n userContextMessagesPersisted: serializeSet(this.userContextMessagesPersisted),\n };\n }\n\n /**\n * Deserialize source tracking state from message IDs\n */\n private deserializeSourceTracking(\n state: ReturnType,\n messages: MastraDBMessage[],\n ): void {\n const deserializeSet = (ids: string[]) =>\n new Set(ids.map(id => messages.find(m => m.id === id)).filter(Boolean) as MastraDBMessage[]);\n\n this.memoryMessages = deserializeSet(state.memoryMessages);\n this.newUserMessages = deserializeSet(state.newUserMessages);\n this.newResponseMessages = deserializeSet(state.newResponseMessages);\n this.userContextMessages = deserializeSet(state.userContextMessages);\n this.memoryMessagesPersisted = deserializeSet(state.memoryMessagesPersisted);\n this.newUserMessagesPersisted = deserializeSet(state.newUserMessagesPersisted);\n this.newResponseMessagesPersisted = deserializeSet(state.newResponseMessagesPersisted);\n this.userContextMessagesPersisted = deserializeSet(state.userContextMessagesPersisted);\n }\n\n /**\n * Serialize all MessageList state for workflow suspend/resume\n */\n serializeAll(data: {\n messages: MastraDBMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record;\n memoryInfo: MemoryInfo | null;\n agentNetworkAppend: boolean;\n }): SerializedMessageListState {\n return {\n messages: serializeMessages(data.messages),\n systemMessages: data.systemMessages,\n taggedSystemMessages: data.taggedSystemMessages,\n memoryInfo: data.memoryInfo,\n _agentNetworkAppend: data.agentNetworkAppend,\n ...this.serializeSourceTracking(),\n };\n }\n\n /**\n * Deserialize all MessageList state from workflow suspend/resume\n */\n deserializeAll(state: SerializedMessageListState): {\n messages: MastraDBMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record;\n memoryInfo: MemoryInfo | null;\n agentNetworkAppend: boolean;\n } {\n const messages = deserializeMessages(state.messages);\n\n this.deserializeSourceTracking(\n {\n memoryMessages: state.memoryMessages,\n newUserMessages: state.newUserMessages,\n newResponseMessages: state.newResponseMessages,\n userContextMessages: state.userContextMessages,\n memoryMessagesPersisted: state.memoryMessagesPersisted,\n newUserMessagesPersisted: state.newUserMessagesPersisted,\n newResponseMessagesPersisted: state.newResponseMessagesPersisted,\n userContextMessagesPersisted: state.userContextMessagesPersisted,\n },\n messages,\n );\n\n return {\n messages,\n systemMessages: state.systemMessages,\n taggedSystemMessages: state.taggedSystemMessages,\n memoryInfo: state.memoryInfo,\n agentNetworkAppend: state._agentNetworkAppend,\n };\n }\n}\n\n/**\n * Serialized form of the complete MessageList state\n */\nexport interface SerializedMessageListState {\n messages: SerializedMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record;\n memoryInfo: MemoryInfo | null;\n _agentNetworkAppend: boolean;\n memoryMessages: string[];\n newUserMessages: string[];\n newResponseMessages: string[];\n userContextMessages: string[];\n memoryMessagesPersisted: string[];\n newUserMessagesPersisted: string[];\n newResponseMessagesPersisted: string[];\n userContextMessagesPersisted: string[];\n}\n","import type { LanguageModelV2Prompt } from '@ai-sdk/provider-v5';\nimport type { LanguageModelV1Prompt, CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\nimport type * as AIV4Type from '@internal/ai-sdk-v4';\nimport { v4 as randomUUID } from '@lukeed/uuid';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../error';\nimport type { IMastraLogger } from '../../logger';\nimport { getTransformedToolPayload, hasTransformedToolPayload } from '../../tools/payload-transform';\nimport type { IdGeneratorContext } from '../../types';\nimport { createSignal, isCreatedAgentSignal, mastraDBMessageToSignal } from '../signals';\nimport type { CreatedAgentSignal } from '../signals';\nimport { AIV4Adapter, AIV5Adapter, AIV6Adapter } from './adapters';\nimport { CacheKeyGenerator } from './cache/CacheKeyGenerator';\nimport {\n aiV4CoreMessageToV1PromptMessage,\n aiV5ModelMessageToV2PromptMessage,\n coreContentToString,\n messagesAreEqual,\n inputToMastraDBMessage as convertInputToMastraDBMessage,\n aiV4UIMessagesToAIV4CoreMessages,\n aiV5UIMessagesToAIV5ModelMessages as convertAIV5UIToModelMessages,\n aiV4CoreMessagesToAIV5ModelMessages as convertAIV4CoreToAIV5ModelMessages,\n systemMessageToAIV4Core,\n StepContentExtractor,\n} from './conversion';\nimport { TypeDetector } from './detection/TypeDetector';\nimport { MessageMerger } from './merge';\nimport { convertImageFilePart } from './prompt/convert-file';\nimport { convertToV1Messages } from './prompt/convert-to-mastra-v1';\nimport { downloadAssetsFromMessages } from './prompt/download-assets';\nimport { MessageStateManager } from './state';\nimport type {\n MastraDBMessage,\n MastraMessagePart,\n MastraMessageV1,\n MessageSource,\n MemoryInfo,\n UIMessageWithMetadata,\n SerializedMessageListState,\n} from './state';\nimport type { AIV5Type, AIV5ResponseMessage, AIV6Type, MessageInput, MessageListInput } from './types';\nimport { ensureGeminiCompatibleMessages } from './utils/provider-compat';\nimport { stampPart } from './utils/stamp-part';\n\nfunction isSignalDataMessage }>(message: T): boolean {\n return message.role === 'system' && message.parts.length > 0 && message.parts.every(p => p.type.startsWith('data-'));\n}\n\n/**\n * Post-processes converted UI messages to merge non-user signal data parts into an\n * immediate neighbor assistant message, matching active-streaming behavior.\n *\n * Only checks immediate neighbors: append to preceding assistant, or prepend to\n * following assistant. If neither neighbor is assistant, convert the signal in-place\n * to an assistant message with just its data parts.\n */\nfunction mergeSignalDataParts }>(messages: T[]): T[] {\n const result: T[] = [];\n for (let idx = 0; idx < messages.length; idx++) {\n const message = messages[idx]!;\n if (!isSignalDataMessage(message)) {\n result.push(message);\n continue;\n }\n\n const prev = result[result.length - 1];\n const next = messages[idx + 1];\n\n if (prev && prev.role === 'assistant') {\n result[result.length - 1] = { ...prev, parts: [...prev.parts, ...message.parts] };\n } else if (next && next.role === 'assistant') {\n messages[idx + 1] = { ...next, parts: [...message.parts, ...next.parts] } as T;\n } else {\n result.push({ ...message, role: 'assistant' } as T);\n }\n }\n return result;\n}\n\nexport class MessageList {\n private messages: MastraDBMessage[] = [];\n\n // passed in by dev in input or context\n private systemMessages: AIV4Type.CoreSystemMessage[] = [];\n // passed in by us for a specific purpose, eg memory system message\n private taggedSystemMessages: Record = {};\n\n private memoryInfo: null | MemoryInfo = null;\n\n // Centralized state management for message tracking\n private stateManager = new MessageStateManager();\n\n // Legacy getters for backward compatibility - delegate to stateManager\n private get memoryMessages() {\n return this.stateManager.getMemoryMessages();\n }\n private get newUserMessages() {\n return this.stateManager.getUserMessages();\n }\n private get newResponseMessages() {\n return this.stateManager.getResponseMessages();\n }\n private get userContextMessages() {\n return this.stateManager.getContextMessages();\n }\n private get memoryMessagesPersisted() {\n return this.stateManager.getMemoryMessagesPersisted();\n }\n private get newUserMessagesPersisted() {\n return this.stateManager.getUserMessagesPersisted();\n }\n private get newResponseMessagesPersisted() {\n return this.stateManager.getResponseMessagesPersisted();\n }\n private get userContextMessagesPersisted() {\n return this.stateManager.getContextMessagesPersisted();\n }\n\n private generateMessageId?: (context?: IdGeneratorContext) => string;\n private _agentNetworkAppend = false;\n private filterIncompleteToolCalls: boolean;\n private logger?: IMastraLogger;\n\n private toAIV5UIMessages(messages: MastraDBMessage[], options?: { transformToolPayloads?: boolean }) {\n return mergeSignalDataParts(messages.map(message => AIV5Adapter.toUIMessage(message, options)));\n }\n\n private toAIV4UIMessages(messages: MastraDBMessage[], options?: { transformToolPayloads?: boolean }) {\n return mergeSignalDataParts(messages.map(message => AIV4Adapter.toUIMessage(message, options)));\n }\n\n private toAIV6UIMessages(messages: MastraDBMessage[]) {\n return mergeSignalDataParts(messages.map(AIV6Adapter.toUIMessage));\n }\n\n // Event recording for observability\n private isRecording = false;\n private recordedEvents: Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> = [];\n\n constructor({\n threadId,\n resourceId,\n generateMessageId,\n logger,\n filterIncompleteToolCalls,\n // @ts-expect-error Flag for agent network messages\n _agentNetworkAppend,\n }: {\n threadId?: string;\n resourceId?: string;\n generateMessageId?: (context?: IdGeneratorContext) => string;\n logger?: IMastraLogger;\n filterIncompleteToolCalls?: boolean;\n } = {}) {\n if (threadId) {\n this.memoryInfo = { threadId, resourceId };\n }\n this.generateMessageId = generateMessageId;\n this.logger = logger;\n this.filterIncompleteToolCalls = filterIncompleteToolCalls ?? true;\n this._agentNetworkAppend = _agentNetworkAppend || false;\n }\n\n /**\n * Start recording mutations to the MessageList for observability/tracing\n */\n public startRecording(): void {\n this.isRecording = true;\n this.recordedEvents = [];\n }\n\n public hasRecordedEvents(): boolean {\n return this.recordedEvents.length > 0;\n }\n\n public getRecordedEvents(): Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> {\n const events = [...this.recordedEvents];\n return events;\n }\n\n /**\n * Stop recording and return the list of recorded events\n */\n public stopRecording(): Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> {\n this.isRecording = false;\n const events = this.getRecordedEvents();\n this.recordedEvents = [];\n return events;\n }\n\n public addSignal(signal: CreatedAgentSignal, options?: { source?: MessageSource }): CreatedAgentSignal {\n const source = options?.source ?? 'input';\n const createdAt = this.generateCreatedAt(source, new Date());\n const acceptedAt = signal.acceptedAt ?? signal.createdAt;\n const signalForTranscript = createSignal({\n id: signal.id,\n type: signal.type,\n tagName: signal.tagName,\n contents: signal.contents,\n attributes: signal.attributes,\n metadata: signal.metadata,\n providerOptions: signal.providerOptions,\n createdAt,\n acceptedAt,\n });\n\n this.addOne(signalForTranscript.toDBMessage(this.memoryInfo ?? undefined), source);\n return signalForTranscript;\n }\n\n public add(messages: MessageListInput, messageSource: MessageSource) {\n if (messageSource === `user`) messageSource = `input`;\n\n if (!messages) return this;\n const messageArray = Array.isArray(messages) ? messages : [messages];\n\n // Record event if recording is enabled\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'add',\n source: messageSource,\n count: messageArray.length,\n });\n }\n\n for (const message of messageArray) {\n if (isCreatedAgentSignal(message) && messageSource === 'input') {\n this.addSignal(message, { source: messageSource });\n continue;\n }\n\n const messageInput = isCreatedAgentSignal(message)\n ? message.toDBMessage(this.memoryInfo ?? undefined)\n : typeof message === `string`\n ? {\n role: 'user' as const,\n content: message,\n }\n : message;\n\n if (Array.isArray(messageInput)) {\n for (const nestedMessage of messageInput) {\n this.addOne(\n typeof nestedMessage === `string`\n ? {\n role: 'user',\n content: nestedMessage,\n }\n : nestedMessage,\n messageSource,\n );\n }\n continue;\n }\n\n this.addOne(\n typeof messageInput === `string`\n ? {\n role: 'user',\n content: messageInput,\n }\n : messageInput,\n messageSource,\n );\n }\n return this;\n }\n\n public serialize(): SerializedMessageListState {\n return this.stateManager.serializeAll({\n messages: this.messages,\n systemMessages: this.systemMessages,\n taggedSystemMessages: this.taggedSystemMessages,\n memoryInfo: this.memoryInfo,\n agentNetworkAppend: this._agentNetworkAppend,\n });\n }\n\n /**\n * Custom serialization for tracing/observability spans.\n * Returns a clean representation with just the essential data,\n * excluding internal state tracking, methods, and implementation details.\n *\n * This is automatically called by the span serialization system when\n * a MessageList instance appears in span input/output/attributes.\n */\n public serializeForSpan(): {\n messages: Array<{ role: string; content: unknown }>;\n systemMessages: Array<{ role: string; content: unknown; tag?: string }>;\n } {\n const coreMessages = this.all.aiV4.core();\n\n return {\n messages: coreMessages.map(msg => ({\n role: msg.role,\n content: msg.content,\n })),\n systemMessages: [\n // Untagged first (base instructions)\n ...this.systemMessages.map(m => ({ role: m.role, content: m.content })),\n // Tagged after (contextual additions)\n ...Object.entries(this.taggedSystemMessages).flatMap(([tag, msgs]) =>\n msgs.map(m => ({ role: m.role, content: m.content, tag })),\n ),\n ],\n };\n }\n\n public deserialize(state: SerializedMessageListState) {\n const data = this.stateManager.deserializeAll(state);\n this.messages = data.messages;\n this.systemMessages = data.systemMessages;\n this.taggedSystemMessages = data.taggedSystemMessages;\n this.memoryInfo = data.memoryInfo;\n this._agentNetworkAppend = data.agentNetworkAppend;\n for (const message of this.messages) {\n this.updateLastCreatedAt(message);\n }\n return this;\n }\n\n private getMessagesForModelPrompt(): MastraDBMessage[] {\n return this.messages.flatMap(message => {\n if ((message.role as string) !== 'signal') {\n return [message];\n }\n\n return this.convertSignalForModelPrompt(message);\n });\n }\n\n private convertSignalForModelPrompt(message: MastraDBMessage): MastraDBMessage[] {\n // Model providers only understand normal prompt messages, so project the signal into\n // its LLM-facing UserModelMessage. Preserve the original id/createdAt so MessageList's\n // timestamp/ordering bookkeeping stays anchored to the persisted signal row.\n const signalMessage = mastraDBMessageToSignal(message).toLLMMessage();\n const createdAt = message.createdAt;\n const promptMessage = {\n ...signalMessage,\n id: message.id,\n metadata: { createdAt },\n };\n\n return [\n convertInputToMastraDBMessage(promptMessage as MessageInput, 'input', {\n memoryInfo: this.memoryInfo,\n newMessageId: () => message.id,\n generateCreatedAt: (_messageSource, start) => {\n if (start instanceof Date) return start;\n if (typeof start === 'string' || typeof start === 'number') return new Date(start);\n return createdAt;\n },\n dbMessages: this.messages,\n }),\n ];\n }\n\n public makeMessageSourceChecker(): {\n memory: Set;\n input: Set;\n output: Set;\n context: Set;\n getSource: (message: MastraDBMessage) => MessageSource | null;\n } {\n return this.stateManager.createSourceChecker();\n }\n\n public getLatestUserContent(): string | null {\n const currentUserMessages = this.all.core().filter(m => m.role === 'user');\n const content = currentUserMessages.at(-1)?.content;\n if (!content) return null;\n return coreContentToString(content);\n }\n\n public get get() {\n return {\n all: this.all,\n remembered: this.remembered,\n input: this.input,\n response: this.response,\n };\n }\n public get getPersisted() {\n return {\n remembered: this.rememberedPersisted,\n input: this.inputPersisted,\n taggedSystemMessages: this.taggedSystemMessages,\n response: this.responsePersisted,\n };\n }\n\n public get clear() {\n return {\n all: {\n db: (): MastraDBMessage[] => {\n const allMessages = [...this.messages];\n this.messages = [];\n this.stateManager.clearAll();\n if (this.isRecording && allMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n count: allMessages.length,\n });\n }\n return allMessages;\n },\n },\n input: {\n db: (): MastraDBMessage[] => {\n const userMessages = Array.from(this.stateManager.getUserMessages());\n this.messages = this.messages.filter(m => !this.stateManager.isUserMessage(m));\n this.stateManager.clearUserMessages();\n if (this.isRecording && userMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n source: 'input',\n count: userMessages.length,\n });\n }\n return userMessages;\n },\n },\n response: {\n db: () => {\n const responseMessages = Array.from(this.stateManager.getResponseMessages());\n this.messages = this.messages.filter(m => !this.stateManager.isResponseMessage(m));\n this.stateManager.clearResponseMessages();\n if (this.isRecording && responseMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n source: 'response',\n count: responseMessages.length,\n });\n }\n return responseMessages;\n },\n },\n };\n }\n\n /**\n * Remove messages by ID\n * @param ids - Array of message IDs to remove\n * @returns Array of removed messages\n */\n public removeByIds(ids: string[]): MastraDBMessage[] {\n const idsSet = new Set(ids);\n const removed: MastraDBMessage[] = [];\n this.messages = this.messages.filter(m => {\n if (idsSet.has(m.id)) {\n removed.push(m);\n this.stateManager.removeMessage(m);\n return false;\n }\n return true;\n });\n if (this.isRecording && removed.length > 0) {\n this.recordedEvents.push({\n type: 'removeByIds',\n ids,\n count: removed.length,\n });\n }\n return removed;\n }\n\n private all = {\n db: (): MastraDBMessage[] => this.messages,\n v1: (): MastraMessageV1[] => convertToV1Messages(this.all.db()),\n\n aiV5: {\n model: (): AIV5Type.ModelMessage[] => {\n const promptMessages = this.getMessagesForModelPrompt();\n return convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(promptMessages, { transformToolPayloads: false }),\n promptMessages,\n );\n },\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.all.db()),\n\n // Used when calling AI SDK streamText/generateText\n prompt: (): AIV5Type.ModelMessage[] => {\n const systemMessages = convertAIV4CoreToAIV5ModelMessages(\n [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()],\n `system`,\n this.createAdapterContext(),\n this.messages,\n );\n const promptMessages = this.getMessagesForModelPrompt();\n const modelMessages = convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(promptMessages, { transformToolPayloads: false }),\n promptMessages,\n this.filterIncompleteToolCalls,\n );\n\n const messages = [...systemMessages, ...modelMessages];\n\n return ensureGeminiCompatibleMessages(messages, this.logger);\n },\n\n // Used for creating LLM prompt messages without AI SDK streamText/generateText\n llmPrompt: async (\n options: {\n downloadConcurrency?: number;\n downloadRetries?: number;\n supportedUrls?: Record;\n } = {\n downloadConcurrency: 10,\n downloadRetries: 3,\n },\n ): Promise => {\n const promptMessages = this.getMessagesForModelPrompt();\n const modelMessages = convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(promptMessages, { transformToolPayloads: false }),\n promptMessages,\n this.filterIncompleteToolCalls,\n );\n\n const storedModelOutputs = new Map();\n for (const dbMsg of this.messages) {\n if (dbMsg.content?.format !== 2 || !dbMsg.content.parts) continue;\n\n for (const part of dbMsg.content.parts) {\n if (\n part.type === 'tool-invocation' &&\n part.toolInvocation?.state === 'result' &&\n part.providerMetadata?.mastra &&\n typeof part.providerMetadata.mastra === 'object' &&\n 'modelOutput' in (part.providerMetadata.mastra as Record)\n ) {\n storedModelOutputs.set(\n part.toolInvocation.toolCallId,\n (part.providerMetadata.mastra as Record).modelOutput,\n );\n }\n }\n }\n\n if (storedModelOutputs.size > 0) {\n for (const modelMsg of modelMessages) {\n if (modelMsg.role !== 'tool' || !Array.isArray(modelMsg.content)) continue;\n\n for (let i = 0; i < modelMsg.content.length; i++) {\n const part = modelMsg.content[i]!;\n if (part.type === 'tool-result' && storedModelOutputs.has(part.toolCallId)) {\n modelMsg.content[i] = {\n ...part,\n output: storedModelOutputs.get(part.toolCallId) as any,\n };\n }\n }\n }\n }\n const systemMessages = convertAIV4CoreToAIV5ModelMessages(\n [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()],\n `system`,\n this.createAdapterContext(),\n this.messages,\n );\n\n const downloadedAssets = await downloadAssetsFromMessages({\n messages: modelMessages,\n downloadConcurrency: options?.downloadConcurrency,\n downloadRetries: options?.downloadRetries,\n supportedUrls: options?.supportedUrls,\n });\n\n let messages = [...systemMessages, ...modelMessages];\n\n // Check if any messages have image/file content that needs processing\n const hasImageOrFileContent = modelMessages.some(\n message =>\n (message.role === 'user' || message.role === 'assistant') &&\n typeof message.content !== 'string' &&\n message.content.some(part => part.type === 'image' || part.type === 'file'),\n );\n\n if (hasImageOrFileContent) {\n messages = messages.map(message => {\n if (message.role === 'user') {\n if (typeof message.content === 'string') {\n return {\n role: 'user' as const,\n content: [{ type: 'text' as const, text: message.content }],\n providerOptions: message.providerOptions,\n } as AIV5Type.ModelMessage;\n }\n\n const convertedContent = message.content\n .map(part => {\n if (part.type === 'image' || part.type === 'file') {\n return convertImageFilePart(part, downloadedAssets);\n }\n return part;\n })\n .filter(part => part.type !== 'text' || part.text !== '');\n\n return {\n role: 'user' as const,\n content: convertedContent,\n providerOptions: message.providerOptions,\n } as AIV5Type.ModelMessage;\n }\n\n if (message.role === 'assistant' && typeof message.content !== 'string') {\n const convertedContent = message.content.map(part => {\n if (part.type === 'file') {\n return convertImageFilePart(part, downloadedAssets);\n }\n return part;\n });\n\n return {\n ...message,\n content: convertedContent,\n };\n }\n\n return message;\n });\n }\n\n messages = ensureGeminiCompatibleMessages(messages, this.logger);\n\n return messages\n .map(aiV5ModelMessageToV2PromptMessage)\n .filter(\n message => message.role === 'system' || typeof message.content === 'string' || message.content.length > 0,\n );\n },\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.all.db()),\n },\n\n /* @deprecated use list.get.all.aiV4.prompt() instead */\n prompt: () => this.all.aiV4.prompt(),\n /* @deprecated use list.get.all.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.all.db()),\n /* @deprecated use list.get.all.aiV4.core() */\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.all.db(), { transformToolPayloads: false })),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.all.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.getMessagesForModelPrompt(), { transformToolPayloads: false }),\n ),\n\n // Used when calling AI SDK streamText/generateText\n prompt: () => {\n const coreMessages = this.all.aiV4.core();\n const messages = [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat(), ...coreMessages];\n\n return ensureGeminiCompatibleMessages(messages, this.logger);\n },\n\n // Used for creating LLM prompt messages without AI SDK streamText/generateText\n llmPrompt: (): LanguageModelV1Prompt => {\n const coreMessages = this.all.aiV4.core();\n\n const systemMessages = [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()];\n let messages = [...systemMessages, ...coreMessages];\n\n messages = ensureGeminiCompatibleMessages(messages, this.logger);\n\n return messages.map(aiV4CoreMessageToV1PromptMessage);\n },\n },\n };\n\n private remembered = {\n db: () => this.messages.filter(m => this.memoryMessages.has(m)),\n v1: () => convertToV1Messages(this.remembered.db()),\n\n aiV5: {\n model: () =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.remembered.db(), { transformToolPayloads: false }),\n this.messages,\n ),\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.remembered.db()),\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.remembered.db()),\n },\n\n /* @deprecated use list.get.remembered.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.remembered.db()),\n /* @deprecated use list.get.remembered.aiV4.core() */\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.remembered.db(), { transformToolPayloads: false })),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.remembered.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.remembered.db(), { transformToolPayloads: false })),\n },\n };\n private rememberedPersisted = {\n db: () => this.all.db().filter(m => this.memoryMessagesPersisted.has(m)),\n v1: () => convertToV1Messages(this.rememberedPersisted.db()),\n\n aiV5: {\n model: () =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.rememberedPersisted.db(), { transformToolPayloads: false }),\n this.messages,\n ),\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.rememberedPersisted.db()),\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.rememberedPersisted.db()),\n },\n\n /* @deprecated use list.getPersisted.remembered.aiV4.ui() */\n ui: () => this.toAIV4UIMessages(this.rememberedPersisted.db()),\n /* @deprecated use list.getPersisted.remembered.aiV4.core() */\n core: () =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.rememberedPersisted.db(), { transformToolPayloads: false }),\n ),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.rememberedPersisted.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.rememberedPersisted.db(), { transformToolPayloads: false }),\n ),\n },\n };\n\n private input = {\n db: () => this.messages.filter(m => this.newUserMessages.has(m)),\n v1: () => convertToV1Messages(this.input.db()),\n\n aiV5: {\n model: () =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.input.db(), { transformToolPayloads: false }),\n this.messages,\n ),\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.input.db()),\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.input.db()),\n },\n\n /* @deprecated use list.get.input.aiV4.ui() instead */\n ui: () => this.toAIV4UIMessages(this.input.db()),\n /* @deprecated use list.get.core.aiV4.ui() instead */\n core: () =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.input.db(), { transformToolPayloads: false })),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.input.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.input.db(), { transformToolPayloads: false })),\n },\n };\n private inputPersisted = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newUserMessagesPersisted.has(m)),\n v1: (): MastraMessageV1[] => convertToV1Messages(this.inputPersisted.db()),\n\n aiV5: {\n model: () =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.inputPersisted.db(), { transformToolPayloads: false }),\n this.messages,\n ),\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.inputPersisted.db()),\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.inputPersisted.db()),\n },\n\n /* @deprecated use list.getPersisted.input.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.inputPersisted.db()),\n /* @deprecated use list.getPersisted.input.aiV4.core() */\n core: () =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.inputPersisted.db(), { transformToolPayloads: false }),\n ),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.inputPersisted.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.inputPersisted.db(), { transformToolPayloads: false }),\n ),\n },\n };\n\n private response = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newResponseMessages.has(m)),\n v1: (): MastraMessageV1[] => convertToV1Messages(this.response.db()),\n\n aiV5: {\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.response.db()),\n model: (): AIV5ResponseMessage[] =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.response.db(), { transformToolPayloads: false }),\n this.messages,\n ).filter(m => m.role === `tool` || m.role === `assistant`),\n modelContent: (stepNumber?: number): AIV5Type.StepResult['content'] => {\n if (typeof stepNumber === 'number') {\n // Delegate to StepContentExtractor for step-specific content extraction\n return StepContentExtractor.extractStepContent(\n this.response.aiV5.ui(),\n stepNumber,\n this.response.aiV5.stepContent,\n );\n }\n\n return this.response.aiV5.model().map(this.response.aiV5.stepContent).flat();\n },\n stepContent: (message?: AIV5Type.ModelMessage): AIV5Type.StepResult['content'] => {\n // Delegate to StepContentExtractor for content conversion\n return StepContentExtractor.convertToStepContent(message, this.messages, () =>\n this.response.aiV5.model().at(-1),\n );\n },\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.response.db()),\n },\n\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.response.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(this.toAIV4UIMessages(this.response.db(), { transformToolPayloads: false })),\n },\n };\n private responsePersisted = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newResponseMessagesPersisted.has(m)),\n\n aiV5: {\n model: () =>\n convertAIV5UIToModelMessages(\n this.toAIV5UIMessages(this.responsePersisted.db(), { transformToolPayloads: false }),\n this.messages,\n ),\n ui: (): AIV5Type.UIMessage[] => this.toAIV5UIMessages(this.responsePersisted.db()),\n },\n aiV6: {\n ui: () => this.toAIV6UIMessages(this.responsePersisted.db()),\n },\n\n /* @deprecated use list.getPersisted.response.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.responsePersisted.db()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.toAIV4UIMessages(this.responsePersisted.db()),\n core: (): CoreMessageV4[] =>\n aiV4UIMessagesToAIV4CoreMessages(\n this.toAIV4UIMessages(this.responsePersisted.db(), { transformToolPayloads: false }),\n ),\n },\n };\n\n public drainUnsavedMessages(): MastraDBMessage[] {\n const messages = this.messages.filter(m => this.newUserMessages.has(m) || this.newResponseMessages.has(m));\n this.newUserMessages.clear();\n this.newResponseMessages.clear();\n return messages.map(message => this.transformMessageForTranscript(message));\n }\n\n private transformToolStateDataForTranscript(data: unknown, phase: 'approval' | 'suspend'): unknown {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n const stateData = data as Record;\n const metadata = stateData.metadata ?? stateData.providerMetadata;\n const phaseTransform = getTransformedToolPayload(metadata, 'transcript', phase);\n const inputTransform = getTransformedToolPayload(metadata, 'transcript', 'input-available');\n const transformedArgs =\n phase === 'approval'\n ? hasTransformedToolPayload(phaseTransform)\n ? phaseTransform.transformed\n : hasTransformedToolPayload(inputTransform)\n ? inputTransform.transformed\n : undefined\n : hasTransformedToolPayload(inputTransform)\n ? inputTransform.transformed\n : hasTransformedToolPayload(phaseTransform)\n ? phaseTransform.transformed\n : undefined;\n const transformedSuspendPayload =\n phase === 'suspend' && hasTransformedToolPayload(phaseTransform) ? phaseTransform.transformed : undefined;\n\n return {\n ...stateData,\n ...(transformedArgs !== undefined ? { args: transformedArgs } : {}),\n ...(transformedSuspendPayload !== undefined ? { suspendPayload: transformedSuspendPayload } : {}),\n };\n }\n\n private transformMessageForTranscript(message: MastraDBMessage): MastraDBMessage {\n if (message.content?.format !== 2 || !message.content.parts) {\n return message;\n }\n\n let changed = false;\n const transformedByToolCallId = new Map();\n\n const parts = message.content.parts.map(part => {\n if (part.type === 'tool-invocation' && part.toolInvocation) {\n const inputTransform = getTransformedToolPayload(part.providerMetadata, 'transcript', 'input-available');\n const outputTransform =\n part.toolInvocation.state === 'result'\n ? (getTransformedToolPayload(part.providerMetadata, 'transcript', 'output-available') ??\n getTransformedToolPayload(part.providerMetadata, 'transcript', 'error'))\n : part.toolInvocation.state === 'output-error'\n ? getTransformedToolPayload(part.providerMetadata, 'transcript', 'error')\n : undefined;\n\n if (!inputTransform && !outputTransform) {\n return part;\n }\n\n changed = true;\n const transformedArgs = hasTransformedToolPayload(inputTransform)\n ? inputTransform.transformed\n : part.toolInvocation.args;\n const transformedResult =\n part.toolInvocation.state === 'result'\n ? hasTransformedToolPayload(outputTransform)\n ? outputTransform.transformed\n : part.toolInvocation.result\n : undefined;\n const transformedErrorText =\n part.toolInvocation.state === 'output-error'\n ? hasTransformedToolPayload(outputTransform)\n ? (outputTransform.transformed as string)\n : part.toolInvocation.errorText\n : undefined;\n transformedByToolCallId.set(part.toolInvocation.toolCallId, {\n args: transformedArgs,\n ...(part.toolInvocation.state === 'result' ? { result: transformedResult } : {}),\n ...(part.toolInvocation.state === 'output-error' ? { errorText: transformedErrorText } : {}),\n });\n\n return {\n ...part,\n toolInvocation: {\n ...part.toolInvocation,\n args: transformedArgs,\n ...(part.toolInvocation.state === 'result' ? { result: transformedResult } : {}),\n ...(part.toolInvocation.state === 'output-error' ? { errorText: transformedErrorText } : {}),\n },\n };\n }\n\n if (part.type === 'data-tool-call-suspended' || part.type === 'data-tool-call-approval') {\n changed = true;\n return {\n ...part,\n data: this.transformToolStateDataForTranscript(\n part.data,\n part.type === 'data-tool-call-suspended' ? 'suspend' : 'approval',\n ),\n };\n }\n\n return part;\n });\n\n const toolInvocations = message.content.toolInvocations?.map(invocation => {\n const transformed = transformedByToolCallId.get(invocation.toolCallId);\n if (!transformed) {\n return invocation;\n }\n\n const invocationState = invocation.state as string;\n changed = true;\n return {\n ...invocation,\n ...(transformed.args !== undefined ? { args: transformed.args } : {}),\n ...(invocation.state === 'result' && transformed.result !== undefined ? { result: transformed.result } : {}),\n ...(invocationState === 'output-error' && transformed.errorText !== undefined\n ? { errorText: transformed.errorText }\n : {}),\n };\n });\n\n const metadata =\n message.content.metadata && typeof message.content.metadata === 'object'\n ? { ...(message.content.metadata as Record) }\n : message.content.metadata;\n if (metadata && typeof metadata === 'object') {\n for (const [key, phase] of [\n ['suspendedTools', 'suspend'],\n ['pendingToolApprovals', 'approval'],\n ] as const) {\n const toolStates = metadata[key];\n if (!toolStates || typeof toolStates !== 'object') {\n continue;\n }\n changed = true;\n metadata[key] = Object.fromEntries(\n Object.entries(toolStates as Record).map(([toolName, state]) => [\n toolName,\n this.transformToolStateDataForTranscript(state, phase),\n ]),\n );\n }\n }\n\n if (!changed) {\n return message;\n }\n\n return {\n ...message,\n content: {\n ...message.content,\n parts,\n ...(toolInvocations ? { toolInvocations } : {}),\n ...(metadata ? { metadata } : {}),\n },\n };\n }\n\n public getEarliestUnsavedMessageTimestamp(): number | undefined {\n const unsavedMessages = this.messages.filter(m => this.newUserMessages.has(m) || this.newResponseMessages.has(m));\n if (unsavedMessages.length === 0) return undefined;\n // Find the earliest createdAt among unsaved messages\n return Math.min(...unsavedMessages.map(m => new Date(m.createdAt).getTime()));\n }\n\n /**\n * Check if a message is a new user or response message that should be saved.\n * Checks by message ID to handle cases where the message object may be a copy.\n */\n public isNewMessage(messageOrId: MastraDBMessage | string): boolean {\n return this.stateManager.isNewMessage(messageOrId);\n }\n\n /**\n * Replace a tool-invocation part matching the given toolCallId with the\n * provided result part. Walks backwards through messages to find the match.\n * If the message was already persisted (e.g. as a memory message), it is\n * moved to the response source so it will be re-saved.\n *\n * @returns true if the tool call was found and updated, false otherwise.\n */\n public updateToolInvocation(\n inputPart: Extract,\n metadata?: Record,\n ): boolean {\n if (!inputPart.toolInvocation?.toolCallId) {\n return false;\n }\n const toolCallId = inputPart.toolInvocation.toolCallId;\n\n for (let m = this.messages.length - 1; m >= 0; m--) {\n const msg = this.messages[m]!;\n if (msg.role !== 'assistant' || !msg.content?.parts) continue;\n\n for (let i = 0; i < msg.content.parts.length; i++) {\n const part = msg.content.parts[i];\n if (part?.type === 'tool-invocation' && part.toolInvocation?.toolCallId === toolCallId) {\n // Cast to access providerExecuted/providerMetadata which exist at runtime but aren't in the base type\n const originalPart = part as typeof part & { providerExecuted?: boolean; providerMetadata?: unknown };\n const inputPartWithMeta = inputPart as typeof inputPart & {\n providerExecuted?: boolean;\n providerMetadata?: unknown;\n };\n\n const mergedProviderMetadata =\n originalPart.providerMetadata !== undefined || inputPartWithMeta.providerMetadata !== undefined\n ? ({\n ...((originalPart.providerMetadata ?? {}) as Record>),\n ...((inputPartWithMeta.providerMetadata ?? {}) as Record>),\n } as AIV5Type.ProviderMetadata)\n : undefined;\n\n msg.content.parts[i] = {\n ...inputPart,\n toolInvocation: {\n ...inputPart.toolInvocation,\n args: part.toolInvocation.args,\n },\n // Preserve providerExecuted from original call if not in result\n ...(originalPart.providerExecuted !== undefined && inputPartWithMeta.providerExecuted === undefined\n ? { providerExecuted: originalPart.providerExecuted }\n : {}),\n ...(mergedProviderMetadata !== undefined ? { providerMetadata: mergedProviderMetadata } : {}),\n };\n this.lastCreatedAt = Math.max(this.lastCreatedAt || 0, Date.now());\n this.updateLastCreatedAt(msg);\n\n // `backgroundTasks` is a per-toolCallId record — merge instead of\n // overwrite so multiple concurrent background dispatches on the\n // same assistant message don't clobber each other's metadata.\n const existingMeta = (msg.content.metadata ?? {}) as Record;\n const incomingMeta = (metadata ?? {}) as Record;\n const existingBgTasks = existingMeta.backgroundTasks as Record | undefined;\n const incomingBgTasks = incomingMeta.backgroundTasks as Record | undefined;\n\n msg.content.metadata = {\n ...existingMeta,\n ...incomingMeta,\n ...(existingBgTasks || incomingBgTasks\n ? { backgroundTasks: { ...(existingBgTasks ?? {}), ...(incomingBgTasks ?? {}) } }\n : {}),\n };\n\n // Move the message to the response source so it gets\n // picked up by drainUnsavedMessages for re-saving.\n if (!this.stateManager.isResponseMessage(msg)) {\n this.stateManager.removeMessage(msg);\n this.stateManager.addToSource(msg, 'response');\n }\n\n return true;\n }\n }\n }\n this.logger?.warn(`updateToolInvocation: no matching tool call found for toolCallId=${toolCallId}`);\n return false;\n }\n\n /**\n * Append a `step-start` boundary to the last assistant message.\n * This marks the beginning of a new loop iteration so that\n * `convertToModelMessages` splits sequential tool-call turns into\n * separate message blocks instead of collapsing them into one.\n *\n * Respects sealed messages (post-observation) — if the last assistant\n * message is sealed, the step-start is not added.\n *\n * If the message was loaded from memory it is moved to the response\n * source so the updated content is re-saved.\n */\n public stepStart(): boolean {\n const lastMsg = this.messages[this.messages.length - 1];\n if (!lastMsg || lastMsg.role !== 'assistant' || !lastMsg.content?.parts) {\n return false;\n }\n\n if (MessageMerger.isSealed(lastMsg)) {\n return false;\n }\n\n // Don't add a duplicate step-start\n const lastPart = lastMsg.content.parts[lastMsg.content.parts.length - 1];\n if (lastPart?.type === 'step-start') {\n return false;\n }\n\n lastMsg.content.parts.push(stampPart({ type: 'step-start' as const }));\n\n // Ensure the mutated message is persisted\n if (!this.stateManager.isResponseMessage(lastMsg)) {\n this.stateManager.removeMessage(lastMsg);\n this.stateManager.addToSource(lastMsg, 'response');\n }\n\n return true;\n }\n\n public markResponseMessageBoundary(messageId?: string): boolean {\n const message = messageId\n ? this.messages.find(message => message.id === messageId)\n : [...this.messages].reverse().find(message => message.role === 'assistant');\n\n if (!message || message.role !== 'assistant') {\n return false;\n }\n\n message.content.metadata = {\n ...(message.content.metadata ?? {}),\n mastra: {\n ...((message.content.metadata?.mastra as Record | undefined) ?? {}),\n responseBoundary: true,\n },\n };\n\n if (!this.stateManager.isResponseMessage(message)) {\n this.stateManager.removeMessage(message);\n this.stateManager.addToSource(message, 'response');\n }\n\n return true;\n }\n\n public enrichLastStepStart(model: string): boolean {\n const lastMsg = this.messages[this.messages.length - 1];\n if (!lastMsg || lastMsg.role !== 'assistant' || !lastMsg.content?.parts) {\n return false;\n }\n\n if (MessageMerger.isSealed(lastMsg)) {\n return false;\n }\n\n for (let i = lastMsg.content.parts.length - 1; i >= 0; i--) {\n const part = lastMsg.content.parts[i];\n if (part?.type !== 'step-start') {\n continue;\n }\n\n // Only stamp step-starts that haven't already been attributed. A prior\n // iteration (or a re-used message loaded from memory) may have already\n // stamped its model, and overwriting it would mis-attribute history.\n if (part.model) {\n return false;\n }\n\n part.model = model;\n\n if (!this.stateManager.isResponseMessage(lastMsg)) {\n this.stateManager.removeMessage(lastMsg);\n this.stateManager.addToSource(lastMsg, 'response');\n }\n\n return true;\n }\n\n return false;\n }\n\n public getSystemMessages(tag?: string): CoreMessageV4[] {\n if (tag) {\n return this.taggedSystemMessages[tag] || [];\n }\n return this.systemMessages;\n }\n\n /**\n * Get all system messages (both tagged and untagged)\n * @returns Array of all system messages\n */\n public getAllSystemMessages(): CoreMessageV4[] {\n return [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()];\n }\n\n /**\n * Clear system messages, optionally for a specific tag\n * @param tag - If provided, only clears messages with this tag. Otherwise clears untagged messages.\n */\n public clearSystemMessages(tag?: string): this {\n if (tag) {\n delete this.taggedSystemMessages[tag];\n } else {\n this.systemMessages = [];\n }\n return this;\n }\n\n /**\n * Replace the untagged system message bucket with the provided array while\n * leaving tagged system message buckets (owned by other processors) intact.\n * @param messages - Array of system messages to set as untagged\n */\n public replaceAllSystemMessages(messages: CoreMessageV4[]): this {\n this.systemMessages = [];\n\n for (const message of messages) {\n if (message.role !== 'system') continue;\n this.systemMessages.push(message);\n }\n\n return this;\n }\n\n public addSystem(\n messages:\n | CoreMessageV4\n | CoreMessageV4[]\n | AIV6Type.ModelMessage\n | AIV6Type.ModelMessage[]\n | AIV5Type.ModelMessage\n | AIV5Type.ModelMessage[]\n | MastraDBMessage\n | MastraDBMessage[]\n | string\n | string[]\n | null,\n tag?: string,\n ) {\n if (!messages) return this;\n for (const message of Array.isArray(messages) ? messages : [messages]) {\n this.addOneSystem(message, tag);\n }\n return this;\n }\n\n private addOneSystem(\n message: CoreMessageV4 | AIV6Type.ModelMessage | AIV5Type.ModelMessage | MastraDBMessage | string,\n tag?: string,\n ) {\n const coreMessage = systemMessageToAIV4Core(message);\n\n if (coreMessage.role !== `system`) {\n throw new Error(\n `Expected role \"system\" but saw ${coreMessage.role} for message ${JSON.stringify(coreMessage, null, 2)}`,\n );\n }\n\n if (tag && !this.isDuplicateSystem(coreMessage, tag)) {\n this.taggedSystemMessages[tag] ||= [];\n this.taggedSystemMessages[tag].push(coreMessage);\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'addSystem',\n tag,\n message: coreMessage,\n });\n }\n } else if (!tag && !this.isDuplicateSystem(coreMessage)) {\n this.systemMessages.push(coreMessage);\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'addSystem',\n message: coreMessage,\n });\n }\n }\n }\n\n private isDuplicateSystem(message: CoreMessageV4, tag?: string) {\n if (tag) {\n if (!this.taggedSystemMessages[tag]) return false;\n return this.taggedSystemMessages[tag].some(\n m =>\n CacheKeyGenerator.fromAIV4CoreMessageContent(m.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(message.content),\n );\n }\n return this.systemMessages.some(\n m =>\n CacheKeyGenerator.fromAIV4CoreMessageContent(m.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(message.content),\n );\n }\n\n private getMessageById(id: string) {\n return this.messages.find(m => m.id === id);\n }\n\n private shouldReplaceMessage(message: MastraDBMessage): { exists: boolean; shouldReplace?: boolean; id?: string } {\n if (!this.messages.length) return { exists: false };\n\n if (!(`id` in message) || !message?.id) {\n return { exists: false };\n }\n\n const existingMessage = this.getMessageById(message.id);\n if (!existingMessage) return { exists: false };\n\n return {\n exists: true,\n shouldReplace: !messagesAreEqual(existingMessage, message),\n id: existingMessage.id,\n };\n }\n\n private addOne(message: MessageInput, messageSource: MessageSource) {\n if (\n (!(`content` in message) ||\n (!message.content &&\n // allow empty strings\n typeof message.content !== 'string')) &&\n (!(`parts` in message) || !message.parts)\n ) {\n throw new MastraError({\n id: 'INVALID_MESSAGE_CONTENT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Message with role \"${message.role}\" must have either a 'content' property (string or array) or a 'parts' property (array) that is not empty, null, or undefined. Received message: ${JSON.stringify(message, null, 2)}`,\n details: {\n role: message.role as string,\n messageSource,\n hasContent: 'content' in message,\n hasParts: 'parts' in message,\n },\n });\n }\n\n if (message.role === `system`) {\n // In the past system messages were accidentally stored in the db. these should be ignored because memory is not supposed to store system messages.\n if (messageSource === `memory`) return null;\n\n // Check if the message is in a supported format for system messages\n const isSupportedSystemFormat =\n TypeDetector.isAIV4CoreMessage(message) ||\n TypeDetector.isAIV6CoreMessage(message) ||\n TypeDetector.isAIV5CoreMessage(message) ||\n TypeDetector.isMastraDBMessage(message);\n\n if (isSupportedSystemFormat) {\n return this.addSystem(message);\n }\n\n // if we didn't add the message and we didn't ignore this intentionally, then it's a problem!\n throw new MastraError({\n id: 'INVALID_SYSTEM_MESSAGE_FORMAT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Invalid system message format. System messages must be CoreMessage format with 'role' and 'content' properties. The content should be a string or valid content array.`,\n details: {\n messageSource,\n receivedMessage: JSON.stringify(message, null, 2),\n },\n });\n }\n\n const messageV2 = convertInputToMastraDBMessage(message, messageSource, this.createAdapterContext());\n const signalMetadata =\n messageV2.role === 'signal'\n ? (messageV2.content.metadata?.signal as { acceptedAt?: string; createdAt?: string } | undefined)\n : undefined;\n if (messageSource === 'input' && messageV2.role === 'signal' && !signalMetadata?.acceptedAt) {\n const acceptedAt = signalMetadata?.createdAt ?? messageV2.createdAt.toISOString();\n messageV2.createdAt = this.generateCreatedAt(messageSource, messageV2.createdAt);\n messageV2.content.metadata = {\n ...messageV2.content.metadata,\n signal: {\n ...signalMetadata,\n createdAt: messageV2.createdAt.toISOString(),\n acceptedAt,\n },\n };\n }\n\n const { exists, shouldReplace, id } = this.shouldReplaceMessage(messageV2);\n\n const latestSealedIndex = this.messages.findLastIndex(message => MessageMerger.isSealed(message));\n const latestMessage = this.messages.at(-1);\n const latestMessageIndex = this.messages.length - 1;\n const latestMessageIsAfterSealedBoundary = latestSealedIndex === -1 || latestMessageIndex > latestSealedIndex;\n\n if (messageSource === `memory`) {\n for (const existingMessage of this.messages) {\n // don't double store any messages\n if (messagesAreEqual(existingMessage, messageV2)) {\n return;\n }\n }\n }\n\n const replacementTarget = exists && id ? this.messages.find(m => m.id === id) : undefined;\n const hasSealedReplacementTarget = !!replacementTarget && MessageMerger.isSealed(replacementTarget);\n\n // Keep this replacement-target guard here instead of MessageMerger.shouldMerge().\n // shouldMerge() only decides whether to append to the latest assistant message,\n // but replace-by-id can target an older sealed message elsewhere in the list.\n const isLatestFromMemory = latestMessage ? this.memoryMessages.has(latestMessage) : false;\n const shouldMerge =\n latestMessageIsAfterSealedBoundary &&\n !hasSealedReplacementTarget &&\n MessageMerger.shouldMerge(latestMessage, messageV2, messageSource, isLatestFromMemory, this._agentNetworkAppend);\n\n if (shouldMerge && latestMessage) {\n // Delegate merge logic to MessageMerger\n MessageMerger.merge(latestMessage, messageV2);\n this.updateLastCreatedAt(latestMessage);\n\n // If latest message gets appended to, it should be added to the proper source\n this.pushMessageToSource(latestMessage, messageSource);\n }\n // Else the last message and this message are not both assistant messages OR an existing message has been updated and should be replaced. add a new message to the array or update an existing one.\n else {\n let existingIndex = -1;\n if (shouldReplace) {\n existingIndex = this.messages.findIndex(m => m.id === id);\n }\n const existingMessage = existingIndex !== -1 && this.messages[existingIndex];\n\n if (shouldReplace && existingMessage) {\n const existingIsAtOrBeforeSealedBoundary = latestSealedIndex !== -1 && existingIndex <= latestSealedIndex;\n\n // If the existing message is sealed (e.g., after observation), don't replace it.\n // Instead, generate a new ID for the incoming message and add it as a new message.\n if (MessageMerger.isSealed(existingMessage)) {\n // Find the last part with sealedAt metadata in the EXISTING message.\n // The existing message has the seal boundary marker from insertObservationMarker.\n const existingParts = existingMessage.content?.parts || [];\n let sealedPartCount = 0;\n\n for (let i = existingParts.length - 1; i >= 0; i--) {\n const part = existingParts[i] as { metadata?: { mastra?: { sealedAt?: number } } };\n if (part?.metadata?.mastra?.sealedAt) {\n // The seal is at index i, so sealed content is parts 0 through i (inclusive)\n sealedPartCount = i + 1;\n break;\n }\n }\n\n // If no sealedAt found, use the entire existing message length as the boundary\n if (sealedPartCount === 0) {\n sealedPartCount = existingParts.length;\n }\n\n // Get parts from incoming message that are beyond the sealed boundary\n const incomingParts = messageV2.content.parts;\n\n let newParts: typeof incomingParts;\n\n if (incomingParts.length <= sealedPartCount) {\n // Incoming message has fewer or equal parts than the sealed boundary.\n // Check if these are truly stale (same content as the sealed message) or\n // new content flushed independently (e.g., text deltas flushed with the\n // same messageId but only containing a text part).\n if (messagesAreEqual(existingMessage, messageV2)) {\n // Stale message, ignore - don't replace, don't create new\n return this;\n }\n // Not stale — these are fresh parts (e.g., a text flush). Treat all as new.\n newParts = incomingParts;\n } else {\n newParts = incomingParts.slice(sealedPartCount);\n }\n\n // Only create a new message if there are actually new parts\n if (newParts.length > 0) {\n // Generate a new ID for the incoming message\n messageV2.id = this.generateMessageId?.({ idType: 'message', source: 'memory' }) ?? randomUUID();\n // Replace the parts with only the new ones\n messageV2.content.parts = newParts;\n // Ensure the new message has a timestamp after the sealed message\n if (messageV2.createdAt <= existingMessage.createdAt) {\n messageV2.createdAt = new Date(existingMessage.createdAt.getTime() + 1);\n }\n this.messages.push(messageV2);\n }\n // If no new parts, don't add anything (the sealed message already has all the content)\n } else if (existingIsAtOrBeforeSealedBoundary) {\n messageV2.id = this.generateMessageId?.({ idType: 'message', source: 'memory' }) ?? randomUUID();\n if (messageV2.createdAt <= existingMessage.createdAt) {\n messageV2.createdAt = new Date(existingMessage.createdAt.getTime() + 1);\n }\n this.messages.push(messageV2);\n } else {\n const isExistingFromMemory = this.memoryMessages.has(existingMessage);\n const shouldMergeIntoExisting = MessageMerger.shouldMerge(\n existingMessage,\n messageV2,\n messageSource,\n isExistingFromMemory,\n this._agentNetworkAppend,\n );\n if (shouldMergeIntoExisting) {\n MessageMerger.merge(existingMessage, messageV2);\n this.updateLastCreatedAt(existingMessage);\n this.pushMessageToSource(existingMessage, messageSource);\n // Sort messages and return early — existingMessage stays in messages[] and its Sets\n this.messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n return this;\n }\n this.messages[existingIndex] = messageV2;\n }\n } else if (!exists) {\n this.messages.push(messageV2);\n }\n\n this.pushMessageToSource(messageV2, messageSource);\n }\n\n for (const storedMessage of this.messages) {\n this.updateLastCreatedAt(storedMessage);\n }\n\n // make sure messages are always stored in order of when they were created!\n this.messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n return this;\n }\n\n private pushMessageToSource(messageV2: MastraDBMessage, messageSource: MessageSource) {\n this.stateManager.addToSource(messageV2, messageSource);\n }\n\n private lastCreatedAt?: number;\n\n private updateLastCreatedAt(message: MastraDBMessage): void {\n // Message-level createdAt controls transcript ordering and OM observation boundaries.\n // Part timestamps are event metadata within a message and must not advance the\n // ordering watermark used to timestamp later messages/signals.\n this.lastCreatedAt = Math.max(this.lastCreatedAt || 0, message.createdAt.getTime());\n }\n\n // this makes sure messages added in order will always have a date atleast 1ms apart.\n private generateCreatedAt(messageSource: MessageSource, start?: unknown): Date {\n // Normalize timestamp\n const startDate: Date | undefined =\n start instanceof Date\n ? start\n : typeof start === 'string' || typeof start === 'number'\n ? new Date(start)\n : undefined;\n\n if (startDate && !this.lastCreatedAt) {\n this.lastCreatedAt = startDate.getTime();\n return startDate;\n }\n\n if (startDate && messageSource === `memory`) {\n // Preserve user-provided timestamps for memory messages to avoid re-ordering\n // Messages without timestamps will fall through to get generated incrementing timestamps\n return startDate;\n }\n\n const now = new Date();\n const nowTime = startDate?.getTime() || now.getTime();\n const lastTime = this.lastCreatedAt || 0;\n\n // make sure our new message is created later than the latest known ordering timestamp\n // it's expected that messages are added to the list in order if they don't have a createdAt date on them\n if (nowTime <= lastTime) {\n const newDate = new Date(lastTime + 1);\n this.lastCreatedAt = newDate.getTime();\n return newDate;\n }\n\n this.lastCreatedAt = nowTime;\n return startDate ?? now;\n }\n\n private newMessageId(role?: string): string {\n if (this.generateMessageId) {\n return this.generateMessageId({\n idType: 'message',\n source: 'agent',\n threadId: this.memoryInfo?.threadId,\n resourceId: this.memoryInfo?.resourceId,\n role,\n });\n }\n return randomUUID();\n }\n\n private createAdapterContext() {\n return {\n memoryInfo: this.memoryInfo,\n newMessageId: () => this.newMessageId(),\n generateCreatedAt: (messageSource: MessageSource, start?: unknown) =>\n this.generateCreatedAt(messageSource, start),\n dbMessages: this.messages,\n };\n }\n}\n","import type * as AIV4 from '@internal/ai-sdk-v4';\nimport type * as AIV5 from '@internal/ai-sdk-v5';\nimport type * as AIV6 from '@internal/ai-v6';\n\nimport type { MastraDBMessage, UIMessageWithMetadata, MessageListInput } from '../index';\n\nimport { MessageList } from '../index';\n\n/**\n * Available output formats for message conversion.\n *\n * @remarks\n * - `Mastra.V2` - Current database storage format, compatible with AI SDK v4\n * - `AIV4.UI` - AI SDK v4 UIMessage format (for frontend components)\n * - `AIV4.Core` - AI SDK v4 CoreMessage format (for LLM API calls)\n * - `AIV5.UI` - AI SDK v5 UIMessage format (for frontend components)\n * - `AIV5.Model` - AI SDK v5 ModelMessage format (for LLM API calls)\n * - `AIV6.UI` - AI SDK v6 UIMessage format (for frontend components)\n */\nexport type OutputFormat = 'Mastra.V2' | 'AIV4.UI' | 'AIV4.Core' | 'AIV5.UI' | 'AIV5.Model' | 'AIV6.UI';\n\nclass MessageConverter {\n private messageList: MessageList;\n\n constructor(messages: MessageListInput) {\n this.messageList = new MessageList();\n // Use 'memory' source to preserve messages exactly as provided\n // without any transformations or combinations\n this.messageList.add(messages, 'memory');\n }\n\n /**\n * Convert messages to Mastra V2 format (current database format).\n * @param format - The format 'Mastra.V2'\n * @returns Array of messages in Mastra V2 format, used for database storage\n */\n to(format: 'Mastra.V2'): MastraDBMessage[];\n /**\n * Convert messages to AI SDK v4 UIMessage format.\n * @param format - The format 'AIV4.UI'\n * @returns Array of UIMessages for use with AI SDK v4 frontend components\n */\n to(format: 'AIV4.UI'): UIMessageWithMetadata[] | AIV4.UIMessage[];\n /**\n * Convert messages to AI SDK v4 CoreMessage format.\n * @param format - The format 'AIV4.Core'\n * @returns Array of CoreMessages for AI SDK v4 LLM API calls\n */\n to(format: 'AIV4.Core'): AIV4.CoreMessage[];\n /**\n * Convert messages to AI SDK v5 UIMessage format.\n * @param format - The format 'AIV5.UI'\n * @returns Array of UIMessages for use with AI SDK v5 frontend components\n */\n to(format: 'AIV5.UI'): AIV5.UIMessage[];\n /**\n * Convert messages to AI SDK v5 ModelMessage format.\n * @param format - The format 'AIV5.Model'\n * @returns Array of ModelMessages for AI SDK v5 LLM API calls\n */\n to(format: 'AIV5.Model'): AIV5.ModelMessage[];\n /**\n * Convert messages to AI SDK v6 UIMessage format.\n * @param format - The format 'AIV6.UI'\n * @returns Array of UIMessages for use with AI SDK v6 frontend components\n */\n to(format: 'AIV6.UI'): AIV6.UIMessage[];\n to(format: OutputFormat): unknown[] {\n switch (format) {\n // Old format keys (backward compatibility)\n case 'Mastra.V2':\n return this.messageList.get.all.db();\n case 'AIV4.UI':\n return this.messageList.get.all.aiV4.ui();\n case 'AIV4.Core':\n return this.messageList.get.all.aiV4.core();\n case 'AIV5.UI':\n return this.messageList.get.all.aiV5.ui();\n case 'AIV5.Model':\n return this.messageList.get.all.aiV5.model();\n case 'AIV6.UI':\n return this.messageList.get.all.aiV6.ui();\n default:\n throw new Error(`Unsupported output format: ${format}`);\n }\n }\n}\n\n/**\n * Convert messages from any supported format to another format.\n *\n * @param messages - Input messages in any supported format. Accepts:\n * - AI SDK v4 formats: UIMessage, CoreMessage, Message\n * - AI SDK v5 formats: UIMessage, ModelMessage\n * - Mastra formats: MastraMessageV1 (input only), MastraDBMessage\n * - Simple strings (will be converted to user messages)\n * - Arrays of any of the above\n *\n * @returns A converter object with a `.to()` method to specify the output format\n *\n * @example\n * ```typescript\n * import { convertMessages } from '@mastra/core/agent';\n *\n * // Convert AI SDK v5 UI messages to v4 Core messages\n * const v4CoreMessages = convertMessages(v5UIMessages).to('AIV4.Core');\n *\n * // Convert database messages (Mastra V2) to AI SDK v5 UI messages for frontend\n * const v5UIMessages = convertMessages(dbMessages).to('AIV5.UI');\n *\n * // Convert any format to Mastra's V2 format for database storage\n * const mastraV2Messages = convertMessages(anyMessages).to('Mastra.V2');\n *\n * // Convert simple strings to formatted messages\n * const messages = convertMessages(['Hello', 'How are you?']).to('AIV5.UI');\n *\n * // Convert v4 UI messages to v5 Model messages for LLM calls\n * const modelMessages = convertMessages(v4UIMessages).to('AIV5.Model');\n * ```\n *\n * @remarks\n * This utility handles all message format conversions internally, including:\n * - Tool invocations and results\n * - File attachments\n * - Multi-part messages\n * - System messages\n * - Metadata preservation where possible\n */\nexport function convertMessages(messages: MessageListInput): MessageConverter {\n return new MessageConverter(messages);\n}\n"]}