export interface PendingDevice {
    name: string;
    platform: string;
}
/**
 * Drop pending sentinels for devices that are already registered or ignored.
 * Safe without a live tailscale probe — only removes names we know are no
 * longer "new". Used when soft-fail discovery cannot recompute the full
 * pending set, so a test leak or race cannot leave registered fleet boxes in
 * the menu bar's NEW DEVICES section forever.
 */
export declare function pruneDismissedPendingSentinels(): Promise<void>;
/**
 * Make the sentinel dir exactly match `pending`: create a file per pending
 * device (content = platform), and delete any leftover sentinel whose device is
 * no longer pending (it got registered, ignored, or left the tailnet). Best-
 * effort — a filesystem error here must never crash the daemon, so callers pass
 * this through their existing try/catch.
 *
 * The sentinel writer is the single authoritative choke point every discovery
 * path flows through (the daemon device-probe timer and `agents sync`), so it
 * re-subtracts the persisted ignore-list AND the registered roster rather than
 * trusting the caller's `pending` set. That closes two races:
 *   - probe/ignore (RUSH-2495): a probe that computed `pending` BEFORE the user
 *     pressed "Ignore" would otherwise re-create the just-dismissed device's
 *     sentinel and the menu bar would re-surface it.
 *   - registry-empty pollution: a process that had AGENTS_DEVICES_DIR redirected
 *     (tests / hermetic runs) but still wrote the live devices-pending dir
 *     treated every tailnet node as new — including already-registered fleet
 *     boxes. Re-subtracting the live registry means those phantoms are never
 *     written and are removed if they already exist.
 */
export declare function reconcilePendingSentinels(pending: PendingDevice[]): Promise<void>;
/** Remove one device's pending sentinel (after the user registers or ignores it).
 * No-op if it doesn't exist. */
export declare function clearPendingSentinel(name: string): void;
/** Read the current pending sentinels (name + platform). Used by tests and any
 * TS-side consumer; the menu-bar helper reads the dir directly in Swift. */
export declare function readPendingSentinels(): PendingDevice[];
