/**
 * Pure conversion functions: owned AI Context → Shortcut backend proxy format.
 *
 * These are the types and functions that define the request contract between
 * the TS agent and the Python backend's /api/llm/* endpoints.
 *
 * Important boundary rule: this module is model-agnostic. It emits canonical
 * image/document blocks (`{ type, data, mime_type }`) and never Anthropic,
 * Gemini, or OpenAI provider payloads. Provider-family normalization lives in
 * the Python backend proxy.
 * Zero I/O — fully testable with no mocking.
 */
import type { Context } from '../../ai/types.js';
interface LCToolCall {
    id: string;
    name: string;
    arguments: string;
}
interface LCMessage {
    role: 'system' | 'human' | 'ai' | 'tool';
    content: string | Record<string, unknown>[];
    tool_calls?: LCToolCall[];
    tool_call_id?: string;
    thinking?: string;
    thinking_signature?: string;
}
interface LCTool {
    name: string;
    description: string;
    parameters: Record<string, unknown>;
}
/**
 * Convert a full owned-AI context into the backend proxy message contract.
 *
 * This is intentionally not model-aware. Media is serialized as canonical
 * backend blocks; the backend decides whether those become Anthropic
 * `source`, Gemini `media`/`image_url`, or an unsupported-model error.
 */
export declare function convertMessages(context: Context): LCMessage[];
/**
 * Convert owned AI Tool[] to LangChain tool format.
 * Returns undefined if no tools (backend omits the field).
 */
export declare function convertTools(tools: Context['tools']): LCTool[] | undefined;
export {};
//# sourceMappingURL=message-converter.d.ts.map