openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
46 lines (45 loc) • 3.17 kB
JavaScript
import { s as asFiniteNumber } from "./number-coercion-Dq1l5muL.mjs";
import { l as resolveAgentIdFromSessionKey, o as classifySessionKeyShape } from "./session-key-BC4m_Ly5.mjs";
import { C as resolveUnsuffixedSqliteTargetFromSessionStorePath } from "./openclaw-state-db-VZFEEleX.mjs";
import { t as isPerAgentSessionStoreConfig } from "./session-store-config-BRC1g3LN.mjs";
import { o as resolveSqliteTargetFromSessionStorePath } from "./session-sqlite-target-BGognaPy.mjs";
import { r as mainSessionRecoveryLog } from "./main-session-restart-recovery-shared-C82HjnO_.mjs";
import { d as listSubagentRunsForRequester } from "./subagent-registry-read-uW_624mk.mjs";
import { o as resolveGatewaySessionStoreTarget } from "./session-utils-store-lookup-66QGnJ43.mjs";
import path from "node:path";
//#region src/agents/main-session-recovery/main-session-restart-recovery-target.ts
function resolveRestartRecoveryDispatchTarget(params) {
const storeAgentId = params.agentId ?? (params.storeAgentId && !resolveSqliteTargetFromSessionStorePath(params.storePath, { agentId: params.storeAgentId }).shared ? params.storeAgentId : void 0) ?? (isPerAgentSessionStoreConfig(params.cfg?.session?.store) && classifySessionKeyShape(params.sessionKey) === "legacy_or_alias" ? resolveUnsuffixedSqliteTargetFromSessionStorePath(params.storePath).agentId : void 0);
if (!params.cfg) return {
agentId: params.agentId ?? resolveAgentIdFromSessionKey(params.sessionKey, storeAgentId ?? "main"),
sessionKey: params.sessionKey
};
try {
const target = resolveGatewaySessionStoreTarget({
cfg: params.cfg,
key: params.sessionKey,
...storeAgentId ? { agentId: storeAgentId } : {}
});
return !params.cfg.session?.store || path.resolve(target.storePath) === path.resolve(params.storePath) ? {
agentId: target.agentId,
sessionKey: target.canonicalKey
} : void 0;
} catch (err) {
mainSessionRecoveryLog.warn(`failed to resolve recovery store for ${params.sessionKey}: ${String(err)}`);
return;
}
}
/** Captures the durable continuation that a completed requester turn yielded to. */
function captureYieldedMainSessionContinuation(params) {
if (params.entry.status !== "running" || params.entry.pendingFinalDelivery !== void 0 || asFiniteNumber(params.entry.endedAt) === void 0) return;
const requester = resolveRestartRecoveryDispatchTarget(params);
if (!requester) return;
const listRuns = () => listSubagentRunsForRequester(requester.sessionKey, { requesterAgentId: requester.agentId });
const owner = listRuns().find((run) => !run.collect && run.expectsCompletionMessage === true && !run.requesterTurnRunId && run.requesterSettleWake?.requesterYieldBatch === true && run.requesterSettleWake.rearmGeneration !== void 0 && run.requesterSettleWake.batchRunIds?.includes(run.runId));
if (!owner) return;
const wake = owner.requesterSettleWake;
const rearmGeneration = wake?.rearmGeneration;
return () => listRuns().includes(owner) && !owner.requesterTurnRunId && owner.requesterSettleWake === wake && wake?.rearmGeneration === rearmGeneration;
}
//#endregion
export { resolveRestartRecoveryDispatchTarget as n, captureYieldedMainSessionContinuation as t };