import type { ChatMessage } from "../types.js"; /** * Marker prefix used when a mid-conversation `system` message has to be * delivered as a user turn because the provider dialect only has a single * top-level system field (Anthropic `system`, Gemini `systemInstruction`). */ export declare const SYSTEM_TURN_MARKER = "[SYSTEM]"; /** Mutable, current-turn authority promoted into provider system fields. */ export declare const REQUEST_CONTEXT_PREFIX = "REQUEST CONTEXT"; export declare function isRequestContextSystemMessage(message: ChatMessage): boolean; export declare function requestContextSystemPrompts(messages: readonly ChatMessage[]): string[]; export declare function withoutRequestContextSystemMessages(messages: readonly ChatMessage[]): ChatMessage[]; export declare function upsertRequestContextMessage(messages: ChatMessage[], content: string): void; /** * One shared ordered normalization contract for dialects with a * single system slot. * * The first system message becomes the dialect's system field. Every later * system message (compaction memory, live plan, engagement scope, Responder * ledger, loop-guard/progress steering) is preserved *in place* as a user turn * tagged with {@link SYSTEM_TURN_MARKER}, so ordering relative to tool groups * is untouched and nothing is silently dropped. * * The marker is applied exactly once: content that already carries it is * passed through unchanged. */ export declare function normalizeSystemMessages(messages: ChatMessage[]): { /** Content of the first system message, if any. */ systemPrompt: string | undefined; /** History with later system messages converted to marked user turns. */ rest: ChatMessage[]; }; export declare function singleLeadingSystemMessages(messages: readonly ChatMessage[]): ChatMessage[]; export declare function markSystemTurn(content: string): string; /** Content of the first system message, matching the dialect system field. */ export declare function firstSystemPrompt(messages: ChatMessage[]): string | undefined;