openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
57 lines (56 loc) • 3.28 kB
JavaScript
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 };