import { type LanguageModel, type ModelMessage } from 'ai'; import type { HarnessConfig } from '../../types/index.js'; export interface ResolvedAutoCompaction { maxMessages: number | undefined; maxTokens: number | undefined; strategy: 'truncate' | 'summarize'; summaryModel?: LanguageModel; } export declare function estimateHistoryTokens(messages: ModelMessage[]): number; export declare function resolveEffectiveAutoCompaction(config: HarnessConfig): ResolvedAutoCompaction | null; /** * Truncate tool-call arguments and tool-result outputs in older messages. * Cheap pre-compaction pass that reclaims significant context without an * LLM call — tool outputs are the largest context consumers but least * important for conversational continuity. (DeepAgents / Cloudflare pattern) * * Only truncates messages BEFORE `recentKeep`; recent messages stay intact. */ export declare function truncateToolArguments(messages: ModelMessage[], recentKeep: number): ModelMessage[]; /** * Strip orphaned tool results whose matching tool call was truncated, * and orphaned tool calls whose results were truncated. * OpenAI rejects conversations with mismatched tool call/result pairs. */ export declare function stripOrphanedToolPairs(messages: ModelMessage[]): ModelMessage[]; export declare function autoCompactMessages(messages: ModelMessage[], config: HarnessConfig, resolved: ResolvedAutoCompaction, opts?: { defaultModel?: LanguageModel; abortSignal?: AbortSignal; }): Promise<{ messages: ModelMessage[]; compacted: boolean; }>;