solver-sdk 2.0.2 → 2.0.3

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 (45) hide show
  1. package/dist/cjs/api/filesystem-api.js +123 -0
  2. package/dist/cjs/api/filesystem-api.js.map +1 -0
  3. package/dist/cjs/api/projects-api.js +7 -2
  4. package/dist/cjs/api/projects-api.js.map +1 -1
  5. package/dist/cjs/code-solver-sdk.js +48 -2
  6. package/dist/cjs/code-solver-sdk.js.map +1 -1
  7. package/dist/cjs/constants/websocket-events.constants.js +1 -1
  8. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  9. package/dist/cjs/index.js +1 -0
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/ws/filesystem-ws-client.js +16 -16
  12. package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
  13. package/dist/esm/api/filesystem-api.js +119 -0
  14. package/dist/esm/api/filesystem-api.js.map +1 -0
  15. package/dist/esm/api/projects-api.js +7 -2
  16. package/dist/esm/api/projects-api.js.map +1 -1
  17. package/dist/esm/code-solver-sdk.js +48 -2
  18. package/dist/esm/code-solver-sdk.js.map +1 -1
  19. package/dist/esm/constants/websocket-events.constants.js +1 -1
  20. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  21. package/dist/esm/index.js +1 -0
  22. package/dist/esm/index.js.map +1 -1
  23. package/dist/esm/ws/filesystem-ws-client.js +16 -16
  24. package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
  25. package/dist/types/api/filesystem-api.d.ts +64 -0
  26. package/dist/types/api/filesystem-api.d.ts.map +1 -0
  27. package/dist/types/api/projects-api.d.ts +2 -1
  28. package/dist/types/api/projects-api.d.ts.map +1 -1
  29. package/dist/types/code-solver-sdk.d.ts +22 -1
  30. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  31. package/dist/types/constants/websocket-events.constants.d.ts +2 -2
  32. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  33. package/dist/types/index.d.ts +1 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/ws/filesystem-ws-client.d.ts +2 -4
  36. package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
  37. package/docs/API_REFERENCE.md +38 -166
  38. package/docs/AUTHENTICATION.md +37 -59
  39. package/docs/ERROR_HANDLING.md +124 -191
  40. package/docs/INTEGRATION_EXAMPLES.md +38 -52
  41. package/docs/PING_PONG.md +79 -178
  42. package/docs/README.md +7 -3
  43. package/docs/WEBSOCKET.md +188 -42
  44. package/package.json +1 -1
  45. package/docs/advanced/PING_PONG.md +0 -212
package/docs/PING_PONG.md CHANGED
@@ -1,212 +1,113 @@
1
- # WebSocket Ping/Pong механизм
1
+ # Механизм Ping/Pong для WebSocket
2
2
 
3
- Данный документ описывает механизм поддержания WebSocket соединений и мониторинга их состояния через ping/pong обмен.
3
+ Для поддержания активных WebSocket соединений и проверки их состояния SDK использует механизм ping/pong.
4
4
 
5
- ## Обзор функциональности
5
+ ## Что такое ping/pong?
6
6
 
7
- SDK поддерживает автоматический механизм отправки ping-сообщений и обработки pong-ответов для:
7
+ Ping/pong - это механизм отправки специальных сообщений между клиентом и сервером для проверки активности соединения.
8
+ Клиент периодически отправляет сообщение "ping", на которое сервер должен ответить сообщением "pong".
9
+ Если ответа нет в течение определенного времени, соединение считается разорванным.
8
10
 
9
- 1. **Проверки активности соединения** - обнаружение разрывов соединения даже в отсутствие активности
10
- 2. **Измерения времени отклика (Round Trip Time, RTT)** - мониторинг качества соединения
11
- 3. **Сбора статистики соединения** - для диагностики и отладки
12
- 4. **Автоматического обнаружения проблем** - уведомление о потере соединения
11
+ ## Как это работает в SDK?
13
12
 
14
- ## Включение механизма ping/pong
13
+ SDK автоматически настраивает и управляет ping/pong механизмом, когда вы используете следующие высокоуровневые методы:
15
14
 
16
- ```typescript
17
- import { CodeSolverSDK, WebSocketNamespace } from 'solver-sdk';
15
+ ```javascript
16
+ // Подключение к WebSocket пространствам имен
17
+ await sdk.connect(); // Подключается ко всем пространствам имен
18
18
 
