import { WebSocketClientOptions } from './websocket-client.js';
/**
 * Пространства имен для WebSocket
 */
export declare enum WebSocketNamespace {
    /** Основное пространство имен */
    DEFAULT = "/",
    /** Пространство для рассуждений */
    REASONING = "/reasoning",
    /** Пространство для индексации */
    INDEXING = "/indexing",
    /** Пространство для зависимостей */
    DEPENDENCIES = "/dependencies"
}
/**
 * Опции для Code Solver WebSocket клиента
 */
export interface CodeSolverWebSocketOptions extends WebSocketClientOptions {
    /** API ключ для авторизации */
    apiKey?: string;
    /**
     * Проверять SSL-сертификаты при подключении
     * Установите false для работы с самоподписанными сертификатами
     */
    rejectUnauthorized?: boolean;
    /**
     * Автоматически включать механизм ping/pong при подключении
     * По умолчанию: true
     */
    enableAutoPing?: boolean;
    /**
     * Интервал между ping-сообщениями в миллисекундах
     * По умолчанию: 15000 (15 сек)
     */
    pingInterval?: number;
    /**
     * Количество пропущенных pong-ответов до признания соединения потерянным
     * По умолчанию: 3
     */
    pingTimeoutThreshold?: number;
    /**
     * Стратегия задержки между попытками переподключения
     * 'linear' - линейное увеличение задержки
     * 'exponential' - экспоненциальное увеличение задержки (с jitter)
     * По умолчанию: 'exponential'
     */
    reconnectStrategy?: 'linear' | 'exponential';
    /**
     * Включение сохранения и восстановления сессии
     * По умолчанию: true
     */
    enableSessionPersistence?: boolean;
    /**
     * Базовая задержка для переподключения в миллисекундах
     * По умолчанию: 1000
     */
    retryDelay?: number;
    /**
     * Максимальная задержка для переподключения в миллисекундах
     * По умолчанию: 30000
     */
    maxRetryDelay?: number;
}
/**
 * События, связанные с рассуждениями от Anthropic API
 */
export interface ReasoningEvents {
    /** Событие начала сообщения */
    message_start: {
        /** ID сообщения */
        id: string;
        /** Тип сообщения */
        type: string;
        /** Роль отправителя */
        role: string;
        /** Модель */
        model?: string;
    };
    /** Событие начала блока контента */
    content_block_start: {
        /** ID блока */
        id: string;
        /** Тип блока */
        type: string;
        /** Тип контента */
        content_type: string;
        /** Индекс блока */
        index: number;
    };
    /** Событие дельты блока контента */
    content_block_delta: {
        /** Индекс блока */
        index: number;
        /** Содержимое дельты */
        delta: {
            /** Тип дельты */
            type: string;
            /** Текстовое содержимое (для дельты text_delta) */
            text?: string;
            /** Содержимое мышления (для дельты thinking_delta) */
            thinking?: string;
            /** Содержимое частичного JSON (для дельты input_json_delta) */
            input_json?: string;
            /** Подпись для верификации (для дельты signature_delta) */
            signature?: string;
        };
    };
    /** Событие остановки блока контента */
    content_block_stop: {
        /** ID блока */
        id: string;
        /** Тип блока */
        type: string;
        /** Тип контента */
        content_type: string;
        /** Индекс блока */
        index: number;
    };
    /** Событие дельты сообщения */
    message_delta: {
        /** ID сообщения */
        id: string;
        /** Дельта сообщения */
        delta: any;
    };
    /** Событие окончания сообщения */
    message_stop: {
        /** ID сообщения */
        id: string;
        /** Тип сообщения */
        type: string;
        /** Роль отправителя */
        role: string;
        /** Модель */
        model?: string;
    };
    /** Событие ошибки */
    error: {
        /** Код ошибки */
        code: string;
        /** Сообщение об ошибке */
        message: string;
        /** Детали ошибки */
        details?: {
            /** HTTP статус */
            status?: number;
            /** Тип ошибки */
            type?: string;
            /** Причина ошибки */
            reason?: string;
        };
    };
}
/**
 * События, связанные с индексацией
 */
