openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
65 lines (64 loc) • 3.11 kB
JavaScript
import { t as assertTransactionUsable } from "../../sqlite-transaction-DBRLvCDM.mjs";
import { x as ensureSessionGoalOperationsSchema } from "../../openclaw-agent-canonical-validation-schema-4dL3LLg2.mjs";
import { i as getSqliteWorkerStateContext } from "../../sqlite-worker-state-context-G3Xbcj1W.mjs";
import { i as getOpenClawAgentDatabaseIfOpen } from "../../openclaw-agent-db-DWI9Bgur.mjs";
import { t as readSessionSourceValidation } from "../../session-source-predicate.worker-BPzqDAQ2.mjs";
import { n as prepareSessionEntryReplacementPublication } from "../../session-accessor.sqlite-replacement-state-0OnJKCvn.mjs";
import { i as transferSessionEntryWorkerCandidate, n as createSessionWorkerOperationContext } from "../../session-entry-patch.worker-D77IuVN7.mjs";
import { i as mutateSessionGoalInDatabase } from "../../goals-operations-Dgcsd7BD.mjs";
//#region src/config/sessions/goals-operations.worker.ts
/** Lend the existing executor connection; keep this private command outside the released SDK union. */
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) throw new Error("Goal management lost its canonical database owner");
ensureSessionGoalOperationsSchema(database.db);
const { admit, writeTransaction } = createSessionWorkerOperationContext(database, options, bound, "Goal");
return {
execute({ input: request }) {
return writeTransaction("session.goal.mutate", "Goal transaction", (current) => {
const assertSources = () => {
const validation = readSessionSourceValidation(current, request.sources);
const { refusedSource } = validation;
if (refusedSource) {
transferSessionEntryWorkerCandidate(current, admit, {
kind: "session-goal-management",
refusedSource
});
throw new Error("Goal source refusal was not rejected");
}
if (validation.conversationMatches.length) admit("transaction", {
kind: "session-entry-patch-validated",
sourceValidation: validation
});
};
assertSources();
const { previous, ...result } = mutateSessionGoalInDatabase(current, request);
assertSources();
const candidate = {
kind: "session-goal-management",
result,
publication: previous && result.sessionEntry ? prepareSessionEntryReplacementPublication({
previous: /* @__PURE__ */ new Map([[request.sessionKey, previous]]),
current: /* @__PURE__ */ new Map([[request.sessionKey, result.sessionEntry]]),
pendingArchiveRecovery: false,
membershipInvalidatedKeys: [],
maintenancePlans: []
}, current) : void 0
};
return transferSessionEntryWorkerCandidate(current, admit, candidate);
});
},
assertSettled() {
assertTransactionUsable(database.db);
if (database.db.isTransaction) throw new Error("Goal transaction did not settle");
},
close() {}
};
}
//#endregion
export { bindSqliteWorkerBackend };