import React from 'react';
import { CustomCommandExecutor } from '../custom-commands/executor.js';
import { CustomCommandLoader } from '../custom-commands/loader.js';
import { ToolManager } from '../tools/tool-manager.js';
import type { CustomCommand } from '../types/commands.js';
import { LLMClient, LSPConnectionStatus, MCPConnectionStatus } from '../types/core.js';
import type { UpdateInfo } from '../types/index.js';
interface UseAppInitializationProps {
    setClient: (client: LLMClient | null) => void;
    setCurrentModel: (model: string) => void;
    setCurrentProvider: (provider: string) => void;
    setCurrentProviderConfig: (providerConfig: import('../types/config.js').AIProviderConfig | null) => void;
    setToolManager: (manager: ToolManager | null) => void;
    setCustomCommandLoader: (loader: CustomCommandLoader | null) => void;
    setCustomCommandExecutor: (executor: CustomCommandExecutor | null) => void;
    setCustomCommandCache: (cache: Map<string, CustomCommand>) => void;
    setStartChat: (start: boolean) => void;
    setMcpInitialized: (initialized: boolean) => void;
    setUpdateInfo: (info: UpdateInfo | null) => void;
    setMcpServersStatus: (status: MCPConnectionStatus[]) => void;
    setLspServersStatus: (status: LSPConnectionStatus[]) => void;
    setPreferencesLoaded: (loaded: boolean) => void;
    setCustomCommandsCount: (count: number) => void;
    setSubagentsReady: (ready: boolean) => void;
    addToChatQueue: (component: React.ReactNode) => void;
    customCommandCache: Map<string, CustomCommand>;
    setActiveMode: (mode: import('../hooks/useAppState.js').ActiveMode) => void;
    cliProvider?: string;
    cliModel?: string;
    /**
     * Live development-mode ref (same one the main loop reads). Wired into the
     * SubagentExecutor so subagent tool approvals honor the current mode,
     * including a switch made while a subagent is running.
     */
    developmentModeRef?: React.RefObject<import('../types/index.js').DevelopmentMode>;
    /**
     * When true, init failures (no client) shut down the process with code 1
     * instead of leaving the run stuck in "Waiting for MCP servers..." — the
     * config wizard and chat queue are interactive-only surfaces that can't
     * resolve under `nanocoder run`.
     */
    nonInteractiveMode?: boolean;
}
export declare function useAppInitialization({ setClient, setCurrentModel, setCurrentProvider, setCurrentProviderConfig, setToolManager, setCustomCommandLoader, setCustomCommandExecutor, setCustomCommandCache: _setCustomCommandCache, setStartChat, setMcpInitialized, setUpdateInfo, setMcpServersStatus, setLspServersStatus, setPreferencesLoaded, setCustomCommandsCount, setSubagentsReady, addToChatQueue, customCommandCache, setActiveMode, cliProvider, cliModel, nonInteractiveMode, developmentModeRef, }: UseAppInitializationProps): {
    initializeClient: (preferredProvider?: string, preferredModel?: string) => Promise<LLMClient | null>;
    loadCustomCommands: (loader: CustomCommandLoader) => void;
    initializeMCPServers: (toolManager: ToolManager) => Promise<void>;
    reinitializeMCPServers: (toolManager: ToolManager) => Promise<void>;
    initializeLSPServers: () => Promise<void>;
};
export {};
//# sourceMappingURL=useAppInitialization.d.ts.map