openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
55 lines (54 loc) • 3.66 kB
JavaScript
import { a as getNodeSqliteKysely, r as executeSqliteQuerySync } from "./kysely-sync-COmh4HWh.js";
import { s as runOpenClawStateWriteTransaction } from "./openclaw-state-db-BRTnL-D8.js";
import { i as logWarn } from "./logger-DwECwNVZ.js";
import { c as openSkillWorkshopStore, o as databaseOptions, r as parseSkillProposalRow, s as ensureSkillWorkshopSchema } from "./store-sqlite-record-9Z9Ph1pe.js";
import path from "node:path";
//#region src/skills/workshop/ownership.ts
function setWorkshopOwnershipClaimRelease(database, workspaceDir, skillDirs, releaseTime) {
const targetDirs = new Set(skillDirs.map((skillDir) => path.resolve(skillDir)));
if (targetDirs.size === 0) return;
const kysely = getNodeSqliteKysely(database);
const proposalIds = executeSqliteQuerySync(database, kysely.selectFrom("skill_workshop_proposals").selectAll().where("workspace_dir", "=", path.resolve(workspaceDir)).where("kind", "=", "create").where("status", "=", "applied")).rows.flatMap((row) => {
const record = parseSkillProposalRow(row);
return record && targetDirs.has(path.resolve(record.target.skillDir)) ? [record.id] : [];
});
if (proposalIds.length === 0) return;
executeSqliteQuerySync(database, kysely.updateTable("skill_workshop_proposals").set({ claim_released_time: releaseTime }).where("proposal_id", "in", proposalIds));
}
function writeWorkshopOwnershipClaims(workspaceDir, claimedSkillDirs, releasedSkillDirs, releaseTime, options) {
const claimedDirs = new Set(claimedSkillDirs.map((skillDir) => path.resolve(skillDir)));
const releasedDirs = releasedSkillDirs.filter((skillDir) => !claimedDirs.has(path.resolve(skillDir)));
if (claimedDirs.size === 0 && releasedDirs.length === 0) return;
ensureSkillWorkshopSchema(options);
runOpenClawStateWriteTransaction(({ db }) => {
setWorkshopOwnershipClaimRelease(db, workspaceDir, releasedDirs, releaseTime);
setWorkshopOwnershipClaimRelease(db, workspaceDir, [...claimedDirs], null);
}, databaseOptions(options));
}
function releaseWorkshopOwnershipClaims(workspaceDir, skillDirs, releaseTime, options = {}) {
writeWorkshopOwnershipClaims(workspaceDir, [], skillDirs, releaseTime, options);
}
function restoreWorkshopOwnershipClaims(workspaceDir, skillDirs, resultSkillDirs, releaseTime, options = {}) {
writeWorkshopOwnershipClaims(workspaceDir, skillDirs, resultSkillDirs, releaseTime, options);
}
function restoreWorkshopOwnershipClaimsBestEffort(workspaceDir, skillDirs, options = {}) {
try {
writeWorkshopOwnershipClaims(workspaceDir, skillDirs, [], 0, options);
} catch (error) {
logWarn(`skill-workshop: failed to reclaim ownership after rollback: ${String(error)}`);
}
}
/** Paths claimed by a successfully applied Workshop create proposal. */
function listWorkshopOwnedSkillDirs(workspaceDir, options = {}) {
const { database, kysely } = openSkillWorkshopStore(options);
const rows = executeSqliteQuerySync(database.db, kysely.selectFrom("skill_workshop_proposals").selectAll().where("workspace_dir", "=", path.resolve(workspaceDir)).where("kind", "=", "create").where("status", "=", "applied").where("claim_released_time", "is", null)).rows;
return new Set(rows.flatMap((row) => {
const record = parseSkillProposalRow(row);
return record ? [path.resolve(record.target.skillDir)] : [];
}));
}
function isWorkshopOwnedSkillDir(workspaceDir, skillDir, options = {}) {
return listWorkshopOwnedSkillDirs(workspaceDir, options).has(path.resolve(skillDir));
}
//#endregion
export { restoreWorkshopOwnershipClaimsBestEffort as a, restoreWorkshopOwnershipClaims as i, listWorkshopOwnedSkillDirs as n, releaseWorkshopOwnershipClaims as r, isWorkshopOwnedSkillDir as t };