# Работа с WebSocket в Solver SDK

Эта документация описывает, как использовать WebSocket соединения через Solver SDK для работы в реальном времени.

## Инициализация SDK

```javascript
const { CodeSolverSDK } = require('solver-sdk');

// Создаем экземпляр SDK с настройками
const sdk = new CodeSolverSDK({
  baseURL: 'https://api.example.com',
  apiKey: 'your-api-key'
});
```

## Работа с рассуждениями (Reasoning)

### Создание рассуждения и получение результатов в реальном времени

```javascript
// Создание рассуждения
const reasoning = await sdk.reasoning.createReasoning({
  projectId: 'project-id',
  query: 'Объясни этот проект'
});

// Подключение к WebSocket
await sdk.reasoning.connectWebSocket(reasoning.id);

// Подписка на события
sdk.reasoning.on('thinking', (data) => {
  console.log('Мышление:', data.content);
});

sdk.reasoning.on('complete', (data) => {
  console.log('Результат:', data.content);
  // Отключение после завершения
  sdk.reasoning.disconnectWebSocket();
});

// Запуск рассуждения
await sdk.reasoning.startReasoning(reasoning.id);
```

## Потоковый чат с мышлением AI

```javascript
// Обработчик событий для потокового получения ответа и мышления
const handleEvent = (eventType, data) => {
  if (eventType === 'thinking_delta' && data.thinking) {
    console.log('Мышление:', data.thinking);
  } else if (eventType === 'text_delta' && data.text) {
    process.stdout.write(data.text);
  } else if (eventType === 'message_stop') {
    console.log('\nОтвет завершен');
  }
};

// Отправка запроса 
const messages = [
  { role: 'user', content: 'Расскажи о JavaScript' }
];

const options = {
  model: 'claude-3-7-sonnet-20240229',
  thinking: true,
  temperature: 0.7
};

// Отправка с потоковым получением ответа
const response = await sdk.chat.streamChatWithThinking(
  messages, 
  options,
  handleEvent
);
```

## Мониторинг индексации проектов

```javascript
// Подключение к WebSocket для проектов
await sdk.projects.connectWebSocket();

// Отслеживание прогресса индексации
sdk.projects.on('indexing_progress', (data) => {
  console.log(`Прогресс индексации: ${data.progress}%`);
  console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
});

// Завершение индексации
sdk.projects.on('indexing_complete', (data) => {
  console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
  
  // Отключение после завершения
  sdk.projects.disconnectWebSocket();
});
```

## Работа с зависимостями

```javascript
// Подключение к пространству имен зависимостей
await sdk.dependencies.connectWebSocket(projectId);

// Подписка на события зависимостей
sdk.dependencies.on('dependency_update', (data) => {
  console.log('Обновление зависимостей:', data);
});

// Отключение
await sdk.dependencies.disconnectWebSocket();
```

## Обработка ошибок

```javascript
try {
  await sdk.chat.streamChatWithThinking(
    messages,
    options,
    handleEvent
  );
} catch (error) {
  console.error('Произошла ошибка:', error.message);
}
```

## Основные события

| Событие | Описание |
|---------|----------|
| `message_start` | Начало сообщения |
| `thinking_delta` | Обновление мышления AI |
| `text_delta` | Часть текстового ответа |
| `message_stop` | Конец сообщения |
| `indexing_progress` | Прогресс индексации |
| `indexing_complete` | Завершение индексации |
| `error` | Уведомление об ошибке |
