import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { BridgeError } from "../errors.js";
/**
 * Why this resolution cannot produce a wakeable session id, or null when it can.
 *
 * 🔴 ASK THE CONDITION, NOT A PROXY. The old guard tested `candidateCount === 0`. An AMBIGUOUS
 * resolution has candidates but no chosen id (`decideResolution` returns `sessionId: null` when
 * two transcripts are within the margin), so it slipped straight through the zero-check and the
 * caller's value was pinned unchecked — during the 2026-09-02 ring exercise that value was a
 * CHANNEL UUID, which `--resume` can never open, and every subsequent wake failed in ~2s with no
 * warning ever emitted. The question that decides correctness is "did we end up with an id
 * `--resume` can open?", not "were there zero candidates?".
 */
export declare function unresolvedSessionReason(r: {
    sessionId: string | null;
    candidateCount: number;
}): "no-candidates" | "ambiguous" | null;
/**
 * Retry a PEER_NOT_YOURS registration with the SAME peerId, waiting for the relay's
 * `retryAfterMs` with capped backoff, bounded by {@link peerReclaimWaitMs}. A hold that outlasts
 * the budget (or an old relay that sends no hint) surfaces the original refusal immediately.
 * Any other error ends the wait and is thrown as-is.
 */
export declare function retrySamePeerId<T>(first: BridgeError, attempt: () => Promise<T>, budgetMs?: number, sleep?: (ms: number) => Promise<void>): Promise<T>;
export declare function registerRegisterPeerTool(server: McpServer): void;
//# sourceMappingURL=register-peer.d.ts.map