/**
 * Registry download flow module
 *
 * Provides a flow for downloading skillset 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 switch hint
 * - Outro message
 */
/**
 * Result from the search callback
 */
export type DownloadSearchResult = {
    status: "ready";
    targetVersion: string;
    isUpdate: boolean;
    currentVersion?: string | null;
} | {
    status: "already-current";
    version: string;
    warnings?: Array<string> | null;
} | {
    status: "list-versions";
    formattedVersionList: string;
    versionCount: number;
} | {
    status: "error";
    error: string;
    hint?: string | null;
};
/**
 * Result from the download callback
 */
export type DownloadActionResult = {
    success: true;
    version: string;
    isUpdate: boolean;
    installedTo: string;
    switchHint: string;
    profileDisplayName: string;
    warnings: Array<string>;
} | {
    success: false;
    error: string;
};
/**
 * Callbacks for the registry download flow
 */
export type RegistryDownloadFlowCallbacks = {
    onSearch: () => Promise<DownloadSearchResult>;
    onDownload: () => Promise<DownloadActionResult>;
};
/**
 * Result of the registry download flow
 */
export type RegistryDownloadFlowResult = {
    version: string;
    isUpdate: boolean;
    statusMessage: string;
};
/**
 * Execute the registry download flow
 *
 * This function handles the complete 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 switch hint
 *
 * @param args - Flow configuration
 * @param args.packageDisplayName - Display name of the package 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 registryDownloadFlow: (args: {
    packageDisplayName: string;
    nonInteractive?: boolean | null;
    callbacks: RegistryDownloadFlowCallbacks;
}) => Promise<RegistryDownloadFlowResult | null>;
//# sourceMappingURL=registryDownload.d.ts.map