UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

52 lines (51 loc) 2.3 kB
import { t as isWorkshopOwnedSkillDir } from "./ownership-CtZrN9lV.js"; import { m as withSkillProposalCommitLock, s as readSkillProposalRecord, u as updateSkillProposalRecord } from "./store-X7p_X4MX.js"; import { t as applySkillProposal } from "./service-BrQv9Q2Z.js"; import { AsyncLocalStorage } from "node:async_hooks"; //#region src/agents/skill-workshop-workspace-context.ts const canonicalSkillWorkspace = new AsyncLocalStorage(); function runWithCanonicalSkillWorkspace(canonicalWorkspaceDir, run) { return canonicalWorkspaceDir ? canonicalSkillWorkspace.run(canonicalWorkspaceDir, run) : run(); } function getCanonicalSkillWorkspace() { return canonicalSkillWorkspace.getStore(); } //#endregion //#region src/skills/workshop/autonomous-apply.ts const USER_AUTHORED_PENDING_REASON = "user-authored skill; awaiting operator review"; async function applyAutonomousSkillProposal(params) { const store = params.env ? { env: params.env } : {}; if (params.proposal.record.kind !== "create" && !isWorkshopOwnedSkillDir(params.workspaceDir, params.proposal.record.target.skillDir, store)) return { status: "pending", record: await withSkillProposalCommitLock(params.workspaceDir, params.proposal.record, async () => { const current = await readSkillProposalRecord(params.proposal.record.id, store); if (!current) throw new Error(`Skill proposal not found: ${params.proposal.record.id}`); if (current.status !== "pending") return current; const pending = { ...current, updatedAt: (/* @__PURE__ */ new Date()).toISOString(), statusReason: USER_AUTHORED_PENDING_REASON }; await updateSkillProposalRecord({ record: pending, store }); return pending; }, store) }; return { status: "applied", ...await applySkillProposal({ workspaceDir: params.workspaceDir, ...params.agentId ? { agentId: params.agentId } : {}, ...params.config ? { config: params.config } : {}, ...params.env ? { env: params.env } : {}, ...params.eventActor ? { eventActor: params.eventActor } : {}, proposalId: params.proposal.record.id, expectedRevisionHash: params.proposal.revisionHash, reason: params.reason }) }; } //#endregion export { getCanonicalSkillWorkspace as n, runWithCanonicalSkillWorkspace as r, applyAutonomousSkillProposal as t };