export const COMPACTION_OVERRIDE_ENTRY = "vera.compaction.override"; export const COMPACTION_DETAILS_VERSION = 3; /** Structural subset of Pi's model registry entries used by compaction. */ export interface CompactModel { provider: string; id: string; name?: string; api?: string; reasoning?: boolean; contextWindow?: number; maxTokens?: number; input?: string[]; baseUrl?: string; cost?: { input?: number; output?: number; cacheRead?: number; cacheWrite?: number; }; [key: string]: unknown; } export type SessionModelOverride = | { mode: "auto" } | { mode: "current" } | { mode: "model"; reference: string }; export interface CompactionConfig { enabled: boolean; modelSelection: { mode: "preferred" | "current"; preferredModels: string[]; allowCurrentSessionModel: boolean; }; strategy: { usePiPreparationFirst: boolean; recoverFromBranchEntriesWhenEmpty: boolean; groupByTurns: boolean; groupToolCycles: boolean; keptBudgetChars: number; dropRawThinking: boolean; toolResults: { mode: "compress"; headLines: number; tailLines: number; maxChars: number; }; oversizedMessages: { mode: "compress"; headChars: number; tailChars: number; maxChars: number; }; historySnip: { enabled: boolean; targetChars: number; keepHeadUnits: number; keepTailUnits: number; minOmittedUnits: number; maxPreviewChars: number; }; microcompact: { enabled: boolean; targetChars: number; keepRecentToolResults: number; maxPlaceholderChars: number; }; contextCollapse: { enabled: boolean; targetChars: number; keepFirstUnits: number; keepRecentUnits: number; maxSummaryChars: number; maxListItems: number; }; chunking: { enabled: boolean; targetChars: number; maxChunks: number; minMessagesPerChunk: number; }; }; fallback: { onFailure: "next-model" | "cancel"; maxAttempts: number; }; notifications: { showModelUsed: boolean; showCompressionStats: boolean; }; } export interface CompressionStats { inputMessages: number; outputMessages: number; recoveredFromBranchEntries: boolean; groupedTurns: number; semanticUnits: number; chunkCount: number; droppedThinkingBlocks: number; compressedToolResults: number; truncatedMessages: number; truncatedTextBlocks: number; snippedMessages: number; snippedSemanticUnits: number; microcompactedToolResults: number; collapsedMessages: number; collapsedSemanticUnits: number; } export interface CompactionModelSelection { selected: CompactModel | null; models: CompactModel[]; availableRefs: string[]; source: "session-override" | "config-preferred" | "current-model" | "available-fallback" | "none"; override: SessionModelOverride | null; warnings: string[]; } export interface CompactionRunInfo { modelReference: string; source: string; attempt: number; attempts: number; usedFallback: boolean; compression: CompressionStats; lastError?: string; } export interface CompactionState { config: CompactionConfig; configSource: string; sessionOverride: SessionModelOverride | null; lastRun: CompactionRunInfo | null; }