export interface IndexingEvents {
    /** Событие индексации файла */
    file_indexed: {
        /** ID проекта */
        projectId: string;
        /** Информация о файле */
        file: {
            /** Путь к файлу */
            path: string;
            /** Язык программирования */
            language: string;
            /** Время индексации */
            indexedAt: number;
            /** Тип изменения */
            changeType: 'semantic' | 'structural' | 'formatting';
        };
    };
    /** Событие завершения индексации проекта */
    indexing_complete: {
        /** ID проекта */
        projectId: string;
        /** Время завершения */
        timestamp: number;
        /** Статистика индексации */
        stats: {
            /** Общее количество файлов */
            totalFiles: number;
            /** Количество проиндексированных файлов */
            indexed: number;
            /** Количество файлов с ошибками */
            failed: number;
            /** Время индексации в миллисекундах */
            time: number;
        };
        /** Версия индекса */
        indexVersion: string;
    };
}
/**
 * Общие события
 */
export interface CommonEvents {
    /** Событие подключения */
    connect: {
        /** ID клиента */
        clientId: string;
    };
    /** Событие отключения */
    disconnect: {
        /** Причина отключения */
        reason: string;
    };
}
/**
 * События, связанные с зависимостями файлов
 */
export interface DependenciesEvents {
    /** Событие обновления зависимостей */
    dependency_update: {
        /** ID проекта */
        projectId: string;
        /** Временная метка */
        timestamp: number;
        /** Затронутые файлы */
        affectedFiles: string[];
    };
}
/**
 * Типы WebSocket событий
 */
export type WebSocketEvents = ReasoningEvents & IndexingEvents & CommonEvents & DependenciesEvents;
/**
 * Обработчики для событий от Anthropic API
 */
export interface AnthropicStreamCallbacks {
    /** Обработчик для события начала сообщения */
    onMessageStart?: (data: ReasoningEvents['message_start']) => void;
    /** Обработчик для события начала блока мышления (через content_block_start с типом thinking) */
    onThinkingStart?: (data: ReasoningEvents['content_block_start']) => void;
    /** Обработчик для события дельты блока мышления (через content_block_delta с типом thinking_delta) */
    onThinkingDelta?: (data: {
        index: number;
        delta: string;
    }) => void;
    /** Обработчик для события остановки блока мышления (через content_block_stop с типом thinking) */
    onThinkingStop?: (data: ReasoningEvents['content_block_stop']) => void;
    /** Обработчик для события начала блока контента */
    onContentStart?: (data: ReasoningEvents['content_block_start']) => void;
    /** Обработчик для события дельты блока контента */
    onContentDelta?: (data: ReasoningEvents['content_block_delta']) => void;
    /** Обработчик для события остановки блока контента */
    onContentStop?: (data: ReasoningEvents['content_block_stop']) => void;
    /** Обработчик для события окончания сообщения */
    onMessageStop?: (data: ReasoningEvents['message_stop']) => void;
    /** Обработчик для события ошибки */
    onError?: (data: ReasoningEvents['error']) => void;
    /** Обработчик для всех событий (для отладки) */
    onAny?: (eventName: string, data: any) => void;
}
/**
 * Интерфейс для статистики ping/pong сообщений
 */
