import { z } from "zod"; import { skillPermissionChoices, skillPermissionRevision, type SkillPermissionSnapshot, } from "./skill-permissions"; import { skillSelection, type SkillListing, type SkillPackageFile, } from "./skills"; export const skillIdentity = skillSelection.omit({ enabled: true }); export type SkillIdentity = z.infer; export const skillManagementRequest = z.discriminatedUnion("action", [ z.strictObject({ action: z.literal("inspect"), skill: skillIdentity }), z.strictObject({ action: z.literal("permissions"), skill: skillIdentity }), z.strictObject({ action: z.literal("set-permissions"), skill: skillIdentity, revision: skillPermissionRevision, choices: skillPermissionChoices, }), z.strictObject({ action: z.literal("file"), skill: skillIdentity, path: z.string().min(1).max(240), }), z.strictObject({ action: z.literal("remove"), skill: skillIdentity }), ]); export type SkillManagementRequest = z.infer; export interface SkillInspection { skill: SkillListing; instructions: string; license?: string; compatibility?: string; metadata?: Record; allowedTools: string | null; files: { path: string; encoding: "text" | "base64"; bytes: number; kind: "instructions" | "reference" | "script" | "asset" | "file"; mimeType?: string; }[]; } export type SkillManagementResult = | { action: "inspect"; inspection: SkillInspection } | { action: "file"; file: SkillPackageFile } | { action: "remove" } | { action: "permissions" | "set-permissions"; permissions: SkillPermissionSnapshot; };