/**
 * Preferences onboarding — the guided path over the same device-config keys the
 * `agents devices …` commands write (lib/device-config.ts). Two questions, each
 * TTY-only, skippable, and absent non-interactively:
 *
 *   1. "Which machine do you sit at?"   → `interactive.host` (central config:)
 *   2. "Which browser should agents drive on THIS machine?"
 *                                       → `browser.profile` (device-local default)
 *
 * Shared by the bare `agents setup` flow (a short step after the capability
 * hub) and by `agents setup fleet` (interactive host after a successful sync).
 * Unset always keeps today's behavior — skipping is a real choice, not a
 * partial state.
 */
import { type DeviceRegistry } from '../lib/devices/registry.js';
/** Registered macOS device names, sorted — the interactive-host candidates. */
export declare function macDeviceNames(reg: DeviceRegistry): string[];
/**
 * The interactive-host picker's highlighted default: this machine when it is a
 * candidate (the common case — you run setup on the box you sit at), else the
 * first candidate. null when there are no candidates.
 */
export declare function defaultInteractiveHostChoice(candidates: string[], self?: string): string | null;
/**
 * The browser picker's highlighted default — the same browser auto-detect
 * would win, since `listInstalledBrowsers` returns platform priority order
 * (macOS: chrome first). null when nothing is installed.
 */
export declare function defaultBrowserChoice<T extends {
    browserType: string;
}>(installed: T[]): T['browserType'] | null;
/**
 * Offer to set the interactive host when none is configured and the registry
 * has more than one macOS device. Returns true when a host was set. Silent
 * no-op non-TTY, when already set, or with fewer than two candidates (the
 * answer is obvious or absent).
 */
export declare function maybePickInteractiveHost(): Promise<boolean>;
/**
 * Offer to pin this machine's default browser profile to a chosen browser.
 * Only asked when there is nothing to preserve: no configured device default
 * AND no existing `default` profile (an existing profile is the user's earlier
 * choice — never re-pinned behind their back). The list is the installed
 * Chromium-family browsers plus a "None — this box uses the fleet hub" opt-out.
 *
 * This is the ONE place a default browser is chosen for a machine (PHNX-3296):
 * a bare `agents browser start` no longer auto-detects and mints one, so picking
 * here (or `agents browser use` / `agents setup browser` later) is how a box
 * gets a local default at all. Picking "None" leaves it to the fleet hub
 * (`browser.device`). Returns true when a profile was created and set as the
 * device default. Silent no-op non-TTY — a headless box relies on the hub.
 */
export declare function maybePickBrowserProfile(deps?: {
    /** Force interactivity in a test; defaults to a real TTY probe. */
    interactive?: boolean;
    /** Inject the prompt so the pick is testable without a TTY. */
    select?: (config: {
        message: string;
        default?: string;
        choices: Array<{
            name: string;
            value: string;
        }>;
    }) => Promise<string>;
}): Promise<boolean>;
/**
 * The bare-`agents setup` preferences step: interactive host, then browser.
 * Runs AFTER the capability hub so it never delays the bootstrap. Never
 * throws — a prompt cancel or a failed pick ends the step quietly and lets
 * setup complete (the same semantics as the capability hub).
 */
export declare function runPreferencesStep(): Promise<void>;
