/**
 * Skill download flow module
 *
 * Provides a flow for downloading skill packages from the Nori registry.
 * This flow handles:
 * - Intro message
 * - Spinner while searching registries
 * - Version comparison and already-current detection
 * - Version list display
 * - Spinner while downloading
 * - Success note with install location and skillset update status
 * - Outro message
 */
/**
 * Result from the search callback
 */
export type SkillSearchResult = {
    status: "ready";
    targetVersion: string;
    isUpdate: boolean;
    currentVersion?: string | null;
} | {
    status: "already-current";
    version: string;
} | {
    status: "list-versions";
    formattedVersionList: string;
    versionCount: number;
} | {
    status: "error";
    error: string;
    hint?: string | null;
};
/**
 * Result from the download callback
 */
export type SkillDownloadActionResult = {
    success: true;
    version: string;
    isUpdate: boolean;
    installedTo: string;
    skillDisplayName: string;
    profileUpdateMessage?: string | null;
    warnings: Array<string>;
} | {
    success: false;
    error: string;
};
/**
 * Callbacks for the skill download flow
 */
export type SkillDownloadFlowCallbacks = {
    onSearch: () => Promise<SkillSearchResult>;
    onDownload: () => Promise<SkillDownloadActionResult>;
};
/**
 * Result of the skill download flow
 */
export type SkillDownloadFlowResult = {
    version: string;
    isUpdate: boolean;
    statusMessage: string;
};
/**
 * Execute the skill download flow
 *
 * This function handles the complete skill download UX:
 * 1. Shows spinner while searching registries
 * 2. Handles search outcomes (error, already-current, list-versions, ready)
 * 3. Shows spinner while downloading
 * 4. Displays success note with install location and skillset status
 *
 * @param args - Flow configuration
 * @param args.skillDisplayName - Display name of the skill being downloaded
 * @param args.callbacks - Callback functions for searching and downloading
 * @param args.nonInteractive - If true, skip interactive prompts and use defaults
 *
 * @returns Download result on success, null on failure
 */
export declare const skillDownloadFlow: (args: {
    skillDisplayName: string;
    nonInteractive?: boolean | null;
    callbacks: SkillDownloadFlowCallbacks;
}) => Promise<SkillDownloadFlowResult | null>;
//# sourceMappingURL=skillDownload.d.ts.map