openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
36 lines (35 loc) • 2.44 kB
JavaScript
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 };