UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

57 lines (56 loc) • 3.28 kB
import { a as executeSqliteQueryTakeFirstSync, o as getNodeSqliteKysely } from "../../kysely-sync-DUWzQvCU.mjs"; import { s as OPENCLAW_SQLITE_BUSY_TIMEOUT_MS } from "../../openclaw-state-db-contract-BYv0nUQr.mjs"; import { c as withSqlitePostCommitPublications } from "../../sqlite-post-commit-DENvzR6w.mjs"; import { s as runSqliteWorkerTransactionSync, t as assertTransactionUsable } from "../../sqlite-transaction-DBRLvCDM.mjs"; import { i as finalizePreparedSessionTranscriptProjectionInTransaction, n as claimPreparedSessionTranscriptProjectionInTransaction, r as deletePreparedSessionTranscriptProjectionChunkInTransaction, t as appendPreparedSessionTranscriptProjectionChunkInTransaction } from "../../session-transcript-projection-rebuild-Bl_3euTN.mjs"; import { o as readStagedSessionTranscriptAuthority, r as publishUnchangedSessionTranscriptAuthority } from "../../session-transcript-authority-DV7l6G42.mjs"; import { n as maintainSessionTranscriptIndexStatus, t as isSessionTranscriptIndexStatusClean } from "../../session-transcript-index-status.worker-DiTgKvWK.mjs"; //#region src/config/sessions/session-transcript-projection-publication.worker.ts /** The canonical agent executor lends its connection for each bounded publication. */ function bindSqliteWorkerBackend(_input, context) { const db = context.database; function execute(command) { if ((command.type === "preflight" || command.type === "sweep") && isSessionTranscriptIndexStatusClean(db)) return { sessionIds: [], hasMore: false, traversalComplete: true }; return withSqlitePostCommitPublications(db, () => runSqliteWorkerTransactionSync(context, () => { switch (command.type) { case "preflight": case "sweep": return maintainSessionTranscriptIndexStatus(db); case "claim": return claimPreparedSessionTranscriptProjectionInTransaction(db, command.input.plan, command.input.claimId); case "deleteChunk": return deletePreparedSessionTranscriptProjectionChunkInTransaction(db, command.input); case "appendChunk": return appendPreparedSessionTranscriptProjectionChunkInTransaction(db, command.input); case "finalize": { const finalized = finalizePreparedSessionTranscriptProjectionInTransaction(db, command.input.plan, command.input.claimId); const session = finalized ? executeSqliteQueryTakeFirstSync(db, getNodeSqliteKysely(db).selectFrom("session_windows").select("session_key").where("session_id", "=", command.input.plan.sessionId)) : void 0; if (session) publishUnchangedSessionTranscriptAuthority({ db, path: context.databasePath }, session.session_key); return { finalized, ...session ? { sessionKey: session.session_key } : {}, transcriptPublication: readStagedSessionTranscriptAuthority({ db }) }; } } throw new Error("Unknown transcript projection publication operation"); }, { operationLabel: `sessions.transcript-index.${command.type}`, busyTimeoutMs: OPENCLAW_SQLITE_BUSY_TIMEOUT_MS, databaseLabel: context.databasePath })); } return { execute, assertSettled() { assertTransactionUsable(db); if (db.isTransaction) throw new Error("Transcript projection publication did not settle"); }, close() {} }; } //#endregion export { bindSqliteWorkerBackend };