import { type RevisionContent } from "./revision.js"; export interface SkillMetadataPatch { category?: string; tags?: string[]; } /** Private preservation snapshot: includes the original instruction body. */ export interface SkillMetadataUpdatePlan { schemaVersion: 1; authority: string; organizationId: string; expectedRevisionId: string; originalDocument: string; before: RevisionContent; patch: SkillMetadataPatch; } export declare class SkillMetadataUpdateError extends Error { readonly code: "METADATA_AUTH_REQUIRED" | "INVALID_METADATA_PATCH" | "INVALID_METADATA_SNAPSHOT" | "INVALID_METADATA_PLAN" | "METADATA_REVISION_CONFLICT" | "METADATA_UPDATE_UNCONFIRMED"; constructor(code: "METADATA_AUTH_REQUIRED" | "INVALID_METADATA_PATCH" | "INVALID_METADATA_SNAPSHOT" | "INVALID_METADATA_PLAN" | "METADATA_REVISION_CONFLICT" | "METADATA_UPDATE_UNCONFIRMED"); } /** Read category and tags once into a plain copy, then validate and return only that copy. */ export declare function metadataPatch(value: unknown): SkillMetadataPatch; /** Normalize exactly the owning registry's revision fields, never arbitrary extras. */ export declare function metadataSnapshot(value: unknown, etag: string | null): { content: RevisionContent; revisionId: string; }; export declare function metadataPlan(value: unknown): SkillMetadataUpdatePlan; export declare function metadataPlanSummary(plan: SkillMetadataUpdatePlan): { slug: string; authority: string; organizationId: string; expectedRevisionId: string; before: { category: string; tags: string[]; }; after: { category: string; tags: string[]; }; preserved: { version: string | undefined; bundleSha256: string | undefined; instructionBody: string; }; };