UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

57 lines (56 loc) • 3.08 kB
import { a as getNodeSqliteKysely, i as executeSqliteQueryTakeFirstSync } from "./kysely-sync-K7ftY-g4.mjs"; import { t as extractSqliteTableSchema } from "./sqlite-schema-sql-CKIqAlrf.mjs"; import { i as tableExists } from "./openclaw-state-db-schema-helpers-BlZefrPy.mjs"; import { f as OPENCLAW_STATE_SCHEMA_SQL } from "./openclaw-state-db-legacy-backfills-BxTnDU05.mjs"; import { l as runOpenClawStateWriteTransaction, r as openOpenClawStateDatabase } from "./openclaw-state-db-D1jWDzK3.mjs"; //#region src/gateway/worker-environments/local-workspace-store.ts const table = "local_workspace_projections"; const query = (db) => getNodeSqliteKysely(db); function hasLocalWorkspaceProjectionInDatabase(db, id) { return tableExists(db, table) && executeSqliteQueryTakeFirstSync(db, query(db).selectFrom(table).select("worktree_id").where("worktree_id", "=", id)) !== void 0; } /** Local executions share the reconciliation engine, never a remote placement identity. */ function localWorkspaceStore(env = process.env) { const read = () => openOpenClawStateDatabase({ env }).db; const getFrom = (db, id) => tableExists(db, table) ? executeSqliteQueryTakeFirstSync(db, query(db).selectFrom(table).selectAll().where("worktree_id", "=", id)) : void 0; const get = (id) => getFrom(read(), id); return { get, revision(id) { const db = read(); return tableExists(db, table) ? executeSqliteQueryTakeFirstSync(db, query(db).selectFrom(table).select("revision").where("worktree_id", "=", id))?.revision : void 0; }, create(row, assertCurrent) { return runOpenClawStateWriteTransaction(({ db }) => { db.exec(extractSqliteTableSchema(OPENCLAW_STATE_SCHEMA_SQL, table)); assertCurrent(); if (getFrom(db, row.worktree_id)) throw new Error("Local workspace binding already exists"); return executeSqliteQueryTakeFirstSync(db, query(db).insertInto(table).values({ ...row, revision: 0 }).returningAll()); }, { env }); }, update(row, patch, assertCurrent) { return runOpenClawStateWriteTransaction(({ db }) => { assertCurrent(); if (!Number.isSafeInteger(row.revision + 1)) throw new Error("Local workspace revision exhausted"); const next = executeSqliteQueryTakeFirstSync(db, query(db).updateTable(table).set({ ...patch, revision: row.revision + 1 }).where("worktree_id", "=", row.worktree_id).where("revision", "=", row.revision).returningAll()); if (!next) throw new Error("Local workspace binding changed"); return next; }, { env }); }, delete(row, assertCurrent) { runOpenClawStateWriteTransaction(({ db }) => { assertCurrent(); if (row.pending_ref || row.journal_json) throw new Error("Local workspace has unsettled edits"); if (!executeSqliteQueryTakeFirstSync(db, query(db).deleteFrom(table).where("worktree_id", "=", row.worktree_id).where("revision", "=", row.revision).returning("worktree_id"))) throw new Error("Local workspace binding changed"); }, { env }); } }; } //#endregion export { localWorkspaceStore as n, hasLocalWorkspaceProjectionInDatabase as t };