openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
98 lines (97 loc) • 4.14 kB
JavaScript
import { r as truncateUtf16Safe } from "./utf16-slice-D_ngcYKd.js";
import { p as redactSensitiveText } from "./redact-BtvPPfTi.js";
import "./session-accessor-YsytfDtG.js";
import { d as patchSessionEntryCore } from "./session-accessor.sqlite-entry-CWk3jL7s.js";
import { n as getCliSessionBinding } from "./cli-session-binding-Aa6nlDa8.js";
import { r as formatErrorMessageForDisplay } from "./error-diagnostics-BM-F2vsk.js";
import { n as assertCliSessionBindingResultCommitAllowed, r as clearCliSession, t as applyCliSessionBindingResult } from "./cli-session-pAa_-y_N.js";
import { n as appendAgentRunFailure } from "./agent-run-result-JlQhspoW.js";
//#region src/agents/cli-session-store.ts
async function patchCliSessionBindingInStore(params) {
const { sessionKey, storePath } = params;
if (!sessionKey || !storePath) return;
const expected = { ...params.expectedSession };
let committed;
await patchSessionEntryCore({
sessionKey,
storePath
}, (entry) => {
if (entry.sessionId !== expected.sessionId || entry.lifecycleRevision !== expected.lifecycleRevision || entry.activeWriterRunId !== expected.activeWriterRunId) return null;
const next = { ...entry };
if (!params.update(next)) return null;
return {
cliSessionIds: next.cliSessionIds,
cliSessionBindings: next.cliSessionBindings,
claudeCliSessionId: next.claudeCliSessionId
};
}, {
fallbackEntry: params.fallbackEntry,
assertCommitAllowed: params.assertCommitAllowed,
preserveActivity: params.preserveActivity,
skipMaintenance: params.skipMaintenance,
onCommitted: (entry) => {
committed = entry;
params.onCommitted?.();
if (params.sessionStore) params.sessionStore[sessionKey] = entry;
}
});
return committed;
}
/** A rejected continuity write cannot erase completed effects or reopen model fallback. */
async function settleCliSessionResult(result, settle) {
try {
await settle();
return result;
} catch (error) {
const detail = redactSensitiveText(formatErrorMessageForDisplay(error), { mode: "tools" });
const diagnostic = truncateUtf16Safe(`CLI session continuity could not be saved: ${detail}`, 1024);
return appendAgentRunFailure(result, diagnostic);
}
}
/** Publish native continuity before the placement owner releases its session lane. */
async function persistCliSessionBindingResult(params) {
const expectedSession = params.expectedSession;
if (!expectedSession) return params.result;
return await settleCliSessionResult(params.result, async () => {
await patchCliSessionBindingInStore({
...params,
expectedSession,
preserveActivity: true,
skipMaintenance: true,
update: (entry) => applyCliSessionBindingResult(entry, params.provider, params.result.meta.agentMeta),
assertCommitAllowed: () => assertCliSessionBindingResultCommitAllowed(params.result.meta.agentMeta, params.assertSettlementCurrent, params.abortSignal)
});
});
}
/** Clears a failed/invalid native binding; a turn owner supplies its exact commit guard. */
async function clearCliSessionInStore(params) {
const entry = params.activeSessionEntry ?? (params.sessionKey ? params.sessionStore?.[params.sessionKey] : void 0);
if (!entry) return;
const clearEntry = (current) => {
if (!current || params.expectedCliSessionId && getCliSessionBinding(current, params.provider)?.sessionId !== params.expectedCliSessionId) return false;
clearCliSession(current, params.provider);
current.updatedAt = Date.now();
return true;
};
const clearCachedEntries = () => {
clearEntry(params.activeSessionEntry);
clearEntry(params.sessionKey ? params.sessionStore?.[params.sessionKey] : void 0);
};
if (!params.sessionKey || !params.storePath) {
params.assertCommitAllowed?.();
clearCachedEntries();
return;
}
return await patchCliSessionBindingInStore({
...params,
expectedSession: {
...entry,
sessionId: params.expectedSessionId ?? entry.sessionId
},
fallbackEntry: params.expectedSessionId ? void 0 : entry,
update: clearEntry,
onCommitted: clearCachedEntries
});
}
//#endregion
export { persistCliSessionBindingResult as n, settleCliSessionResult as r, clearCliSessionInStore as t };