export interface AgentsBinaryShadow {
    /** Path of the shadowing binary as it appears to the caller. */
    path: string;
    /** Its self-reported version, if we can run it. */
    version?: string;
}
/**
 * Whether two path spellings identify the same file.
 *
 * Two spellings of one file rarely compare equal on Windows: `realpathSync` does
 * not expand 8.3 short names, so a path rooted at `os.tmpdir()`
 * (`C:\Users\RUNNER~1\...` on a GitHub runner) never matches the long form
 * (`C:\Users\runneradmin\...`) that `where` reports. Compare by device+inode
 * first and fall back to case-insensitive resolved spellings.
 */
export declare function sameFile(a: string, b: string): boolean;
/**
 * Find `agents` installs that are NOT the currently running binary.
 *
 * Checks two sources:
 *   1. The current PATH: if `which agents` / `where agents` resolves to a
 *      different real binary than the one executing this code, it is an active
 *      shadow.
 *   2. Well-known install directories: any executable `agents` whose realpath
 *      differs from the current entry is a latent shadow — it may win under a
 *      different PATH (e.g. the daemon's service-managed PATH).
 */
export declare function detectAgentsBinaryShadows(currentBin?: string, extraDirs?: readonly string[]): AgentsBinaryShadow[];
