import type { ModelMessage } from './model.js'; import type { SessionEntry } from './types.js'; export interface ContextBudget { estimatedTokens: number; contextWindowTokens?: number; reserveTokens: number; compactAtTokens?: number; shouldCompact: boolean; keepRecentTokens?: number; } export interface ContextBudgetOptions { contextWindowTokens?: number; compactAtTokens?: number; reserveTokens?: number; keepRecentTokens?: number; } export declare function estimateTextTokens(text: string): number; export declare function estimateModelMessagesTokens(messages: ModelMessage[]): number; export declare function estimateSessionEntryTokens(entry: SessionEntry): number; export declare function estimateSessionEntriesTokens(entries: SessionEntry[]): number; /** * Compute model-aware compaction defaults. Reserve is capped at the model's * max output because reserving more than the model can emit in one turn * wastes context; the preserved tail stays flat because recent-context * fidelity depends on the active work, not on the model's total window size. */ export declare function deriveCompactionDefaults(input: { contextWindowTokens: number; maxOutputTokens?: number; }): { reserveTokens: number; keepRecentTokens: number; }; export declare function evaluateContextBudget(messages: ModelMessage[], options?: ContextBudgetOptions): ContextBudget; export declare function isContextOverflowError(error: unknown): boolean; //# sourceMappingURL=context-budget.d.ts.map