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