import type React from 'react';
import type { CustomCommandLoader } from '../../custom-commands/loader.js';
import type { Task } from '../../tools/tasks/types.js';
import type { ToolManager } from '../../tools/tool-manager.js';
import type { TuneConfig } from '../../types/config.js';
import type { ApiUsageSnapshot, ImageAttachment, LLMClient, Message } from '../../types/core.js';
export interface UseChatHandlerProps {
    client: LLMClient | null;
    toolManager: ToolManager | null;
    customCommandLoader: CustomCommandLoader | null;
    messages: Message[];
    setMessages: (messages: Message[]) => void;
    currentProvider: string;
    currentModel: string;
    setIsCancelling: (cancelling: boolean) => void;
    addToChatQueue: (component: React.ReactNode) => void;
    abortController: AbortController | null;
    setAbortController: (controller: AbortController | null) => void;
    developmentMode?: 'normal' | 'auto-accept' | 'yolo' | 'plan' | 'headless';
    developmentModeRef?: React.RefObject<'normal' | 'auto-accept' | 'yolo' | 'plan' | 'headless'>;
    nonInteractiveMode?: boolean;
    onConversationComplete?: () => void;
    reasoningExpandedRef?: React.RefObject<boolean>;
    compactToolDisplayRef?: React.RefObject<boolean>;
    onSetCompactToolCounts?: (counts: Record<string, number> | null) => void;
    compactToolCountsRef?: React.MutableRefObject<Record<string, number>>;
    onSetLiveTaskList?: (tasks: Task[] | null) => void;
    setLiveComponent?: (component: React.ReactNode) => void;
    setLastApiUsage?: (usage: ApiUsageSnapshot | null) => void;
    tune?: TuneConfig;
    subagentsReady?: boolean;
}
export interface ChatHandlerReturn {
    handleChatMessage: (message: string, displayValue?: string, images?: ImageAttachment[]) => Promise<void>;
    processAssistantResponse: (systemMessage: Message, messages: Message[]) => Promise<void>;
    isGenerating: boolean;
    streamingReasoning: string;
    streamingContent: string;
    tokenCount: number;
}
//# sourceMappingURL=types.d.ts.map