19
- // Создаем экземпляр SDK
20
- const sdk = new CodeSolverSDK({
21
- baseURL: 'https://api.example.com',
22
- apiKey: 'your-api-key'
23
- });
19
+ // Или более специфичные подключения
20
+ await sdk.reasoning.connectWebSocket(reasoningId);
21
+ await sdk.dependencies.connectWebSocket(projectId);
22
+ await sdk.projects.connectWebSocket();
23
+ ```
24
24
 
25
- // Получаем WebSocket клиент
26
- const wsClient = sdk.getWebSocketClient();
25
+ ### Настройка ping/pong
27
26
 
28
- // Подключаемся к пространствам имен
29
- await wsClient.connectToReasoning();
30
- await wsClient.connectToDependencies();
31
- await wsClient.connectToIndexing();
27
+ По умолчанию SDK использует следующие настройки:
28
+ - Интервал ping: 25 секунд
29
+ - Таймаут ожидания pong: 60 секунд
32
30
 
33
- // Включаем автоматический механизм ping/pong
34
- // параметры: интервал отправки в мс (по умолчанию 30000) и порог таймаута (по умолчанию 3)
35
- wsClient.enablePingPong(10000, 3);
31
+ Эти настройки можно изменить при инициализации SDK:
36
32
 
37
- // Регистрируем обработчик для события таймаута соединения
38
- wsClient.onPingPongEvent('connection_timeout', (data) => {
39
- console.log(`Соединение потеряно для namespace ${data.namespace}`);
40
- console.log(`Socket ID: ${data.socketId}`);
41
- console.log(`Количество пропущенных pong: ${data.timeouts}`);
42
-
43
- // Здесь можно добавить логику переподключения или уведомления пользователя
33
+ ```javascript
34
+ const sdk = new CodeSolverSDK({
35
+ baseURL: 'https://api.example.com',
36
+ apiKey: 'your-api-key',
37
+ websocket: {
38
+ pingInterval: 30000, // 30 секунд
39
+ pingTimeout: 90000 // 90 секунд
40
+ }
44
41
  });
45
42
  ```
46
43
 
47
- ## Отключение механизма ping/pong
44
+ ### Преимущества автоматического ping/pong
48
45
 
49
- ```typescript
50
- // Отключение для всех пространств имен
51
- wsClient.disablePingPong();
46
+ 1. **Обнаружение разрывов соединения**: Если сервер не отвечает на ping, SDK обнаружит разрыв соединения.
47
+ 2. **Предотвращение тайм-аутов**: Регулярные ping/pong сообщения поддерживают соединение активным и предотвращают тайм-ауты на промежуточных серверах и брандмауэрах.
48
+ 3. **Автоматическое переподключение**: SDK может автоматически переподключаться при обнаружении разрыва соединения.
52
49
 
