solver-sdk 1.7.3 → 1.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +40 -49
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +37 -151
  3. package/dist/cjs/api/chat-api/index.js.map +1 -0
  4. package/dist/cjs/api/chat-api/interfaces.js +3 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
  6. package/dist/cjs/api/chat-api/models.js +6 -0
  7. package/dist/cjs/api/chat-api/models.js.map +1 -0
  8. package/dist/cjs/api/chat-api/stream-utils.js +192 -0
  9. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
  10. package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
  11. package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
  12. package/dist/cjs/code-solver-sdk.js +10 -15
  13. package/dist/cjs/code-solver-sdk.js.map +1 -1
  14. package/dist/cjs/constants/websocket-events.constants.js +77 -52
  15. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  16. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  17. package/dist/esm/api/{chat-api.js → chat-api/index.js} +34 -151
  18. package/dist/esm/api/chat-api/index.js.map +1 -0
  19. package/dist/esm/api/chat-api/interfaces.js +2 -0
  20. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  21. package/dist/esm/api/chat-api/models.js +5 -0
  22. package/dist/esm/api/chat-api/models.js.map +1 -0
  23. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  24. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  25. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  26. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  27. package/dist/esm/code-solver-sdk.js +8 -13
  28. package/dist/esm/code-solver-sdk.js.map +1 -1
  29. package/dist/esm/constants/websocket-events.constants.js +76 -51
  30. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  31. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  32. package/dist/types/api/chat-api/index.d.ts +81 -0
  33. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  34. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  35. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  36. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -79
  37. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  38. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  39. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  40. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  41. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  42. package/dist/types/code-solver-sdk.d.ts +1 -1
  43. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  44. package/dist/types/constants/websocket-events.constants.d.ts +65 -36
  45. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  46. package/dist/types/utils/code-solver-websocket-client.d.ts +28 -34
  47. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  48. package/docs/API_REFERENCE.md +168 -0
  49. package/docs/AUTHENTICATION.md +179 -0
  50. package/docs/ERROR_HANDLING.md +240 -0
  51. package/docs/README.md +32 -56
  52. package/docs/WEBSOCKET.md +55 -394
  53. package/docs/advanced/PING_PONG.md +212 -0
  54. package/docs/features/THINKING.md +158 -0
  55. package/package.json +1 -1
  56. package/dist/cjs/api/chat-api.js.map +0 -1
  57. package/dist/esm/api/chat-api.js.map +0 -1
  58. package/dist/types/api/chat-api.d.ts.map +0 -1
  59. package/docs/REGIONS.md +0 -140
  60. package/docs/WEBSOCKET_EVENTS.md +0 -183
  61. package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
  62. package/docs/thinking/streaming-thinking-guide.md +0 -164
  63. package/docs/thinking/thinking-mode.md +0 -366
