UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

100 lines (99 loc) • 4.87 kB
import { t as setSafeTimeout } from "./timer-delay-D9eb6vIQ.mjs"; import { r as getCliSessionBinding } from "./cli-session-binding-Dx1VbkI8.mjs"; import { t as ErrorCodes } from "./gateway-error-details-gTekQWj2.mjs"; import { d as errorShape } from "./error-codes-D0WRV4Bq.mjs"; import { l as resolveAgentHarnessSessionContextError, u as resolveAgentHarnessSessionIdMismatchError } from "./agent-harness-session-key-Dx0vv6oG.mjs"; import { c as resolveCliRuntimeExecutionProvider } from "./model-runtime-aliases-B9nh73GM.mjs"; import "./model-selection-Cpoq0B2R.mjs"; import { t as isCliProvider } from "./model-selection-cli-46qX0ujd.mjs"; import { i as resolveSessionWorkStartError } from "./session-work-start-Bkld8CTK.mjs"; import "./sessions-CRUJeu5H.mjs"; import "./cli-session-DpAF471M.mjs"; import "./internal-event-contract-pF6FHp8g.mjs"; import { o as prepareDeletedAgentSessionCheck, r as loadGatewaySessionEntry } from "./session-utils-store-qn-zT-Fk.mjs"; import "./session-utils-BLqrCe75.mjs"; //#region src/gateway/agent-turn/agent-handler-helpers.ts const CRON_CONTINUATION_RELEASE_RECOVERY_DELAYS_MS = [ 250, 1e3, 4e3, 15e3 ]; function canPrepareAgentSessionWorktree(sessionKey, entry) { return Boolean(sessionKey && entry?.pendingWorktree) && entry?.pendingProjectGitUrl === void 0; } function resolveAgentSessionWorkStartError(sessionKey, entry) { return resolveSessionWorkStartError(sessionKey, entry, canPrepareAgentSessionWorktree(sessionKey, entry) ? { allowPendingWorkspace: true } : void 0); } function respondDeletedAgentSession(params) { const deletedAgentId = prepareDeletedAgentSessionCheck({ cfg: params.cfg, sessionKey: params.canonicalKey, entry: params.entry, acpMetadataSessionKey: params.acpMetadataSessionKey, assertCurrent: params.assertCurrent }); const respond = (agentId) => { if (agentId === null) return false; params.respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, `Agent "${agentId}" no longer exists in configuration`)); return true; }; return deletedAgentId instanceof Promise ? deletedAgentId.then((agentId) => { params.assertCurrent?.(); return respond(agentId); }) : respond(deletedAgentId); } function respondUnavailableAgentSessionForKey(params) { const { cfg, entry, canonicalKey, legacyKey } = loadGatewaySessionEntry(params.sessionKey, { ...params.agentId ? { agentId: params.agentId } : {}, clone: false, projection: "list" }); const deleted = respondDeletedAgentSession({ cfg, canonicalKey, entry, acpMetadataSessionKey: legacyKey, respond: params.respond, assertCurrent: params.assertCurrent }); const respondUnavailable = (isDeleted) => { if (isDeleted) return true; const sessionError = resolveAgentHarnessSessionContextError(canonicalKey, entry) || resolveAgentHarnessSessionIdMismatchError(entry, params.requestedSessionId) || (params.isRawModelRun && entry?.modelSelectionLocked === true ? "Agent harness-owned sessions cannot be used for one-shot model runs." : void 0) || resolveAgentSessionWorkStartError(canonicalKey, entry); if (!sessionError) return false; params.respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, sessionError)); return true; }; return deleted instanceof Promise ? deleted.then((isDeleted) => { params.assertCurrent?.(); return respondUnavailable(isDeleted); }) : respondUnavailable(deleted); } function cronContinuationHasReusableRuntime(params) { const executionProvider = resolveCliRuntimeExecutionProvider({ provider: params.provider, cfg: params.cfg, agentId: params.agentId, modelId: params.model }) ?? params.provider; return !isCliProvider(executionProvider, params.cfg) || Boolean(getCliSessionBinding(params.entry, executionProvider)?.sessionId); } function withoutCronRunContinuation(entry) { const { cronRunContinuation: _cronRunContinuation, ...baseEntry } = entry; return baseEntry; } function shouldSuppressAgentPromptPersistence(params) { return params.inputProvenance?.kind === "inter_session" && params.inputProvenance.sourceTool === "subagent_announce" && params.internalEvents?.some((event) => event.type === "task_completion" && event.source === "subagent") === true; } function yieldAfterAgentAcceptedAck() { return new Promise((resolve) => { setTimeout(resolve, 10); }); } function waitForCronContinuationReleaseRecovery(delayMs) { return new Promise((resolve) => { setSafeTimeout(resolve, delayMs).unref?.(); }); } //#endregion export { respondDeletedAgentSession as a, waitForCronContinuationReleaseRecovery as c, resolveAgentSessionWorkStartError as i, withoutCronRunContinuation as l, canPrepareAgentSessionWorktree as n, respondUnavailableAgentSessionForKey as o, cronContinuationHasReusableRuntime as r, shouldSuppressAgentPromptPersistence as s, CRON_CONTINUATION_RELEASE_RECOVERY_DELAYS_MS as t, yieldAfterAgentAcceptedAck as u };