mirror of https://github.com/openclaw/openclaw.git
73 lines
1.9 KiB
TypeScript
73 lines
1.9 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 function resolveRunTimeoutDuringCompaction(params: {
|
|
isCompactionPendingOrRetrying: boolean;
|
|
isCompactionInFlight: boolean;
|
|
graceAlreadyUsed: boolean;
|
|
}): "extend" | "abort" {
|
|
if (!params.isCompactionPendingOrRetrying && !params.isCompactionInFlight) {
|
|
return "abort";
|
|
}
|
|
return params.graceAlreadyUsed ? "abort" : "extend";
|
|
}
|
|
|
|
export function resolveRunTimeoutWithCompactionGraceMs(params: {
|
|
runTimeoutMs: number;
|
|
compactionTimeoutMs: number;
|
|
}): number {
|
|
return params.runTimeoutMs + params.compactionTimeoutMs;
|
|
}
|
|
|
|
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",
|
|
};
|
|
}
|