import type { AgentMessage } from "@mariozechner/pi-agent-core"; export type CompactionTimeoutSignal = { isTimeout: boolean; isCompactionPendingOrRetrying: boolean; isCompactionInFlight: boolean; }; export function shouldFlagCompactionTimeout(signal: CompactionTimeoutSignal): boolean { if (!signal.isTimeout) { return false; } return signal.isCompactionPendingOrRetrying || signal.isCompactionInFlight; } export type SnapshotSelectionParams = { timedOutDuringCompaction: boolean; preCompactionSnapshot: AgentMessage[] | null; preCompactionSessionId: string; currentSnapshot: AgentMessage[]; currentSessionId: string; }; export type SnapshotSelection = { messagesSnapshot: AgentMessage[]; sessionIdUsed: string; source: "pre-compaction" | "current"; }; export function selectCompactionTimeoutSnapshot( params: SnapshotSelectionParams, ): SnapshotSelection { if (!params.timedOutDuringCompaction) { return { messagesSnapshot: params.currentSnapshot, sessionIdUsed: params.currentSessionId, source: "current", }; } if (params.preCompactionSnapshot) { return { messagesSnapshot: params.preCompactionSnapshot, sessionIdUsed: params.preCompactionSessionId, source: "pre-compaction", }; } return { messagesSnapshot: params.currentSnapshot, sessionIdUsed: params.currentSessionId, source: "current", }; }