import * as clack from "@clack/prompts"; /** * The subset of the clack prompts API the interactive pickers use. Commands * pass the real module by default; tests inject a scripted fake so picker * behavior is verifiable without a terminal (and without mocking modules). */ export interface PromptApi { intro: typeof clack.intro; outro: typeof clack.outro; cancel: typeof clack.cancel; confirm: typeof clack.confirm; select: typeof clack.select; spinner: typeof clack.spinner; isCancel: typeof clack.isCancel; log: Pick; } /** The real clack prompts module — the default for every picker. */ export declare const realPrompts: PromptApi; /** * Guard for interactive role selection: prompt-based flows need a real * terminal. Throws a friendly error (naming the non-interactive alternative) * when stdin is not a TTY, instead of rendering prompt garbage into a pipe or * CI log. */ export declare function assertInteractiveContext(command: string, hint: string): void; /** * Pick an installed role from the lock file. * Returns the chosen roleId, or null when the user cancels. */ export declare function pickInstalledRole(message: string, prompts?: PromptApi): Promise; /** * Pick a role that is synced into a target harness directory (a symlink to an * installed role). Broken symlinks are skipped. * Returns the chosen roleId, or null when the user cancels. */ export declare function pickSyncedRole(target: string, message: string, prompts?: PromptApi): Promise; /** * Pick a sync target (host platform) from the platform registry. * * Choices are registry-driven (`PLATFORM_REGISTRY`) — never a hardcoded list, * so a newly registered harness appears automatically. When `role` is known, * targets where that role is already synced are surfaced first, so the user is * not led to a target where the caller would immediately fail with "no roles * synced"; if no target has the role (or no role was given), every valid * target is listed so the flow still works before the first sync. * * Returns the chosen target id, or null when the user cancels. */ export declare function pickTarget(role: string | undefined, message: string, prompts?: PromptApi): Promise; /** * Interactive flow for `rolebox install` without a role spec: choose a * registry (only when more than one is configured) and then a role from that * registry's manifest. * * Returns a `{ registry?, roleId }` pair — `registry` is omitted when the * chosen registry is the default/single one so the resulting spec stays short * (`roleId`). Returns null when the user cancels. */ export declare function pickRegistryAndRole(message?: string, prompts?: PromptApi): Promise<{ registry?: string; roleId: string; } | null>; //# sourceMappingURL=pick.d.ts.map