import { HttpClient } from '../utils/http-client.js';
import { AllModelsResponse } from './models-api.js';
import { ProjectsApi } from './projects-api.js';
/**
 * Параметры для создания рассуждения
 */
export interface CreateReasoningParams {
    /** Идентификатор проекта */
    projectId: string;
    /** Запрос для рассуждения */
    query: string;
    /** Контекст для рассуждения (опционально) */
    context?: {
        /** Фрагменты кода */
        codeSnippets?: Array<{
            /** Путь к файлу */
            filePath: string;
            /** Начальная строка */
            startLine: number;
            /** Конечная строка */
            endLine: number;
            /** Содержимое */
            content: string;
        }>;
        /** Пользовательские переменные */
        variables?: Record<string, any>;
    };
    /** Настройки рассуждения */
    settings?: {
        /** Модель для рассуждения */
        model?: string;
        /** Максимальная длина ответа */
        maxResponseLength?: number;
        /** Температура генерации */
        temperature?: number;
    };
}
/**
 * Рассуждение
 */
export interface Reasoning {
    /** Уникальный идентификатор рассуждения */
    id: string;
    /** Идентификатор проекта */
    projectId: string;
    /** Запрос */
    query: string;
    /** Статус рассуждения */
    status: 'pending' | 'running' | 'completed' | 'error';
    /** Результат рассуждения */
    result?: string;
    /** Дата создания */
    createdAt: string;
    /** Дата завершения */
    completedAt?: string;
    /** Контекст рассуждения */
    context?: any;
    /** Настройки рассуждения */
    settings?: any;
    /** Промежуточные мысли */
    thinking?: string[];
    /** Сообщение об ошибке (если есть) */
    error?: string;
}
/**
 * Параметры для получения списка рассуждений
 */
export interface GetReasoningsParams {
    /** Идентификатор проекта (опционально) */
    projectId?: string;
    /** Статус рассуждения (опционально) */
    status?: 'pending' | 'running' | 'completed' | 'error';
    /** Лимит результатов */
    limit?: number;
    /** Смещение для пагинации */
    offset?: number;
}
/**
 * Шаг мышления в процессе рассуждения
 */
export interface ThinkingStep {
    /** ID шага */
    id: string;
    /** Содержимое шага мышления */
    content: string;
    /** Время создания шага */
    timestamp: string;
    /** Тип шага */
    type: 'thinking' | 'plan' | 'result' | 'error';
}
/**
 * Опции для создания рассуждения
 */
export interface ReasoningOptions {
    /** Идентификатор проекта */
    projectId: string;
    /** Запрос пользователя */
    query: string;
    /** Тип рассуждения */
    type?: 'THINKING' | 'PLANNING' | 'DEBUGGING' | 'REFACTORING';
    /** Уровень детализации */
    level?: 'CONCISE' | 'STANDARD' | 'DETAILED' | 'VERBOSE';
    /** Текущий файл */
    currentFilePath?: string;
    /** Выделение в файле */
    selection?: {
        /** Начальная строка */
        startLine: number;
        /** Начальная колонка */
        startColumn: number;
        /** Конечная строка */
        endLine: number;
        /** Конечная колонка */
        endColumn: number;
        /** Выделенный текст */
        text: string;
    };
    /** Дополнительные опции */
    options?: {
        /** Провайдер модели */
        modelProvider?: string;
        /** Название модели */
        modelName?: string;
        /** Температура генерации */
        temperature?: number;
        /** Другие настройки модели */
        [key: string]: any;
        /** ID сокета для WebSocket соединения */
        socketId?: string;
        /** Использовать потоковый ответ */
        streamResponse?: boolean;
        /** Автоматически запускать рассуждение */
        planningMode?: boolean;
        /** Включить режим рассуждения */
        thinking?: boolean;
        /** Регион API Anthropic (default: us-east-1) */
        region?: 'us-east-1' | 'eu-west-1' | 'ap-southeast-2';
    };
}
/**
 * API для работы с рассуждениями
 */
