/**
 * registry.ts — Invoker registry with availability cache.
 *
 * Maps specialist.preferredRuntime (or auto-detected defaults) to the right
 * AgentInvoker, and caches availability checks so we don't re-exec binaries
 * on every dispatch.
 */
import type { AgentInvoker, AvailabilityStatus, InvokerId } from './types.js';
declare class InvokerRegistry {
    private readonly invokers;
    private readonly cache;
    constructor();
    private register;
    /** Returns all registered invokers in preference order. */
    all(): AgentInvoker[];
    /** Returns the invoker for the given ID, or undefined. */
    get(id: InvokerId): AgentInvoker | undefined;
    /**
     * Returns the first available invoker in preference order.
     * Respects an optional preferred ID (e.g. from specialist.preferredRuntime).
     */
    resolve(preferredId?: string): Promise<AgentInvoker | null>;
    /** Returns cached (or fresh) availability status for all invokers. */
    listAvailability(): Promise<AvailabilityStatus[]>;
    /** Runs availability checks on all invokers in parallel (non-blocking startup sweep). */
    warmCache(): void;
    private checkAvailability;
}
export declare const invokerRegistry: InvokerRegistry;
export {};
