UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

59 lines (58 loc) • 3.36 kB
import { a as getNodeSqliteKysely, i as executeSqliteQueryTakeFirstSync, r as executeSqliteQuerySync } from "./kysely-sync-K7ftY-g4.mjs"; import { l as runOpenClawStateWriteTransaction } from "./openclaw-state-db-D1jWDzK3.mjs"; import { n as assertOpenClawStateLeaseWorkerOwnedInTransaction } from "./openclaw-state-lease-worker-Bfyut3YB.mjs"; import { n as clawPackageLifecycleLeaseKey } from "./claw-package-lifecycle-lease-key-DptsqXVg.mjs"; import { i as selectMcpRefs, r as rowToRef } from "./mcp-records-F-n78kde.mjs"; import { a as updateClawPackageRefStatusInDatabase, r as readClawOrphanWorkspaceInDatabase, t as readClawInstallRecordFromDatabase } from "./provenance-read.kernel-B_3aRsEz.mjs"; //#region src/claws/provenance-write.worker.ts const clawProvenanceOperations = { "clawProvenance.packageStatus": (input, { open, stateOptions }) => runOpenClawStateWriteTransaction(({ db }) => { const ref = input.ref; const artifact = ref.kind === "plugin" ? { kind: ref.kind, source: ref.source, ref: ref.ref } : { kind: ref.kind, source: ref.source, ref: ref.ref, workspace: readClawInstallRecordFromDatabase(db, ref.agentId)?.workspace ?? readClawOrphanWorkspaceInDatabase(db, ref.agentId)?.workspace ?? "" }; if (artifact.kind === "skill" && !artifact.workspace || input.lease.scope !== "claw-package-lifecycle" || input.lease.key !== clawPackageLifecycleLeaseKey(artifact)) throw new Error("Claw package claim does not match the held artifact lease"); assertOpenClawStateLeaseWorkerOwnedInTransaction(db, input.lease); const row = executeSqliteQueryTakeFirstSync(db, getNodeSqliteKysely(db).selectFrom("claw_package_refs").select([ "relationship", "origin", "independent_owner", "package_integrity" ]).where("agent_id", "=", ref.agentId).where("package_kind", "=", ref.kind).where("package_source", "=", ref.source).where("package_ref", "=", ref.ref).where("package_version", "=", ref.version)); if (!row || row.package_integrity !== ref.integrity || row.relationship !== ref.relationship || row.origin !== ref.origin || Boolean(row.independent_owner) !== ref.independentOwner) throw new Error(`Package ${ref.ref}@${ref.version} ownership changed before its status write.`); const result = updateClawPackageRefStatusInDatabase(db, ref, input.status, input.nowMs ?? Date.now()); assertOpenClawStateLeaseWorkerOwnedInTransaction(db, input.lease, "write", "commit"); return result; }, { database: open(), ...stateOptions() }), "clawProvenance.reconcileMcp": (input, { open, stateOptions }) => runOpenClawStateWriteTransaction(({ db }) => { const refs = executeSqliteQuerySync(db, selectMcpRefs(db).where("agent_id", "=", input.agentId).orderBy("name")).rows.map(rowToRef); for (const ref of refs) { if (ref.status !== "pending" || input.digests[ref.name] !== ref.configDigest) continue; const updatedAtMs = input.nowMs ?? Date.now(); executeSqliteQuerySync(db, getNodeSqliteKysely(db).updateTable("claw_mcp_server_refs").set({ status: "complete", error: null, updated_at_ms: updatedAtMs }).where("agent_id", "=", ref.agentId).where("name", "=", ref.name)); ref.status = "complete"; ref.updatedAtMs = updatedAtMs; delete ref.error; } return refs; }, { database: open(), ...stateOptions() }) }; //#endregion export { clawProvenanceOperations };