UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

98 lines (97 loc) 4.14 kB
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 };