import { describe, expect, it } from "vitest"; import { listClaudeSkills, syncClaudeSkills, } from "@paperclipai/adapter-claude-local/server"; describe("claude local skill sync", () => { const paperclipKey = "paperclipai/paperclip/paperclip"; const createAgentKey = "paperclipai/paperclip/paperclip-create-agent"; it("defaults to mounting all built-in Paperclip skills when no explicit selection exists", async () => { const snapshot = await listClaudeSkills({ agentId: "agent-1", companyId: "company-1", adapterType: "claude_local", config: {}, }); expect(snapshot.mode).toBe("ephemeral"); expect(snapshot.supported).toBe(true); expect(snapshot.desiredSkills).toContain(paperclipKey); expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.required).toBe(true); expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.state).toBe("configured"); }); it("respects an explicit desired skill list without mutating a persistent home", async () => { const snapshot = await syncClaudeSkills({ agentId: "agent-2", companyId: "company-1", adapterType: "claude_local", config: { paperclipSkillSync: { desiredSkills: [paperclipKey], }, }, }, [paperclipKey]); expect(snapshot.desiredSkills).toContain(paperclipKey); expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.state).toBe("configured"); expect(snapshot.entries.find((entry) => entry.key === createAgentKey)?.state).toBe("configured"); }); it("normalizes legacy flat Paperclip skill refs to canonical keys", async () => { const snapshot = await listClaudeSkills({ agentId: "agent-3", companyId: "company-1", adapterType: "claude_local", config: { paperclipSkillSync: { desiredSkills: ["paperclip"], }, }, }); expect(snapshot.warnings).toEqual([]); expect(snapshot.desiredSkills).toContain(paperclipKey); expect(snapshot.desiredSkills).not.toContain("paperclip"); expect(snapshot.entries.find((entry) => entry.key === paperclipKey)?.state).toBe("configured"); expect(snapshot.entries.find((entry) => entry.key === "paperclip")).toBeUndefined(); }); });