import type { AgentMessage } from "@mariozechner/pi-agent-core"; /** * Hard character limit for a single tool result text block. * Even for the largest context windows (~2M tokens), a single tool result * should not exceed ~400K characters (~100K tokens). * This acts as a safety net when we don't know the context window size. */ export declare const HARD_MAX_TOOL_RESULT_CHARS = 400000; type ToolResultTruncationOptions = { suffix?: string; minKeepChars?: number; }; /** * Truncate a single text string to fit within maxChars. * * Uses a head+tail strategy when the tail contains important content * (errors, results, JSON structure), otherwise preserves the beginning. * This ensures error messages and summaries at the end of tool output * aren't lost during truncation. */ export declare function truncateToolResultText(text: string, maxChars: number, options?: ToolResultTruncationOptions): string; /** * Calculate the maximum allowed characters for a single tool result * based on the model's context window tokens. * * Uses a rough 4 chars ≈ 1 token heuristic (conservative for English text; * actual ratio varies by tokenizer). */ export declare function calculateMaxToolResultChars(contextWindowTokens: number): number; /** * Get the total character count of text content blocks in a tool result message. */ export declare function getToolResultTextLength(msg: AgentMessage): number; /** * Truncate a tool result message's text content blocks to fit within maxChars. * Returns a new message (does not mutate the original). */ export declare function truncateToolResultMessage(msg: AgentMessage, maxChars: number, options?: ToolResultTruncationOptions): AgentMessage; /** * Find oversized tool result entries in a session and truncate them. * * This operates on the session file by: * 1. Opening the session manager * 2. Walking the current branch to find oversized tool results * 3. Branching from before the first oversized tool result * 4. Re-appending all entries from that point with truncated tool results * * @returns Object indicating whether any truncation was performed */ export declare function truncateOversizedToolResultsInSession(params: { sessionFile: string; contextWindowTokens: number; sessionId?: string; sessionKey?: string; }): Promise<{ truncated: boolean; truncatedCount: number; reason?: string; }>; /** * Truncate oversized tool results in an array of messages (in-memory). * Returns a new array with truncated messages. * * This is used as a pre-emptive guard before sending messages to the LLM, * without modifying the session file. */ export declare function truncateOversizedToolResultsInMessages(messages: AgentMessage[], contextWindowTokens: number): { messages: AgentMessage[]; truncatedCount: number; }; /** * Check if a tool result message exceeds the size limit for a given context window. */ export declare function isOversizedToolResult(msg: AgentMessage, contextWindowTokens: number): boolean; /** * Estimate whether the session likely has oversized tool results that caused * a context overflow. Used as a heuristic to decide whether to attempt * tool result truncation before giving up. */ export declare function sessionLikelyHasOversizedToolResults(params: { messages: AgentMessage[]; contextWindowTokens: number; }): boolean; export {};