import React from 'react';
import type { TitleShape } from '../components/ui/styled-title.js';
import { CustomCommandExecutor } from '../custom-commands/executor.js';
import { CustomCommandLoader } from '../custom-commands/loader.js';
import { ToolManager } from '../tools/tool-manager.js';
import type { CheckpointListItem } from '../types/checkpoint.js';
import type { CustomCommand } from '../types/commands.js';
import { DevelopmentMode, LLMClient, LSPConnectionStatus, MCPConnectionStatus, Message, ToolCall } from '../types/core.js';
import type { ToolResult, UpdateInfo } from '../types/index.js';
import type { Tokenizer } from '../types/tokenization.js';
import type { ThemePreset } from '../types/ui.js';
import { BoundedMap } from '../utils/bounded-map.js';
import type { PendingQuestion } from '../utils/question-queue.js';
export type ActiveMode = 'model' | 'provider' | 'modelDatabase' | 'configWizard' | 'mcpWizard' | 'explorer' | 'ideSelection' | 'scheduler' | 'checkpointLoad' | 'sessionSelector' | null;
export interface ConversationContext {
    /**
     * All messages up to (but not including) tool execution.
     * Includes user message, auto-executed messages, and assistant message with tool_calls.
     */
    messagesBeforeToolExecution: Message[];
    /**
     * The assistant message that triggered tool execution.
     * Included in messagesBeforeToolExecution for reference.
     */
    assistantMsg: Message;
    /**
     * System message for the next turn after tool execution.
     */
    systemMessage: Message;
}
export declare function useAppState(): {
    client: LLMClient | null;
    messages: Message[];
    displayMessages: Message[];
    messageTokenCache: BoundedMap<string, number>;
    currentModel: string;
    currentProvider: string;
    currentTheme: ThemePreset;
    currentTitleShape: TitleShape;
    toolManager: ToolManager | null;
    customCommandLoader: CustomCommandLoader | null;
    customCommandExecutor: CustomCommandExecutor | null;
    customCommandCache: Map<string, CustomCommand>;
    startChat: boolean;
    mcpInitialized: boolean;
    updateInfo: UpdateInfo | null;
    mcpServersStatus: MCPConnectionStatus[];
    lspServersStatus: LSPConnectionStatus[];
    preferencesLoaded: boolean;
    customCommandsCount: number;
    isCancelling: boolean;
    isConversationComplete: boolean;
    isSettingsMode: boolean;
    abortController: AbortController | null;
    activeMode: ActiveMode;
    setActiveMode: React.Dispatch<React.SetStateAction<ActiveMode>>;
    isModelSelectionMode: boolean;
    isProviderSelectionMode: boolean;
    isModelDatabaseMode: boolean;
    isConfigWizardMode: boolean;
    isMcpWizardMode: boolean;
    isCheckpointLoadMode: boolean;
    isExplorerMode: boolean;
    isIdeSelectionMode: boolean;
    isSchedulerMode: boolean;
    isSessionSelectorMode: boolean;
    isVscodeEnabled: boolean;
    checkpointLoadData: {
        checkpoints: CheckpointListItem[];
        currentMessageCount: number;
    } | null;
    showAllSessions: boolean;
    currentSessionId: string | null;
    isToolConfirmationMode: boolean;
    isToolExecuting: boolean;
    compactToolDisplay: boolean;
    compactToolDisplayRef: React.RefObject<boolean>;
    compactToolCounts: Record<string, number> | null;
    compactToolCountsRef: React.RefObject<Record<string, number>>;
    isQuestionMode: boolean;
    pendingQuestion: PendingQuestion | null;
    developmentMode: DevelopmentMode;
    contextPercentUsed: number | null;
    contextLimit: number | null;
    pendingToolCalls: ToolCall[];
    currentToolIndex: number;
    completedToolResults: ToolResult[];
    currentConversationContext: ConversationContext | null;
    chatComponents: React.ReactNode[];
    getNextComponentKey: () => number;
    tokenizer: Tokenizer;
    setClient: React.Dispatch<React.SetStateAction<LLMClient | null>>;
    setMessages: React.Dispatch<React.SetStateAction<Message[]>>;
    setDisplayMessages: React.Dispatch<React.SetStateAction<Message[]>>;
    setMessageTokenCache: React.Dispatch<React.SetStateAction<BoundedMap<string, number>>>;
    setCurrentModel: React.Dispatch<React.SetStateAction<string>>;
    setCurrentProvider: React.Dispatch<React.SetStateAction<string>>;
    setCurrentTheme: React.Dispatch<React.SetStateAction<ThemePreset>>;
    setCurrentTitleShape: React.Dispatch<React.SetStateAction<TitleShape>>;
    setToolManager: React.Dispatch<React.SetStateAction<ToolManager | null>>;
    setCustomCommandLoader: React.Dispatch<React.SetStateAction<CustomCommandLoader | null>>;
    setCustomCommandExecutor: React.Dispatch<React.SetStateAction<CustomCommandExecutor | null>>;
    setCustomCommandCache: React.Dispatch<React.SetStateAction<Map<string, CustomCommand>>>;
    setStartChat: React.Dispatch<React.SetStateAction<boolean>>;
    setMcpInitialized: React.Dispatch<React.SetStateAction<boolean>>;
    setUpdateInfo: React.Dispatch<React.SetStateAction<UpdateInfo | null>>;
    setMcpServersStatus: React.Dispatch<React.SetStateAction<MCPConnectionStatus[]>>;
    setLspServersStatus: React.Dispatch<React.SetStateAction<LSPConnectionStatus[]>>;
    setPreferencesLoaded: React.Dispatch<React.SetStateAction<boolean>>;
    setCustomCommandsCount: React.Dispatch<React.SetStateAction<number>>;
    setIsCancelling: React.Dispatch<React.SetStateAction<boolean>>;
    setIsConversationComplete: React.Dispatch<React.SetStateAction<boolean>>;
    setIsSettingsMode: React.Dispatch<React.SetStateAction<boolean>>;
    setAbortController: React.Dispatch<React.SetStateAction<AbortController | null>>;
    setIsVscodeEnabled: React.Dispatch<React.SetStateAction<boolean>>;
    setCheckpointLoadData: React.Dispatch<React.SetStateAction<{
        checkpoints: CheckpointListItem[];
        currentMessageCount: number;
    } | null>>;
    setShowAllSessions: React.Dispatch<React.SetStateAction<boolean>>;
    setCurrentSessionId: React.Dispatch<React.SetStateAction<string | null>>;
    setIsToolConfirmationMode: React.Dispatch<React.SetStateAction<boolean>>;
    setIsToolExecuting: React.Dispatch<React.SetStateAction<boolean>>;
    setCompactToolDisplay: React.Dispatch<React.SetStateAction<boolean>>;
    setCompactToolCounts: React.Dispatch<React.SetStateAction<Record<string, number> | null>>;
    setIsQuestionMode: React.Dispatch<React.SetStateAction<boolean>>;
    setPendingQuestion: React.Dispatch<React.SetStateAction<PendingQuestion | null>>;
    setDevelopmentMode: React.Dispatch<React.SetStateAction<DevelopmentMode>>;
    setContextPercentUsed: React.Dispatch<React.SetStateAction<number | null>>;
    setContextLimit: React.Dispatch<React.SetStateAction<number | null>>;
    setPendingToolCalls: React.Dispatch<React.SetStateAction<ToolCall[]>>;
    setCurrentToolIndex: React.Dispatch<React.SetStateAction<number>>;
    setCompletedToolResults: React.Dispatch<React.SetStateAction<ToolResult[]>>;
    setCurrentConversationContext: React.Dispatch<React.SetStateAction<ConversationContext | null>>;
    setChatComponents: React.Dispatch<React.SetStateAction<React.ReactNode[]>>;
    liveComponent: React.ReactNode;
    setLiveComponent: React.Dispatch<React.SetStateAction<React.ReactNode>>;
    addToChatQueue: (component: React.ReactNode) => void;
    getMessageTokens: (message: Message) => number;
    updateMessages: (newMessages: Message[]) => void;
    resetToolConfirmationState: () => void;
};
//# sourceMappingURL=useAppState.d.ts.map