openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
96 lines (95 loc) • 3.27 kB
JavaScript
import { i as truncateWithMarker } from "./utf16-slice-D_ngcYKd.mjs";
import { n as sanitizeTerminalText } from "./safe-text-Eo8-QSFS.mjs";
import { _ as redactSensitiveText } from "./redact-BV3wTtTv.mjs";
import { f as getAgentRunLifecycleGeneration } from "./agent-run-registry-Cm8FlLIi.mjs";
//#region src/agents/main-session-recovery/main-session-restart-recovery-diagnostics.ts
function skippedMainSessionRecoveryDecision(reason) {
switch (reason) {
case "exhausted":
case "tombstoned":
case "message_action_authority_unavailable":
case "delegated_authority_unavailable":
case "work_start_blocked":
case "dispatch_target_unavailable": return {
decision: "blocked",
reason,
nextOwner: "operator"
};
case "work_start_pending": return {
decision: "deferred",
reason,
nextOwner: "session-preparation"
};
case "pending_delivery": return {
decision: "deferred",
reason,
nextOwner: "outbound-delivery"
};
case "archived": return {
decision: "deferred",
reason,
nextOwner: "none"
};
case "live_owner":
case "blocked":
case "already_handled":
case "inactive": return {
decision: "deferred",
reason,
nextOwner: "session-owner"
};
case "invalid_harness_completion": return {
decision: "settled",
reason,
nextOwner: "none"
};
case "stopped": return {
decision: "deferred",
reason,
nextOwner: "next-startup"
};
default: return {
decision: "deferred",
reason,
nextOwner: "main-session-recovery"
};
}
}
let failureGeneration;
const failures = /* @__PURE__ */ new Map();
function restartRecoveryStoreTargetKey(target) {
return JSON.stringify([target.agentId, target.storePath]);
}
function currentFailures() {
const generation = getAgentRunLifecycleGeneration();
if (failureGeneration !== generation) {
failures.clear();
failureGeneration = generation;
}
return failures;
}
/** The marker records its outcome; diagnostics never infer successful recovery from a reread. */
function recordStartupRecoveryStoreResult(params) {
if (params.lifecycleGeneration !== getAgentRunLifecycleGeneration()) return;
const pending = currentFailures();
const key = restartRecoveryStoreTargetKey(params.target);
if (params.outcome.ok) pending.delete(key);
else pending.set(key, truncateWithMarker(sanitizeTerminalText(redactSensitiveText(`${params.target.agentId ?? "session store"}: ${String(params.outcome.error)}`, { mode: "tools" })), 2e3, {
marker: "… (see recovery log)",
reserve: 22,
trimEnd: true
}));
}
function readStartupRecoveryWarning(includeSensitive = true) {
const pending = currentFailures();
if (pending.size === 0) return;
const summary = `Startup session recovery is incomplete for ${pending.size} session store(s).`;
const hint = "Inspect the Gateway recovery logs and retry the affected session after repairing its store.";
return `${summary}${includeSensitive ? `\n${truncateWithMarker([...pending.values()].map((failure) => `- ${failure}`).join("\n"), 2e3, {
marker: "… (see recovery log)",
reserve: 22,
trimEnd: true
})}` : ""}\n${hint}`;
}
//#endregion
export { skippedMainSessionRecoveryDecision as i, recordStartupRecoveryStoreResult as n, restartRecoveryStoreTargetKey as r, readStartupRecoveryWarning as t };