/**
 * CLI AI Agent Detector
 *
 * Dynamic CLI detection based on Provider.
 * Reads spawn.command from cli/acp categories via ProviderLoader to check installation.
 *
 * Uses parallel execution for fast detection across many providers.
 */
import type { ProviderLoader } from '../providers/provider-loader.js';
export interface CLIInfo {
    id: string;
    displayName: string;
    icon: string;
    command: string;
    versionCommand?: string;
    installed: boolean;
    version?: string;
    path?: string;
    category?: string;
}
/**
 * Detect all CLI/ACP agents (parallel)
 * @param providerLoader ProviderLoader instance (dynamic list creation)
 */
export declare function detectCLIs(providerLoader?: ProviderLoader, options?: {
    includeVersion?: boolean;
}): Promise<CLIInfo[]>;
/** Detect specific CLI — only probes the one requested provider */
export declare function detectCLI(cliId: string, providerLoader?: ProviderLoader, options?: {
    includeVersion?: boolean;
}): Promise<CLIInfo | null>;
/**
 * Fold a detected CLIInfo[] into the `{ providerId: version }` map surfaced as a
 * node's providerVersions (see RepoMeshNodeCapabilities.providerVersions). Only
 * installed providers that produced a parseable version string are included, so a
 * missing entry means "not installed or version unknown" — never a fabricated value.
 * Pure/deterministic: the same detection input always yields the same map, which is
 * what the git_status envelope carries and the mesh_status skew check compares.
 */
export declare function buildProviderVersions(detected: CLIInfo[]): Record<string, string>;
/**
 * Register this daemon's ProviderLoader as the fallback used by loader-less
 * provider-version reads (getCachedProviderVersions() with no argument). Called
 * once at boot. Without it the coordinator's self node never resolves a CLI list,
 * so its provider-version chips stay empty even though remote nodes populate.
 */
export declare function setDefaultProviderLoader(providerLoader: ProviderLoader): void;
/**
 * Return the current cached provider-versions map for this daemon, triggering a
 * lazy background refresh when the snapshot is stale/cold. Never blocks: returns
 * whatever is currently cached (an empty object before the first refresh lands).
 * This is the source the git_status envelope reads to self-report a node's
 * provider versions to the mesh coordinator.
 */
export declare function getCachedProviderVersions(providerLoader?: ProviderLoader): Record<string, string>;
