/** * Interactive Prompts * Hand-rolled on node:readline — no external prompt dependency. * Callers should check isInteractive() before calling confirm/input/select; * calling them without a TTY throws a CliError. */ /** Test hook: inject streams and TTY-ness. Call with no args to reset. */ export declare function _setStreamsForTest(stdin?: NodeJS.ReadableStream, stdout?: NodeJS.WritableStream, forceTTY?: boolean): void; /** True iff we can safely prompt: real TTY, not CI, not --json mode. */ export declare function isInteractive(): boolean; /** * Yes/no confirmation. Empty answer takes the default (No unless * defaultNo: false). Re-asks on unrecognized input, max 3 attempts * then returns the default. */ export declare function confirm(question: string, opts?: { defaultNo?: boolean; }): Promise; /** * Free-text input. validate returns true or an error message (which is * displayed before re-asking). secret: true suppresses echo via a muted * output stream (the standard readline trick). */ export declare function input(question: string, opts?: { validate?: (s: string) => string | true; default?: string; secret?: boolean; }): Promise; /** Numbered-list selection; re-asks until a valid number is entered. */ export declare function select(question: string, choices: Array<{ label: string; value: T; hint?: string; }>): Promise;