{"version":3,"file":"signals-D2CulJo3.cjs","names":["candidate"],"sources":["../src/agent/message-list/prompt/data-content.ts","../src/agent/signals.ts"],"sourcesContent":["import type { DataContent } from '@ai-sdk/provider-utils-v5';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\n\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nexport function convertDataContentToBase64String(content: DataContent): string {\n  if (typeof content === 'string') {\n    return content;\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return convertUint8ArrayToBase64(new Uint8Array(content));\n  }\n\n  return convertUint8ArrayToBase64(content);\n}\n","import type { FilePart, TextPart, UserModelMessage } from '@internal/ai-sdk-v5';\n\nimport { convertDataContentToBase64String } from './message-list/prompt/data-content';\nimport type { MastraDBMessage, MastraMessagePart, MastraProviderMetadata } from './message-list/state/types';\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalCategory = 'user' | 'state' | 'reactive' | 'notification';\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentLegacySignalType = 'user-message' | 'system-reminder';\nexport type AgentSignalType = AgentSignalCategory | AgentLegacySignalType;\n\nexport type AgentSignalTagName = string;\n\nexport type SignalPart = TextPart | SignalFilePart;\ntype SignalFilePart = {\n  type: 'file';\n  data: string;\n  mediaType: string;\n  filename?: string;\n  providerOptions?: MastraProviderMetadata;\n};\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalContents = string | Array<TextPart | FilePart>;\nexport type AgentSignalAttributes = Record<string, string | number | boolean | null | undefined>;\nexport type AgentStateSignalMode = 'snapshot' | 'delta';\n\nexport type AgentStateSignalInput = {\n  id: string;\n  cacheKey: string;\n  contents: AgentSignalContents;\n  mode?: AgentStateSignalMode;\n  value?: unknown;\n  delta?: unknown;\n  attributes?: AgentSignalAttributes;\n  metadata?: Record<string, unknown>;\n  providerOptions?: MastraProviderMetadata;\n  tagName?: AgentSignalTagName;\n};\n\nexport type AgentMessageInput =\n  | AgentSignalContents\n  | {\n      contents: AgentSignalContents;\n      attributes?: AgentSignalAttributes;\n      metadata?: Record<string, unknown>;\n      providerOptions?: MastraProviderMetadata;\n    };\n\ntype AgentSignalInputBase = {\n  id?: string;\n  createdAt?: Date | string;\n  acceptedAt?: Date | string;\n  tagName?: AgentSignalTagName;\n  contents: AgentSignalContents;\n  attributes?: AgentSignalAttributes;\n  metadata?: Record<string, unknown>;\n  /**\n   * Provider options attached to the resulting prompt turn. Surfaces as `providerOptions` on the\n   * `UserModelMessage` sent to the model and as `content.providerMetadata` on the persisted DB\n   * message (also visible to UI consumers via `useChat` message metadata).\n   */\n  providerOptions?: MastraProviderMetadata;\n};\n\nexport type AgentSignalInput =\n  | (AgentSignalInputBase & {\n      type: 'state';\n      /**\n       * State signals cannot be transient: they maintain cross-turn tracking\n       * (version/cacheKey/activeCopies) that is rebuilt from persisted history, so a\n       * delivery-only state signal would silently break dedupe.\n       */\n      transient?: never;\n    })\n  | (AgentSignalInputBase & {\n      type: Exclude<AgentSignalType, 'state'>;\n      /**\n       * Whether this signal is transient. Defaults to `false`.\n       *\n       * A transient signal is delivered to the model for the current call (it appears in the prompt\n       * for this turn), but it is not retained as part of the conversation: it is not written to\n       * storage and never re-enters the prompt on later turns. Re-send it each turn from a processor\n       * to keep a single fresh copy near the latest message instead of an accumulating history.\n       *\n       * Transient takes precedence over `persist` delivery behaviors: combining them means the\n       * signal is dropped without being stored or delivered, and the accepted result reports\n       * `action: 'discard'`.\n       */\n      transient?: boolean;\n    });\n\n/**\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type AgentSignalDataPart = {\n  type: 'data-user-message' | 'data-signal';\n  data: {\n    id: string;\n    type: AgentSignalCategory;\n    tagName?: AgentSignalTagName;\n    contents: AgentSignalContents;\n    createdAt: string;\n    acceptedAt?: string;\n    attributes?: AgentSignalAttributes;\n    metadata?: Record<string, unknown>;\n    providerOptions?: MastraProviderMetadata;\n    transient?: boolean;\n  };\n  transient: true;\n};\n\ntype CreatedAgentSignalBase = Omit<AgentSignalInputBase, 'id' | 'createdAt' | 'acceptedAt'> & {\n  __isCreatedSignal: true;\n  id: string;\n  createdAt: Date;\n  acceptedAt?: Date;\n  toDBMessage: (options?: { threadId?: string; resourceId?: string }) => MastraDBMessage;\n  toLLMMessage: () => UserModelMessage;\n  toDataPart: () => AgentSignalDataPart;\n};\n\n/**\n * A signal created and validated by `createSignal`.\n *\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport type CreatedAgentSignal =\n  | (CreatedAgentSignalBase & { type: 'state'; transient?: never })\n  | (CreatedAgentSignalBase & {\n      type: Exclude<AgentSignalCategory, 'state'>;\n      transient?: boolean;\n    });\n\nexport function isMastraSignalMessage(message: MastraDBMessage): message is MastraDBMessage & { role: 'signal' } {\n  return message.role === 'signal';\n}\n\n/**\n * True for a signal DB message created with `transient: true`.\n *\n * @mastra/memory keeps a matching local predicate because its peer range includes core versions\n * without this export. Keep both copies in sync until that peer range can be tightened.\n *\n * @experimental Agent signals are experimental and may change in a future release.\n */\nexport function isTransientSignalMessage(message: MastraDBMessage): boolean {\n  if (message.role !== 'signal') return false;\n  const metadata = message.content?.metadata;\n  if (!metadata || typeof metadata !== 'object') return false;\n  const signal = (metadata as Record<string, unknown>).signal;\n  return (\n    !!signal &&\n    typeof signal === 'object' &&\n    !Array.isArray(signal) &&\n    (signal as Record<string, unknown>).transient === true\n  );\n}\n\nfunction normalizeSignalType(input: Pick<AgentSignalInput, 'type' | 'tagName'>): {\n  type: AgentSignalCategory;\n  tagName: AgentSignalTagName;\n} {\n  if (input.type === 'user-message') {\n    return { type: 'user', tagName: input.tagName ?? 'user' };\n  }\n\n  if (input.type === 'system-reminder') {\n    return { type: 'reactive', tagName: input.tagName ?? 'system-reminder' };\n  }\n\n  if (input.type === 'user' || input.type === 'state' || input.type === 'notification') {\n    return { type: input.type, tagName: input.tagName ?? input.type };\n  }\n\n  if (input.type === 'reactive') {\n    return { type: 'reactive', tagName: input.tagName ?? 'system-reminder' };\n  }\n\n  throw new Error(\n    `Invalid signal type: ${input.type}. Use a supported signal type and set tagName for custom XML tags.`,\n  );\n}\n\nfunction normalizeSignal(signal: AgentSignalInput | CreatedAgentSignal) {\n  const { type, tagName } = normalizeSignalType(signal);\n  return {\n    ...signal,\n    type,\n    tagName,\n    id: signal.id ?? crypto.randomUUID(),\n    createdAt:\n      signal.createdAt instanceof Date ? signal.createdAt : signal.createdAt ? new Date(signal.createdAt) : new Date(),\n    acceptedAt:\n      signal.acceptedAt instanceof Date\n        ? signal.acceptedAt\n        : signal.acceptedAt\n          ? new Date(signal.acceptedAt)\n          : undefined,\n  };\n}\n\nfunction escapeXml(value: string): string {\n  return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n}\n\nfunction escapeXmlAttribute(value: string): string {\n  return escapeXml(value).replaceAll('\"', '&quot;');\n}\n\nconst XML_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_.-]*$/;\n\nfunction assertXmlName(name: string, label: string): void {\n  if (!XML_NAME_PATTERN.test(name)) {\n    throw new Error(`Invalid signal XML ${label}: ${name}`);\n  }\n}\n\nfunction signalAttributesToXml(attributes?: AgentSignalAttributes): string {\n  if (!attributes) {\n    return '';\n  }\n\n  const serialized = Object.entries(attributes)\n    .filter((entry): entry is [string, string | number | boolean] => entry[1] !== null && entry[1] !== undefined)\n    .map(([key, value]) => {\n      assertXmlName(key, 'attribute name');\n      return `${key}=\"${escapeXmlAttribute(String(value))}\"`;\n    })\n    .join(' ');\n\n  return serialized ? ` ${serialized}` : '';\n}\n\nexport function signalToXmlMarkup(\n  signal: Pick<AgentSignalInput, 'type' | 'tagName' | 'attributes'> & { contents?: string },\n): string {\n  const tagName = signal.tagName ?? normalizeSignalType(signal).tagName;\n  assertXmlName(tagName, 'tag name');\n  const attributesXml = signalAttributesToXml(signal.attributes);\n  if (!signal.contents) return `<${tagName}${attributesXml} />`;\n  return `<${tagName}${attributesXml}>${escapeXml(signal.contents)}</${tagName}>`;\n}\n\n// Recover legacy metadata.signal.contents shapes (pre-narrowing) into the current\n// AgentSignalContents. Older rows could stash any of:\n//   - string                                          (most signals)\n//   - Array<TextPart | FilePart> with mediaType       (TUI image messages)\n//   - { role: 'user', content: string | Array<...> } (TUI createUserSignalContent)\n//   - CoreUserMessage[] / string[]                    (React hook BaseMessageListInput)\n// Anything that doesn't decode cleanly returns undefined so the caller can fall back to\n// the canonical content.parts projection.\nfunction legacyContentsToSignalContents(value: unknown): AgentSignalContents | undefined {\n  if (typeof value === 'string') return value;\n\n  if (Array.isArray(value)) {\n    const parts: Array<TextPart | FilePart> = [];\n    for (const entry of value) {\n      if (typeof entry === 'string') {\n        parts.push({ type: 'text', text: entry });\n        continue;\n      }\n      const decoded = legacyEntryToParts(entry);\n      if (!decoded) return undefined;\n      parts.push(...decoded);\n    }\n    return collapseLegacyParts(parts);\n  }\n\n  const decoded = legacyEntryToParts(value);\n  return decoded ? collapseLegacyParts(decoded) : undefined;\n}\n\nfunction legacyEntryToParts(entry: unknown): Array<TextPart | FilePart> | undefined {\n  if (!entry || typeof entry !== 'object') return undefined;\n  const record = entry as Record<string, unknown>;\n\n  // CoreUserMessage wrapper: { role: 'user', content: string | Array<...> }.\n  if (record.role === 'user' && 'content' in record) {\n    const content = record.content;\n    if (typeof content === 'string') return [{ type: 'text', text: content }];\n    if (Array.isArray(content)) {\n      const inner: Array<TextPart | FilePart> = [];\n      for (const part of content) {\n        const decoded = legacyPartToSignalPart(part);\n        if (!decoded) return undefined;\n        inner.push(decoded);\n      }\n      return inner;\n    }\n    return undefined;\n  }\n\n  // Bare TextPart / FilePart / ImagePart.\n  const part = legacyPartToSignalPart(record);\n  return part ? [part] : undefined;\n}\n\nfunction legacyPartToSignalPart(part: unknown): TextPart | FilePart | undefined {\n  if (!part || typeof part !== 'object') return undefined;\n  const record = part as Record<string, unknown>;\n  const providerOptions =\n    record.providerOptions && typeof record.providerOptions === 'object' && !Array.isArray(record.providerOptions)\n      ? (record.providerOptions as MastraProviderMetadata)\n      : undefined;\n\n  if (record.type === 'text' && typeof record.text === 'string') {\n    return { type: 'text', text: record.text, ...(providerOptions ? { providerOptions } : {}) };\n  }\n\n  // Accept both shapes here: rows written by main + the v4-shaped narrowed branch used\n  // `mimeType`; rows that came in as v5 user input (and current canonical) use `mediaType`.\n  if (record.type === 'file' || record.type === 'image') {\n    const data = record.type === 'image' ? (record.image ?? record.data) : record.data;\n    if (typeof data !== 'string') return undefined;\n    const mediaType =\n      typeof record.mediaType === 'string'\n        ? record.mediaType\n        : typeof record.mimeType === 'string'\n          ? record.mimeType\n          : record.type === 'image'\n            ? 'image/png'\n            : '';\n    if (!mediaType) return undefined;\n    return {\n      type: 'file',\n      data,\n      mediaType,\n      ...(typeof record.filename === 'string' ? { filename: record.filename } : {}),\n      ...(providerOptions ? { providerOptions } : {}),\n    };\n  }\n\n  return undefined;\n}\n\nfunction collapseLegacyParts(parts: Array<TextPart | FilePart>): AgentSignalContents | undefined {\n  if (parts.length === 0) return undefined;\n  const first = parts[0];\n  if (parts.length === 1 && first?.type === 'text') return first.text;\n  return parts;\n}\n\nfunction contentsToSignalParts(contents: AgentSignalContents): SignalPart[] {\n  if (typeof contents === 'string') return [{ type: 'text', text: contents }];\n  return contents.map(part => {\n    if (part.type === 'file') {\n      const data = part.data instanceof URL ? part.data.toString() : convertDataContentToBase64String(part.data);\n      return {\n        type: 'file',\n        data,\n        mediaType: part.mediaType,\n        ...(part.filename ? { filename: part.filename } : {}),\n        ...(part.providerOptions ? { providerOptions: part.providerOptions as MastraProviderMetadata } : {}),\n      };\n    }\n    return {\n      type: 'text',\n      text: part.text,\n      ...(part.providerOptions ? { providerOptions: part.providerOptions as MastraProviderMetadata } : {}),\n    };\n  });\n}\n\n// Narrow a storage parts array down to SignalPart. Signal rows should only ever contain text/file\n// parts (that's what contentsToSignalParts produces), but the storage type permits richer parts —\n// so the read boundary filters defensively.\nfunction storagePartsToSignalParts(parts: MastraMessagePart[]): SignalPart[] {\n  const out: SignalPart[] = [];\n  for (const part of parts) {\n    const providerOptions = (part as { providerMetadata?: MastraProviderMetadata }).providerMetadata;\n    if (part.type === 'text') {\n      out.push({\n        type: 'text',\n        text: part.text,\n        ...(providerOptions ? { providerOptions } : {}),\n      });\n    } else if (part.type === 'file' && typeof (part as { data?: unknown }).data === 'string') {\n      const file = part as { data: string; mimeType?: string; filename?: string };\n      out.push({\n        type: 'file',\n        data: file.data,\n        mediaType: typeof file.mimeType === 'string' ? file.mimeType : '',\n        ...(typeof file.filename === 'string' ? { filename: file.filename } : {}),\n        ...(providerOptions ? { providerOptions } : {}),\n      });\n    }\n  }\n  return out;\n}\n\n// Project canonical signal parts back into the public AgentSignalContents shape. Collapses a\n// single text part to a bare string; otherwise returns the parts unchanged (both internal\n// SignalPart and the public v5 FilePart use `mediaType`).\nfunction partsToSignalContents(parts: SignalPart[]): AgentSignalContents {\n  if (parts.length === 1 && parts[0]?.type === 'text' && !parts[0].providerOptions) return parts[0].text;\n  return parts.map<TextPart | FilePart>(part =>\n    part.type === 'file'\n      ? {\n          type: 'file',\n          data: part.data,\n          mediaType: part.mediaType,\n          ...(part.filename ? { filename: part.filename } : {}),\n          ...(part.providerOptions ? { providerOptions: part.providerOptions } : {}),\n        }\n      : {\n          type: 'text',\n          text: part.text,\n          ...(part.providerOptions ? { providerOptions: part.providerOptions } : {}),\n        },\n  );\n}\n\nfunction hasMeaningfulAttributes(attributes?: AgentSignalAttributes): boolean {\n  if (!attributes) return false;\n  return Object.keys(attributes).some(key => {\n    const value = attributes[key];\n    return value !== null && value !== undefined;\n  });\n}\n\n// Inline-wrap the first text part with the signal's XML tag. If there's no text part, prepend\n// a self-closing marker as a synthetic first part so attributes still surface alongside the\n// file/image payload on the same turn.\nfunction injectMarkerInline(\n  signal: Pick<AgentSignalInput, 'type' | 'tagName' | 'attributes'>,\n  parts: SignalPart[],\n): SignalPart[] {\n  let wrapped = false;\n  const out: SignalPart[] = [];\n  for (const part of parts) {\n    if (!wrapped && part.type === 'text') {\n      wrapped = true;\n      out.push({ ...part, text: signalToXmlMarkup({ ...signal, contents: part.text }) });\n    } else {\n      out.push(part);\n    }\n  }\n  if (!wrapped) {\n    const markerText = signalToXmlMarkup({ type: signal.type, tagName: signal.tagName, attributes: signal.attributes });\n    out.unshift({ type: 'text', text: markerText });\n  }\n  return out;\n}\n\n// Build the LLM-facing projection from the canonical parts. Returns a v5 UserModelMessage\n// (a prompt turn the model sees, not a signal row). The XML wrapper carries the attributes\n// inline so there's no metadata.signal here.\nfunction signalToLLMMessage(\n  signal: Pick<AgentSignalInput, 'type' | 'tagName' | 'attributes' | 'providerOptions'>,\n  parts: SignalPart[],\n): UserModelMessage {\n  const isUserMessage = signal.type === 'user';\n  const hasAttrs = hasMeaningfulAttributes(signal.attributes);\n\n  const anyPartProviderOptions = parts.some(part => part.providerOptions);\n\n  let content: UserModelMessage['content'];\n  if (isUserMessage && !hasAttrs) {\n    // user-message with no attributes — pass parts through unchanged. Collapse a single text\n    // part to a bare string so providers get their natural prompt shape (unless the part\n    // carries providerOptions, in which case we keep the parts array to preserve them).\n    content = parts.length === 1 && parts[0]?.type === 'text' && !parts[0].providerOptions ? parts[0].text : parts;\n  } else if (parts.every(part => part.type === 'text') && !anyPartProviderOptions) {\n    // Text-only with no per-part providerOptions: flatten to one wrapped string.\n    content = signalToXmlMarkup({ ...signal, contents: parts.map(part => part.text).join('\\n') });\n  } else {\n    // Multimodal or per-part providerOptions present: inline-wrap the marker alongside the\n    // payload so each part (and its providerOptions) is preserved.\n    content = injectMarkerInline(signal, parts);\n  }\n\n  return {\n    role: 'user',\n    content,\n    ...(signal.providerOptions ? { providerOptions: signal.providerOptions } : {}),\n  };\n}\n\nfunction signalToDataPart(signal: ReturnType<typeof normalizeSignal>, parts: SignalPart[]): AgentSignalDataPart {\n  return {\n    type: signal.type === 'user' ? 'data-user-message' : 'data-signal',\n    data: {\n      id: signal.id,\n      type: signal.type,\n      tagName: signal.tagName,\n      contents: partsToSignalContents(parts),\n      createdAt: signal.createdAt.toISOString(),\n      ...(signal.acceptedAt ? { acceptedAt: signal.acceptedAt.toISOString() } : {}),\n      ...(signal.attributes ? { attributes: signal.attributes } : {}),\n      ...(signal.metadata ? { metadata: signal.metadata } : {}),\n      ...(signal.providerOptions ? { providerOptions: signal.providerOptions } : {}),\n      ...(signal.transient ? { transient: true } : {}),\n    },\n    transient: true,\n  };\n}\n\nfunction signalToDBMessage(\n  signal: ReturnType<typeof normalizeSignal>,\n  parts: SignalPart[],\n  options?: { threadId?: string; resourceId?: string },\n): MastraDBMessage {\n  const storageParts: MastraMessagePart[] =\n    parts.length > 0\n      ? parts.map(part =>\n          part.type === 'file'\n            ? {\n                type: 'file',\n                data: part.data,\n                mimeType: part.mediaType,\n                ...(part.filename ? { filename: part.filename } : {}),\n                ...(part.providerOptions ? { providerMetadata: part.providerOptions } : {}),\n              }\n            : {\n                type: 'text',\n                text: part.text,\n                ...(part.providerOptions ? { providerMetadata: part.providerOptions } : {}),\n              },\n        )\n      : [{ type: 'text', text: '' }];\n  return {\n    id: signal.id,\n    role: 'signal',\n    createdAt: signal.createdAt,\n    threadId: options?.threadId,\n    resourceId: options?.resourceId,\n    type: signal.tagName,\n    content: {\n      format: 2,\n      parts: storageParts,\n      ...(signal.providerOptions ? { providerMetadata: signal.providerOptions } : {}),\n      metadata: {\n        signal: {\n          id: signal.id,\n          type: signal.type,\n          tagName: signal.tagName,\n          createdAt: signal.createdAt.toISOString(),\n          ...(signal.acceptedAt ? { acceptedAt: signal.acceptedAt.toISOString() } : {}),\n          ...(signal.attributes ? { attributes: signal.attributes } : {}),\n          ...(signal.metadata ? { metadata: signal.metadata } : {}),\n          ...(signal.transient ? { transient: true } : {}),\n        },\n      },\n    },\n  };\n}\n\nexport function isCreatedAgentSignal(input: unknown): input is CreatedAgentSignal {\n  if (!input || typeof input !== 'object' || Array.isArray(input)) return false;\n\n  const candidate = input as Partial<CreatedAgentSignal>;\n  return candidate.__isCreatedSignal === true;\n}\n\nexport function createSignal(\n  input: Extract<AgentSignalInput, { type: 'state' }>,\n): Extract<CreatedAgentSignal, { type: 'state' }>;\nexport function createSignal(\n  input: Extract<AgentSignalInput, { type: Exclude<AgentSignalType, 'state'> }>,\n): Extract<CreatedAgentSignal, { type: Exclude<AgentSignalCategory, 'state'> }>;\nexport function createSignal(input: AgentSignalInput): CreatedAgentSignal;\nexport function createSignal(input: AgentSignalInput): CreatedAgentSignal {\n  if (input.type === 'state' && input.transient !== undefined) {\n    // State signals maintain cross-turn tracking (version/cacheKey/activeCopies) that is\n    // rebuilt from persisted history — a delivery-only state signal would silently break\n    // dedupe and leave tracking pointing at messages that were never stored.\n    throw new Error('state signals cannot be transient');\n  }\n  const signal = normalizeSignal(input);\n  const parts = contentsToSignalParts(signal.contents);\n\n  const created = {\n    ...signal,\n    __isCreatedSignal: true as const,\n    toDBMessage: (options?: { threadId?: string; resourceId?: string }) => signalToDBMessage(signal, parts, options),\n    toLLMMessage: () => signalToLLMMessage(signal, parts),\n    toDataPart: () => signalToDataPart(signal, parts),\n  };\n\n  if (created.type === 'state') {\n    const { transient: _transient, ...stateSignal } = created;\n    return { ...stateSignal, type: created.type };\n  }\n\n  return { ...created, type: created.type };\n}\n\n/**\n * Resolve delivery option attributes into concrete `attributes` on a signal.\n * Returns a new signal with the selected branch's `attributes` merged into\n * top-level `attributes`.\n *\n * @experimental\n */\nexport function resolveDeliveryAttributes(\n  signal: CreatedAgentSignal,\n  attributes: AgentSignalAttributes | undefined,\n): CreatedAgentSignal {\n  if (!attributes || Object.keys(attributes).length === 0) return signal;\n\n  return createSignal({\n    ...signal,\n    attributes: { ...signal.attributes, ...attributes },\n  });\n}\n\nexport function signalToMessage(signal: AgentSignalInput | CreatedAgentSignal): UserModelMessage {\n  return createSignal(signal).toLLMMessage();\n}\n\nexport function signalToMastraDBMessage(\n  signal: AgentSignalInput | CreatedAgentSignal,\n  options?: { threadId?: string; resourceId?: string },\n): MastraDBMessage {\n  return createSignal(signal).toDBMessage(options);\n}\n\nexport function signalToDataPartFormat(signal: AgentSignalInput | CreatedAgentSignal): AgentSignalDataPart {\n  return createSignal(signal).toDataPart();\n}\n\nexport function mastraDBMessageToSignal(message: MastraDBMessage): CreatedAgentSignal {\n  const metadataSignal = message.content.metadata?.signal;\n  const signalMetadata =\n    metadataSignal && typeof metadataSignal === 'object' && !Array.isArray(metadataSignal)\n      ? (metadataSignal as Record<string, unknown>)\n      : undefined;\n\n  const rawType = typeof signalMetadata?.type === 'string' ? signalMetadata.type : (message.type ?? 'user-message');\n  const type = rawType as AgentSignalType;\n  const tagName = typeof signalMetadata?.tagName === 'string' ? signalMetadata.tagName : undefined;\n  // Reconstruct contents from content.parts — the canonical source. Legacy rows (pre stash\n  // removal) preserved the original input shape on metadata.signal.contents; recover whatever\n  // we can from it (string, parts array, CoreUserMessage wrapper, CoreUserMessage[]) so files\n  // and other non-text payloads keep loading. If the stash is unrecognisable, fall back to the\n  // canonical parts projection.\n  const rawLegacyContents = signalMetadata && 'contents' in signalMetadata ? signalMetadata.contents : undefined;\n  const legacyContents = legacyContentsToSignalContents(rawLegacyContents);\n  const partsContents = partsToSignalContents(storagePartsToSignalParts(message.content.parts));\n  const contents = legacyContents ?? partsContents;\n  const providerMetadata = message.content.providerMetadata;\n  const base = {\n    id: typeof signalMetadata?.id === 'string' ? signalMetadata.id : message.id,\n    createdAt: typeof signalMetadata?.createdAt === 'string' ? signalMetadata.createdAt : message.createdAt,\n    acceptedAt: typeof signalMetadata?.acceptedAt === 'string' ? signalMetadata.acceptedAt : undefined,\n    attributes:\n      signalMetadata?.attributes &&\n      typeof signalMetadata.attributes === 'object' &&\n      !Array.isArray(signalMetadata.attributes)\n        ? (signalMetadata.attributes as AgentSignalAttributes)\n        : undefined,\n    metadata:\n      signalMetadata?.metadata && typeof signalMetadata.metadata === 'object' && !Array.isArray(signalMetadata.metadata)\n        ? (signalMetadata.metadata as AgentSignalInput['metadata'])\n        : undefined,\n    providerOptions:\n      providerMetadata && typeof providerMetadata === 'object' && !Array.isArray(providerMetadata)\n        ? (providerMetadata as MastraProviderMetadata)\n        : undefined,\n  };\n\n  if (type === 'state' && signalMetadata?.transient !== undefined) {\n    throw new Error('state signals cannot be transient');\n  }\n\n  return type === 'state'\n    ? createSignal({ ...base, type, tagName, contents })\n    : createSignal({\n        ...base,\n        type,\n        tagName,\n        contents,\n        transient: signalMetadata?.transient === true ? true : undefined,\n      });\n}\n\nexport function createMessageSignal(\n  input: AgentMessageInput,\n  options?: Pick<AgentSignalInput, 'id' | 'createdAt' | 'acceptedAt'>,\n): CreatedAgentSignal {\n  const message = typeof input === 'string' || Array.isArray(input) ? { contents: input } : input;\n  return createSignal({\n    ...message,\n    ...options,\n    type: 'user',\n    tagName: 'user',\n  });\n}\n\nexport function dataPartToSignal(part: AgentSignalDataPart): CreatedAgentSignal {\n  if (part.data.type === 'state') {\n    if (part.data.transient !== undefined) throw new Error('state signals cannot be transient');\n    const { transient: _transient, ...data } = part.data;\n    return createSignal({ ...data, type: 'state' });\n  }\n\n  return createSignal({ ...part.data, type: part.data.type });\n}\n"],"mappings":"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"}