| import { describe, expect, it } from "vitest"; |
| import { |
| agentSkillEntrySchema, |
| agentSkillSnapshotSchema, |
| } from "@paperclipai/shared/validators/adapter-skills"; |
|
|
| describe("agent skill contract", () => { |
| it("accepts optional provenance metadata on skill entries", () => { |
| expect(agentSkillEntrySchema.parse({ |
| key: "crack-python", |
| runtimeName: "crack-python", |
| desired: false, |
| managed: false, |
| state: "external", |
| origin: "user_installed", |
| originLabel: "User-installed", |
| locationLabel: "~/.claude/skills", |
| readOnly: true, |
| detail: "Installed outside Paperclip management.", |
| })).toMatchObject({ |
| origin: "user_installed", |
| locationLabel: "~/.claude/skills", |
| readOnly: true, |
| }); |
| }); |
|
|
| it("remains backward compatible with snapshots that omit provenance metadata", () => { |
| expect(agentSkillSnapshotSchema.parse({ |
| adapterType: "claude_local", |
| supported: true, |
| mode: "ephemeral", |
| desiredSkills: [], |
| entries: [{ |
| key: "paperclipai/paperclip/paperclip", |
| runtimeName: "paperclip", |
| desired: true, |
| managed: true, |
| state: "configured", |
| }], |
| warnings: [], |
| })).toMatchObject({ |
| adapterType: "claude_local", |
| entries: [{ |
| key: "paperclipai/paperclip/paperclip", |
| state: "configured", |
| }], |
| }); |
| }); |
| }); |
|
|