UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

52 lines (51 loc) • 2.79 kB
import { i as getNodeSqliteKysely, r as executeSqliteQueryTakeFirstSync } from "../../kysely-sync-BMSZn9yz.mjs"; import { s as OPENCLAW_SQLITE_BUSY_TIMEOUT_MS } from "../../openclaw-state-db-contract-CQDemVBb.mjs"; import { a as runSqliteImmediateTransactionSync, t as assertTransactionUsable } from "../../sqlite-transaction-DlnLAQiX.mjs"; import { _ as finalizePreparedSessionTranscriptProjectionInTransaction, c as listSessionsNeedingTranscriptIndexReconcile, g as deletePreparedSessionTranscriptProjectionChunkInTransaction, h as claimPreparedSessionTranscriptProjectionInTransaction, i as deleteOrphanedTranscriptIndexRowsInTransaction, m as appendPreparedSessionTranscriptProjectionChunkInTransaction } from "../../session-transcript-index-0uwpm5PX.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; return { execute(command) { return runSqliteImmediateTransactionSync(db, () => { context.admit("transaction"); switch (command.type) { case "preflight": deleteOrphanedTranscriptIndexRowsInTransaction(db); return listSessionsNeedingTranscriptIndexReconcile(db).length > 0; 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; return { finalized, ...session ? { sessionKey: session.session_key } : {} }; } case "sweep": deleteOrphanedTranscriptIndexRowsInTransaction(db); return null; } throw new Error("Unknown transcript projection publication operation"); }, { operationLabel: `sessions.transcript-index.${command.type}`, busyTimeoutMs: OPENCLAW_SQLITE_BUSY_TIMEOUT_MS, databaseLabel: context.databasePath, withCommit(commit) { context.admit("commit"); commit(); } }); }, assertSettled() { assertTransactionUsable(db); if (db.isTransaction) throw new Error("Transcript projection publication did not settle"); }, close() {} }; } //#endregion export { bindSqliteWorkerBackend };