/**
 * Schema for user preferences resolved by the layered config system.
 *
 * Each entry declares everything the resolver needs:
 * - where the value can come from (project file, env var, prompt),
 * - how to validate it,
 * - how to describe it to the user.
 *
 * Add a new preference here, then any command can consume it via
 * `PreferencesResolver.resolve(key)` without touching command-specific flag wiring.
 */
export type PreferenceKey = 'email' | 'apiPath' | 'dashboardPath' | 'certificateMode';
export interface PreferenceDefinition<T = string> {
    /** Stable key — also used as JSON key in storage. */
    key: PreferenceKey;
    /** One-line human description shown in `flui pref` output and prompts. */
    description: string;
    /** Environment variable that overrides storage. */
    envVar: string;
    /** When true, project-local ./flui.config.json may override the user-global value. */
    projectOverridable: boolean;
    /** Default applied if no source provides a value (lowest priority). */
    defaultValue?: T;
    /** When true, the resolver requires a value and will prompt / fail if missing. */
    required: boolean;
    /** Optional enum of allowed values. */
    allowedValues?: readonly T[];
    /** Validator returning an error message or null when valid. */
    validate?: (value: string) => string | null;
}
export declare const PREFERENCES: Record<PreferenceKey, PreferenceDefinition>;
export declare function isPreferenceKey(value: string): value is PreferenceKey;
