solver-sdk 3.1.1 → 3.1.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/README.md +93 -121
- package/dist/cjs/code-solver-sdk.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/code-solver-sdk.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/package.json +2 -3
- package/docs/AUTHENTICATION.md +0 -316
- package/docs/ERROR_HANDLING.md +0 -613
- package/docs/README.md +0 -53
- package/docs/VSCODE_INTEGRATION.md +0 -269
- package/docs/features/THINKING.md +0 -324
- package/docs/indexing/INDEXING.md +0 -759
package/docs/ERROR_HANDLING.md
DELETED
|
@@ -1,613 +0,0 @@
|
|
|
1
|
-
# Обработка ошибок v2.5.0
|
|
2
|
-
|
|
3
|
-
Полная документация по обработке ошибок в AI Solver SDK v2.5.0.
|
|
4
|
-
|
|
5
|
-
## Философия "Fail Fast"
|
|
6
|
-
|
|
7
|
-
SDK v2.5.0 следует принципу "fail fast" - ошибки возникают сразу при обнаружении проблем, без тихих fallback'ов.
|
|
8
|
-
|
|
9
|
-
## Обработка HTTP ошибок
|
|
10
|
-
|
|
11
|
-
### Использование try/catch
|
|
12
|
-
|
|
13
|
-
Рекомендуемый способ обработки ошибок:
|
|
14
|
-
|
|
15
|
-
```javascript
|
|
16
|
-
import { CodeSolverSDK } from '@ai-solver/sdk';
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
const projects = await sdk.projects.getAll();
|
|
20
|
-
console.log('✅ Получено проектов:', projects.total);
|
|
21
|
-
} catch (error) {
|
|
22
|
-
console.error('❌ Ошибка:', error.message);
|
|
23
|
-
|
|
24
|
-
// Проверка типа ошибки
|
|
25
|
-
if (error.status === 401) {
|
|
26
|
-
console.error('🔑 Ошибка аутентификации');
|
|
27
|
-
} else if (error.status === 404) {
|
|
28
|
-
console.error('🔍 Ресурс не найден');
|
|
29
|
-
} else if (error.code === 'NETWORK_ERROR') {
|
|
30
|
-
console.error('🌐 Проблема сети');
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Структура ошибок
|
|
36
|
-
|
|
37
|
-
SDK v2.5.0 возвращает стандартизированные ошибки:
|
|
38
|
-
|
|
39
|
-
```javascript
|
|
40
|
-
// Пример объекта ошибки
|
|
41
|
-
{
|
|
42
|
-
name: 'APIError',
|
|
43
|
-
message: 'Project not found',
|
|
44
|
-
status: 404,
|
|
45
|
-
code: 'PROJECT_NOT_FOUND',
|
|
46
|
-
endpoint: '/api/v1/projects/123',
|
|
47
|
-
method: 'GET',
|
|
48
|
-
timestamp: '2025-06-28T12:00:00Z',
|
|
49
|
-
requestId: 'req_abc123'
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Обработка WebSocket ошибок
|
|
54
|
-
|
|
55
|
-
### Обработка событий ошибок
|
|
56
|
-
|
|
57
|
-
```javascript
|
|
58
|
-
// Projects WebSocket ошибки
|
|
59
|
-
await sdk.projects.connectWebSocket();
|
|
60
|
-
|
|
61
|
-
sdk.projects.onIndexingError((error) => {
|
|
62
|
-
console.error('❌ Indexing error:', error.message);
|
|
63
|
-
console.error('📁 Project:', error.projectId);
|
|
64
|
-
console.error('📄 File:', error.fileName);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
// Reasoning WebSocket ошибки
|
|
68
|
-
await sdk.reasoning.connectWebSocket();
|
|
69
|
-
|
|
70
|
-
sdk.reasoning.onReasoningError((error) => {
|
|
71
|
-
console.error('❌ Reasoning error:', error.message);
|
|
72
|
-
console.error('🆔 Reasoning ID:', error.reasoningId);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// Chat WebSocket ошибки
|
|
76
|
-
await sdk.chat.connectWebSocket();
|
|
77
|
-
|
|
78
|
-
sdk.chat.on('error', (error) => {
|
|
79
|
-
console.error('❌ Chat error:', error.message);
|
|
80
|
-
});
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Обработка ошибок подключения
|
|
84
|
-
|
|
85
|
-
```javascript
|
|
86
|
-
try {
|
|
87
|
-
await sdk.projects.connectWebSocket();
|
|
88
|
-
console.log('✅ Projects WebSocket connected');
|
|
89
|
-
} catch (error) {
|
|
90
|
-
console.error('❌ WebSocket connection failed:', error.message);
|
|
91
|
-
|
|
92
|
-
if (error.code === 'WS_CONNECTION_REFUSED') {
|
|
93
|
-
console.error('🔌 Server unavailable');
|
|
94
|
-
} else if (error.code === 'WS_AUTH_FAILED') {
|
|
95
|
-
console.error('🔑 Authentication failed');
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Диагностика ошибок
|
|
101
|
-
|
|
102
|
-
### API диагностика
|
|
103
|
-
|
|
104
|
-
```javascript
|
|
105
|
-
// Полная диагностика всех endpoints
|
|
106
|
-
const diagnostics = await sdk.diagnoseAPI();
|
|
107
|
-
console.log('📊 API Diagnostics:', diagnostics);
|
|
108
|
-
|
|
109
|
-
/* Пример результата:
|
|
110
|
-
{
|
|
111
|
-
'/api/v1/projects': {
|
|
112
|
-
status: 200,
|
|
113
|
-
success: true,
|
|
114
|
-
responseTime: 120
|
|
115
|
-
},
|
|
116
|
-
'/api/v1/reasoning': {
|
|
117
|
-
status: 401,
|
|
118
|
-
success: false,
|
|
119
|
-
error: 'Invalid API key'
|
|
120
|
-
},
|
|
121
|
-
'/api/v1/chat': {
|
|
122
|
-
status: 500,
|
|
123
|
-
success: false,
|
|
124
|
-
error: 'Internal server error'
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
*/
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### WebSocket диагностика
|
|
131
|
-
|
|
132
|
-
```javascript
|
|
133
|
-
// Диагностика WebSocket соединений
|
|
134
|
-
const wsStatus = await sdk.diagnoseWebSocket();
|
|
135
|
-
console.log('🔌 WebSocket status:', wsStatus);
|
|
136
|
-
|
|
137
|
-
/* Пример результата:
|
|
138
|
-
{
|
|
139
|
-
projects: {
|
|
140
|
-
connected: true,
|
|
141
|
-
url: 'ws://localhost:3000/projects'
|
|
142
|
-
},
|
|
143
|
-
reasoning: {
|
|
144
|
-
connected: false,
|
|
145
|
-
error: 'Connection timeout'
|
|
146
|
-
},
|
|
147
|
-
chat: {
|
|
148
|
-
connected: true,
|
|
149
|
-
latency: 45
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
*/
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Типы ошибок
|
|
156
|
-
|
|
157
|
-
### HTTP ошибки
|
|
158
|
-
|
|
159
|
-
#### 400 Bad Request
|
|
160
|
-
|
|
161
|
-
```javascript
|
|
162
|
-
{
|
|
163
|
-
status: 400,
|
|
164
|
-
code: 'VALIDATION_ERROR',
|
|
165
|
-
message: 'Invalid project data',
|
|
166
|
-
details: {
|
|
167
|
-
field: 'name',
|
|
168
|
-
issue: 'Name is required'
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Решение:** Проверьте корректность входных данных.
|
|
174
|
-
|
|
175
|
-
#### 401 Unauthorized
|
|
176
|
-
|
|
177
|
-
```javascript
|
|
178
|
-
{
|
|
179
|
-
status: 401,
|
|
180
|
-
code: 'AUTH_INVALID_KEY',
|
|
181
|
-
message: 'Invalid or missing API key'
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**Решение:** Проверьте API ключ в настройках SDK.
|
|
186
|
-
|
|
187
|
-
#### 403 Forbidden
|
|
188
|
-
|
|
189
|
-
```javascript
|
|
190
|
-
{
|
|
191
|
-
status: 403,
|
|
192
|
-
code: 'AUTH_INSUFFICIENT_SCOPE',
|
|
193
|
-
message: 'Insufficient permissions',
|
|
194
|
-
required_scope: 'projects:write'
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
**Решение:** Используйте API ключ с необходимыми правами.
|
|
199
|
-
|
|
200
|
-
#### 404 Not Found
|
|
201
|
-
|
|
202
|
-
```javascript
|
|
203
|
-
{
|
|
204
|
-
status: 404,
|
|
205
|
-
code: 'PROJECT_NOT_FOUND',
|
|
206
|
-
message: 'Project with ID "123" not found'
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Решение:** Проверьте правильность ID ресурса.
|
|
211
|
-
|
|
212
|
-
#### 429 Too Many Requests
|
|
213
|
-
|
|
214
|
-
```javascript
|
|
215
|
-
{
|
|
216
|
-
status: 429,
|
|
217
|
-
code: 'RATE_LIMIT_EXCEEDED',
|
|
218
|
-
message: 'Rate limit exceeded',
|
|
219
|
-
retry_after: 60
|
|
220
|
-
}
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
**Решение:** Подождите указанное время или используйте Production ключ.
|
|
224
|
-
|
|
225
|
-
#### 500 Internal Server Error
|
|
226
|
-
|
|
227
|
-
```javascript
|
|
228
|
-
{
|
|
229
|
-
status: 500,
|
|
230
|
-
code: 'INTERNAL_ERROR',
|
|
231
|
-
message: 'Internal server error',
|
|
232
|
-
incident_id: 'inc_abc123'
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
**Решение:** Сообщите о проблеме с указанием incident_id.
|
|
237
|
-
|
|
238
|
-
### WebSocket ошибки
|
|
239
|
-
|
|
240
|
-
#### WS_CONNECTION_REFUSED
|
|
241
|
-
|
|
242
|
-
```javascript
|
|
243
|
-
{
|
|
244
|
-
code: 'WS_CONNECTION_REFUSED',
|
|
245
|
-
message: 'WebSocket connection refused',
|
|
246
|
-
namespace: 'projects'
|
|
247
|
-
}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
**Решение:** Проверьте доступность сервера.
|
|
251
|
-
|
|
252
|
-
#### WS_AUTH_FAILED
|
|
253
|
-
|
|
254
|
-
```javascript
|
|
255
|
-
{
|
|
256
|
-
code: 'WS_AUTH_FAILED',
|
|
257
|
-
message: 'WebSocket authentication failed',
|
|
258
|
-
namespace: 'reasoning'
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**Решение:** Проверьте API ключ.
|
|
263
|
-
|
|
264
|
-
#### WS_TIMEOUT
|
|
265
|
-
|
|
266
|
-
```javascript
|
|
267
|
-
{
|
|
268
|
-
code: 'WS_TIMEOUT',
|
|
269
|
-
message: 'WebSocket connection timeout',
|
|
270
|
-
timeout: 30000
|
|
271
|
-
}
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
**Решение:** Увеличьте timeout или проверьте сеть.
|
|
275
|
-
|
|
276
|
-
### Network ошибки
|
|
277
|
-
|
|
278
|
-
#### NETWORK_ERROR
|
|
279
|
-
|
|
280
|
-
```javascript
|
|
281
|
-
{
|
|
282
|
-
code: 'NETWORK_ERROR',
|
|
283
|
-
message: 'Network request failed',
|
|
284
|
-
cause: 'ECONNREFUSED'
|
|
285
|
-
}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Решение:** Проверьте подключение к интернету и доступность сервера.
|
|
289
|
-
|
|
290
|
-
#### TIMEOUT_ERROR
|
|
291
|
-
|
|
292
|
-
```javascript
|
|
293
|
-
{
|
|
294
|
-
code: 'TIMEOUT_ERROR',
|
|
295
|
-
message: 'Request timeout after 30000ms',
|
|
296
|
-
timeout: 30000
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
**Решение:** Увеличьте timeout в настройках SDK.
|
|
301
|
-
|
|
302
|
-
## Стратегии обработки ошибок
|
|
303
|
-
|
|
304
|
-
### Retry стратегия
|
|
305
|
-
|
|
306
|
-
```javascript
|
|
307
|
-
async function retryableRequest(operation, maxRetries = 3) {
|
|
308
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
309
|
-
try {
|
|
310
|
-
return await operation();
|
|
311
|
-
} catch (error) {
|
|
312
|
-
console.warn(`⚠️ Attempt ${attempt} failed:`, error.message);
|
|
313
|
-
|
|
314
|
-
// Не повторяем для клиентских ошибок
|
|
315
|
-
if (error.status >= 400 && error.status < 500) {
|
|
316
|
-
throw error;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Последняя попытка
|
|
320
|
-
if (attempt === maxRetries) {
|
|
321
|
-
throw error;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Экспоненциальная задержка
|
|
325
|
-
const delay = Math.pow(2, attempt) * 1000;
|
|
326
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
// Использование
|
|
332
|
-
try {
|
|
333
|
-
const projects = await retryableRequest(() => sdk.projects.getAll());
|
|
334
|
-
} catch (error) {
|
|
335
|
-
console.error('❌ All retries failed:', error.message);
|
|
336
|
-
}
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Circuit Breaker
|
|
340
|
-
|
|
341
|
-
```javascript
|
|
342
|
-
class CircuitBreaker {
|
|
343
|
-
constructor(threshold = 5, timeout = 60000) {
|
|
344
|
-
this.threshold = threshold;
|
|
345
|
-
this.timeout = timeout;
|
|
346
|
-
this.failures = 0;
|
|
347
|
-
this.state = 'CLOSED'; // CLOSED, OPEN, HALF_OPEN
|
|
348
|
-
this.nextAttempt = Date.now();
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
async execute(operation) {
|
|
352
|
-
if (this.state === 'OPEN') {
|
|
353
|
-
if (Date.now() < this.nextAttempt) {
|
|
354
|
-
throw new Error('Circuit breaker is OPEN');
|
|
355
|
-
}
|
|
356
|
-
this.state = 'HALF_OPEN';
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
try {
|
|
360
|
-
const result = await operation();
|
|
361
|
-
this.onSuccess();
|
|
362
|
-
return result;
|
|
363
|
-
} catch (error) {
|
|
364
|
-
this.onFailure();
|
|
365
|
-
throw error;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
onSuccess() {
|
|
370
|
-
this.failures = 0;
|
|
371
|
-
this.state = 'CLOSED';
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
onFailure() {
|
|
375
|
-
this.failures++;
|
|
376
|
-
if (this.failures >= this.threshold) {
|
|
377
|
-
this.state = 'OPEN';
|
|
378
|
-
this.nextAttempt = Date.now() + this.timeout;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// Использование
|
|
384
|
-
const breaker = new CircuitBreaker();
|
|
385
|
-
|
|
386
|
-
try {
|
|
387
|
-
const result = await breaker.execute(() => sdk.chat.send(messages));
|
|
388
|
-
} catch (error) {
|
|
389
|
-
console.error('❌ Circuit breaker error:', error.message);
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### Graceful degradation
|
|
394
|
-
|
|
395
|
-
```javascript
|
|
396
|
-
async function robustProjectCreation(projectData) {
|
|
397
|
-
try {
|
|
398
|
-
// Основной путь
|
|
399
|
-
const project = await sdk.projects.create(projectData);
|
|
400
|
-
console.log('✅ Project created:', project.id);
|
|
401
|
-
|
|
402
|
-
// Запуск индексации
|
|
403
|
-
try {
|
|
404
|
-
await sdk.projects.startIndexing(project.id);
|
|
405
|
-
console.log('✅ Indexing started');
|
|
406
|
-
} catch (indexError) {
|
|
407
|
-
console.warn('⚠️ Indexing failed, but project created:', indexError.message);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
return project;
|
|
411
|
-
|
|
412
|
-
} catch (error) {
|
|
413
|
-
console.error('❌ Project creation failed:', error.message);
|
|
414
|
-
|
|
415
|
-
// Fallback: сохраняем локально
|
|
416
|
-
const localProject = {
|
|
417
|
-
id: `local_${Date.now()}`,
|
|
418
|
-
name: projectData.name,
|
|
419
|
-
path: projectData.path,
|
|
420
|
-
local: true
|
|
421
|
-
};
|
|
422
|
-
|
|
423
|
-
localStorage.setItem(`project_${localProject.id}`, JSON.stringify(localProject));
|
|
424
|
-
console.log('💾 Project saved locally:', localProject.id);
|
|
425
|
-
|
|
426
|
-
return localProject;
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
## Мониторинг ошибок
|
|
432
|
-
|
|
433
|
-
### Логирование ошибок
|
|
434
|
-
|
|
435
|
-
```javascript
|
|
436
|
-
function logError(error, context = {}) {
|
|
437
|
-
const errorLog = {
|
|
438
|
-
timestamp: new Date().toISOString(),
|
|
439
|
-
error: {
|
|
440
|
-
name: error.name,
|
|
441
|
-
message: error.message,
|
|
442
|
-
status: error.status,
|
|
443
|
-
code: error.code,
|
|
444
|
-
stack: error.stack
|
|
445
|
-
},
|
|
446
|
-
context: {
|
|
447
|
-
...context,
|
|
448
|
-
userAgent: navigator.userAgent,
|
|
449
|
-
url: window.location.href,
|
|
450
|
-
userId: getCurrentUserId()
|
|
451
|
-
}
|
|
452
|
-
};
|
|
453
|
-
|
|
454
|
-
// Отправка в систему мониторинга
|
|
455
|
-
sendToMonitoring(errorLog);
|
|
456
|
-
|
|
457
|
-
// Локальное логирование
|
|
458
|
-
console.error('🚨 Error logged:', errorLog);
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
// Использование
|
|
462
|
-
try {
|
|
463
|
-
await sdk.reasoning.start(reasoningId);
|
|
464
|
-
} catch (error) {
|
|
465
|
-
logError(error, {
|
|
466
|
-
operation: 'reasoning_start',
|
|
467
|
-
reasoningId: reasoningId,
|
|
468
|
-
projectId: projectId
|
|
469
|
-
});
|
|
470
|
-
}
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### Метрики ошибок
|
|
474
|
-
|
|
475
|
-
```javascript
|
|
476
|
-
class ErrorMetrics {
|
|
477
|
-
constructor() {
|
|
478
|
-
this.errors = new Map();
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
record(error) {
|
|
482
|
-
const key = `${error.code || 'UNKNOWN'}_${error.status || 0}`;
|
|
483
|
-
const count = this.errors.get(key) || 0;
|
|
484
|
-
this.errors.set(key, count + 1);
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
getReport() {
|
|
488
|
-
const report = Array.from(this.errors.entries())
|
|
489
|
-
.map(([error, count]) => ({ error, count }))
|
|
490
|
-
.sort((a, b) => b.count - a.count);
|
|
491
|
-
|
|
492
|
-
return {
|
|
493
|
-
totalErrors: Array.from(this.errors.values()).reduce((a, b) => a + b, 0),
|
|
494
|
-
topErrors: report.slice(0, 5),
|
|
495
|
-
allErrors: report
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
// Глобальные метрики
|
|
501
|
-
const errorMetrics = new ErrorMetrics();
|
|
502
|
-
|
|
503
|
-
// Автоматическая регистрация ошибок
|
|
504
|
-
window.addEventListener('unhandledrejection', (event) => {
|
|
505
|
-
errorMetrics.record(event.reason);
|
|
506
|
-
});
|
|
507
|
-
```
|
|
508
|
-
|
|
509
|
-
## Пример комплексной обработки
|
|
510
|
-
|
|
511
|
-
```javascript
|
|
512
|
-
async function initializeAIWorkflow(projectPath, query) {
|
|
513
|
-
const sdk = CodeSolverSDK.create({
|
|
514
|
-
baseURL: 'http://localhost:3000',
|
|
515
|
-
apiKey: process.env.AI_SOLVER_API_KEY,
|
|
516
|
-
autoConnect: false
|
|
517
|
-
});
|
|
518
|
-
|
|
519
|
-
try {
|
|
520
|
-
// 1. Диагностика API
|
|
521
|
-
console.log('🔍 Diagnosing API...');
|
|
522
|
-
const apiStatus = await sdk.diagnoseAPI();
|
|
523
|
-
|
|
524
|
-
const healthyEndpoints = Object.entries(apiStatus)
|
|
525
|
-
.filter(([_, status]) => status.success)
|
|
526
|
-
.map(([endpoint]) => endpoint);
|
|
527
|
-
|
|
528
|
-
if (healthyEndpoints.length === 0) {
|
|
529
|
-
throw new Error('No healthy endpoints available');
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
console.log('✅ Healthy endpoints:', healthyEndpoints);
|
|
533
|
-
|
|
534
|
-
// 2. Создание проекта
|
|
535
|
-
console.log('📁 Creating project...');
|
|
536
|
-
const project = await retryableRequest(() =>
|
|
537
|
-
sdk.projects.create({
|
|
538
|
-
name: 'AI Analysis Project',
|
|
539
|
-
path: projectPath
|
|
540
|
-
})
|
|
541
|
-
);
|
|
542
|
-
|
|
543
|
-
// 3. Индексация с WebSocket
|
|
544
|
-
console.log('📊 Starting indexing...');
|
|
545
|
-
await sdk.projects.connectWebSocket();
|
|
546
|
-
|
|
547
|
-
let indexingComplete = false;
|
|
548
|
-
sdk.projects.onIndexingComplete(() => {
|
|
549
|
-
indexingComplete = true;
|
|
550
|
-
console.log('✅ Indexing completed');
|
|
551
|
-
sdk.projects.disconnectWebSocket();
|
|
552
|
-
});
|
|
553
|
-
|
|
554
|
-
sdk.projects.onIndexingError((error) => {
|
|
555
|
-
console.error('❌ Indexing failed:', error.message);
|
|
556
|
-
sdk.projects.disconnectWebSocket();
|
|
557
|
-
});
|
|
558
|
-
|
|
559
|
-
await sdk.projects.startIndexing(project.id);
|
|
560
|
-
|
|
561
|
-
// Ожидание завершения индексации
|
|
562
|
-
while (!indexingComplete) {
|
|
563
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
// 4. AI Reasoning
|
|
567
|
-
console.log('🧠 Starting reasoning...');
|
|
568
|
-
await sdk.reasoning.connectWebSocket();
|
|
569
|
-
|
|
570
|
-
const reasoning = await sdk.reasoning.create({
|
|
571
|
-
projectId: project.id,
|
|
572
|
-
query: query
|
|
573
|
-
});
|
|
574
|
-
|
|
575
|
-
await sdk.reasoning.start(reasoning.id);
|
|
576
|
-
|
|
577
|
-
return {
|
|
578
|
-
project,
|
|
579
|
-
reasoning,
|
|
580
|
-
success: true
|
|
581
|
-
};
|
|
582
|
-
|
|
583
|
-
} catch (error) {
|
|
584
|
-
console.error('❌ Workflow failed:', error.message);
|
|
585
|
-
|
|
586
|
-
// Очистка ресурсов
|
|
587
|
-
try {
|
|
588
|
-
await sdk.projects.disconnectWebSocket();
|
|
589
|
-
await sdk.reasoning.disconnectWebSocket();
|
|
590
|
-
} catch (cleanupError) {
|
|
591
|
-
console.warn('⚠️ Cleanup warning:', cleanupError.message);
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
// Регистрация ошибки
|
|
595
|
-
logError(error, {
|
|
596
|
-
workflow: 'ai_analysis',
|
|
597
|
-
projectPath,
|
|
598
|
-
query
|
|
599
|
-
});
|
|
600
|
-
|
|
601
|
-
return {
|
|
602
|
-
error: error.message,
|
|
603
|
-
success: false
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
---
|
|
610
|
-
|
|
611
|
-
**Документация обработки ошибок для SDK v2.5.0**
|
|
612
|
-
**Принцип:** Fail Fast, явные ошибки, надежная диагностика
|
|
613
|
-
**Обновлено:** 28 июня 2025
|
package/docs/README.md
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Code Solver SDK - Документация
|
|
2
|
-
|
|
3
|
-
> **JavaScript/TypeScript SDK для VS Code Extensions**
|
|
4
|
-
> Подключение к AI бэкенду для индексации, поиска и работы с кодом
|
|
5
|
-
|
|
6
|
-
## 📚 Основная документация
|
|
7
|
-
|
|
8
|
-
### [📊 Индексация проектов](indexing/INDEXING.md)
|
|
9
|
-
**Подробное руководство по индексации:**
|
|
10
|
-
- Создание и поиск проектов
|
|
11
|
-
- Запуск и мониторинг индексации
|
|
12
|
-
- Workflow с обработкой ошибок
|
|
13
|
-
- Практические примеры
|
|
14
|
-
|
|
15
|
-
### [🔧 Интеграция с VS Code](VSCODE_INTEGRATION.md)
|
|
16
|
-
**Готовые примеры для Extensions:**
|
|
17
|
-
- Базовая настройка SDK
|
|
18
|
-
- Индексация с прогресс-баром
|
|
19
|
-
- Поиск функций с навигацией
|
|
20
|
-
- AI Chat интеграция
|
|
21
|
-
- Конфигурация package.json
|
|
22
|
-
|
|
23
|
-
### [🚨 Обработка ошибок](ERROR_HANDLING.md)
|
|
24
|
-
**Как правильно обрабатывать ошибки:**
|
|
25
|
-
- Сетевые ошибки
|
|
26
|
-
- Ошибки индексации
|
|
27
|
-
- Retry логика
|
|
28
|
-
- Graceful degradation
|
|
29
|
-
|
|
30
|
-
## 🚀 Быстрый старт
|
|
31
|
-
|
|
32
|
-
```javascript
|
|
33
|
-
import { CodeSolverSDK } from 'solver-sdk';
|
|
34
|
-
|
|
35
|
-
// 1. Инициализация
|
|
36
|
-
const sdk = await CodeSolverSDK.create({
|
|
37
|
-
baseURL: 'http://localhost:3000'
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// 2. Создание проекта
|
|
41
|
-
const project = await sdk.projects.findOrCreateProject('/path/to/project', 'My Project');
|
|
42
|
-
|
|
43
|
-
// 3. Индексация
|
|
44
|
-
await sdk.projects.startIndexing(project.id);
|
|
45
|
-
|
|
46
|
-
// 4. Поиск функций
|
|
47
|
-
const results = await sdk.search.searchFunctions(project.id, {
|
|
48
|
-
query: 'user authentication',
|
|
49
|
-
limit: 10
|
|
50
|
-
});
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
SDK готов к продакшену! ��
|