import type { AgentMessage } from '@earendil-works/pi-agent-core'; import { type Api, type Model } from '@earendil-works/pi-ai/compat'; import type { CompactionAudit, CompactionHandover } from '../../session/compaction-types.js'; import type { TranscriptSourceEntry } from '../../storage/sqlite/transcript-repository.js'; export interface CompactionResult { summary: string; messages: AgentMessage[]; firstKeptIndex: number; tokensBefore: number; tokensAfter: number; compacted: boolean; plannerVersion?: 3; summaryModelRef?: string; qualityAudit?: 'passed' | 'disabled'; handover?: CompactionHandover; audit?: CompactionAudit; compactedUsage?: { input: number; output: number; total: number; cost?: number; }; } export interface CompactionConfig { enabled: boolean; triggerThreshold: number; minMessagesBeforeCompact: number; keepRecentTokens: number; recentTurnsPreserve: number; summaryMaxTokens: number; summaryChunkTokens: number; summaryTimeoutMs: number; summaryRetries: number; qualityGuard: boolean; gapAudit: boolean; accumulateUsage: boolean; } export interface CompactionExecutionOptions { fallbackModels?: Array>; signal?: AbortSignal; } export declare const DEFAULT_COMPACTION_CONFIG: CompactionConfig; interface MessageUsage { input: number; output: number; total: number; cost?: number; } export declare function accumulateUsage(messages: AgentMessage[]): MessageUsage | undefined; export declare class SessionCompactor { private readonly config; constructor(config?: Partial); getConfig(): Readonly; compact(entries: readonly TranscriptSourceEntry[], model: Model, instructions?: string, force?: boolean, options?: CompactionExecutionOptions): Promise; estimateTotalTokens(messages: AgentMessage[]): number; private generateHandover; private auditHandover; private callHandoverModels; } export {};