export interface PingPongStats {
    /** Намспейс, для которого собрана статистика */
    namespace: WebSocketNamespace;
    /** Socket ID */
    socketId: string | null;
    /** Количество отправленных ping-сообщений */
    pingSent: number;
    /** Количество полученных pong-ответов */
    pongReceived: number;
    /** Средняя задержка RTT (Round Trip Time) в миллисекундах */
    averageRtt: number;
    /** Минимальная задержка RTT в миллисекундах */
    minRtt: number;
    /** Максимальная задержка RTT в миллисекундах */
    maxRtt: number;
    /** Последняя задержка RTT в миллисекундах */
    lastRtt: number;
    /** Время последнего полученного pong-ответа */
    lastPongTimestamp: number;
    /** Статус соединения */
    isConnected: boolean;
}
/**
 * Интерфейс для диагностики соединения
 */
export interface ConnectionDiagnostics {
    /** Пространство имен */
    namespace: WebSocketNamespace;
    /** Состояние соединения */
    isConnected: boolean;
    /** ID сокета */
    socketId: string | null;
    /** Время последней активности */
    lastActivity: number;
    /** Задержка RTT */
    rtt: {
        /** Текущая задержка */
        current: number;
        /** Минимальная задержка */
        min: number;
        /** Максимальная задержка */
        max: number;
        /** Средняя задержка */
        avg: number;
    };
    /** Количество отправленных ping-сообщений */
    pingSent: number;
    /** Количество полученных pong-ответов */
    pongReceived: number;
    /** Количество пропущенных pong-ответов */
    missedPongs: number;
    /** Количество таймаутов */
    timeoutCount: number;
    /** Количество попыток переподключения */
    reconnectAttempts: number;
    /** Время последнего подключения */
    lastConnectTime: number;
    /** Информация о восстановлении сессии */
    sessionRecovery: {
        /** Наличие токена сессии */
        hasSessionToken: boolean;
        /** Длина токена сессии */
        tokenLength: number;
        /** Было ли восстановлено из сессии */
        wasRecovered: boolean;
    };
}
/**
 * WebSocket клиент для работы с Code Solver API
 */
