UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

46 lines (45 loc) • 3.17 kB
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 };