53
- // Отключение для конкретного пространства имен
54
- wsClient.disablePingPong(WebSocketNamespace.REASONING);
55
- ```
56
-
57
- ## Получение статистики ping/pong
58
-
59
- ```typescript
60
- // Получение статистики для всех пространств имен
61
- const allStats = wsClient.getPingStats();
62
- console.log('Статистика для всех соединений:', allStats);
63
-
64
- // Получение статистики для конкретного пространства имен
65
- const reasoningStats = wsClient.getPingStats(WebSocketNamespace.REASONING);
66
- console.log('Статистика для reasoning:', reasoningStats);
67
-
68
- // Пример содержимого статистики:
69
- // {
70
- // namespace: '/reasoning',
71
- // socketId: 'socket-id-123',
72
- // pingSent: 10, // Количество отправленных ping
73
- // pongReceived: 10, // Количество полученных pong
74
- // averageRtt: 15.5, // Среднее время отклика (мс)
75
- // minRtt: 5, // Минимальное время отклика (мс)
76
- // maxRtt: 45, // Максимальное время отклика (мс)
77
- // lastRtt: 12, // Последнее измеренное время отклика (мс)
78
- // lastPongTimestamp: 1712345678901, // Timestamp последнего полученного pong
79
- // isConnected: true // Текущий статус соединения
80
- // }
81
- ```
82
-
83
- ## Ручная отправка ping/pong
50
+ ### События ping/pong
84
51
 
85
- Хотя SDK обеспечивает автоматический механизм ping/pong, вы также можете вручную отправлять ping-сообщения:
52
+ SDK предоставляет события для отслеживания состояния ping/pong:
86
53
 
87
- ```typescript
88
- // Отправка ping и получение pong
89
- wsClient.send(WebSocketNamespace.REASONING, 'connection_ping', {
90
- timestamp: Date.now()
54
+ ```javascript
55
+ // Настройка обработчиков для всех WebSocket соединений
56
+ sdk.on('connection_timeout', async (data) => {
57
+ console.warn(`Соединение с ${data.namespace} истекло по тайм-ауту`);
58
+ // Автоматически SDK попытается переподключиться
91
59
  });
92
-
93
- // Добавление обработчика для pong-ответов
94
- wsClient.on('connection_pong', (data) => {
95
- const rtt = Date.now() - data.echo;
96
- console.log(`Получен pong, RTT: ${rtt}ms`);
97
- });
98
-
99
- // Альтернативно, можно использовать готовый обработчик
100
- wsClient.on('connection_pong', wsClient.getPongHandler());
101
60
  ```
102
61
 
103
- ## Обработка отключений и переподключение
62
+ ## Рекомендуемые практики
104
63
 
105
- ```typescript
106
- // Обработка события таймаута соединения
107
- wsClient.onPingPongEvent('connection_timeout', async (data) => {
108
- console.log(`Соединение потеряно для ${data.namespace}`);
109
-
110
- // Попытка переподключения
111
- try {
112
- // Отключаемся от проблемного пространства имен
113
- wsClient.disconnect(data.namespace);
114
-
115
- // Пауза перед повторным подключением
116
- await new Promise(resolve => setTimeout(resolve, 1000));
117
-
118
- // Переподключаемся
119
- switch (data.namespace) {
120
- case WebSocketNamespace.REASONING:
121
- await wsClient.connectToReasoning();
122
- break;
123
- case WebSocketNamespace.DEPENDENCIES:
124
- await wsClient.connectToDependencies();
125
- break;
126
- case WebSocketNamespace.INDEXING:
127
- await wsClient.connectToIndexing();
128
- break;
129
- }
130
-
131
- console.log(`Успешно переподключились к ${data.namespace}`);
132
- } catch (error) {
133
- console.error(`Ошибка при переподключении к ${data.namespace}:`, error);
134
- }
135
- });
136
- ```
64
+ 1. **Используйте высокоуровневые методы подключения**: Самый простой способ обеспечить надежное соединение - использовать встроенные высокоуровневые методы SDK.
137
65
 
138
- ## Рекомендации по использованию
66
+ 2. **Включите автоматическое переподключение**: При инициализации SDK установите параметры:
67
+ ```javascript
68
+ const sdk = new CodeSolverSDK({
69
+ baseURL: 'https://api.example.com',
70
+ apiKey: 'your-api-key',
71
+ websocket: {
72
+ reconnect: true,
73
+ reconnectAttempts: 5,
74
+ reconnectDelay: 2000
75
+ }
76
+ });
77
+ ```
139
78
 
140
- 1. **Интервал ping/pong**: Рекомендуемый интервал - 30 секунд для продакшн и 5-10 секунд для отладки.
79
+ 3. **Обрабатывайте события тайм-аута**: Регистрируйте обработчики событий, чтобы знать, когда соединение было потеряно.
141
80
 
142
- 2. **Порог таймаута**: Значение 2-3 пропущенных ping/pong позволяет избежать ложных срабатываний при временных задержках сети.
81
+ 4. **Правильно завершайте соединения**: Перед закрытием приложения вызывайте метод для отключения:
82
+ ```javascript
83
+ // Отключение перед закрытием приложения
84
+ await sdk.disconnect();
85
+ ```
143
86
 
144
- 3. **Экономия трафика**: При частой передаче данных через WebSocket можно увеличить интервал ping/pong, так как регулярный обмен данными уже поддерживает соединение активным.
87
+ ## Пример обработки тайм-аутов
145
88
 
146
- 4. **Мониторинг RTT**: Используйте statsPingStats для мониторинга задержек сети и раннего обнаружения проблем с соединением.
89
+ ```javascript
90
+ // Инициализация SDK
91
+ const sdk = new CodeSolverSDK({
92
+ baseURL: 'https://api.example.com',
93
+ apiKey: 'your-api-key'
94
+ });
147
95
 
148
- 5. **Отключение перед закрытием приложения**: Вызывайте disablePingPong() и затем disconnectAll() при закрытии приложения для корректного освобождения ресурсов.
96
+ // Подключение к WebSocket
97
+ await sdk.connect();
149
98
 
150
- ## Пример комплексного использования
99
+ // Обработка события тайм-аута
100
+ sdk.on('connection_timeout', handleConnectionTimeout);
151
101
 
152
- ```typescript
153
- async function setupWebSocketWithHealthMonitoring() {
154
- const sdk = new CodeSolverSDK({
155
- baseURL: 'https://api.example.com',
156
- apiKey: 'your-api-key',
157
- websocket: {
158
- reconnect: true,
159
- reconnectAttempts: 5,
160
- reconnectDelay: 2000
161
- }
162
- });
163
-
164
- const wsClient = sdk.getWebSocketClient();
165
-
166
- // Подключаемся ко всем пространствам имен
167
- await wsClient.connectToReasoning();
168
- await wsClient.connectToDependencies();
169
- await wsClient.connectToIndexing();
102
+ // Функция обработки тайм-аута
103
+ async function handleConnectionTimeout(data) {
104
+ console.warn(`Соединение с ${data.namespace} прервано по тайм-ауту`);
170
105
 
171
- // Включаем механизм ping/pong для всех соединений
172
- wsClient.enablePingPong(20000, 3);
173
-
174
- // Регистрируем обработчик для события таймаута
175
- wsClient.onPingPongEvent('connection_timeout', handleConnectionTimeout);
176
-
177
- // Периодически проверяем статистику соединений
178
- const statsInterval = setInterval(() => {
179
- const stats = wsClient.getPingStats();
180
-
181
- // Анализируем статистику
182
- for (const stat of stats) {
183
- if (stat.averageRtt > 500) {
184
- console.warn(`Высокая задержка для ${stat.namespace}: ${stat.averageRtt}ms`);
185
- }
186
- }
187
- }, 60000); // Проверка каждую минуту
188
-
189
- // Функция для обработки таймаута соединения
190
- async function handleConnectionTimeout(data) {
191
- console.error(`Соединение потеряно для ${data.namespace}`);
192
-
193
- // Логика переподключения...
194
- }
195
-
196
- // Функция для корректного закрытия соединений
197
- function cleanup() {
198
- clearInterval(statsInterval);
199
- wsClient.disablePingPong();
200
- wsClient.disconnectAll();
201
- }
202
-
203
- // Возвращаем функцию очистки
204
- return cleanup;
106
+ // Вы можете добавить свою логику обработки
107
+ // Например, уведомить пользователя или попытаться переподключиться
205
108
  }
206
109
 
207
- // Использование
208
- const cleanup = await setupWebSocketWithHealthMonitoring();
209
-
210
- // При закрытии приложения
211
- window.addEventListener('beforeunload', cleanup);
110
+ // Перед закрытием приложения
111
+ // Корректно отключаемся
112
+ await sdk.disconnect();
212
113
  ```
package/docs/README.md CHANGED
@@ -47,6 +47,9 @@ const project = await sdk.projects.createProject(
47
47
  }
48
48
  );
49
49
 
50
+ // Единое подключение ко всем WebSocket сервисам с указанием ID проекта
51
+ await sdk.connect(project.id);
52
+
50
53
  // Индексация проекта
51
54
  await sdk.projects.indexProject(project.id);
52
55
 
@@ -88,9 +91,10 @@ console.log(chatResponse.answer);
88
91
  Подробная документация доступна в следующих файлах:
89
92
 
90
93
  - [API Reference](./API_REFERENCE.md) - подробное описание всех методов SDK
91
- - [Authentication](./AUTHENTICATION.md) - информация по аутентификации
92
- - [Работа с WebSocket](./WEBSOCKET.md) - примеры работы с WebSocket соединениями
93
- - [Примеры интеграции](./INTEGRATION_EXAMPLES.md) - примеры интеграции с VS Code/Cursor
94
+ - [WebSocket](./WEBSOCKET.md) - примеры работы с WebSocket соединениями
95
+ - [Примеры интеграции](./INTEGRATION_EXAMPLES.md) - примеры интеграции с VS Code/Cursor и другими приложениями
96
+ - [Аутентификация](./AUTHENTICATION.md) - информация по процессу аутентификации
97
+ - [Обработка ошибок](./ERROR_HANDLING.md) - руководство по обработке ошибок
94
98
 
95
99
  ## Поддерживаемые платформы
96
100
 
package/docs/WEBSOCKET.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Работа с WebSocket в Solver SDK
2
2
 
3
- Эта документация описывает, как использовать WebSocket соединения через Solver SDK для работы в реальном времени.
3
+ Эта документация описывает, как использовать WebSocket соединения через высокоуровневые методы Solver SDK для работы в реальном времени.
4
4
 
5
5
  ## Инициализация SDK
6
6
 
@@ -10,13 +10,65 @@ const { CodeSolverSDK } = require('solver-sdk');
10
10
  // Создаем экземпляр SDK с настройками
11
11
  const sdk = new CodeSolverSDK({
12
12
  baseURL: 'https://api.example.com',
13
- apiKey: 'your-api-key'
13
+ apiKey: 'your-api-key',
14
+ websocket: {
15
+ reconnect: true, // Автоматическое переподключение при разрыве соединения
16
+ reconnectAttempts: 5, // Максимальное количество попыток переподключения
17
+ reconnectDelay: 3000 // Задержка между попытками (мс)
18
+ }
14
19
  });
20
+
21
+ // Общее подключение к базовым WebSocket сервисам
22
+ await sdk.connect();
15
23
  ```
16
24
 
17
- ## Работа с рассуждениями (Reasoning)
25
+ ## Работа с файловой системой
26
+
27
+ ```javascript
28
+ // Обязательно: для файловой системы projectId всегда необходим
29
+ const projectId = 'your-project-id';
30
+
31
+ // Метод 1: Подключение через файловую систему
32
+ await sdk.filesystem.connectWebSocket(projectId);
33
+
34
+ // Метод 2: Альтернативный способ подключения
35
+ await sdk.filesystem.connectToProject(projectId);
18
36
 
19
- ### Создание рассуждения и получение результатов в реальном времени
37
+ // Чтение файла через REST API (предпочтительный метод)
38
+ const content = await sdk.context.getFileContent(projectId, 'src/index.js');
39
+
40
+ // Отключение
41
+ await sdk.filesystem.disconnectWebSocket();
42
+ ```
43
+
44
+ ## Работа с индексацией проектов
45
+
46
+ ```javascript
47
+ // Подключение к WebSocket для проектов без указания projectId
48
+ await sdk.projects.connectWebSocket();
49
+
50
+ // Или можно сразу указать проект (projectId опциональный)
51
+ await sdk.projects.connectWebSocket('project-id');
52
+
53
+ // Отслеживание прогресса индексации
54
+ sdk.projects.on('indexing_progress', (data) => {
55
+ console.log(`Прогресс индексации: ${data.progress}%`);
56
+ console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
57
+ });
58
+
59
+ // Завершение индексации
60
+ sdk.projects.on('indexing_complete', (data) => {
61
+ console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
62
+
63
+ // Отключение после завершения
64
+ sdk.projects.disconnectWebSocket();
65
+ });
66
+
67
+ // Запуск индексации проекта
68
+ await sdk.projects.indexProject('project-id');
69
+ ```
70
+
71
+ ## Работа с рассуждениями (Reasoning)
20
72
 
21
73
  ```javascript
22
74
  // Создание рассуждения
@@ -25,8 +77,12 @@ const reasoning = await sdk.reasoning.createReasoning({
25
77
  query: 'Объясни этот проект'
26
78
  });
27
79
 
28
- // Подключение к WebSocket
29
- await sdk.reasoning.connectWebSocket(reasoning.id);
80
+ // Подключение к WebSocket для рассуждений
81
+ // Не требует projectId в методе connectWebSocket
82
+ await sdk.reasoning.connectWebSocket();
83
+
84
+ // Присоединение к конкретному рассуждению
85
+ await sdk.reasoning.joinReasoning(reasoning.id);
30
86
 
31
87
  // Подписка на события
32
88
  sdk.reasoning.on('thinking', (data) => {
@@ -43,6 +99,36 @@ sdk.reasoning.on('complete', (data) => {
43
99
  await sdk.reasoning.startReasoning(reasoning.id);
44
100
  ```
45
101
 
102
+ ## Работа с зависимостями
103
+
104
+ ```javascript
105
+ // Подключение к WebSocket для зависимостей без указания projectId
106
+ await sdk.dependencies.connectWebSocket();
107
+
108
+ // Затем необходимо присоединиться к конкретному проекту
109
+ await sdk.dependencies.joinProject('your-project-id');
110
+
111
+ // Подписка на события зависимостей
112
+ sdk.dependencies.on('dependency_update', (data) => {
113
+ console.log('Обновление зависимостей:', data);
114
+ });
115
+
116
+ // Отключение
117
+ await sdk.dependencies.disconnectWebSocket();
118
+ ```
119
+
120
+ ## Смена активного проекта
121
+
122
+ SDK поддерживает концепцию "активного проекта", что позволяет переключаться между проектами без полного переподключения:
123
+
124
+ ```javascript
125
+ // Установка активного проекта
126
+ sdk.setActiveProject('new-project-id');
127
+
128
+ // После этого вызова SDK автоматически переподключит
129
+ // filesystem-namespace к новому проекту
130
+ ```
131
+
46
132
  ## Потоковый чат с мышлением AI
47
133
 
48
134
  ```javascript
@@ -65,7 +151,8 @@ const messages = [
65
151
  const options = {
66
152
  model: 'claude-3-7-sonnet-20240229',
67
153
  thinking: true,
68
- temperature: 0.7
154
+ temperature: 0.7,
155
+ projectId: 'project-id' // Указываем projectId для контекста проекта
69
156
  };
70
157
 
71
158
  // Отправка с потоковым получением ответа
@@ -76,57 +163,116 @@ const response = await sdk.chat.streamChatWithThinking(
76
163
  );
77
164
  ```
78
165
 
79
- ## Мониторинг индексации проектов
166
+ ## Автоматический ping/pong и reconnect
80
167
 
81
- ```javascript
82
- // Подключение к WebSocket для проектов
83
- await sdk.projects.connectWebSocket();
168
+ WebSocket клиенты в SDK автоматически обрабатывают ping/pong сообщения и reconnect:
84
169
 
85
- // Отслеживание прогресса индексации
86
- sdk.projects.on('indexing_progress', (data) => {
87
- console.log(`Прогресс индексации: ${data.progress}%`);
88
- console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
170
+ ```javascript
171
+ // Все WebSocket клиенты имеют автоматический ping/pong
172
+ // с настраиваемыми таймаутами
173
+ const sdk = new CodeSolverSDK({
174
+ websocket: {
175
+ pingInterval: 25000, // Интервал отправки ping (мс)
176
+ pingTimeout: 10000, // Таймаут ожидания pong (мс)
177
+ reconnect: true, // Автоматическое переподключение
178
+ reconnectAttempts: 5 // Макс. количество попыток
179
+ }
89
180
  });
90
181
 
91
- // Завершение индексации
92
- sdk.projects.on('indexing_complete', (data) => {
93
- console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
94
-
95
- // Отключение после завершения
96
- sdk.projects.disconnectWebSocket();
97
- });
182
+ // При разрыве соединения SDK попытается автоматически переподключиться
183
+ // Вам не нужно писать свой код для обработки reconnect
98
184
  ```
99
185
 
100
- ## Работа с зависимостями
186
+ ## Метод connect в SDK и пространства имен
187
+
188
+ Метод `sdk.connect()` подключает только базовые пространства имен и не устанавливает подключение ко всем сервисам:
101
189
 
102
190
  ```javascript
103
- // Подключение к пространству имен зависимостей
104
- await sdk.dependencies.connectWebSocket(projectId);
191
+ // Общее подключение не передает projectId для файловой системы
192
+ await sdk.connect();
105
193
 
106
- // Подписка на события зависимостей
107
- sdk.dependencies.on('dependency_update', (data) => {
108
- console.log('Обновление зависимостей:', data);
109
- });
194
+ // Поэтому для работы с файловой системой нужно явно подключиться
195
+ await sdk.filesystem.connectWebSocket('your-project-id');
110
196
 
111
- // Отключение
112
- await sdk.dependencies.disconnectWebSocket();
197
+ // Или можно при подключении сразу указать projectId, который будет использован для подключения к файловой системе
198
+ await sdk.connect('your-project-id');
113
199
  ```
114
200
 
115
- ## Обработка ошибок
201
+ ## Сравнение сигнатур методов connectWebSocket
202
+
203
+ | API | Метод | Требуется projectId? |
204
+ |-----|-------|---------------------|
205
+ | `sdk.filesystem` | `connectWebSocket(projectId)` | **Обязательно** |
206
+ | `sdk.filesystem` | `connectToProject(projectId)` | **Обязательно** |
207
+ | `sdk.projects` | `connectWebSocket([projectId])` | **Опционально** |
208
+ | `sdk.reasoning` | `connectWebSocket()` | **Нет** |
209
+ | `sdk.reasoning` | `joinReasoning(reasoningId)` | **Обязательно** |
210
+ | `sdk.dependencies` | `connectWebSocket()` | **Нет** |
211
+ | `sdk.dependencies` | `joinProject(projectId)` | **Обязательно** |
212
+
213
+ ## Обработка ошибок и переподключение
214
+
215
+ Используйте параметры `reconnect` и `reconnectAttempts` для автоматического переподключения при разрыве соединения:
116
216
 
117
217
  ```javascript
118
- try {
119
- await sdk.chat.streamChatWithThinking(
120
- messages,
121
- options,
122
- handleEvent
123
- );
124
- } catch (error) {
125
- console.error('Произошла ошибка:', error.message);
218
+ // Инициализация SDK с настройками переподключения
219
+ const sdk = new CodeSolverSDK({
220
+ baseURL: 'https://api.example.com',
221
+ apiKey: 'your-api-key',
222
+ websocket: {
223
+ reconnect: true,
224
+ reconnectAttempts: 5,
225
+ reconnectDelay: 3000
226
+ }
227
+ });
228
+
229
+ // Проверка доступности сервера перед началом работы
230
+ const isHealthy = await sdk.checkHealth();
231
+ if (!isHealthy) {
232
+ console.error('API недоступен');
233
+ return;
234
+ }
235
+
236
+ // Подключение к WebSocket серверу
237
+ const connected = await sdk.connect();
238
+ if (!connected) {
239
+ console.warn('WebSocket соединение не установлено, работа будет ограничена');
126
240
  }
241
+
242
+ // Для работы с файловой системой необходимо отдельное подключение с projectId
243
+ const projectId = 'your-project-id';
244
+ await sdk.filesystem.connectWebSocket(projectId);
245
+ ```
246
+
247
+ ## Использование в Cursor
248
+
249
+ В Cursor клиенте projectId обычно получается через API проектов:
250
+
251
+ ```javascript
252
+ // Получаем projectId для текущей рабочей области
253
+ const workspacePath = '/path/to/project';
254
+ const project = await sdk.projects.getOrCreateProjectByPath(workspacePath);
255
+ const projectId = project.id;
256
+
257
+ // Используем полученный projectId для подключения к файловой системе
258
+ await sdk.filesystem.connectWebSocket(projectId);
127
259
  ```
128
260
 
129
- ## Основные события
261
+ ## Статус реализации функций
262
+
263
+ | Функция | Статус | Примечание |
264
+ |---------|--------|------------|
265
+ | `sdk.connect()` | ✅ Реализовано | Включает базовое подключение ко всем namespace |
266
+ | `sdk.setActiveProject()` | ✅ Реализовано | Работает в связке с filesystem-клиентом |
267
+ | `sdk.filesystem.connectWebSocket()` | ✅ Реализовано | Подключение к WebSocket для файловой системы |
268
+ | `sdk.filesystem.connectToProject()` | ✅ Реализовано | Альтернативный синтаксис для connectWebSocket |
269
+ | `sdk.context.getFileContent()` | ✅ Реализовано | Рекомендуемый метод для чтения файлов (через REST) |
270
+ | `sdk.projects.connectWebSocket()` | ✅ Реализовано | Подключение к namespace индексации |
271
+ | `sdk.reasoning.connectWebSocket()` | ✅ Реализовано | Требует последующего `joinReasoning()` |
272
+ | `sdk.dependencies.connectWebSocket()` | ✅ Реализовано | Требует последующего `joinProject()` |
273
+ | `sdk.chat.streamChatWithThinking()` | ✅ Реализовано | Потоковое получение ответов с мышлением |
274
+
275
+ ## Основные события WebSocket
130
276
 
131
277
  | Событие | Описание |
132
278
  |---------|----------|
@@ -136,4 +282,4 @@ try {
136
282
  | `message_stop` | Конец сообщения |
137
283
  | `indexing_progress` | Прогресс индексации |
138
284
  | `indexing_complete` | Завершение индексации |
139
- | `error` | Уведомление об ошибке |
285
+ | `error` | Уведомление об ошибке |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solver-sdk",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "SDK для интеграции с Code Solver Backend API",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",