solver-sdk 2.3.0 → 2.6.0
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/README.md +94 -41
- package/dist/cjs/api/dependencies-api.js +2 -4
- package/dist/cjs/api/dependencies-api.js.map +1 -1
- package/dist/cjs/api/projects-api.js +34 -56
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/api/reasoning-api.js +31 -17
- package/dist/cjs/api/reasoning-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +83 -0
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/utils/message-helpers.js +15 -37
- package/dist/cjs/utils/message-helpers.js.map +1 -1
- package/dist/esm/api/dependencies-api.js +2 -4
- package/dist/esm/api/dependencies-api.js.map +1 -1
- package/dist/esm/api/projects-api.js +34 -56
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/api/reasoning-api.js +31 -17
- package/dist/esm/api/reasoning-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +83 -0
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/utils/message-helpers.js +16 -38
- package/dist/esm/utils/message-helpers.js.map +1 -1
- package/dist/types/api/dependencies-api.d.ts.map +1 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/api/reasoning-api.d.ts +21 -10
- package/dist/types/api/reasoning-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +20 -0
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interfaces/sdk-options.d.ts +5 -0
- package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
- package/dist/types/utils/message-helpers.d.ts +4 -3
- package/dist/types/utils/message-helpers.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +495 -96
- package/docs/AUTHENTICATION.md +291 -36
- package/docs/ERROR_HANDLING.md +544 -104
- package/docs/INTEGRATION_GUIDE_V2.5.md +516 -0
- package/docs/README.md +260 -75
- package/docs/README_V2.5.md +266 -0
- package/docs/WEBSOCKET.md +374 -111
- package/docs/indexing/INDEXING.md +372 -167
- package/package.json +1 -1
- package/docs/INTEGRATION_EXAMPLES.md +0 -328
- package/docs/PING_PONG.md +0 -113
package/docs/WEBSOCKET.md
CHANGED
|
@@ -1,168 +1,431 @@
|
|
|
1
|
-
#
|
|
1
|
+
# WebSocket API v2.5.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Полная документация по работе с WebSocket соединениями в AI Solver SDK v2.5.0.
|
|
4
4
|
|
|
5
|
-
## Инициализация
|
|
5
|
+
## Инициализация с контролируемыми подключениями
|
|
6
6
|
|
|
7
7
|
```javascript
|
|
8
|
-
|
|
8
|
+
import { CodeSolverSDK } from '@ai-solver/sdk';
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
const sdk =
|
|
12
|
-
baseURL: '
|
|
13
|
-
apiKey: '
|
|
14
|
-
|
|
15
|
-
reconnect: true, // Автоматическое переподключение при разрыве соединения
|
|
16
|
-
reconnectAttempts: 5, // Максимальное количество попыток переподключения
|
|
17
|
-
reconnectDelay: 3000 // Задержка между попытками (мс)
|
|
18
|
-
}
|
|
10
|
+
// Рекомендуемый способ с autoConnect: false
|
|
11
|
+
const sdk = CodeSolverSDK.create({
|
|
12
|
+
baseURL: 'http://localhost:3000',
|
|
13
|
+
apiKey: 'dev_sk_test_12345678',
|
|
14
|
+
autoConnect: false // Контролируемые WebSocket подключения
|
|
19
15
|
});
|
|
20
16
|
|
|
21
|
-
//
|
|
22
|
-
await sdk.
|
|
17
|
+
// Диагностика перед подключением
|
|
18
|
+
const wsStatus = await sdk.diagnoseWebSocket();
|
|
19
|
+
console.log('WebSocket readiness:', wsStatus);
|
|
23
20
|
```
|
|
24
21
|
|
|
25
|
-
##
|
|
22
|
+
## WebSocket Namespaces
|
|
23
|
+
|
|
24
|
+
SDK поддерживает 3 основных WebSocket namespace:
|
|
25
|
+
|
|
26
|
+
1. **Projects** (`/projects`) - события проектов и индексации
|
|
27
|
+
2. **Reasoning** (`/reasoning`) - события AI reasoning процессов
|
|
28
|
+
3. **Chat** (`/chat`) - события потокового чата и thinking
|
|
29
|
+
|
|
30
|
+
## Projects WebSocket
|
|
31
|
+
|
|
32
|
+
### Подключение
|
|
26
33
|
|
|
27
34
|
```javascript
|
|
28
|
-
// Подключение к
|
|
35
|
+
// Подключение к projects namespace
|
|
29
36
|
await sdk.projects.connectWebSocket();
|
|
30
37
|
|
|
31
|
-
//
|
|
32
|
-
sdk.projects.
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
// Проверка статуса подключения
|
|
39
|
+
const isConnected = sdk.projects.isWebSocketConnected();
|
|
40
|
+
console.log('Projects WebSocket connected:', isConnected);
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### События индексации
|
|
44
|
+
|
|
45
|
+
#### `indexing_progress`
|
|
46
|
+
|
|
47
|
+
Прогресс индексации в реальном времени.
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
sdk.projects.onIndexingProgress((data) => {
|
|
51
|
+
console.log(`Progress: ${data.percentage}%`);
|
|
52
|
+
console.log(`Files: ${data.processedFiles}/${data.totalFiles}`);
|
|
53
|
+
console.log(`Current: ${data.currentFile}`);
|
|
54
|
+
console.log(`Status: ${data.status}`);
|
|
55
|
+
console.log(`Speed: ${data.filesPerSecond} files/sec`);
|
|
35
56
|
});
|
|
57
|
+
```
|
|
36
58
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
59
|
+
#### `indexing_complete`
|
|
60
|
+
|
|
61
|
+
Завершение индексации.
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
sdk.projects.onIndexingComplete((data) => {
|
|
65
|
+
console.log('Indexing completed:', data.projectId);
|
|
66
|
+
console.log('Total files:', data.totalFiles);
|
|
67
|
+
console.log('Duration:', data.duration);
|
|
68
|
+
console.log('Success:', data.success);
|
|
69
|
+
console.log('Errors:', data.errors);
|
|
43
70
|
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
#### `indexing_error`
|
|
74
|
+
|
|
75
|
+
Ошибки индексации.
|
|
44
76
|
|
|
45
|
-
|
|
46
|
-
|
|
77
|
+
```javascript
|
|
78
|
+
sdk.projects.onIndexingError((error) => {
|
|
79
|
+
console.error('Indexing error:', error.message);
|
|
80
|
+
console.error('Project:', error.projectId);
|
|
81
|
+
console.error('File:', error.fileName);
|
|
82
|
+
console.error('Code:', error.errorCode);
|
|
83
|
+
});
|
|
47
84
|
```
|
|
48
85
|
|
|
49
|
-
|
|
86
|
+
### Пример полного цикла индексации
|
|
50
87
|
|
|
51
88
|
```javascript
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
89
|
+
async function indexProjectWithProgress(projectId) {
|
|
90
|
+
// Подключение к WebSocket
|
|
91
|
+
await sdk.projects.connectWebSocket();
|
|
92
|
+
|
|
93
|
+
// Настройка обработчиков
|
|
94
|
+
sdk.projects.onIndexingProgress((data) => {
|
|
95
|
+
const progress = Math.round(data.percentage);
|
|
96
|
+
console.log(`[${progress}%] ${data.currentFile}`);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
sdk.projects.onIndexingComplete((data) => {
|
|
100
|
+
console.log('✅ Indexing completed!');
|
|
101
|
+
console.log(`📊 ${data.totalFiles} files indexed in ${data.duration}ms`);
|
|
102
|
+
sdk.projects.disconnectWebSocket();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
sdk.projects.onIndexingError((error) => {
|
|
106
|
+
console.error('❌ Indexing failed:', error.message);
|
|
107
|
+
sdk.projects.disconnectWebSocket();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// Запуск индексации
|
|
111
|
+
await sdk.projects.startIndexing(projectId);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Reasoning WebSocket
|
|
116
|
+
|
|
117
|
+
### Подключение
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// Подключение к reasoning namespace
|
|
121
|
+
await sdk.reasoning.connectWebSocket();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### События reasoning
|
|
125
|
+
|
|
126
|
+
#### `reasoning_started`
|
|
127
|
+
|
|
128
|
+
Начало reasoning процесса.
|
|
129
|
+
|
|
130
|
+
```javascript
|
|
131
|
+
sdk.reasoning.onReasoningStarted((data) => {
|
|
132
|
+
console.log('🚀 Reasoning started:', data.id);
|
|
133
|
+
console.log('📝 Query:', data.query);
|
|
134
|
+
console.log('🎯 Project:', data.projectId);
|
|
56
135
|
});
|
|
136
|
+
```
|
|
57
137
|
|
|
58
|
-
|
|
59
|
-
await sdk.reasoning.connectWebSocket(reasoning.id);
|
|
138
|
+
#### `reasoning_progress`
|
|
60
139
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
140
|
+
Прогресс reasoning.
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
sdk.reasoning.onReasoningProgress((data) => {
|
|
144
|
+
console.log('⚡ Progress:', data.progress);
|
|
145
|
+
console.log('📍 Step:', data.currentStep);
|
|
146
|
+
console.log('🔍 Action:', data.action);
|
|
64
147
|
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### `reasoning_completed`
|
|
65
151
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
152
|
+
Завершение reasoning.
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
sdk.reasoning.onReasoningCompleted((data) => {
|
|
156
|
+
console.log('✅ Reasoning completed:', data.id);
|
|
157
|
+
console.log('📊 Results:', data.results);
|
|
158
|
+
console.log('⏱️ Duration:', data.duration);
|
|
70
159
|
});
|
|
160
|
+
```
|
|
71
161
|
|
|
72
|
-
|
|
73
|
-
|
|
162
|
+
#### `reasoning_error`
|
|
163
|
+
|
|
164
|
+
Ошибки reasoning.
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
sdk.reasoning.onReasoningError((error) => {
|
|
168
|
+
console.error('❌ Reasoning error:', error.message);
|
|
169
|
+
console.error('🆔 Reasoning ID:', error.reasoningId);
|
|
170
|
+
});
|
|
74
171
|
```
|
|
75
172
|
|
|
76
|
-
|
|
173
|
+
### Пример reasoning с WebSocket
|
|
77
174
|
|
|
78
175
|
```javascript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
176
|
+
async function runReasoningWithEvents(projectId, query) {
|
|
177
|
+
// Подключение
|
|
178
|
+
await sdk.reasoning.connectWebSocket();
|
|
179
|
+
|
|
180
|
+
// Обработчики
|
|
181
|
+
sdk.reasoning.onReasoningStarted((data) => {
|
|
182
|
+
console.log('🚀 Started reasoning:', data.id);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
sdk.reasoning.onReasoningProgress((data) => {
|
|
186
|
+
console.log(`⚡ ${data.progress}% - ${data.currentStep}`);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
sdk.reasoning.onReasoningCompleted((data) => {
|
|
190
|
+
console.log('✅ Results:', data.results);
|
|
191
|
+
sdk.reasoning.disconnectWebSocket();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Создание и запуск
|
|
195
|
+
const reasoning = await sdk.reasoning.create({
|
|
196
|
+
projectId: projectId,
|
|
197
|
+
query: query
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
await sdk.reasoning.start(reasoning.id);
|
|
201
|
+
}
|
|
202
|
+
```
|
|
89
203
|
|
|
90
|
-
|
|
91
|
-
const messages = [
|
|
92
|
-
{ role: 'user', content: 'Расскажи о JavaScript' }
|
|
93
|
-
];
|
|
204
|
+
## Chat WebSocket
|
|
94
205
|
|
|
95
|
-
|
|
96
|
-
model: 'claude-3-7-sonnet-20240229',
|
|
97
|
-
thinking: true,
|
|
98
|
-
temperature: 0.7
|
|
99
|
-
};
|
|
206
|
+
### Подключение
|
|
100
207
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
options,
|
|
105
|
-
handleEvent
|
|
106
|
-
);
|
|
208
|
+
```javascript
|
|
209
|
+
// Подключение к chat namespace
|
|
210
|
+
await sdk.chat.connectWebSocket();
|
|
107
211
|
```
|
|
108
212
|
|
|
109
|
-
|
|
213
|
+
### События потокового чата
|
|
214
|
+
|
|
215
|
+
#### `text_delta`
|
|
216
|
+
|
|
217
|
+
Фрагменты текстового ответа.
|
|
110
218
|
|
|
111
219
|
```javascript
|
|
112
|
-
|
|
113
|
-
|
|
220
|
+
sdk.chat.onTextDelta((text) => {
|
|
221
|
+
process.stdout.write(text); // Вывод в реальном времени
|
|
222
|
+
});
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
#### `thinking_delta`
|
|
114
226
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
227
|
+
Фрагменты thinking блоков (Claude 4).
|
|
228
|
+
|
|
229
|
+
```javascript
|
|
230
|
+
sdk.chat.onThinkingDelta((thinking) => {
|
|
231
|
+
console.log('🧠 Thinking:', thinking);
|
|
118
232
|
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
#### `tool_use`
|
|
236
|
+
|
|
237
|
+
Использование инструментов AI.
|
|
238
|
+
|
|
239
|
+
```javascript
|
|
240
|
+
sdk.chat.onToolUse((tool) => {
|
|
241
|
+
console.log('🔧 Tool used:', tool.name);
|
|
242
|
+
console.log('📥 Input:', tool.input);
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### `message_complete`
|
|
247
|
+
|
|
248
|
+
Завершение сообщения.
|
|
249
|
+
|
|
250
|
+
```javascript
|
|
251
|
+
sdk.chat.onMessageComplete((message) => {
|
|
252
|
+
console.log('✅ Message completed');
|
|
253
|
+
console.log('📄 Full content:', message.content);
|
|
254
|
+
});
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Потоковый чат с thinking
|
|
258
|
+
|
|
259
|
+
```javascript
|
|
260
|
+
async function streamChatWithThinking(messages) {
|
|
261
|
+
// Подключение
|
|
262
|
+
await sdk.chat.connectWebSocket();
|
|
263
|
+
|
|
264
|
+
let fullResponse = '';
|
|
265
|
+
let thinkingContent = '';
|
|
266
|
+
|
|
267
|
+
// Обработчики
|
|
268
|
+
sdk.chat.onThinkingDelta((thinking) => {
|
|
269
|
+
thinkingContent += thinking;
|
|
270
|
+
console.log('🧠 Thinking fragment:', thinking);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
sdk.chat.onTextDelta((text) => {
|
|
274
|
+
fullResponse += text;
|
|
275
|
+
process.stdout.write(text);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
sdk.chat.onToolUse((tool) => {
|
|
279
|
+
console.log(`\n🔧 Using tool: ${tool.name}`);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
sdk.chat.onMessageComplete((message) => {
|
|
283
|
+
console.log('\n✅ Response completed');
|
|
284
|
+
console.log('💭 Full thinking:', thinkingContent);
|
|
285
|
+
sdk.chat.disconnectWebSocket();
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
// Отправка с thinking
|
|
289
|
+
await sdk.chat.stream(messages, {
|
|
290
|
+
thinking: true,
|
|
291
|
+
model: 'claude-3-5-sonnet-20241022',
|
|
292
|
+
tool_choice: { type: 'auto' }
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
## Управление подключениями
|
|
298
|
+
|
|
299
|
+
### Подключение/отключение
|
|
300
|
+
|
|
301
|
+
```javascript
|
|
302
|
+
// Подключение к конкретным namespace
|
|
303
|
+
await sdk.projects.connectWebSocket();
|
|
304
|
+
await sdk.reasoning.connectWebSocket();
|
|
305
|
+
await sdk.chat.connectWebSocket();
|
|
119
306
|
|
|
120
307
|
// Отключение
|
|
121
|
-
await sdk.
|
|
308
|
+
await sdk.projects.disconnectWebSocket();
|
|
309
|
+
await sdk.reasoning.disconnectWebSocket();
|
|
310
|
+
await sdk.chat.disconnectWebSocket();
|
|
311
|
+
|
|
312
|
+
// Проверка статуса
|
|
313
|
+
console.log('Projects WS:', sdk.projects.isWebSocketConnected());
|
|
314
|
+
console.log('Reasoning WS:', sdk.reasoning.isWebSocketConnected());
|
|
315
|
+
console.log('Chat WS:', sdk.chat.isWebSocketConnected());
|
|
122
316
|
```
|
|
123
317
|
|
|
124
|
-
|
|
318
|
+
### Диагностика WebSocket
|
|
125
319
|
|
|
126
|
-
|
|
320
|
+
```javascript
|
|
321
|
+
// Полная диагностика WebSocket
|
|
322
|
+
const wsStatus = await sdk.diagnoseWebSocket();
|
|
323
|
+
console.log('WebSocket Diagnostics:', wsStatus);
|
|
324
|
+
|
|
325
|
+
/* Пример ответа:
|
|
326
|
+
{
|
|
327
|
+
projects: { connected: true, url: 'ws://localhost:3000/projects' },
|
|
328
|
+
reasoning: { connected: false, url: 'ws://localhost:3000/reasoning' },
|
|
329
|
+
chat: { connected: true, url: 'ws://localhost:3000/chat' }
|
|
330
|
+
}
|
|
331
|
+
*/
|
|
332
|
+
```
|
|
127
333
|
|
|
128
|
-
## Обработка ошибок
|
|
334
|
+
## Обработка ошибок WebSocket
|
|
129
335
|
|
|
130
|
-
|
|
336
|
+
```javascript
|
|
337
|
+
// Обработка ошибок подключения
|
|
338
|
+
try {
|
|
339
|
+
await sdk.projects.connectWebSocket();
|
|
340
|
+
} catch (error) {
|
|
341
|
+
console.error('WebSocket connection failed:', error.message);
|
|
342
|
+
// Fallback к HTTP API
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Обработка разрывов соединения
|
|
346
|
+
sdk.projects.on('disconnect', () => {
|
|
347
|
+
console.log('Projects WebSocket disconnected');
|
|
348
|
+
// Логика переподключения
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
sdk.reasoning.on('error', (error) => {
|
|
352
|
+
console.error('Reasoning WebSocket error:', error);
|
|
353
|
+
});
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## WebSocket URLs
|
|
357
|
+
|
|
358
|
+
| Namespace | URL | Описание |
|
|
359
|
+
|-----------|-----|----------|
|
|
360
|
+
| Projects | `ws://localhost:3000/projects` | События проектов и индексации |
|
|
361
|
+
| Reasoning | `ws://localhost:3000/reasoning` | События AI reasoning |
|
|
362
|
+
| Chat | `ws://localhost:3000/chat` | Потоковый чат и thinking |
|
|
363
|
+
|
|
364
|
+
## Аутентификация
|
|
365
|
+
|
|
366
|
+
WebSocket соединения автоматически используют API ключ из настроек SDK:
|
|
131
367
|
|
|
132
368
|
```javascript
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
websocket: {
|
|
138
|
-
reconnect: true,
|
|
139
|
-
reconnectAttempts: 5,
|
|
140
|
-
reconnectDelay: 3000
|
|
141
|
-
}
|
|
369
|
+
const sdk = CodeSolverSDK.create({
|
|
370
|
+
baseURL: 'http://localhost:3000',
|
|
371
|
+
apiKey: 'dev_sk_test_12345678', // Автоматически используется для WS
|
|
372
|
+
autoConnect: false
|
|
142
373
|
});
|
|
374
|
+
```
|
|
143
375
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
376
|
+
## Производительность
|
|
377
|
+
|
|
378
|
+
### Рекомендации
|
|
379
|
+
|
|
380
|
+
1. **Используйте autoConnect: false** для контроля подключений
|
|
381
|
+
2. **Подключайтесь только к нужным namespace** для экономии ресурсов
|
|
382
|
+
3. **Отключайтесь после завершения** операций
|
|
383
|
+
4. **Используйте диагностику** для мониторинга состояния
|
|
384
|
+
|
|
385
|
+
### Пример оптимизированного использования
|
|
150
386
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
387
|
+
```javascript
|
|
388
|
+
async function optimizedWorkflow(projectId, query) {
|
|
389
|
+
const sdk = CodeSolverSDK.create({
|
|
390
|
+
baseURL: 'http://localhost:3000',
|
|
391
|
+
apiKey: 'dev_sk_test_12345678',
|
|
392
|
+
autoConnect: false
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
try {
|
|
396
|
+
// 1. Индексация проекта
|
|
397
|
+
await sdk.projects.connectWebSocket();
|
|
398
|
+
await sdk.projects.startIndexing(projectId);
|
|
399
|
+
|
|
400
|
+
await new Promise(resolve => {
|
|
401
|
+
sdk.projects.onIndexingComplete(() => {
|
|
402
|
+
sdk.projects.disconnectWebSocket();
|
|
403
|
+
resolve();
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
// 2. Reasoning
|
|
408
|
+
await sdk.reasoning.connectWebSocket();
|
|
409
|
+
const reasoning = await sdk.reasoning.create({ projectId, query });
|
|
410
|
+
await sdk.reasoning.start(reasoning.id);
|
|
411
|
+
|
|
412
|
+
await new Promise(resolve => {
|
|
413
|
+
sdk.reasoning.onReasoningCompleted(() => {
|
|
414
|
+
sdk.reasoning.disconnectWebSocket();
|
|
415
|
+
resolve();
|
|
416
|
+
});
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
console.log('✅ Workflow completed');
|
|
420
|
+
|
|
421
|
+
} catch (error) {
|
|
422
|
+
console.error('❌ Workflow failed:', error);
|
|
423
|
+
}
|
|
155
424
|
}
|
|
156
425
|
```
|
|
157
426
|
|
|
158
|
-
|
|
427
|
+
---
|
|
159
428
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
| `thinking_delta` | Обновление мышления AI |
|
|
164
|
-
| `text_delta` | Часть текстового ответа |
|
|
165
|
-
| `message_stop` | Конец сообщения |
|
|
166
|
-
| `indexing_progress` | Прогресс индексации |
|
|
167
|
-
| `indexing_complete` | Завершение индексации |
|
|
168
|
-
| `error` | Уведомление об ошибке |
|
|
429
|
+
**Документация WebSocket API для SDK v2.5.0**
|
|
430
|
+
**Совместимость:** AI Solver Backend v1.0.0
|
|
431
|
+
**Обновлено:** 28 июня 2025
|