| 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", |
| }; |
| } |
|
|