import { z } from "zod"; /** * Committed pack manifest at the repo ROOT (`aih-packs.json`) — a NAMED curation * over the shipped per-skill lifecycle. A pack groups approved skills so a team * can reason about "the docs-quality set" instead of N individual names. The * committed `aih-skills.lock.json` stays the PIN AUTHORITY: each ref's * `{source, commit}` here is only a fail-closed CROSS-CHECK against the lock * entry (a disagreement is a `pack.pin-mismatch` finding, never a second pin). * No parallel lockfile; approval stays per-skill. Root-level and committed like * `aih-skills.lock.json`, so a fresh clone reads the same curation. */ export declare const AIH_PACKS_FILE = "aih-packs.json"; /** One skill reference inside a pack — a cross-check against the lock entry of the same name. */ export declare const PackSkillRefSchema: z.ZodObject<{ name: z.ZodString; source: z.ZodString; commit: z.ZodString; }, z.core.$strict>; export declare const PackSchema: z.ZodObject<{ name: z.ZodString; description: z.ZodOptional; requiredChecks: z.ZodOptional>; skills: z.ZodArray>; }, z.core.$strict>; export declare const PacksFileSchema: z.ZodObject<{ schemaVersion: z.ZodLiteral<1>; packs: z.ZodArray; requiredChecks: z.ZodOptional>; skills: z.ZodArray>; }, z.core.$strict>>; }, z.core.$strict>; export type PackSkillRef = z.infer; export type Pack = z.infer; export interface PacksFile { schemaVersion: 1; packs: Pack[]; } /** * Read the committed pack manifest. Fail-SOFT per PACK (mirrors `readSkillsLock`): * a malformed file yields an empty manifest and a malformed pack ENTRY is dropped * while valid siblings survive — hand-edited state never crashes a read-only * status, and never gets amplified either. An absent file is simply zero packs; * "present but zero valid packs" is the caller's `pack.unknown-manifest` signal. */ export declare function readPacksFile(root: string): PacksFile; /** * Read the manifest for a WRITE path (authoring) — fail-CLOSED, the inverse of * {@link readPacksFile}'s fail-soft. A read→modify→rewrite cycle built on the * fail-soft read would silently DELETE any sibling pack the schema dropped, so * authoring refuses unless the raw file parses AND the WHOLE file survives * strict validation — aih never silently destroys operator data it cannot * faithfully round-trip. An absent file is a fresh start (zero packs). */ export declare function readPacksFileStrictForWrite(root: string): PacksFile;