import type { TextContent, ImageContent, VideoContent } from "@kenkaiiii/gg-ai"; type ContentPart = TextContent | ImageContent | VideoContent; type UserContent = string | ContentPart[]; /** * Framing prepended to a mid-run steering message (a prompt the user submitted * while the agent was already working). * * Without this wrapper the queued text arrives as a bare top-level user turn, * identical to a brand-new request — so models treat it as the authoritative * instruction and silently abandon the original task. The wrapper names the * relationship (a second, concurrent instruction) and the one rule that kills * the failure mode: don't drop either side. The model already knows how to * merge two live instructions once it knows both are in force. */ export declare const STEERING_PREFIX: string; /** Wrap a plain-text steering message with the framing prefix. */ export declare function wrapSteeringText(text: string): string; /** * Framing for pushed status notifications (a spawned child finished, a * background process reported progress or exited). * * Same problem as STEERING_PREFIX, opposite instruction: an unframed status * line reads as a new user request, so models abandon the current task to * "handle" it. This names it as information about work the agent itself * started, and says plainly that no reply is required. */ export declare const NOTIFICATION_PREFIX: string; /** Frame one or more pushed status lines as a single steering message. */ export declare function buildNotificationSteeringText(lines: readonly string[]): string; /** * Wrap a steering `UserContent` (string or multimodal parts) with the framing * prefix. Media blocks pass through untouched; the prefix is prepended to the * leading text so attachments still ride the same native-block path. */ export declare function wrapSteeringContent(content: UserContent): UserContent; export {}; //# sourceMappingURL=steering.d.ts.map