UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

36 lines (35 loc) • 2.44 kB
import { o as getPluginRuntimeGatewayRequestScope } from "./gateway-request-scope-DV3FHtde.mjs"; import { a as decodeGatewayOperatorRecoverySource } from "./operator-run-authority-XZsmK2PN.mjs"; import { s as captureCronJobSourceAuthority } from "./active-jobs-DcrjhGDv.mjs"; import { u as resolveCronRequesterExecutionRevision } from "./jobs-tool-policy-42jTiEZf.mjs"; import { r as restoreGatewayOperatorSource } from "./operator-run-recovery-DdZru7Ei.mjs"; import { isDeepStrictEqual } from "node:util"; //#region src/gateway/cron-operator-source.ts /** Re-admit a captured same-conversation source, never a session owner or ambient scheduler. */ async function restoreCronOperatorSource(params) { if (!params.job.operatorSource) return; const captured = params.job.operatorSource; const source = decodeGatewayOperatorRecoverySource(captured.source); if (captured.executionRevision !== resolveCronRequesterExecutionRevision(params.job)) throw new Error("Scheduled operator continuation definition changed; recreate it from an authenticated turn"); const context = getPluginRuntimeGatewayRequestScope()?.resolveGatewayContext?.(); const assertOccurrence = captureCronJobSourceAuthority(params.job.id); if (!context || !assertOccurrence || !params.deliveryAttemptFence) throw new Error("Scheduled operator continuation requires its live Gateway occurrence"); const fence = params.deliveryAttemptFence; const assertCurrent = () => { params.signal?.throwIfAborted(); assertOccurrence(); fence.assertCurrent(); const current = context.cron.getJob(params.job.id); const policy = current?.scheduledToolPolicy; if (context.resolveGatewayContext?.() !== context || !current || current.payload.kind !== "agentTurn" || policy?.mode !== "account" || policy.ownerSessionKey !== source.sessionKey || current.owner?.sessionKey !== source.sessionKey || current.sessionTarget !== `session:${source.sessionKey}` || params.agentId !== source.agentId || params.sessionKey !== source.sessionKey || params.entry.sessionId !== source.sessionId || params.entry.lifecycleRevision !== source.lifecycleRevision || !isDeepStrictEqual(current.operatorSource, captured)) throw new Error("Scheduled operator source no longer owns this conversation"); }; assertCurrent(); return await restoreGatewayOperatorSource({ snapshot: source.snapshot, target: source, context, assertCurrent }); } //#endregion export { restoreCronOperatorSource };