export declare class ReasoningApi {
    /** HTTP клиент */
    private readonly httpClient;
    /** API для работы с проектами */
    private readonly projectsApi?;
    /** WebSocket клиент */
    private wsClient;
    /** Родительский SDK */
    private parentSdk;
    /**
     * Создает новый экземпляр API для работы с рассуждениями
     * @param {HttpClient} httpClient HTTP клиент
     * @param {ProjectsApi} projectsApi API для работы с проектами
     */
    constructor(httpClient: HttpClient, projectsApi?: ProjectsApi);
    /**
     * Получает список рассуждений
     * @param {GetReasoningsParams} [params] Параметры для получения списка
     * @returns {Promise<Reasoning[]>} Список рассуждений
     */
    getReasonings(params?: GetReasoningsParams): Promise<Reasoning[]>;
    /**
     * Получает рассуждение по ID
     * @param {string} reasoningId ID рассуждения
     * @returns {Promise<Reasoning>} Рассуждение
     */
    getReasoning(reasoningId: string): Promise<Reasoning>;
    /**
     * Создает новое рассуждение
     * @param {ReasoningOptions} options Опции для рассуждения
     * @returns {Promise<Reasoning>} Созданное рассуждение
     */
    createReasoning(options: ReasoningOptions): Promise<Reasoning>;
    /**
     * Создает новое рассуждение с автоматическим переключением между регионами при ошибке перегрузки
     * @param {ReasoningOptions} options Опции для рассуждения
     * @returns {Promise<Reasoning>} Созданное рассуждение
     */
    createReasoningWithRegionFailover(options: ReasoningOptions): Promise<Reasoning>;
    /**
     * Запускает рассуждение
     * @param {string} reasoningId ID рассуждения
     * @returns {Promise<Reasoning>} Обновленное рассуждение
     */
    startReasoning(reasoningId: string): Promise<Reasoning>;
    /**
     * Останавливает рассуждение
     * @param {string} reasoningId ID рассуждения
     * @returns {Promise<Reasoning>} Обновленное рассуждение
     */
    stopReasoning(reasoningId: string): Promise<Reasoning>;
    /**
     * Удаляет рассуждение
     * @param {string} reasoningId ID рассуждения
     * @returns {Promise<void>}
     */
    deleteReasoning(reasoningId: string): Promise<void>;
    /**
     * Получает ход мыслей рассуждения
     * @param {string} reasoningId ID рассуждения
     * @returns {Promise<ThinkingStep[]>} Ход мыслей
     */
    getThinking(reasoningId: string): Promise<ThinkingStep[]>;
    /**
     * Получает все рассуждения проекта
     * @param {string} projectId ID проекта
     * @returns {Promise<Reasoning[]>} Список рассуждений
     */
    getAllReasonings(projectId: string): Promise<Reasoning[]>;
    /**
     * Получает список доступных моделей для рассуждений
     * @deprecated Используйте sdk.models.getAllModels() вместо этого метода
     * @returns {Promise<AllModelsResponse>} Список доступных моделей
     */
    getModels(): Promise<AllModelsResponse>;
    /**
     * Подключается к WebSocket для событий рассуждений
     * @returns {Promise<boolean>} Результат подключения
     */
    connectWebSocket(): Promise<boolean>;
    /**
     * Отключается от WebSocket для событий рассуждений
     * @returns {Promise<void>}
     */
    disconnectWebSocket(): Promise<void>;
    /**
     * Проверяет, подключен ли WebSocket
     * @returns {boolean} Состояние подключения
     */
    isWebSocketConnected(): boolean;
    /**
     * Устанавливает родительский SDK
     * @param sdk Родительский SDK
     */
    setParent(sdk: any): void;
    /**
     * Подписывается на событие через WebSocket
     * @param event Название события
     * @param callback Функция обратного вызова
     */
    on(event: string, callback: Function): void;
    /**
     * Отправляет событие через WebSocket
     * @param event Название события
     * @param data Данные для отправки
     */
    emitSocketEvent(event: string, data: any): void;
    /**
     * Отправляет событие через WebSocket с ожиданием ответа
     * @param event Имя события
     * @param data Данные для отправки
     * @param timeout Таймаут ожидания ответа
     * @returns {Promise<any>} Ответ от сервера
     */
    sendSocketEventWithResponse(event: string, data: any, timeout?: number): Promise<any>;
    /**
     * Присоединяется к конкретному рассуждению через WebSocket
     * @param reasoningId ID рассуждения
     * @returns {Promise<any>} Результат операции
     */
    joinReasoning(reasoningId: string): Promise<any>;
    /**
     * Покидает конкретное рассуждение через WebSocket
     * @param reasoningId ID рассуждения
     */
    leaveReasoning(reasoningId: string): void;
}
//# sourceMappingURL=reasoning-api.d.ts.map