export declare class CodeSolverWebSocketClient {
    /** Базовый URL API */
    private readonly baseURL;
    /** Опции клиента */
    private readonly options;
    /** Пространство имен для Socket.IO */
    private readonly namespace;
    /** WebSocket клиенты для разных пространств имен */
    private clients;
    /** Активная сессия рассуждения */
    private activeReasoningId;
    /** Активная сессия индексации */
    private activeProjectId;
    /** Обработчики событий мышления */
    private thinkingEventHandlers;
    /** Таймеры для ping/pong */
    private pingIntervals;
    /** Статистика ping/pong */
    private pingStats;
    /** Количество последовательных таймаутов */
    private pingTimeouts;
    /** Задержка по умолчанию между ping-сообщениями (30 секунд) */
    private defaultPingInterval;
    /** Порог таймаута (количество пропущенных pong) */
    private timeoutThreshold;
    /** Хранилище обработчиков ping/pong */
    private pingPongEventHandlers;
    /** Токены сессий для разных пространств имен */
    private sessionTokens;
    /** Состояние подключения для разных пространств имен */
    private connectionState;
    /** Таймер для проверки здоровья соединений */
    private healthCheckTimer;
    /**
     * Создает новый WebSocket клиент для Code Solver API
     * @param {string} baseURL Базовый URL API
     * @param {CodeSolverWebSocketOptions} [options] Опции клиента
     */
    constructor(baseURL: string, options?: CodeSolverWebSocketOptions);
    /**
     * Логирование сообщений
     * @param {string} level Уровень логирования ('info', 'debug', 'error')
     * @param {string} message Сообщение для логирования
     * @param {any} [data] Дополнительные данные для логирования
     */
    private logger;
    /**
     * Подключается к пространству имен WebSocket
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {Record<string, any>} [params] Параметры подключения
     * @returns {Promise<WebSocketClient>} WebSocket клиент
     */
    private connect;
    /**
     * Подключается к пространству имен индексации
     * @param projectId ID проекта (опционально)
     * @returns Promise с результатом подключения
     */
    connectToIndexing(projectId?: string): Promise<boolean>;
    /**
     * Подключается к уведомлениям
     * @returns {Promise<boolean>} Результат подключения
     */
    connectToNotifications(): Promise<boolean>;
    /**
     * Подключается к пространству имен dependencies
     * @param projectId ID проекта (опционально)
     * @returns Promise с результатом подключения
     */
    connectToDependencies(projectId?: string): Promise<boolean>;
    /**
     * Отключается от пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    disconnect(namespace: WebSocketNamespace): void;
    /**
     * Отключается от всех пространств имен
     * Отключает автоматический механизм ping/pong
     */
    disconnectAll(): void;
    /**
     * Добавляет обработчик события для пространства имен
     * @param {string} eventType Тип события
     * @param {Function} handler Обработчик события
     * @param {WebSocketNamespace} [namespace] Пространство имен (если не указано, добавляется ко всем активным)
     */
    on(eventType: string, handler: (data: any) => void, namespace?: WebSocketNamespace): void;
    /**
     * Удаляет обработчик события для пространства имен
     * @param {string} eventType Тип события
     * @param {Function} [handler] Обработчик события (если не указан, удаляются все обработчики)
     * @param {WebSocketNamespace} [namespace] Пространство имен (если не указано, удаляется из всех активных)
     */
    off(eventType: string, handler?: (data: any) => void, namespace?: WebSocketNamespace): void;
    /**
     * Отправляет сообщение в пространство имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {string} eventType Тип события
     * @param {any} [data] Данные сообщения
     * @returns {boolean} Успешно ли отправлено сообщение
     */
    send(namespace: WebSocketNamespace, eventType: string, data?: any): boolean;
    /**
     * Отправляет сообщение в активную сессию рассуждения
     * @param {string} eventType Тип события
     * @param {any} [data] Данные сообщения
     * @returns {boolean} Успешно ли отправлено сообщение
     */
    sendToReasoning(eventType: string, data?: any): boolean;
    /**
     * Отправляет сообщение в активную сессию индексации
     * @param {string} eventType Тип события
     * @param {any} [data] Данные сообщения
     * @returns {boolean} Успешно ли отправлено сообщение
     */
    sendToIndexing(eventType: string, data?: any): boolean;
    /**
     * Отправляет сообщение в уведомления
     * @param {string} eventType Тип события
     * @param {any} [data] Данные сообщения
     * @returns {boolean} Успешно ли отправлено сообщение
     */
    sendToNotifications(eventType: string, data?: any): boolean;
    /**
     * Проверяет, подключен ли клиент к указанному пространству имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {boolean} Статус подключения
     */
    isConnected(namespace: WebSocketNamespace): boolean;
    /**
     * Проверяет, подключен ли клиент к пространству имен рассуждений
     * @returns {boolean} Статус подключения
     */
    isConnectedToReasoning(): boolean;
    /**
     * Проверяет, подключен ли клиент к пространству имен индексации
     * @returns {boolean} Статус подключения
     */
    isConnectedToIndexing(): boolean;
    /**
     * Проверяет, подключен ли клиент к пространству имен уведомлений
     * @returns {boolean} Статус подключения
     */
    isConnectedToNotifications(): boolean;
    /**
     * Получает ID сокета для указанного пространства имен
     * @param {WebSocketNamespace} [namespace=WebSocketNamespace.REASONING] Пространство имен
     * @returns {string|null} ID сокета или null, если соединение не установлено
     */
    getSocketId(namespace?: WebSocketNamespace): string | null;
    /**
     * Подписывается на события мышления
     * @param {string} reasoningId Идентификатор рассуждения
     * @param {Function} handler Обработчик событий мышления
     * @returns {void}
     */
    subscribeToThinking(reasoningId: string, handler: (data: any) => void): void;
    /**
     * Отписывается от событий мышления
     * @param {string} reasoningId Идентификатор рассуждения
     * @returns {void}
     */
    unsubscribeFromThinking(reasoningId: string): void;
    /**
     * Подключается к сессии рассуждения с thinking
     * @param {string} [reasoningId="system"] Идентификатор рассуждения
     * @param {Function} [thinkingHandler] Обработчик событий мышления
     * @returns {Promise<string>} Идентификатор сессии рассуждения
     */
    connectToThinkingSession(reasoningId?: string, thinkingHandler?: (data: any) => void): Promise<string>;
    /**
     * Настраивает отладочное логирование для WebSocket клиента
     * @param namespace Пространство имен
     */
    private setupDebugLogging;
    /**
     * Проверяет наличие callback-функции в данных и правильно вызывает ее
     * @param eventName Имя события
     * @param data Данные события
     * @private
     */
    private extractAndCallCallback;
    /**
     * Включить автоматическую отправку ping-сообщений и сбор статистики
     * @param {number} interval - Интервал между ping-сообщениями в миллисекундах
     * @param {number} timeoutThreshold - Количество пропущенных pong-сообщений, после которого соединение считается потерянным
     * @returns {boolean} - Успешность включения ping/pong
     */
    enablePingPong(interval?: number, timeoutThreshold?: number): boolean;
    /**
     * Отключить автоматическую отправку ping-сообщений
     * @param {WebSocketNamespace} [namespace] - Пространство имен для отключения (если не указано - отключается везде)
     */
    disablePingPong(namespace?: WebSocketNamespace): void;
    /**
     * Получить статистику ping/pong
     * @param {WebSocketNamespace} [namespace] - Пространство имен для получения статистики
     * @returns {PingPongStats | PingPongStats[] | null} - Статистика ping/pong
     */
    getPingStats(namespace?: WebSocketNamespace): PingPongStats | PingPongStats[] | null;
    /**
     * Добавляет обработчик для событий ping/pong
     * @param {string} eventType - Тип события (connection_timeout)
     * @param {(data: any) => void} handler - Обработчик события
     */
    onPingPongEvent(eventType: string, handler: (data: any) => void): void;
    /**
     * Удаляет обработчик для событий ping/pong
     * @param {string} eventType - Тип события
     * @param {(data: any) => void} [handler] - Обработчик события (если не указан, удаляются все обработчики)
     */
    offPingPongEvent(eventType: string, handler?: (data: any) => void): void;
    /**
     * Возвращает функцию-обработчик для pong-ответов, которая рассчитывает RTT
     * @returns {(data: any) => void} Функция-обработчик
     */
    getPongHandler(): (data: any) => void;
    /**
     * Выполняет диагностику соединения и возвращает подробный отчет
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {ConnectionDiagnostics} Объект с диагностической информацией
     */
    diagnoseConnection(namespace: WebSocketNamespace): ConnectionDiagnostics;
    /**
     * Выполняет диагностику всех активных соединений
     * @returns {Record<string, ConnectionDiagnostics>} Объект с диагностической информацией по всем соединениям
     */
    diagnoseAllConnections(): Record<string, ConnectionDiagnostics>;
    /**
     * Рассчитывает задержку для переподключения на основе количества попыток и стратегии
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {number} Задержка в миллисекундах
     */
    private calculateReconnectDelay;
    /**
     * Принудительно переподключает соединение для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {boolean} immediate Выполнить переподключение немедленно, без задержки
     * @returns {Promise<boolean>} Успешность операции
     */
    reconnectNamespace(namespace: WebSocketNamespace, immediate?: boolean): Promise<boolean>;
    /**
     * Настраивает периодическую проверку здоровья соединения
     * @param {number} [interval=30000] Интервал проверки в миллисекундах
     */
    setupConnectionHealthCheck(interval?: number): void;
    /**
     * Сохраняет токен сессии для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {string} token Токен сессии
     */
    saveSessionToken(namespace: WebSocketNamespace, token: string): void;
    /**
     * Получает сохраненный токен сессии для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {string | null} Токен сессии или null, если не найден
     */
    getSessionToken(namespace: WebSocketNamespace): string | null;
    /**
     * Удаляет сохраненный токен сессии для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    clearSessionToken(namespace: WebSocketNamespace): void;
    /**
     * Устанавливает состояние подключения для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {boolean} connected Состояние подключения
     * @param {boolean} reconnecting Состояние переподключения
     */
    private setConnectionState;
    /**
     * Увеличивает счетчик попыток переподключения для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {number} Новое количество попыток
     */
    private incrementReconnectAttempts;
    /**
     * Получает состояние подключения для пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {object} Состояние подключения
     */
    getConnectionState(namespace: WebSocketNamespace): {
        lastConnectTime: number;
        reconnectAttempts: number;
        connected: boolean;
        reconnecting: boolean;
    };
    /**
     * Устанавливает ID активной сессии рассуждения
     * @param {string} reasoningId ID сессии рассуждения
     * @returns {boolean} Успешность установки
     */
    setActiveReasoningId(reasoningId: string): boolean;
    /**
     * Устанавливает ID активного проекта
     * @param {string} projectId ID проекта
     * @returns {boolean} Успешность установки
     */
    setActiveProjectId(projectId: string): boolean;
    /**
     * Устанавливает ID активной сессии рассуждения с расширенными возможностями
     * @param {string} reasoningId ID сессии рассуждения
     * @param {boolean} waitForJoin Дождаться результата присоединения
     * @param {boolean} createIfNotExists Создать новое рассуждение, если ID не существует
     * @returns {Promise<boolean>} Результат операции
     */
    setActiveReasoningIdAsync(reasoningId: string, waitForJoin?: boolean, createIfNotExists?: boolean): Promise<boolean>;
    /**
     * Создает новое рассуждение на сервере
     * @private
     * @returns {Promise<string>} ID нового рассуждения
     */
    private createNewReasoning;
    /**
     * Проверяет существование рассуждения на сервере
     * @param {string} reasoningId ID рассуждения для проверки
     * @returns {Promise<boolean>} Существует ли рассуждение
     */
    checkReasoningExists(reasoningId: string): Promise<boolean>;
    /**
     * Подключается к пространству имен рассуждений
     * @param reasoningId ID рассуждения (опционально)
     * @param options Дополнительные настройки подключения
     * @returns Promise с результатом подключения
     */
    connectToReasoning(reasoningId?: string, options?: {
        autoJoin?: boolean;
        createIfNotExists?: boolean;
        checkExistence?: boolean;
        saveSession?: boolean;
    }): Promise<boolean>;
    /**
     * Получает текущий статус сессии рассуждения
     * @param {string} reasoningId ID сессии рассуждения (опционально, по умолчанию активная)
     * @returns {Promise<{exists: boolean, isActive: boolean, metadata?: any}>} Статус сессии
     */
    getReasoningStatus(reasoningId?: string): Promise<{
        exists: boolean;
        isActive: boolean;
        metadata?: any;
    }>;
    /**
     * Присоединяется к сессии рассуждения
     * @param {string} reasoningId ID сессии рассуждения
     * @param {boolean} setActive Установить как активное рассуждение
     * @returns {Promise<boolean>} Результат операции
     */
    joinReasoning(reasoningId: string, setActive?: boolean): Promise<boolean>;
    /**
     * Подключается к пространству имен рассуждений с расширенными опциями
     * @param reasoningId ID рассуждения (опционально)
     * @param options Дополнительные настройки подключения
     * @returns Promise с результатом подключения
     */
    connectToReasoningEx(reasoningId?: string, options?: {
        autoJoin?: boolean;
        createIfNotExists?: boolean;
        checkExistence?: boolean;
        saveSession?: boolean;
    }): Promise<boolean>;
}
//# sourceMappingURL=code-solver-websocket-client.d.ts.map