/** Pure Messages projection shared by body construction and replay checks. */
import type { LLMMessage, LLMToolSchema } from '../../provider-contract/types.js';
import type { AnthropicMessageParam, AnthropicTool } from './anthropicMessagesWire.js';
/**
 * Framework messages → Anthropic messages.
 *
 * `role: 'system'` is DROPPED: this wire takes the system prompt as a separate
 * top-level field (`LLMRequest.systemPrompt`). That is why every adapter on it
 * carries only `['user', 'assistant']` in messages. A `role: 'tool'` result
 * becomes a `tool_result` block on a user turn, coalesced with the results of
 * the same batch. An `assistant` turn with no thinking blocks, no text and no
 * tool calls is DROPPED too — the API refuses empty content anywhere but a
 * final prefill.
 *
 * ONE owner: `anthropic()`, `browserAnthropic()` and `invokeModelGateway()`
 * all build their messages here.
 */
export declare function toAnthropicMessages(messages: readonly LLMMessage[], indexMap?: number[]): AnthropicMessageParam[];
export declare function toAnthropicTool(schema: LLMToolSchema): AnthropicTool;
