solver-sdk
Version:
SDK для интеграции с Code Solver Backend API (совместимо с браузером и Node.js), с поддержкой функциональности мышления (Thinking Mode)
183 lines (146 loc) • 13 kB
Markdown
# Справочник WebSocket событий SDK
Этот документ содержит полный список WebSocket событий, используемых в SDK версии 1.7.2.
## Содержание
- [Типы событий](#типы-событий)
- [События рассуждений и сессий](#события-рассуждений-и-сессий)
- [События контекста](#события-контекста)
- [События чата и мышления](#события-чата-и-мышления)
- [События разработки и тестирования](#события-разработки-и-тестирования)
- [События соединения](#события-соединения)
- [События индексации](#события-индексации)
- [События зависимостей](#события-зависимостей)
- [Использование событий](#использование-событий)
- [Низкоуровневое API](#низкоуровневое-api)
- [Высокоуровневое API](#высокоуровневое-api)
- [Диагностика ошибок](#диагностика-ошибок)
## Типы событий
### События рассуждений и сессий
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `REASONING_CREATED` | `reasoning:created` | Создано новое рассуждение | `{ reasoningId: string, metadata?: object }` |
| `JOINED_REASONING` | `joined_reasoning` | Клиент присоединился к рассуждению | `{ reasoningId: string, success: boolean }` |
| `JOIN_REASONING` | `join_reasoning` | Запрос на присоединение к рассуждению | `{ reasoningId: string }` |
| `JOIN_RESPONSE` | `join_response` | Ответ на запрос присоединения | `{ success: boolean, reasoningId: string, error?: string }` |
| `JOIN` | `join` | Запрос на присоединение к пространству имен | `{ namespace: string }` |
| `JOINED` | `joined` | Успешное присоединение к пространству имен | `{ namespace: string, socketId: string }` |
| `REASONING_STATUS_UPDATE` | `reasoning_status_update` | Обновление статуса рассуждения | `{ reasoningId: string, status: string }` |
| `START_REASONING` | `start_reasoning` | Запрос на начало рассуждения | `{ reasoningId: string }` |
| `REASONING_STARTED` | `reasoning_started` | Рассуждение начато | `{ reasoningId: string, startTime: string }` |
### События контекста
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `UPDATE_CONTEXT_OPTIONS` | `update_context_options` | Обновление опций контекста | `{ reasoningId: string, options: ContextOptions }` |
| `ESTIMATE_CONTEXT` | `estimate_context` | Запрос на оценку контекста | `{ reasoningId: string, projectId: string }` |
| `CONTEXT_OPTIONS_UPDATED` | `context_options_updated` | Опции контекста обновлены | `{ reasoningId: string, options: ContextOptions }` |
| `CONTEXT_ESTIMATION` | `context_estimation` | Результат оценки контекста | `{ reasoningId: string, estimation: ContextEstimation }` |
| `SET_PROJECT_CONTEXT` | `set_project_context` | Установка контекста проекта | `{ reasoningId: string, projectId: string }` |
| `PROJECT_CONTEXT_SET` | `project_context_set` | Контекст проекта установлен | `{ reasoningId: string, projectId: string, success: boolean }` |
### События чата и мышления
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `CHAT_REQUEST` | `chat_request` | Запрос на чат | `{ reasoningId: string, messages: Message[] }` |
| `CHAT_STARTED` | `chat_started` | Начало обработки запроса чата | `{ reasoningId: string, requestId: string }` |
| `MESSAGE_START` | `message_start` | Начало сообщения от модели | `{ model: string, type: string, id: string }` |
| `CONTENT_BLOCK_START` | `content_block_start` | Начало блока контента | `{ index: number, type: string, id: string }` |
| `THINKING_DELTA` | `thinking_delta` | Фрагмент мышления | `{ text: string, index: number }` |
| `THINKING_BLOCK_DELTA` | `thinking_block_delta` | Дельта блока мышления | `{ delta: string, index: number }` |
| `TEXT_DELTA` | `text_delta` | Фрагмент текстового ответа | `{ text: string, index: number }` |
| `CONTENT_BLOCK_DELTA` | `content_block_delta` | Общая дельта блока контента | `{ delta: string, index: number, type: string }` |
| `CONTENT_BLOCK_STOP` | `content_block_stop` | Завершение блока контента | `{ index: number, type: string, id: string }` |
| `MESSAGE_STOP` | `message_stop` | Завершение сообщения | `{ type: string, id: string }` |
| `CHAT_COMPLETE` | `chat_complete` | Завершение чата | `{ reasoningId: string, requestId: string }` |
### События разработки и тестирования
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `TYPESCRIPT_ERRORS` | `typescript_errors` | Запрос на получение ошибок TypeScript | `{ reasoningId: string, projectId: string, files: string[] }` |
| `TYPESCRIPT_ERRORS_RECEIVED` | `typescript_errors_received` | Получены ошибки TypeScript | `{ reasoningId: string, errors: TypeScriptError[] }` |
| `CREATE_TEST_MODULES` | `create_test_modules` | Запрос на создание тестовых модулей | `{ reasoningId: string, files: string[] }` |
| `TEST_MODULES_CREATED` | `test_modules_created` | Тестовые модули созданы | `{ reasoningId: string, modules: TestModule[] }` |
| `ANALYZE_CODE` | `analyze_code` | Запрос на анализ кода | `{ reasoningId: string, code: string, language: string }` |
| `CODE_ANALYSIS` | `code_analysis` | Результат анализа кода | `{ reasoningId: string, analysis: CodeAnalysis }` |
### События соединения
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `AUTHENTICATE` | `authenticate` | Аутентификация клиента | `{ apiKey: string }` |
| `AUTHENTICATION_RESULT` | `authentication_result` | Результат аутентификации | `{ success: boolean, error?: string }` |
| `CONNECTION_PING` | `connection_ping` | Проверка активности соединения | `{ timestamp: number, id: string }` |
| `CONNECTION_PONG` | `connection_pong` | Ответ на проверку соединения | `{ timestamp: number, id: string, serverTime: number }` |
| `RECONNECT_TOKEN` | `reconnect_token` | Токен для переподключения | `{ token: string, namespace: string }` |
| `DISCONNECT` | `disconnect` | Отключение от сервера | `{ reason: string }` |
| `ERROR` | `error` | Ошибка соединения | `{ message: string, code?: string, details?: any }` |
| `CONNECTION_TIMEOUT` | `connection_timeout` | Таймаут соединения | `{ namespace: string, lastPingTime: number }` |
### События индексации
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `INDEXING_START` | `indexing_start` | Начало процесса индексации | `{ projectId: string }` |
| `INDEXING_PROGRESS` | `indexing_progress` | Обновление прогресса индексации | `{ projectId: string, totalFiles: number, indexedFiles: number, progress: number }` |
| `INDEXING_COMPLETE` | `indexing_complete` | Завершение индексации | `{ projectId: string, totalFiles: number, indexedFiles: number }` |
| `INDEXING_ERROR` | `indexing_error` | Ошибка при индексации | `{ projectId: string, message: string }` |
| `FILE_INDEXED` | `file_indexed` | Отдельный файл проиндексирован | `{ projectId: string, filePath: string, fileIndex: object }` |
| `FILE_INDEX_ERROR` | `file_index_error` | Ошибка при индексации файла | `{ projectId: string, filePath: string, message: string }` |
### События зависимостей
| Константа SDK | Строковое значение | Описание | Данные |
|---------------|-------------------|----------|--------|
| `DEPENDENCY_UPDATE` | `dependency_update` | Обновление зависимостей | `{ projectId: string, files: string[], type: string }` |
| `DEPENDENCY_ANALYSIS` | `dependency_analysis` | Анализ зависимостей | `{ projectId: string, analysis: DependencyAnalysis }` |
| `DEPENDENCY_GRAPH_READY` | `dependency_graph_ready` | Граф зависимостей готов | `{ projectId: string, nodes: number, edges: number }` |
| `DEPENDENCY_CYCLE_FOUND` | `dependency_cycle_found` | Найден цикл в зависимостях | `{ projectId: string, cycle: string[] }` |
## Использование событий
### Низкоуровневое API
Для работы с событиями через низкоуровневое API WebSocket клиента:
```javascript
const wsClient = sdk.getWebSocketClient();
// Подписка на событие
wsClient.on('thinking_delta', (data) => {
console.log('Получен фрагмент мышления:', data.text);
});
// Отправка события
wsClient.emit('join_reasoning', { reasoningId: 'my-reasoning-id' });
// Отправка события с ожиданием ответа
const response = await wsClient.emitWithResponse('join_reasoning',
{ reasoningId: 'my-reasoning-id' },
'join_response', // Тип ожидаемого ответа
10000 // Таймаут в миллисекундах
);
```
### Высокоуровневое API
Для работы с событиями через высокоуровневое API модулей SDK (версия 1.7.2+):
```javascript
// Чат и рассуждения
await sdk.chat.connectWebSocket();
sdk.chat.on('thinking_delta', (data) => {
console.log('Фрагмент мышления:', data.text);
});
// Зависимости
await sdk.dependencies.connectWebSocket(projectId);
sdk.dependencies.on('dependency_update', (data) => {
console.log('Обновление зависимостей:', data);
});
// Проекты и индексация
await sdk.projects.connectWebSocket();
sdk.projects.on('indexing_progress', (data) => {
console.log('Прогресс индексации:', data.progress);
});
```
## Диагностика ошибок
Возможные причины проблем с событиями WebSocket:
1. **Неверный формат события** - убедитесь, что отправляете корректные данные в соответствии с ожидаемой структурой.
2. **Неправильный порядок событий** - некоторые события должны следовать в определенном порядке (например, `authenticate` → `join` → `join_reasoning`).
3. **Таймауты** - события с ожиданием ответа могут завершиться ошибкой по таймауту.
4. **Разрыв соединения** - проверьте стабильность соединения с помощью механизма ping/pong.
Для диагностики используйте:
```javascript
// Включение расширенного логирования
const sdk = new CodeSolverSDK({
websocket: {
debug: true
}
});
// Диагностика соединения
const diagnostics = sdk.getWebSocketClient().diagnoseConnection(WebSocketNamespace.REASONING);
console.log('Диагностика:', diagnostics);
// Мониторинг всех событий
sdk.getWebSocketClient().onAny((eventName, ...args) => {
console.log(`Событие ${eventName}:`, args);
});
```