/** * window/options — validate a window strategy's options ONCE, at build time. * * Pattern: Guard functions returning a resolved config. * Role: core/ layer. Every message here takes a `label`, because the same * option bag arrives through two doors — `.compaction({...})` and * `summarizeOldest({...})` — and an error should name the door the * caller actually used. One implementation, so the two doors can * never drift into validating differently. * Emits: N/A. * * Everything fails at `.build()`, never mid-run. A window policy that turns * out to be nonsense on iteration 40 of a paid run is a policy that cost you * money to discover. */ import type { CompactionOptions, CompactionRetention, ResolvedCompaction, SlidingWindowOptions, TokenBudgetOptions } from './types.js'; /** Default depth of the "never touch this" recent window. */ export declare const DEFAULT_KEEP_RECENT_TURNS = 6; /** * How many tools' most recent results the window holds beyond * `keepRecentTurns` when nobody said (9.57.0). ON by default, at 2. * * On by default for the same reason 9.55.0's anchor is: the counterfactual to * a pinned 5,800-character tool result is not 5,800 bytes saved, it is a * fabricated id, a refusal, a wasted action out of a small budget, and the * same 5,800 bytes fetched again. That is a correctness failure the framework * caused, and those are fixed on by default. * * TWO rather than one because the ceiling is spent newest-first among STALE * candidates: a one-word acknowledgement from an actuator the model has * stopped using can occupy a slot ahead of an older load-bearing observation. * Two slots absorb that. `false` or `0` switches the pin off entirely. */ export declare const DEFAULT_KEEP_LAST_TOOL_RESULTS = 2; /** * Validate the `keepLastToolResults` dial. Refused at construction, never * mid-run — the house rule for every window option. */ export declare function requireKeepLastToolResults(value: unknown, label: string): void; /** * What happens to folded messages when nobody said. The originals ride with * the conversation: losing them has to be a choice somebody typed, not a * default they inherited. */ export declare const DEFAULT_RETENTION: CompactionRetention; /** * Validate `.compaction()` / `summarizeOldest()` options. * * @param label the door being used, so the error names it */ export declare function resolveCompactionOptions(options: CompactionOptions, label: string): ResolvedCompaction; /** Validate `slidingWindow()` options. */ export declare function resolveSlidingWindowOptions(options: SlidingWindowOptions, label: string): { readonly keepRecentTurns: number; }; /** Validate `tokenBudget()` options. */ export declare function resolveTokenBudgetOptions(options: TokenBudgetOptions, label: string): { readonly thresholdTokens: number; readonly keepRecentTurns: number; };