import type { AgentMessage } from "@earendil-works/pi-agent-core"; import type { ProviderHeaders } from "@earendil-works/pi-ai"; import { type ContextRemaining } from "./window-budget.ts"; import type { CompactionResult, ExtensionAPI, ExtensionContext, SessionBeforeCompactEvent, SessionEntry } from "@earendil-works/pi-coding-agent"; import type { ContextManagementMode } from "../adapter/activation/config.ts"; import { type CodexContextManagementMessageDetails, type ContextWindowCompactionDetails, type ContextWindowIdentity } from "./messages.ts"; interface StartContextWindowOptions { triggerTurn: boolean; signal?: AbortSignal | undefined; mode?: ContextManagementMode | undefined; trimPreviousWindow: boolean; } type ThreadHintLoader = (ctx: ExtensionContext, mode: ContextManagementMode, signal?: AbortSignal) => Promise; export declare class CodexContextWindowManager { private identity; private readonly budget; private rolloverPending; private trimPendingWindowId; private readonly loadThreadHint; constructor(loadThreadHint?: ThreadHintLoader); reset(): void; currentIdentity(): ContextWindowIdentity | undefined; restore(entries: readonly SessionEntry[]): void; ensureInitialized(pi: ExtensionAPI, ctx: ExtensionContext, active: boolean): void; project(messages: readonly AgentMessage[], mode: ContextManagementMode, activeEntries?: readonly SessionEntry[], allEntries?: readonly SessionEntry[]): AgentMessage[]; startNewWindow(pi: ExtensionAPI, ctx: ExtensionContext, options: StartContextWindowOptions): Promise; recordBudget(pi: ExtensionAPI, ctx: ExtensionContext, active: boolean, contextTokens?: number): void; remaining(ctx: ExtensionContext, contextTokens?: number): ContextRemaining; prepareCompaction(event: SessionBeforeCompactEvent, mode: ContextManagementMode): { cancel: true; } | { compaction: CompactionResult; } | undefined; recordCompaction(details: unknown): void; createCompaction(event: SessionBeforeCompactEvent): CompactionResult; rewritePayload(payload: unknown, ctx: ExtensionContext): unknown; rewriteHeaders(headers: ProviderHeaders, ctx: ExtensionContext): void; private sendWindowMessage; } export declare function findLatestWindowBoundaryEntry(entries: readonly SessionEntry[]): (Extract & { details: CodexContextManagementMessageDetails; }) | undefined; export {};