/**
 * Config drift: has THIS box drained its device-scoped state into its own
 * `devices/<host>/agents.yaml`, or is it still carrying per-box state in the
 * shared top-level `agents.yaml`?
 *
 * PHNX-3315 P1 heals a frozen top-level header and drains the central `browser:`
 * tombstone; P2 folds `fleet.discovery` / `fleet.ignored`, the `hosts:` registry,
 * and device-scoped native `accounts:` out of central and into the device doc.
 * Each fold-and-delete migration is idempotent and runs on config access / daemon
 * boot / install — so a converged box shows NO drift. A box that has NOT run the
 * fold yet (stale checkout, never re-synced) still holds those blocks centrally,
 * and until now that was INVISIBLE: `agents sync status` only reported per-agent
 * "N missing", so an un-drained box was discovered the hard way — as a mystery
 * `agents repo pull` conflict when two boxes rewrote the same shared map.
 *
 * This detector is READ-ONLY and must NOT trigger the migration (that would drain
 * the very leak it is trying to surface): it reads the raw top-level user file
 * directly, never `readMeta()` (system-merged) and never the migration hook.
 */
export interface ConfigDrift {
    /** Top-level `agents.yaml` header != the current META_HEADER (the P1 case). */
    staleHeader: boolean;
    /**
     * Labels of central blocks that should have folded into this box's device doc
     * but still linger — the P1 `browser` tombstone and the P2 `fleet` / `hosts` /
     * `accounts` device-scoped writers. Empty on a drained box.
     */
    centralLeaks: string[];
}
/**
 * Inspect this box's on-disk state for config drift. Pure read — no migration, no
 * writes. Mirrors the gather step of {@link migrateDeviceConfigStores} (plus the
 * browser tombstone) so a leak here is exactly what a fold would drain.
 */
export declare function detectConfigDrift(): ConfigDrift;
/** True when either drift class is present. */
export declare function hasConfigDrift(d: ConfigDrift): boolean;
