solver-sdk 2.0.1 → 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.
- package/dist/cjs/api/filesystem-api.js +123 -0
- package/dist/cjs/api/filesystem-api.js.map +1 -0
- package/dist/cjs/api/projects-api.js +7 -2
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/{code-solver-sdk-v2.js → code-solver-sdk.js} +50 -4
- package/dist/cjs/code-solver-sdk.js.map +1 -0
- package/dist/cjs/constants/websocket-events.constants.js +1 -1
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/index.js +5 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/ws/filesystem-ws-client.js +16 -16
- package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
- package/dist/esm/api/filesystem-api.js +119 -0
- package/dist/esm/api/filesystem-api.js.map +1 -0
- package/dist/esm/api/projects-api.js +7 -2
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/{code-solver-sdk-v2.js → code-solver-sdk.js} +50 -4
- package/dist/esm/code-solver-sdk.js.map +1 -0
- package/dist/esm/constants/websocket-events.constants.js +1 -1
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ws/filesystem-ws-client.js +16 -16
- package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
- package/dist/types/api/filesystem-api.d.ts +64 -0
- package/dist/types/api/filesystem-api.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +2 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/{code-solver-sdk-v2.d.ts → code-solver-sdk.d.ts} +23 -2
- package/dist/types/code-solver-sdk.d.ts.map +1 -0
- package/dist/types/constants/websocket-events.constants.d.ts +2 -2
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +3 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/ws/filesystem-ws-client.d.ts +2 -4
- package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +38 -166
- package/docs/AUTHENTICATION.md +37 -59
- package/docs/ERROR_HANDLING.md +124 -191
- package/docs/INTEGRATION_EXAMPLES.md +38 -52
- package/docs/PING_PONG.md +79 -178
- package/docs/README.md +7 -3
- package/docs/WEBSOCKET.md +188 -42
- package/package.json +1 -1
- package/dist/cjs/code-solver-sdk-v2.js.map +0 -1
- package/dist/esm/code-solver-sdk-v2.js.map +0 -1
- package/dist/types/code-solver-sdk-v2.d.ts.map +0 -1
- package/docs/advanced/PING_PONG.md +0 -212
package/docs/PING_PONG.md
CHANGED
|
@@ -1,212 +1,113 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Механизм Ping/Pong для WebSocket
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Для поддержания активных WebSocket соединений и проверки их состояния SDK использует механизм ping/pong.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Что такое ping/pong?
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Ping/pong - это механизм отправки специальных сообщений между клиентом и сервером для проверки активности соединения.
|
|
8
|
+
Клиент периодически отправляет сообщение "ping", на которое сервер должен ответить сообщением "pong".
|
|
9
|
+
Если ответа нет в течение определенного времени, соединение считается разорванным.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
2. **Измерения времени отклика (Round Trip Time, RTT)** - мониторинг качества соединения
|
|
11
|
-
3. **Сбора статистики соединения** - для диагностики и отладки
|
|
12
|
-
4. **Автоматического обнаружения проблем** - уведомление о потере соединения
|
|
11
|
+
## Как это работает в SDK?
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
SDK автоматически настраивает и управляет ping/pong механизмом, когда вы используете следующие высокоуровневые методы:
|
|
15
14
|
|
|
16
|
-
```
|
|
17
|
-
|
|
15
|
+
```javascript
|
|
16
|
+
// Подключение к WebSocket пространствам имен
|
|
17
|
+
await sdk.connect(); // Подключается ко всем пространствам имен
|
|
18
18
|
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
// Или более специфичные подключения
|
|
20
|
+
await sdk.reasoning.connectWebSocket(reasoningId);
|
|
21
|
+
await sdk.dependencies.connectWebSocket(projectId);
|
|
22
|
+
await sdk.projects.connectWebSocket();
|
|
23
|
+
```
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
const wsClient = sdk.getWebSocketClient();
|
|
25
|
+
### Настройка ping/pong
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
await wsClient.connectToIndexing();
|
|
27
|
+
По умолчанию SDK использует следующие настройки:
|
|
28
|
+
- Интервал ping: 25 секунд
|
|
29
|
+
- Таймаут ожидания pong: 60 секунд
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
// параметры: интервал отправки в мс (по умолчанию 30000) и порог таймаута (по умолчанию 3)
|
|
35
|
-
wsClient.enablePingPong(10000, 3);
|
|
31
|
+
Эти настройки можно изменить при инициализации SDK:
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
44
|
+
### Преимущества автоматического ping/pong
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
52
|
+
SDK предоставляет события для отслеживания состояния ping/pong:
|
|
86
53
|
|
|
87
|
-
```
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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
|
-
|
|
79
|
+
3. **Обрабатывайте события тайм-аута**: Регистрируйте обработчики событий, чтобы знать, когда соединение было потеряно.
|
|
141
80
|
|
|
142
|
-
|
|
81
|
+
4. **Правильно завершайте соединения**: Перед закрытием приложения вызывайте метод для отключения:
|
|
82
|
+
```javascript
|
|
83
|
+
// Отключение перед закрытием приложения
|
|
84
|
+
await sdk.disconnect();
|
|
85
|
+
```
|
|
143
86
|
|
|
144
|
-
|
|
87
|
+
## Пример обработки тайм-аутов
|
|
145
88
|
|
|
146
|
-
|
|
89
|
+
```javascript
|
|
90
|
+
// Инициализация SDK
|
|
91
|
+
const sdk = new CodeSolverSDK({
|
|
92
|
+
baseURL: 'https://api.example.com',
|
|
93
|
+
apiKey: 'your-api-key'
|
|
94
|
+
});
|
|
147
95
|
|
|
148
|
-
|
|
96
|
+
// Подключение к WebSocket
|
|
97
|
+
await sdk.connect();
|
|
149
98
|
|
|
150
|
-
|
|
99
|
+
// Обработка события тайм-аута
|
|
100
|
+
sdk.on('connection_timeout', handleConnectionTimeout);
|
|
151
101
|
|
|
152
|
-
|
|
153
|
-
async function
|
|
154
|
-
|
|
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
|
-
//
|
|
172
|
-
|
|
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
|
-
|
|
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
|
-
- [
|
|
92
|
-
- [
|
|
93
|
-
- [
|
|
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
|
-
## Работа с
|
|
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
|
-
|
|
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
|
-
|
|
82
|
-
// Подключение к WebSocket для проектов
|
|
83
|
-
await sdk.projects.connectWebSocket();
|
|
168
|
+
WebSocket клиенты в SDK автоматически обрабатывают ping/pong сообщения и reconnect:
|
|
84
169
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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.
|
|
191
|
+
// Общее подключение не передает projectId для файловой системы
|
|
192
|
+
await sdk.connect();
|
|
105
193
|
|
|
106
|
-
//
|
|
107
|
-
sdk.
|
|
108
|
-
console.log('Обновление зависимостей:', data);
|
|
109
|
-
});
|
|
194
|
+
// Поэтому для работы с файловой системой нужно явно подключиться
|
|
195
|
+
await sdk.filesystem.connectWebSocket('your-project-id');
|
|
110
196
|
|
|
111
|
-
//
|
|
112
|
-
await sdk.
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-solver-sdk-v2.js","sourceRoot":"","sources":["../../src/code-solver-sdk-v2.ts"],"names":[],"mappings":"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"}
|