openclaw/src/agents/pi-embedded-runner/run/compaction-timeout.ts

55 lines
1.4 KiB
TypeScript

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