openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
37 lines (36 loc) • 2 kB
JavaScript
import { t as assertTransactionUsable } from "../../sqlite-transaction-DBRLvCDM.mjs";
import { i as getSqliteWorkerStateContext } from "../../sqlite-worker-state-context-G3Xbcj1W.mjs";
import { i as getOpenClawAgentDatabaseIfOpen } from "../../openclaw-agent-db-DWI9Bgur.mjs";
import { n as createSessionWorkerOperationContext } from "../../session-entry-patch.worker-D77IuVN7.mjs";
import { t as commitSessionForkMessageCut } from "../../session-message-cut.worker-BOUOAOul.mjs";
import { i as readParentForkSource, r as prepareParentForkEntry, t as commitParentFork } from "../../session-parent-fork.worker-CxAwcKwo.mjs";
//#region src/config/sessions/session-fork-domain.worker.ts
/** The domain lends the canonical executor's connection and admission, never a second writer. */
function bindSqliteWorkerBackend(input, bound) {
const options = {
agentId: input.agentId,
path: bound.databasePath,
env: getSqliteWorkerStateContext().environment
};
const database = getOpenClawAgentDatabaseIfOpen(options);
if (!database || database.db !== bound.database || database.path !== bound.databasePath) throw new Error("Session fork lost its canonical database owner");
const context = createSessionWorkerOperationContext(database, options, bound, "Session fork");
return {
execute(command) {
switch (command.type) {
case "session.parentFork.prepare": return prepareParentForkEntry(command.input, context);
case "session.parentFork.source": return readParentForkSource(command.input, context);
case "session.parentFork.commit": return commitParentFork(command.input, context);
case "session.messageCut.fork": return commitSessionForkMessageCut(command.input, context);
}
throw new Error("Unknown session fork domain operation");
},
assertSettled() {
assertTransactionUsable(bound.database);
if (bound.database.isTransaction) throw new Error("Session fork transaction did not settle");
},
close() {}
};
}
//#endregion
export { bindSqliteWorkerBackend };