import { type UserContent, type TranscriptionModel } from 'ai'; /** * User-turn content the runtime accepts: plain text, or AI SDK multimodal parts * (text + file/image/audio). This is exactly the `content` of a user `ModelMessage`, * so it threads into the model with no translation. * * Durability invariant: any `FilePart.data` flowing through the runtime must be * JSON-serializable (a base64 string, data URL, or https URL) — never a raw * `Buffer`/`Uint8Array`. `RunState.messages`, `session.messages`, and the pending * input buffer are all persisted through the `SessionStore` (JSON/Redis/Postgres). */ export type UserInputContent = UserContent; /** Merge multiple user inputs into one turn (ingress coalescing / mid-turn drain). */ export declare function mergeUserInputContents(items: UserInputContent[]): UserInputContent | undefined; /** Text projection of user input — for confirm-gate parsing, choice matching, and * extraction hints. Non-text parts are dropped. A plain string returns as-is. */ export declare function userInputToText(input: UserInputContent): string; /** Whether the input carries any non-text (file/image/audio) parts. */ export declare function hasMediaParts(input: UserInputContent): boolean; /** * Replace audio file parts with their transcript (a text part) using an AI SDK * transcription model. With no model configured, audio parts pass through * unchanged — audio-capable models (e.g. Gemini) accept them directly. Non-audio * parts (images, documents) are always left untouched. */ export declare function transcribeAudioParts(input: UserInputContent, transcriptionModel: TranscriptionModel | undefined): Promise;