{"version":3,"sources":["../src/agent/message-list/detection/TypeDetector.ts","../src/agent/message-list/prompt/data-content.ts","../src/agent/message-list/prompt/image-utils.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/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/utils/fetchWithRetry.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","uiMessage","MastraError","filterEmptyTextParts","isToolUIPart","toolResultPart","matchingCall","convertToCoreMessages","convertToModelMessages","convertBase64ToUint8Array","stepParts","processBlock","content","toolInvocations","i","isUrlSupported","randomUUID"],"mappings":"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","file":"chunk-VNHOOCJB.cjs","sourcesContent":["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<string, unknown> })\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\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 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 { 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:[<mediatype>][;base64],<data>\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","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';\n\n/**\n * Tool result with input field (Anthropic requirement)\n */\nexport type ToolResultWithInput = ToolResultPart & {\n  input: Record<string, unknown>;\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<T extends ModelMessage | CoreMessageV4>(\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 * 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 Compatibility\n// ============================================================================\n\n/**\n * Checks if a message part has OpenAI reasoning itemId\n *\n * OpenAI reasoning items are tracked via `providerMetadata.openai.itemId` (e.g., `rs_...`).\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  if (!part || typeof part !== 'object') return false;\n  const partAny = part as Record<string, unknown>;\n\n  if (!('providerMetadata' in partAny) || !partAny.providerMetadata) return false;\n  const metadata = partAny.providerMetadata as Record<string, unknown>;\n\n  if (!('openai' in metadata) || !metadata.openai) return false;\n  const openai = metadata.openai as Record<string, unknown>;\n\n  return 'itemId' in openai && typeof openai.itemId === 'string';\n}\n\n/**\n * Extracts the OpenAI itemId from a message part if present\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 (!hasOpenAIReasoningItemId(part)) return undefined;\n\n  const partAny = part as Record<string, unknown>;\n  const metadata = partAny.providerMetadata as Record<string, unknown>;\n  const openai = metadata.openai as Record<string, unknown>;\n\n  return openai.itemId as string;\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<string, unknown> {\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        // Return the args even if it's undefined or empty object\n        return toolCallPart.toolInvocation.args || {};\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        return toolInvocation.args || {};\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 { 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\n/**\n * Filter out data-* parts from MastraMessagePart[] to get V4-compatible parts.\n * Data parts are a Mastra extension for custom streaming data and aren't supported by AI SDK V4.\n */\nfunction filterDataParts(parts: MastraMessagePart[]): UIMessageV4Part[] {\n  return parts.filter((part): part is UIMessageV4Part => !part.type.startsWith('data-'));\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\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): UIMessageWithMetadata {\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 = { ...part.toolInvocation };\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    // Filter out data-* parts when converting to UIMessageV4 (V4 doesn't support them)\n    const v4Parts = filterDataParts(parts);\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 ? m.content.toolInvocations?.filter(t => t.state === 'result') : 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,\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  }\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<string, unknown>;\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<string, unknown> = {};\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<string, unknown>;\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<string, unknown>).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<string, unknown>).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<string, unknown>).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<string, unknown>).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<string, unknown>;\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 type { ToolInvocationUIPart } from '@ai-sdk/ui-utils-v5';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../../error';\nimport { categorizeFileData, createDataUri, parseDataUri } from '../prompt/image-utils';\nimport type { MastraDBMessage, MastraMessageContentV2, MastraMessagePart, MessageSource } 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\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<string, unknown> | 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<string, unknown>).createdAt;\n  return typeof createdAt === 'number' ? createdAt : undefined;\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): AIV5Type.UIMessage {\n    const parts: AIV5Type.UIMessage['parts'] = [];\n    const metadata: Record<string, unknown> = { ...(dbMsg.content.metadata || {}) };\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    // 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<string>();\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: inv.args,\n              output: inv.result,\n              state: 'output-available',\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: inv.args,\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 {\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    return {\n      id: dbMsg.id,\n      role: 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<string, unknown>;\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<MastraDBMessage['content']['toolInvocations']>[0];\n        }\n        return {\n          args: p.input,\n          toolCallId: p.toolCallId,\n          toolName,\n          state: 'call',\n        } satisfies NonNullable<MastraDBMessage['content']['toolInvocations']>[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 ToolInvocationUIPart & { providerMetadata?: AIV5Type.ProviderMetadata; createdAt?: number };\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 ToolInvocationUIPart & { providerMetadata?: AIV5Type.ProviderMetadata; createdAt?: number };\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<typeof p> => 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<MastraDBMessage['content']['toolInvocations']> = [];\n    const reasoningParts: string[] = [];\n    const experimental_attachments: NonNullable<MastraDBMessage['content']['experimental_attachments']> = [];\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<MastraDBMessage['content']['parts'][number], { type: 'tool-invocation' }> =>\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<string, unknown>).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<string, unknown> =\n      'metadata' in modelMsg && modelMsg.metadata !== null && modelMsg.metadata !== undefined\n        ? (modelMsg.metadata as Record<string, unknown>)\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 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<T extends Record<string, unknown>, U extends Record<string, unknown>>(\n  target: T,\n  fields: U,\n): T & Partial<U> {\n  for (const [key, value] of Object.entries(fields)) {\n    if (value !== undefined) {\n      (target as Record<string, unknown>)[key] = value;\n    }\n  }\n  return target as T & Partial<U>;\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<string, unknown> {\n  return typeof input === 'object' && input !== null && !Array.isArray(input) ? (input as Record<string, unknown>) : {};\n}\n\nfunction isV6OnlyToolState(\n  state: string,\n): state is Extract<MastraToolInvocation['state'], 'approval-requested' | 'approval-responded' | 'output-denied'> {\n  return state === 'approval-requested' || state === 'approval-responded' || state === 'output-denied';\n}\n\nfunction toMastraApproval(\n  approval: AIV6Type.UIToolInvocation<AIV6Type.UITool>['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 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<string, unknown>;\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\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<string, unknown>;\n    const parts: AIV6Type.UIMessage['parts'] = [];\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,\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) && isV6OnlyToolState(part.state)) 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) || !isV6OnlyToolState(part.state)) {\n        const basePart = baseParts[basePartIndex++];\n        if (basePart) {\n          parts.push(basePart);\n        }\n        continue;\n      }\n\n      parts.push(\n        createToolInvocationPart({\n          toolCallId: part.toolCallId,\n          toolName: getToolNameFromUIPart(part),\n          args: normalizeToolArgs(part.input),\n          state: part.state,\n          approval: toMastraApproval(part.approval),\n          providerMetadata:\n            '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    }\n\n    return {\n      ...baseDb,\n      content: {\n        ...baseDb.content,\n        parts,\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<string, unknown>;\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: part.toolInvocation.args,\n          } as AIV6Type.UIMessage['parts'][number];\n\n        case 'call':\n          return {\n            ...base,\n            state: 'input-available',\n            input: part.toolInvocation.args,\n          } as AIV6Type.UIMessage['parts'][number];\n\n        case 'approval-requested':\n          return {\n            ...base,\n            state: 'approval-requested',\n            input: 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: 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: part.toolInvocation.args,\n              errorText: part.toolInvocation.errorText || '',\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: 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: part.toolInvocation.args,\n              output: part.toolInvocation.result,\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","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 type { MastraMessagePart, UIMessageV4Part } from './types';\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 reasoning 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    }\n    if (part.type === 'tool-invocation') {\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 sends reasoning items (rs_...) inside part.providerMetadata.openai.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 calls fail with:\n      //\n      //   \"Item 'fc_...' was provided without its required 'reasoning' item\"\n      //\n      // To fix this, we incorporate the OpenAI itemId into the cache key so each rs_ entry\n      // 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 (\n        partAny &&\n        Object.hasOwn(partAny, 'providerMetadata') &&\n        partAny.providerMetadata &&\n        Object.hasOwn(partAny.providerMetadata, 'openai') &&\n        partAny.providerMetadata.openai &&\n        Object.hasOwn(partAny.providerMetadata.openai, 'itemId')\n      ) {\n        const itemId = partAny.providerMetadata.openai.itemId;\n        cacheKey += `|${itemId}`;\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<AIV5.UIDataTypes>).data;\n        key += JSON.stringify(data);\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      }\n      if (part.type === 'reasoning') {\n        key += part.text.length;\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      }\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      }\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      }\n      if (part.type === 'reasoning') {\n        key += part.text.length;\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, createDataUri } 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<Extract<LanguageModelV1Message, { role: 'user' }>['content'], string>;\n    assistant: Exclude<Extract<LanguageModelV1Message, { role: 'assistant' }>['content'], string>;\n    tool: Exclude<Extract<LanguageModelV1Message, { role: 'tool' }>['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 - convert to data URI before creating URL\n            const dataUri = createDataUri(part.image, part.mimeType || 'image/png');\n            processedImage = new URL(dataUri);\n          } else {\n            // It's already a URL or data URI\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<AIV5LanguageModelV2Message, { role: 'user' }>['content'];\n    assistant: Extract<AIV5LanguageModelV2Message, { role: 'assistant' }>['content'];\n    tool: Extract<AIV5LanguageModelV2Message, { role: 'tool' }>['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<T extends MastraMessagePart>(part: T): T {\n  if (part.createdAt == null) {\n    part.createdAt = Date.now();\n  }\n\n  return part;\n}\n\nexport function stampMessageParts<T extends MastraDBMessage>(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);\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): MastraDBMessage {\n  // Generate ID if missing\n  if (!message.id) {\n    message.id = context.newMessageId();\n  }\n\n  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 } from '../utils/provider-compat';\n\n/**\n * Merges text parts that share the same OpenAI 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 * concatenating their text content and keeping the metadata from the first part.\n */\nfunction mergeTextPartsWithDuplicateItemIds<T extends { type: string }>(parts: T[]): T[] {\n  const result: T[] = [];\n\n  for (const part of parts) {\n    // Only process text parts with OpenAI itemId\n    if (part.type !== 'text') {\n      result.push(part);\n      continue;\n    }\n\n    const textPart = part as T & { text: string; providerMetadata?: Record<string, unknown> };\n    const itemId = (textPart.providerMetadata?.openai as Record<string, unknown> | undefined)?.itemId as\n      | string\n      | undefined;\n    if (!itemId) {\n      result.push(part);\n      continue;\n    }\n\n    // Find an existing text part in result with the same itemId\n    const existingIndex = result.findIndex(p => {\n      if (p.type !== 'text') return false;\n      const existingTextPart = p as T & { providerMetadata?: Record<string, unknown> };\n      const existingItemId = (existingTextPart.providerMetadata?.openai as Record<string, unknown> | undefined)?.itemId;\n      return existingItemId === itemId;\n    });\n\n    if (existingIndex !== -1) {\n      // Merge: concatenate text into the existing part\n      const existing = result[existingIndex] as T & { text: string };\n      result[existingIndex] = {\n        ...existing,\n        text: existing.text + textPart.text,\n      };\n    } else {\n      result.push(part);\n    }\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  const msgs = messages\n    .map(m => {\n      if (m.parts.length === 0) return false;\n\n      // Filter out streaming states and optionally input-available (which aren't supported by convertToModelMessages)\n      const safeParts = 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.\n          if (p.state === 'input-available' && p.providerExecuted) 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      if (!safeParts.length) return false;\n\n      // Merge text parts with duplicate OpenAI 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                typeof part.output === 'object' && part.output && 'value' in part.output\n                  ? part.output.value\n                  : part.output,\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 * 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  const result = restoreAssistantFileProviderMetadata(AIV5.convertToModelMessages(preprocessed), preprocessed);\n\n  // Restore message-level providerOptions from metadata.providerMetadata\n  // This preserves providerOptions through the DB → UI → Model conversion\n  const withProviderOptions = result.map((modelMsg, index) => {\n    const uiMsg = preprocessed[index];\n\n    if (\n      uiMsg?.metadata &&\n      typeof uiMsg.metadata === 'object' &&\n      'providerMetadata' in uiMsg.metadata &&\n      uiMsg.metadata.providerMetadata\n    ) {\n      return {\n        ...modelMsg,\n        providerOptions: uiMsg.metadata.providerMetadata as AIV5Type.ProviderMetadata,\n      } satisfies AIV5Type.ModelMessage;\n    }\n\n    return modelMsg;\n  });\n\n  // Add input field to tool-result parts for Anthropic API compatibility (fixes issue #11376)\n  return ensureAnthropicCompatibleMessages(withProviderOptions, dbMessages);\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<any>['content'],\n  ): AIV5Type.StepResult<any>['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<any>['content'],\n  ): AIV5Type.StepResult<any>['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<any>['content'],\n  ): AIV5Type.StepResult<any>['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<any>['content'],\n  ): AIV5Type.StepResult<any>['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<any>['content'],\n  ): AIV5Type.StepResult<any>['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<any>['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<any>;\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<AIV5Type.StepResult<any>['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';\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    // 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    // 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 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 timestamps and content strings\n   */\n  static merge(latestMessage: MastraDBMessage, incomingMessage: MastraDBMessage): void {\n    // Update timestamp\n    latestMessage.createdAt = incomingMessage.createdAt || latestMessage.createdAt;\n\n    // Used for mapping indexes for incomingMessage parts to corresponding indexes in latestMessage\n    const toolResultAnchorMap = new Map<number, number>();\n    const partsToAdd = new Map<number, MastraMessageContentV2['parts'][number]>();\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        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<MastraDBMessage['content']['toolInvocations']>[number],\n              );\n            } else {\n              latestMessage.content.toolInvocations[toolInvocationIndex] =\n                existingCallPart.toolInvocation as NonNullable<MastraDBMessage['content']['toolInvocations']>[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.createdAt.getTime() < incomingMessage.createdAt.getTime()) {\n      latestMessage.createdAt = incomingMessage.createdAt;\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<number, number>;\n    partsToAdd: Map<number, MastraMessageContentV2['parts'][number]>;\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      if (typeof insertAt === 'number') {\n        if (needsStepStart) {\n          latestMessage.content.parts.splice(insertAt, 0, { type: 'step-start' });\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({ type: 'step-start' });\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<string, { mediaType: string | undefined; data: Uint8Array }>,\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 { Attachment } from '@ai-sdk/ui-utils-v5';\nimport type { FilePart, ImagePart, TextPart } from '@internal/ai-sdk-v4';\nimport { categorizeFileData, createDataUri } from './image-utils';\n\ntype ContentPart = TextPart | ImagePart | FilePart;\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<string, number>();\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<MastraDBMessage>) {\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<string>();\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<number, typeof unprocessedToolInvocations>();\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","/**\n * Fetches a URL with retry logic\n * @param url The URL to fetch\n * @param options Fetch options\n * @param maxRetries Maximum number of retry attempts\n * @returns The fetch Response if successful\n */\nexport async function fetchWithRetry(\n  url: string,\n  options: RequestInit = {},\n  maxRetries: number = 3,\n): Promise<Response> {\n  let retryCount = 0;\n  let lastError: Error | null = null;\n\n  while (retryCount < maxRetries) {\n    try {\n      const response = await fetch(url, options);\n\n      if (!response.ok) {\n        // Only retry on server errors (5xx) or network failures\n        // Don't retry on client errors (4xx)\n        if (response.status >= 400 && response.status < 500) {\n          throw new Error(`Request failed with status: ${response.status} ${response.statusText}`);\n        }\n\n        lastError = new Error(`Request failed with status: ${response.status} ${response.statusText}`);\n        retryCount++;\n\n        if (retryCount >= maxRetries) {\n          throw lastError;\n        }\n\n        const delay = Math.min(1000 * Math.pow(2, retryCount), 10000);\n        await new Promise(resolve => setTimeout(resolve, delay));\n        continue;\n      }\n\n      return response;\n    } catch (error) {\n      lastError = error instanceof Error ? error : new Error(String(error));\n\n      // If it's a client error (4xx), don't retry\n      if (lastError.message.includes('status: 4')) {\n        throw lastError;\n      }\n\n      retryCount++;\n\n      if (retryCount >= maxRetries) {\n        break;\n      }\n\n      const delay = Math.min(1000 * Math.pow(2, retryCount), 10000);\n      await new Promise(resolve => setTimeout(resolve, delay));\n    }\n  }\n\n  throw lastError || new Error('Request failed after multiple retry attempts');\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\nexport const downloadFromUrl = async ({ url, downloadRetries }: { url: URL; downloadRetries: number }) => {\n  const urlText = url.toString();\n\n  try {\n    const response = await fetchWithRetry(\n      urlText,\n      {\n        method: 'GET',\n      },\n      downloadRetries,\n    );\n\n    if (!response.ok) {\n      throw new MastraError({\n        id: 'DOWNLOAD_ASSETS_FAILED',\n        text: 'Failed to download asset',\n        domain: ErrorDomain.LLM,\n        category: ErrorCategory.USER,\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',\n        domain: ErrorDomain.LLM,\n        category: ErrorCategory.USER,\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<string, RegExp[]>;\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<ArrayBuffer>;\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<MastraDBMessage, 'createdAt'> & {\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.toUTCString(),\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<MastraDBMessage>();\n  private newUserMessages = new Set<MastraDBMessage>();\n  private newResponseMessages = new Set<MastraDBMessage>();\n  private userContextMessages = new Set<MastraDBMessage>();\n\n  // Persisted message tracking\n  private memoryMessagesPersisted = new Set<MastraDBMessage>();\n  private newUserMessagesPersisted = new Set<MastraDBMessage>();\n  private newResponseMessagesPersisted = new Set<MastraDBMessage>();\n  private userContextMessagesPersisted = new Set<MastraDBMessage>();\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        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<MastraDBMessage> {\n    return this.memoryMessages;\n  }\n\n  /**\n   * Get all user/input messages\n   */\n  getUserMessages(): Set<MastraDBMessage> {\n    return this.newUserMessages;\n  }\n\n  /**\n   * Get all response messages\n   */\n  getResponseMessages(): Set<MastraDBMessage> {\n    return this.newResponseMessages;\n  }\n\n  /**\n   * Get all context messages\n   */\n  getContextMessages(): Set<MastraDBMessage> {\n    return this.userContextMessages;\n  }\n\n  /**\n   * Get persisted memory messages\n   */\n  getMemoryMessagesPersisted(): Set<MastraDBMessage> {\n    return this.memoryMessagesPersisted;\n  }\n\n  /**\n   * Get persisted user/input messages\n   */\n  getUserMessagesPersisted(): Set<MastraDBMessage> {\n    return this.newUserMessagesPersisted;\n  }\n\n  /**\n   * Get persisted response messages\n   */\n  getResponseMessagesPersisted(): Set<MastraDBMessage> {\n    return this.newResponseMessagesPersisted;\n  }\n\n  /**\n   * Get persisted context messages\n   */\n  getContextMessagesPersisted(): Set<MastraDBMessage> {\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<string>;\n    input: Set<string>;\n    output: Set<string>;\n    context: Set<string>;\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<MastraDBMessage>) => 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<typeof this.serializeSourceTracking>,\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<string, CoreSystemMessage[]>;\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<string, CoreSystemMessage[]>;\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<string, CoreSystemMessage[]>;\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 type { IdGeneratorContext } from '../../types';\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\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<string, AIV4Type.CoreSystemMessage[]> = {};\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 logger?: IMastraLogger;\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    // @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  } = {}) {\n    if (threadId) {\n      this.memoryInfo = { threadId, resourceId };\n    }\n    this.generateMessageId = generateMessageId;\n    this.logger = logger;\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 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      this.addOne(\n        typeof message === `string`\n          ? {\n              role: 'user',\n              content: message,\n            }\n          : message,\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    return this;\n  }\n\n  public makeMessageSourceChecker(): {\n    memory: Set<string>;\n    input: Set<string>;\n    output: Set<string>;\n    context: Set<string>;\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[] => convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.all.db().map(AIV5Adapter.toUIMessage),\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        // Filter incomplete tool calls when sending messages TO the LLM\n        const modelMessages = convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages, true);\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<string, RegExp[]>;\n        } = {\n          downloadConcurrency: 10,\n          downloadRetries: 3,\n        },\n      ): Promise<LanguageModelV2Prompt> => {\n        // Filter incomplete tool calls when sending messages TO the LLM\n        const modelMessages = convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages, true);\n\n        const storedModelOutputs = new Map<string, unknown>();\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<string, unknown>)\n            ) {\n              storedModelOutputs.set(\n                part.toolInvocation.toolCallId,\n                (part.providerMetadata.mastra as Record<string, unknown>).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\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.all.db().map(AIV6Adapter.toUIMessage),\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.all.db().map(AIV4Adapter.toUIMessage),\n    /* @deprecated use list.get.all.aiV4.core() */\n    core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.all.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\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: () => convertAIV5UIToModelMessages(this.remembered.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.remembered.db().map(AIV5Adapter.toUIMessage),\n    },\n    aiV6: {\n      ui: () => this.remembered.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    /* @deprecated use list.get.remembered.aiV4.ui() */\n    ui: (): UIMessageWithMetadata[] => this.remembered.db().map(AIV4Adapter.toUIMessage),\n    /* @deprecated use list.get.remembered.aiV4.core() */\n    core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.remembered.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\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: () => convertAIV5UIToModelMessages(this.rememberedPersisted.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.rememberedPersisted.db().map(AIV5Adapter.toUIMessage),\n    },\n    aiV6: {\n      ui: () => this.rememberedPersisted.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    /* @deprecated use list.getPersisted.remembered.aiV4.ui() */\n    ui: () => this.rememberedPersisted.db().map(AIV4Adapter.toUIMessage),\n    /* @deprecated use list.getPersisted.remembered.aiV4.core() */\n    core: () => aiV4UIMessagesToAIV4CoreMessages(this.rememberedPersisted.ui()),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.rememberedPersisted.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.rememberedPersisted.aiV4.ui()),\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: () => convertAIV5UIToModelMessages(this.input.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.input.db().map(AIV5Adapter.toUIMessage),\n    },\n    aiV6: {\n      ui: () => this.input.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    /* @deprecated use list.get.input.aiV4.ui() instead */\n    ui: () => this.input.db().map(AIV4Adapter.toUIMessage),\n    /* @deprecated use list.get.core.aiV4.ui() instead */\n    core: () => aiV4UIMessagesToAIV4CoreMessages(this.input.ui()),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.input.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.input.aiV4.ui()),\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: () => convertAIV5UIToModelMessages(this.inputPersisted.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.inputPersisted.db().map(AIV5Adapter.toUIMessage),\n    },\n    aiV6: {\n      ui: () => this.inputPersisted.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    /* @deprecated use list.getPersisted.input.aiV4.ui() */\n    ui: (): UIMessageWithMetadata[] => this.inputPersisted.db().map(AIV4Adapter.toUIMessage),\n    /* @deprecated use list.getPersisted.input.aiV4.core() */\n    core: () => aiV4UIMessagesToAIV4CoreMessages(this.inputPersisted.ui()),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.inputPersisted.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.inputPersisted.aiV4.ui()),\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.response.db().map(AIV5Adapter.toUIMessage),\n      model: (): AIV5ResponseMessage[] =>\n        convertAIV5UIToModelMessages(this.response.aiV5.ui(), this.messages).filter(\n          m => m.role === `tool` || m.role === `assistant`,\n        ),\n      modelContent: (stepNumber?: number): AIV5Type.StepResult<any>['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<any>['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.response.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.response.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.response.aiV4.ui()),\n    },\n  };\n  private responsePersisted = {\n    db: (): MastraDBMessage[] => this.messages.filter(m => this.newResponseMessagesPersisted.has(m)),\n\n    aiV5: {\n      model: () => convertAIV5UIToModelMessages(this.responsePersisted.aiV5.ui(), this.messages),\n      ui: (): AIV5Type.UIMessage[] => this.responsePersisted.db().map(AIV5Adapter.toUIMessage),\n    },\n    aiV6: {\n      ui: () => this.responsePersisted.db().map(AIV6Adapter.toUIMessage),\n    },\n\n    /* @deprecated use list.getPersisted.response.aiV4.ui() */\n    ui: (): UIMessageWithMetadata[] => this.responsePersisted.db().map(AIV4Adapter.toUIMessage),\n    aiV4: {\n      ui: (): UIMessageWithMetadata[] => this.responsePersisted.db().map(AIV4Adapter.toUIMessage),\n      core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.responsePersisted.aiV4.ui()),\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;\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(inputPart: Extract<MastraMessagePart, { type: 'tool-invocation' }>): 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          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            // Preserve providerMetadata from original call if not in result\n            ...(originalPart.providerMetadata !== undefined && inputPartWithMeta.providerMetadata === undefined\n              ? { providerMetadata: originalPart.providerMetadata }\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 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 all system messages with new ones\n   * This clears both tagged and untagged system messages and replaces them with the provided array\n   * @param messages - Array of system messages to set\n   */\n  public replaceAllSystemMessages(messages: CoreMessageV4[]): this {\n    // Clear existing system messages\n    this.systemMessages = [];\n    this.taggedSystemMessages = {};\n\n    // Add all new messages as untagged (processors don't need to preserve tags)\n    for (const message of messages) {\n      if (message.role === 'system') {\n        this.systemMessages.push(message);\n      }\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\n    const { exists, shouldReplace, id } = this.shouldReplaceMessage(messageV2);\n\n    const latestMessage = this.messages.at(-1);\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      !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\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        // 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 {\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.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    // 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  // 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    // find the latest createdAt in all stored messages\n    const lastTime = this.messages.reduce((p, m) => {\n      if (m.createdAt.getTime() > p) return m.createdAt.getTime();\n      return p;\n    }, this.lastCreatedAt || 0);\n\n    // make sure our new message is created later than the latest known message time\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 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"]}