UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

47 lines (46 loc) • 2.57 kB
import { d as pathExists, w as root } from "./fs-safe-CS1DrPTK.mjs"; import { r as resolveStateDir } from "./state-dir-CfAW6S2K.mjs"; import "./paths-FklbMVOH.mjs"; import { d as resolveSkillProposalTarget } from "./store-C0u12Mn-.mjs"; import { c as classifyWorkshopRelocation, m as listPendingLegacyCollectionBackupRoots, n as LEGACY_WORKSHOP_PROPOSALS_DIR, o as readLegacyWorkshopProposals, s as readWorkshopMigrationRecords, u as isReadOnlyRehearsalProposal } from "./doctor-skill-workshop-sources-BL32wpfq.mjs"; import path from "node:path"; //#region src/commands/doctor-update-rehearsal-workshop.ts const MANIFEST_PATH = "skill-workshop/proposals.json"; const RECOVERY_PROPOSALS_DIR = "skill-workshop/recovery/proposals"; /** Inventory migration-owned files without opening Workshop's writable recovery readers. */ async function collectDoctorSkillWorkshopBackupResources(params) { const env = params.env ?? process.env; const stateDir = resolveStateDir(env); const { records } = await readWorkshopMigrationRecords(env); const resources = /* @__PURE__ */ new Map(); if (await pathExists(path.join(stateDir, MANIFEST_PATH))) resources.set(path.join(stateDir, MANIFEST_PATH), "file"); if (await pathExists(path.join(stateDir, "skill-workshop/proposals"))) { resources.set(path.join(stateDir, LEGACY_WORKSHOP_PROPOSALS_DIR), "directory"); resources.set(path.join(stateDir, RECOVERY_PROPOSALS_DIR), "directory"); for (const proposal of await readLegacyWorkshopProposals(await root(stateDir))) records.push(proposal); } const { external } = classifyWorkshopRelocation(records.filter(({ record }) => !isReadOnlyRehearsalProposal(record, env)), params.config, env); for (const candidate of external) { if (!candidate.workspaceDir || !candidate.ownerAgentId) continue; resources.set(candidate.source, "directory"); resources.set(resolveSkillProposalTarget({ skillName: candidate.record.target.skillKey, config: params.config, agentId: candidate.ownerAgentId, env }).skillDir, "directory"); } for (const backupRoot of await listPendingLegacyCollectionBackupRoots(params.config, env)) { if (!("destinationRoot" in backupRoot)) continue; for (const backup of backupRoot.backups) { resources.set(backup.backupDir, "directory"); resources.set(path.join(backupRoot.destinationRoot, backup.manifest.id), "directory"); } } return [...resources].toSorted(([left], [right]) => left.localeCompare(right)).map(([pathname, kind]) => ({ path: pathname, kind })); } //#endregion export { collectDoctorSkillWorkshopBackupResources };