openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
57 lines (56 loc) • 2.35 kB
JavaScript
import { a as executeSqliteQueryTakeFirstSync, i as executeSqliteQuerySync, o as getNodeSqliteKysely } from "../../../kysely-sync-DUWzQvCU.mjs";
import { s as OPENCLAW_SQLITE_BUSY_TIMEOUT_MS } from "../../../openclaw-state-db-contract-BYv0nUQr.mjs";
import { a as runSqliteImmediateTransactionSync, t as assertTransactionUsable } from "../../../sqlite-transaction-DBRLvCDM.mjs";
import { t as coerceRequiredSqliteNumber } from "../../../sqlite-number-DZt1m75H.mjs";
import { t as encodeOpenClawStateWorkerError } from "../../../openclaw-state-worker-error-Bi-BnNrV.mjs";
//#region src/agents/subagents/spawn/acp-parent-stream-store.worker.ts
function bindSqliteWorkerBackend(_input, context) {
const database = context.database;
const db = getNodeSqliteKysely(database);
return {
execute({ input }) {
try {
runSqliteImmediateTransactionSync(database, () => {
context.admit("transaction");
const row = executeSqliteQueryTakeFirstSync(database, db.selectFrom("acp_parent_stream_events").select((eb) => eb.fn.max("seq").as("max_seq")).where("session_id", "=", input.sessionId).where("run_id", "=", input.runId));
const firstSeq = row?.max_seq == null ? 0 : coerceRequiredSqliteNumber(row.max_seq) + 1;
executeSqliteQuerySync(database, db.insertInto("acp_parent_stream_events").values(input.events.map((entry, index) => ({
session_id: input.sessionId,
run_id: input.runId,
seq: firstSeq + index,
event_json: entry.eventJson,
created_at: entry.createdAt
}))));
}, {
operationLabel: "acp.parent-stream.record",
busyTimeoutMs: OPENCLAW_SQLITE_BUSY_TIMEOUT_MS,
databaseLabel: context.databasePath,
withCommit(commit) {
context.admit("commit");
commit();
}
});
return {
ok: true,
value: void 0
};
} catch (error) {
assertTransactionUsable(database);
if (!database.isOpen || database.isTransaction) throw error;
const failure = encodeOpenClawStateWorkerError(error, { includeOrdinary: true });
if (!failure) throw error;
return {
ok: false,
error: failure
};
}
},
assertSettled() {
assertTransactionUsable(database);
if (database.isTransaction) throw new Error("ACP parent-stream transaction did not settle");
},
close() {}
};
}
//#endregion
export { bindSqliteWorkerBackend };