import type { SkillCritiquePolicy } from "./critique/rollout.js";
export declare const SKILL_ID_ALIASES: Readonly<{
    "editorial-collage": "open-design-landing";
    "editorial-collage-deck": "open-design-landing-deck";
}>;
type SkillMode = "image" | "video" | "audio" | "deck" | "design-system" | "template" | "prototype";
type SkillSurface = "web" | "image" | "video" | "audio";
type SkillPlatform = "desktop" | "mobile" | null;
export type SkillSource = "user" | "built-in";
export interface SkillInfo {
    id: string;
    name: string;
    description: string;
    triggers: unknown[];
    mode: SkillMode;
    surface: SkillSurface;
    source: SkillSource;
    craftRequires: string[];
    platform: SkillPlatform;
    scenario: string;
    category: string | null;
    previewType: string;
    designSystemRequired: boolean;
    defaultFor: string[];
    upstream: string | null;
    featured: number | null;
    fidelity: "wireframe" | "high-fidelity" | null;
    speakerNotes: boolean | null;
    animations: boolean | null;
    examplePrompt: string;
    aggregatesExamples: boolean;
    /**
     * Per-skill Critique Theater override declared via `od.critique.policy`
     * in the skill's SKILL.md frontmatter. The daemon's rollout resolver
     * uses this as the highest-priority signal when deciding whether to
     * wire the critique pipeline for a generation: `required` forces the
     * panel on regardless of project / env / phase defaults, `opt-out`
     * forces it off, `opt-in` lets the panel run only at M2+ rollout
     * phases, `null` means the skill has no opinion and the lower-priority
     * tiers (project override, env override, phase default) decide.
     */
    critiquePolicy: SkillCritiquePolicy;
    body: string;
    dir: string;
}
export interface DerivedSkillIdParts {
    parentId: string;
    childKey: string;
}
export declare function resolveSkillId(id: unknown): unknown;
export declare function findSkillById(skills: unknown, id: unknown): SkillInfo | undefined;
export declare function listSkills(skillsRoots: string | readonly string[]): Promise<SkillInfo[]>;
export declare function resolveDerivedExamplePath(parentDir: string, childKey: string): string | null;
export declare function splitDerivedSkillId(id: unknown): DerivedSkillIdParts | null;
/**
 * Coerce `od.critique.policy` from SKILL.md frontmatter into the
 * three-value union the rollout resolver expects. Anything unrecognised
 * resolves to `null` (no opinion), which falls through to the
 * project / env / phase default tiers. The frontmatter value is
 * authored as a YAML scalar:
 *
 *   od:
 *     critique:
 *       policy: required   # or 'opt-in', 'opt-out'
 */
export declare function normalizeCritiquePolicy(value: unknown): SkillCritiquePolicy;
export type SkillImportErrorCode = "BAD_REQUEST" | "CONFLICT" | "NOT_FOUND" | "INTERNAL_ERROR";
export declare class SkillImportError extends Error {
    readonly code: SkillImportErrorCode;
    constructor(code: SkillImportErrorCode, message: string);
}
export declare function slugifySkillName(name: unknown): string;
export interface SkillImportInput {
    name?: unknown;
    description?: unknown;
    body?: unknown;
    triggers?: unknown;
}
export interface SkillImportResult {
    id: string;
    slug: string;
    dir: string;
}
export declare function importUserSkill(userSkillsRoot: string, input: SkillImportInput): Promise<SkillImportResult>;
export interface SkillUpdateInput {
    name: string;
    description?: unknown;
    body?: unknown;
    triggers?: unknown;
    sourceDir?: string;
}
export declare function updateUserSkill(userSkillsRoot: string, input: SkillUpdateInput): Promise<SkillImportResult>;
export interface SkillFileEntry {
    path: string;
    kind: "file" | "directory";
    size: number | null;
}
export declare function listSkillFiles(skillDir: string): Promise<SkillFileEntry[]>;
export declare function deleteUserSkill(userSkillsRoot: string, id: string): Promise<void>;
export {};
