/**
 * LSP Manager Service
 *
 * Manages language server processes for multi-language LSP support.
 * Spawns language servers on demand and manages their lifecycle.
 */
import { type ChildProcess } from 'node:child_process';
/**
 * Configuration for a language server
 */
export interface LanguageServerConfig {
    /** Unique identifier for the server (e.g., 'typescript', 'python') */
    id: string;
    /** Display name for the server */
    name: string;
    /** Command or path to the binary */
    command: string;
    /** Arguments to pass to the command */
    args: string[];
    /** Monaco language IDs this server handles */
    languages: string[];
    /** Check if this server's toolchain is installed */
    isAvailable: () => Promise<boolean>;
    /** Environment variables to set */
    env?: Record<string, string>;
}
/**
 * Status of a language server
 */
export interface LanguageServerStatus {
    id: string;
    name: string;
    languages: string[];
    available: boolean;
    running: boolean;
}
/**
 * LSP Manager
 *
 * Manages language server processes and provides access to them by language ID.
 */
export declare class LspManager {
    private configs;
    private availabilityCache;
    private runningServers;
    private workspaceRoot;
    constructor(workspaceRoot: string, configs?: LanguageServerConfig[]);
    /**
     * Check availability of all language servers
     */
    checkAvailability(): Promise<Map<string, boolean>>;
    /**
     * Get the config for a specific language ID
     */
    getConfigForLanguage(languageId: string): LanguageServerConfig | undefined;
    /**
     * Get the server ID for a language ID
     */
    getServerIdForLanguage(languageId: string): string | undefined;
    /**
     * Check if a language server is available
     */
    isServerAvailable(serverId: string): Promise<boolean>;
    /**
     * Start a language server for a given language
     */
    startServer(languageId: string): Promise<ChildProcess | null>;
    /**
     * Get a running server for a language
     */
    getServerForLanguage(languageId: string): ChildProcess | null;
    /**
     * Stop a specific language server
     */
    stopServer(serverId: string): void;
    /**
     * Stop all running language servers
     */
    stopAll(): void;
    /**
     * Get status of all language servers
     */
    getStatus(): Promise<LanguageServerStatus[]>;
    /**
     * Get workspace root path
     */
    getWorkspaceRoot(): string;
}
/**
 * Create an LSP manager instance
 */
export declare function createLspManager(workspaceRoot: string): LspManager;
//# sourceMappingURL=lsp-manager.d.ts.map