@@ -0,0 +1,168 @@
1
+ # API Reference
2
+
3
+ В этом документе описаны основные классы и методы SDK.
4
+
5
+ ## Содержание
6
+
7
+ - [CodeSolverSDK](#codesolversdk)
8
+ - [ChatApi](#chatapi)
9
+ - [ReasoningApi](#reasoningapi)
10
+ - [ProjectsApi](#projectsapi)
11
+ - [SearchApi](#searchapi)
12
+
13
+ ## CodeSolverSDK
14
+
15
+ Основной класс SDK, предоставляющий доступ ко всем API.
16
+
17
+ ### Конструктор
18
+
19
+ ```javascript
20
+ const sdk = new CodeSolverSDK(options);
21
+ ```
22
+
23
+ ### Параметры
24
+
25
+ | Параметр | Тип | Описание | Обязательно |
26
+ |----------|-----|----------|-------------|
27
+ | `baseURL` | string | Базовый URL API | Да |
28
+ | `apiKey` | string | API ключ для авторизации | Нет |
29
+ | `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
30
+ | `websocket` | object | Настройки WebSocket | Нет |
31
+
32
+ ### Методы
33
+
34
+ #### `getWebSocketClient()`
35
+
36
+ Возвращает экземпляр WebSocket клиента для работы с соединениями.
37
+
38
+ ```javascript
39
+ const wsClient = sdk.getWebSocketClient();
40
+ ```
41
+
42
+ #### `checkHealth()`
43
+
44
+ Проверяет доступность API сервера.
45
+
46
+ ```javascript
47
+ const isHealthy = await sdk.checkHealth();
48
+ ```
49
+
50
+ ## ChatApi
51
+
52
+ API для работы с чатом и потоковой передачей мышления.
53
+
54
+ ### Методы
55
+
56
+ #### `streamChatWithThinking(messages, options, callback)`
57
+
58
+ Отправляет запрос чата с потоковой передачей мышления через WebSocket.
59
+
60
+ ```javascript
61
+ const response = await sdk.chat.streamChatWithThinking(
62
+ messages,
63
+ options,
64
+ callback
65
+ );
66
+ ```
67
+
68
+ ##### Параметры
69
+
70
+ | Параметр | Тип | Описание | Обязательно |
71
+ |----------|-----|----------|-------------|
72
+ | `messages` | Array | Массив сообщений для отправки модели | Да |
73
+ | `options` | Object | Параметры запроса (модель, thinking: true) | Да |
74
+ | `callback` | Function | Обработчик событий | Да |
75
+
76
+ #### `chat(messages, options)`
77
+
78
+ Отправляет запрос чата и возвращает полный ответ.
79
+
80
+ ```javascript
81
+ const response = await sdk.chat.chat(
82
+ messages,
83
+ options
84
+ );
85
+ ```
86
+
87
+ #### `getModels()`
88
+
89
+ Получает список доступных моделей.
90
+
91
+ ```javascript
92
+ const models = await sdk.chat.getModels();
93
+ ```
94
+
95
+ ## ReasoningApi
96
+
97
+ API для работы с рассуждениями.
98
+
99
+ ### Методы
100
+
101
+ #### `createReasoning(options)`
102
+
103
+ Создаёт новое рассуждение.
104
+
105
+ ```javascript
106
+ const reasoning = await sdk.reasoning.createReasoning({
107
+ projectId: 'project-id',
108
+ query: 'Объясни этот проект'
109
+ });
110
+ ```
111
+
112
+ #### `getReasoning(reasoningId)`
113
+
114
+ Получает информацию о рассуждении.
115
+
116
+ ```javascript
117
+ const reasoning = await sdk.reasoning.getReasoning('reasoning-id');
118
+ ```
119
+
120
+ ## ProjectsApi
121
+
122
+ API для работы с проектами.
123
+
124
+ ### Методы
125
+
126
+ #### `createProject(name, path)`
127
+
128
+ Создаёт новый проект.
129
+
130
+ ```javascript
131
+ const project = await sdk.projects.createProject('Мой проект', '/path/to/project');
132
+ ```
133
+
134
+ #### `indexProject(projectId)`
135
+
136
+ Запускает индексацию проекта.
137
+
138
+ ```javascript
139
+ await sdk.projects.indexProject('project-id');
140
+ ```
141
+
142
+ ## SearchApi
143
+
144
+ API для поиска кода.
145
+
146
+ ### Методы
147
+
148
+ #### `searchCode(projectId, options)`
149
+
150
+ Выполняет поиск кода в проекте.
151
+
152
+ ```javascript
153
+ const results = await sdk.search.searchCode('project-id', {
154
+ query: 'function example',
155
+ limit: 10
156
+ });
157
+ ```
158
+
159
+ #### `semanticSearch(projectId, options)`
160
+
161
+ Выполняет семантический поиск в проекте.
162
+
163
+ ```javascript
164
+ const results = await sdk.search.semanticSearch('project-id', {
165
+ query: 'функция для обработки HTTP запросов',
166
+ limit: 10
167
+ });
168
+ ```
@@ -0,0 +1,179 @@
1
+ # Аутентификация в Solver SDK
2
+
3
+ В этом документе описаны методы аутентификации в Solver SDK для различных API и WebSocket соединений.
4
+
5
+ ## Содержание
6
+
7
+ - [HTTP API аутентификация](#http-api-аутентификация)
8
+ - [WebSocket аутентификация](#websocket-аутентификация)
9
+ - [Тестовая аутентификация](#тестовая-аутентификация)
10
+ - [Обработка ошибок аутентификации](#обработка-ошибок-аутентификации)
11
+
12
+ ## HTTP API аутентификация
13
+
14
+ SDK поддерживает два основных метода аутентификации для HTTP запросов:
15
+
16
+ ### 1. API ключ
17
+
18
+ ```javascript
19
+ const sdk = new CodeSolverSDK({
20
+ baseURL: 'https://api.example.com',
21
+ apiKey: 'your-api-key'
22
+ });
23
+ ```
24
+
25
+ API ключ автоматически добавляется в заголовок `X-API-Key` для всех HTTP запросов.
26
+
27
+ ### 2. Пользовательские заголовки
28
+
29
+ ```javascript
30
+ const sdk = new CodeSolverSDK({
31
+ baseURL: 'https://api.example.com',
32
+ headers: {
33
+ 'Authorization': 'Bearer your-jwt-token',
34
+ 'X-Custom-Header': 'Custom-Value'
35
+ }
36
+ });
37
+ ```
38
+
39
+ ## WebSocket аутентификация
40
+
41
+ Для WebSocket соединений SDK использует отдельный механизм аутентификации через специальное событие `authenticate`.
42
+
43
+ ### Стандартная аутентификация WebSocket
44
+
45
+ ```javascript
46
+ // 1. Создаем экземпляр SDK
47
+ const sdk = new CodeSolverSDK({
48
+ baseURL: 'https://api.example.com',
49
+ apiKey: 'your-api-key'
50
+ });
51
+
52
+ // 2. Опции для streamChatWithThinking
53
+ const options = {
54
+ model: 'claude-3-7-sonnet-20240229',
55
+ thinking: true,
56
+ authToken: 'your-auth-token' // ← Токен для WebSocket аутентификации
57
+ };
58
+
59
+ // 3. Отправка запроса
60
+ const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
61
+ ```
62
+
63
+ Параметр `authToken` используется для аутентификации WebSocket соединений и передается в событии `authenticate`.
64
+
65
+ ### Низкоуровневая WebSocket аутентификация
66
+
67
+ Если вы работаете напрямую с WebSocket клиентом, вы можете настроить аутентификацию следующим образом:
68
+
69
+ ```javascript
70
+ // Получаем WebSocket клиент
71
+ const wsClient = sdk.getWebSocketClient();
72
+
73
+ // Настраиваем опции подключения с аутентификацией
74
+ const connectionOptions = {
75
+ namespace: 'reasoning',
76
+ authToken: 'your-auth-token',
77
+ query: {
78
+ reasoningId: 'reasoning-123'
79
+ }
80
+ };
81
+
82
+ // Подключаемся к WebSocket серверу
83
+ await wsClient.connect(connectionOptions);
84
+
85
+ // Проверяем статус аутентификации
86
+ const isAuthenticated = wsClient.isAuthenticated();
87
+ console.log('Аутентификация WebSocket:', isAuthenticated);
88
+ ```
89
+
90
+ ## Тестовая аутентификация
91
+
92
+ Для тестовых сред SDK поддерживает упрощенную аутентификацию:
93
+
94
+ ```javascript
95
+ const options = {
96
+ // Другие параметры...
97
+ authToken: 'test-token'
98
+ };
99
+
100
+ const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
101
+ ```
102
+
103
+ > **Важно**: Начиная с версии 1.7.4, устаревший параметр `testToken` удален в пользу унифицированного параметра `authToken`.
104
+
105
+ ## Обработка ошибок аутентификации
106
+
107
+ SDK предоставляет механизм обработки ошибок аутентификации:
108
+
109
+ ```javascript
110
+ // Обработчик событий WebSocket
111
+ const handleEvent = (eventType, data) => {
112
+ if (eventType === 'authentication_error') {
113
+ console.error('Ошибка аутентификации:', data.message);
114
+
115
+ // Возможная реакция на ошибку (переподключение, запрос нового токена и т.д.)
116
+ switch (data.code) {
117
+ case 'TOKEN_EXPIRED':
118
+ // Запросить новый токен
119
+ break;
120
+ case 'INVALID_TOKEN':
121
+ // Перенаправить на страницу входа
122
+ break;
123
+ default:
124
+ // Общая обработка ошибок
125
+ break;
126
+ }
127
+ }
128
+ };
129
+ ```
130
+
131
+ ### Коды ошибок аутентификации
132
+
133
+ | Код ошибки | Описание |
134
+ |------------|----------|
135
+ | `TOKEN_EXPIRED` | Истек срок действия токена |
136
+ | `INVALID_TOKEN` | Недействительный токен |
137
+ | `MISSING_TOKEN` | Отсутствует токен |
138
+ | `AUTH_ERROR` | Общая ошибка аутентификации |
139
+ | `FORBIDDEN` | Доступ запрещен |
140
+
141
+ ## Примеры
142
+
143
+ ### Полный пример аутентификации для рассуждений
144
+
145
+ ```javascript
146
+ const { CodeSolverSDK, WebSocketNamespace } = require('solver-sdk');
147
+
148
+ async function exampleWithAuthentication() {
149
+ // 1. Создаем экземпляр SDK
150
+ const sdk = new CodeSolverSDK({
151
+ baseURL: 'https://api.example.com',
152
+ apiKey: 'your-api-key'
153
+ });
154
+
155
+ // 2. Создаем рассуждение
156
+ const reasoning = await sdk.reasoning.createReasoning({
157
+ projectId: 'project-id',
158
+ query: 'Объясни этот проект'
159
+ });
160
+
161
+ // 3. Подключаемся через WebSocket с аутентификацией
162
+ await sdk.reasoning.connectWebSocket({
163
+ reasoningId: reasoning.id,
164
+ authToken: 'your-auth-token'
165
+ });
166
+
167
+ // 4. Настраиваем обработчики событий
168
+ sdk.reasoning.on('authentication_error', (data) => {
169
+ console.error('Ошибка аутентификации:', data);
170
+ });
171
+
172
+ sdk.reasoning.on('authenticated', (data) => {
173
+ console.log('Успешная аутентификация:', data);
174
+ });
175
+
176
+ // 5. Отправляем запрос
177
+ await sdk.reasoning.startReasoning(reasoning.id);
178
+ }
179
+ ```
@@ -0,0 +1,240 @@
1
+ # Обработка ошибок в Solver SDK
2
+
3
+ Документация по системе обработки ошибок в Solver SDK, включая общие ошибки, ошибки WebSocket и географические ограничения.
4
+
5
+ ## Содержание
6
+
7
+ - [Общие принципы](#общие-принципы)
8
+ - [Типы ошибок](#типы-ошибок)
9
+ - [HTTP ошибки](#http-ошибки)
10
+ - [WebSocket ошибки](#websocket-ошибки)
11
+ - [Ошибки географических ограничений](#ошибки-географических-ограничений)
12
+ - [Примеры обработки ошибок](#примеры-обработки-ошибок)
13
+
14
+ ## Общие принципы
15
+
16
+ Solver SDK использует следующие принципы при работе с ошибками:
17
+
18
+ 1. **Унифицированный формат** — все ошибки имеют единую структуру
19
+ 2. **Информативные сообщения** — ошибки содержат детальное описание проблемы
20
+ 3. **Коды ошибок** — каждая ошибка имеет уникальный код для идентификации
21
+ 4. **Типизация** — ошибки классифицируются по типам для удобной обработки
22
+
23
+ ## Типы ошибок
24
+
25
+ Основные типы ошибок в SDK:
26
+
27
+ | Тип ошибки | Описание |
28
+ |------------|----------|
29
+ | `http_error` | Ошибки HTTP запросов |
30
+ | `websocket_error` | Ошибки WebSocket соединений |
31
+ | `validation_error` | Ошибки валидации входных данных |
32
+ | `authentication_error` | Ошибки аутентификации |
33
+ | `rate_limit_error` | Ошибки превышения лимита запросов |
34
+ | `provider_error` | Ошибки провайдеров API (Anthropic, OpenAI) |
35
+ | `geo_restriction` | Ошибки географических ограничений |
36
+
37
+ ## HTTP ошибки
38
+
39
+ HTTP ошибки возникают при проблемах с HTTP запросами:
40
+
41
+ ```javascript
42
+ try {
43
+ const result = await sdk.chat.chat([{ role: 'user', content: 'Hello' }]);
44
+ } catch (error) {
45
+ console.error(`Код ошибки: ${error.code}`);
46
+ console.error(`Сообщение: ${error.message}`);
47
+
48
+ // Проверка типа ошибки
49
+ if (error.code === 401) {
50
+ console.error('Ошибка аутентификации: проверьте API ключ');
51
+ } else if (error.code === 429) {
52
+ console.error('Превышен лимит запросов: повторите позже');
53
+ }
54
+ }
55
+ ```
56
+
57
+ ## WebSocket ошибки
58
+
59
+ WebSocket ошибки обрабатываются через обработчики событий:
60
+
61
+ ```javascript
62
+ const handleEvent = (eventType, data) => {
63
+ if (eventType === 'error') {
64
+ console.error(`WebSocket ошибка: ${data.message} (код: ${data.code})`);
65
+
66
+ // Обработка конкретных типов ошибок
67
+ switch (data.type) {
68
+ case 'connection_error':
69
+ console.error('Проблема с подключением, пробуем переподключиться...');
70
+ break;
71
+ case 'authentication_error':
72
+ console.error('Проблема аутентификации, запрашиваем новый токен...');
73
+ break;
74
+ case 'timeout_error':
75
+ console.error('Превышен таймаут ожидания ответа');
76
+ break;
77
+ }
78
+ }
79
+ };
80
+
81
+ // Передаем обработчик событий
82
+ await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
83
+ ```
84
+
85
+ ## Ошибки географических ограничений
86
+
87
+ > **Добавлено в версии 1.7.4**
88
+
89
+ Начиная с версии 1.7.4 SDK поддерживает специальную обработку ошибок географических ограничений API Anthropic. Эти ошибки возникают, когда запросы отправляются из регионов, не поддерживаемых API Anthropic:
90
+
91
+ ```javascript
92
+ try {
93
+ const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
94
+ } catch (error) {
95
+ // Проверка наличия ошибки географических ограничений
96
+ if (error.type === 'geo_restriction') {
97
+ console.error('==============================================');
98
+ console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
99
+ console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
100
+ console.error('⚠️ Anthropic API доступен только из определенных регионов');
101
+ console.error('==============================================');
102
+
103
+ // Возможные действия:
104
+ // 1. Предложить пользователю включить VPN
105
+ // 2. Переключиться на другой провайдер API
106
+ // 3. Использовать прокси-сервер
107
+ }
108
+ }
109
+ ```
110
+
111
+ Через обработчик WebSocket событий:
112
+
113
+ ```javascript
114
+ const handleEvent = (eventType, data) => {
115
+ if (eventType === 'error' && data.type === 'geo_restriction') {
116
+ console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
117
+
118
+ // Выполнить действия по настройке VPN или показать инструкции пользователю
119
+ }
120
+ };
121
+ ```
122
+
123
+ ### Причины ошибок географических ограничений
124
+
125
+ Основные причины возникновения ошибок географических ограничений:
126
+
127
+ 1. **Региональные ограничения API Anthropic** — API доступен только из определенных регионов (США, Европа и некоторые другие)
128
+ 2. **Регуляторные требования** — законодательство некоторых стран ограничивает доступ к определенным API
129
+ 3. **IP-блокировка** — некоторые IP-адреса могут быть заблокированы провайдером API
130
+
131
+ ### Решение проблемы
132
+
133
+ Для решения проблемы географических ограничений:
134
+
135
+ 1. **Использование VPN** — подключитесь через VPN к поддерживаемому региону (США, Европа)
136
+ 2. **Прокси-сервер** — настройте прокси для запросов к API
137
+ 3. **Альтернативные провайдеры** — используйте альтернативных провайдеров, доступных в вашем регионе
138
+
139
+ ## Примеры обработки ошибок
140
+
141
+ ### Комплексная обработка ошибок
142
+
143
+ ```javascript
144
+ async function exampleWithErrorHandling() {
145
+ const sdk = new CodeSolverSDK({
146
+ baseURL: 'https://api.example.com',
147
+ apiKey: 'your-api-key'
148
+ });
149
+
150
+ const messages = [
151
+ { role: 'user', content: 'Explain quantum computing' }
152
+ ];
153
+
154
+ const options = {
155
+ model: 'claude-3-7-sonnet-20240229',
156
+ thinking: true,
157
+ authToken: 'your-auth-token'
158
+ };
159
+
160
+ // Обработчик WebSocket событий
161
+ const handleEvent = (eventType, data) => {
162
+ // Обработка ошибок
163
+ if (eventType === 'error') {
164
+ console.error(`Ошибка: ${data.message}`);
165
+
166
+ // Проверка типа ошибки
167
+ switch (data.type) {
168
+ case 'geo_restriction':
169
+ console.error('Географическое ограничение: требуется VPN');
170
+ break;
171
+ case 'authentication_error':
172
+ console.error('Ошибка аутентификации: неверный токен');
173
+ break;
174
+ case 'rate_limit_error':
175
+ console.error('Превышен лимит запросов');
176
+ break;
177
+ default:
178
+ console.error(`Неизвестная ошибка типа: ${data.type}`);
179
+ break;
180
+ }
181
+ }
182
+ };
183
+
184
+ try {
185
+ const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
186
+ console.log(`Успешно отправлен запрос, Socket ID: ${response.socketId}`);
187
+ } catch (error) {
188
+ console.error(`Критическая ошибка: ${error.message}`);
189
+
190
+ // Обработка специфических типов ошибок
191
+ if (error.type === 'geo_restriction') {
192
+ showVpnInstructions(); // Показать инструкции по настройке VPN
193
+ } else if (error.status === 429) {
194
+ scheduleRetry(5000); // Запланировать повторную попытку через 5 секунд
195
+ } else {
196
+ reportError(error); // Отправить отчет об ошибке
197
+ }
198
+ }
199
+ }
200
+ ```
201
+
202
+ ### Обработка ошибок при работе с рассуждениями
203
+
204
+ ```javascript
205
+ try {
206
+ // Создание рассуждения
207
+ const reasoning = await sdk.reasoning.createReasoning({
208
+ projectId: 'project-123',
209
+ query: 'Analyze this codebase'
210
+ });
211
+
212
+ // Подключение WebSocket
213
+ await sdk.reasoning.connectWebSocket({
214
+ reasoningId: reasoning.id,
215
+ authToken: 'your-auth-token',
216
+ onError: (error) => {
217
+ console.error(`WebSocket ошибка: ${error.message}`);
218
+
219
+ if (error.type === 'geo_restriction') {
220
+ // Показать сообщение о необходимости VPN
221
+ showVpnAlert();
222
+ }
223
+ }
224
+ });
225
+
226
+ // Запуск рассуждения
227
+ await sdk.reasoning.startReasoning(reasoning.id);
228
+ } catch (error) {
229
+ console.error(`HTTP ошибка: ${error.message}`);
230
+
231
+ // Обработка HTTP ошибок
232
+ if (error.status === 401) {
233
+ // Перенаправить на страницу входа
234
+ redirectToLogin();
235
+ } else if (error.status === 403) {
236
+ // Показать сообщение об отсутствии доступа
237
+ showAccessDeniedMessage();
238
+ }
239
+ }
240
+ ```