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
|
@@ -1,231 +1,436 @@
|
|
|
1
|
-
# Индексация проектов
|
|
1
|
+
# Индексация проектов v2.5.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Руководство по индексации проектов в AI Solver SDK v2.5.0.
|
|
4
4
|
|
|
5
5
|
## Инициализация SDK
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```javascript
|
|
8
|
+
import { CodeSolverSDK } from '@ai-solver/sdk';
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
baseURL: 'https://api.example.com',
|
|
14
|
-
apiKey: 'ваш_api_ключ', // API ключ обязателен для авторизации WebSocket соединений
|
|
10
|
+
const sdk = CodeSolverSDK.create({
|
|
11
|
+
baseURL: 'http://localhost:3000',
|
|
12
|
+
apiKey: 'dev_sk_test_12345678',
|
|
13
|
+
autoConnect: false
|
|
15
14
|
});
|
|
16
15
|
```
|
|
17
16
|
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
### Запуск индексации
|
|
21
|
-
|
|
22
|
-
Для запуска индексации проекта используйте метод `indexProject` или его псевдоним `startIndexing`:
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
// Полная индексация проекта
|
|
26
|
-
await sdk.projects.indexProject('идентификатор_проекта', {
|
|
27
|
-
indexingMode: 'full'
|
|
28
|
-
});
|
|
17
|
+
## Основной workflow индексации
|
|
29
18
|
|
|
30
|
-
|
|
31
|
-
await sdk.projects.indexProject('идентификатор_проекта', {
|
|
32
|
-
indexingMode: 'incremental'
|
|
33
|
-
});
|
|
19
|
+
### 1. Создание проекта
|
|
34
20
|
|
|
35
|
-
|
|
36
|
-
await sdk.projects.
|
|
37
|
-
|
|
21
|
+
```javascript
|
|
22
|
+
const project = await sdk.projects.create({
|
|
23
|
+
name: 'My Code Project',
|
|
24
|
+
path: '/path/to/project',
|
|
25
|
+
description: 'Project for AI analysis'
|
|
38
26
|
});
|
|
39
27
|
|
|
40
|
-
|
|
41
|
-
await sdk.projects.startIndexing('идентификатор_проекта', {
|
|
42
|
-
indexingMode: 'auto'
|
|
43
|
-
});
|
|
28
|
+
console.log('Project created:', project.id);
|
|
44
29
|
```
|
|
45
30
|
|
|
46
|
-
###
|
|
31
|
+
### 2. Запуск индексации
|
|
32
|
+
|
|
33
|
+
```javascript
|
|
34
|
+
// Запуск индексации проекта
|
|
35
|
+
await sdk.projects.startIndexing(project.id);
|
|
47
36
|
|
|
48
|
-
|
|
37
|
+
console.log('Indexing started for project:', project.id);
|
|
38
|
+
```
|
|
49
39
|
|
|
50
|
-
|
|
51
|
-
- **incremental** - индексация только изменившихся файлов (более быстрая)
|
|
52
|
-
- **auto** - автоматический выбор режима на основе метаданных проекта
|
|
40
|
+
### 3. Проверка статуса
|
|
53
41
|
|
|
54
|
-
|
|
42
|
+
```javascript
|
|
43
|
+
// Получение статуса индексации
|
|
44
|
+
const status = await sdk.projects.getIndexingStatus(project.id);
|
|
55
45
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
});
|
|
46
|
+
console.log('Indexing status:', status.indexStatus);
|
|
47
|
+
console.log('Progress:', status.indexingProgress);
|
|
48
|
+
console.log('Files indexed:', status.filesIndexed);
|
|
60
49
|
```
|
|
61
50
|
|
|
62
|
-
|
|
51
|
+
## WebSocket мониторинг индексации
|
|
63
52
|
|
|
64
|
-
|
|
53
|
+
### Подключение и события
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// Подключение к projects WebSocket
|
|
57
|
+
await sdk.projects.connectWebSocket();
|
|
65
58
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
// Отслеживание прогресса
|
|
60
|
+
sdk.projects.onIndexingProgress((data) => {
|
|
61
|
+
console.log(`Progress: ${data.percentage}%`);
|
|
62
|
+
console.log(`Files: ${data.processedFiles}/${data.totalFiles}`);
|
|
63
|
+
console.log(`Current file: ${data.currentFile}`);
|
|
64
|
+
console.log(`Speed: ${data.filesPerSecond} files/sec`);
|
|
71
65
|
});
|
|
72
|
-
```
|
|
73
66
|
|
|
74
|
-
|
|
67
|
+
// Завершение индексации
|
|
68
|
+
sdk.projects.onIndexingComplete((data) => {
|
|
69
|
+
console.log('✅ Indexing completed!');
|
|
70
|
+
console.log('Project ID:', data.projectId);
|
|
71
|
+
console.log('Total files:', data.totalFiles);
|
|
72
|
+
console.log('Duration:', data.duration + 'ms');
|
|
73
|
+
console.log('Success:', data.success);
|
|
74
|
+
|
|
75
|
+
// Отключение WebSocket
|
|
76
|
+
sdk.projects.disconnectWebSocket();
|
|
77
|
+
});
|
|
75
78
|
|
|
76
|
-
|
|
79
|
+
// Ошибки индексации
|
|
80
|
+
sdk.projects.onIndexingError((error) => {
|
|
81
|
+
console.error('❌ Indexing error:', error.message);
|
|
82
|
+
console.error('Project:', error.projectId);
|
|
83
|
+
console.error('File:', error.fileName);
|
|
84
|
+
|
|
85
|
+
sdk.projects.disconnectWebSocket();
|
|
86
|
+
});
|
|
87
|
+
```
|
|
77
88
|
|
|
78
|
-
|
|
79
|
-
// Индексация файла с чтением его содержимого с диска
|
|
80
|
-
await sdk.projects.updateFileIndex(
|
|
81
|
-
'идентификатор_проекта',
|
|
82
|
-
'путь/к/файлу.js'
|
|
83
|
-
);
|
|
89
|
+
## Полный пример с обработкой ошибок
|
|
84
90
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
```javascript
|
|
92
|
+
async function indexProjectWithMonitoring(projectPath, projectName) {
|
|
93
|
+
const sdk = CodeSolverSDK.create({
|
|
94
|
+
baseURL: 'http://localhost:3000',
|
|
95
|
+
apiKey: process.env.AI_SOLVER_API_KEY,
|
|
96
|
+
autoConnect: false
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
console.log('🔍 Creating project...');
|
|
101
|
+
|
|
102
|
+
// 1. Создание проекта
|
|
103
|
+
const project = await sdk.projects.create({
|
|
104
|
+
name: projectName,
|
|
105
|
+
path: projectPath,
|
|
106
|
+
description: `AI analysis project for ${projectName}`
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
console.log('✅ Project created:', project.id);
|
|
110
|
+
|
|
111
|
+
// 2. Подключение к WebSocket для мониторинга
|
|
112
|
+
console.log('🔌 Connecting to WebSocket...');
|
|
113
|
+
await sdk.projects.connectWebSocket();
|
|
114
|
+
|
|
115
|
+
// 3. Настройка обработчиков событий
|
|
116
|
+
let indexingComplete = false;
|
|
117
|
+
|
|
118
|
+
sdk.projects.onIndexingProgress((data) => {
|
|
119
|
+
const progress = Math.round(data.percentage);
|
|
120
|
+
console.log(`📊 [${progress}%] ${data.currentFile || 'Processing...'}`);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
sdk.projects.onIndexingComplete((data) => {
|
|
124
|
+
console.log('🎉 Indexing completed successfully!');
|
|
125
|
+
console.log(`📈 Statistics:`);
|
|
126
|
+
console.log(` - Total files: ${data.totalFiles}`);
|
|
127
|
+
console.log(` - Duration: ${data.duration}ms`);
|
|
128
|
+
console.log(` - Success: ${data.success}`);
|
|
129
|
+
|
|
130
|
+
indexingComplete = true;
|
|
131
|
+
sdk.projects.disconnectWebSocket();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
sdk.projects.onIndexingError((error) => {
|
|
135
|
+
console.error('💥 Indexing failed:', error.message);
|
|
136
|
+
indexingComplete = true;
|
|
137
|
+
sdk.projects.disconnectWebSocket();
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
// 4. Запуск индексации
|
|
141
|
+
console.log('🚀 Starting indexing...');
|
|
142
|
+
await sdk.projects.startIndexing(project.id);
|
|
143
|
+
|
|
144
|
+
// 5. Ожидание завершения
|
|
145
|
+
while (!indexingComplete) {
|
|
146
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// 6. Проверка финального статуса
|
|
150
|
+
const finalStatus = await sdk.projects.getIndexingStatus(project.id);
|
|
151
|
+
console.log('📋 Final status:', finalStatus);
|
|
152
|
+
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
project: project,
|
|
156
|
+
status: finalStatus
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
} catch (error) {
|
|
160
|
+
console.error('❌ Indexing workflow failed:', error.message);
|
|
161
|
+
|
|
162
|
+
// Очистка ресурсов
|
|
163
|
+
try {
|
|
164
|
+
await sdk.projects.disconnectWebSocket();
|
|
165
|
+
} catch (cleanupError) {
|
|
166
|
+
console.warn('⚠️ Cleanup warning:', cleanupError.message);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
error: error.message
|
|
172
|
+
};
|
|
92
173
|
}
|
|
93
|
-
|
|
174
|
+
}
|
|
94
175
|
|
|
95
|
-
//
|
|
96
|
-
await
|
|
97
|
-
'
|
|
98
|
-
'
|
|
99
|
-
{
|
|
100
|
-
content: 'содержимое файла',
|
|
101
|
-
language: 'typescript', // Явное указание языка
|
|
102
|
-
updateDependencies: true // Обновление зависимостей после индексации
|
|
103
|
-
}
|
|
176
|
+
// Использование
|
|
177
|
+
const result = await indexProjectWithMonitoring(
|
|
178
|
+
'/path/to/my/project',
|
|
179
|
+
'My AI Project'
|
|
104
180
|
);
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Работа с новыми проектами
|
|
108
|
-
|
|
109
|
-
### Создание и индексация проекта
|
|
110
181
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
});
|
|
182
|
+
if (result.success) {
|
|
183
|
+
console.log('🎯 Project ready for AI analysis!');
|
|
184
|
+
} else {
|
|
185
|
+
console.error('💔 Indexing failed:', result.error);
|
|
186
|
+
}
|
|
187
|
+
```
|
|
118
188
|
|
|
119
|
-
|
|
120
|
-
|
|
189
|
+
## API Endpoints для индексации
|
|
190
|
+
|
|
191
|
+
### HTTP API
|
|
192
|
+
|
|
193
|
+
| Endpoint | Method | Описание |
|
|
194
|
+
|----------|--------|----------|
|
|
195
|
+
| `/api/v1/projects` | POST | Создание проекта |
|
|
196
|
+
| `/api/v1/projects/:id` | GET | Получение проекта |
|
|
197
|
+
| `/api/v1/projects` | GET | Список проектов |
|
|
198
|
+
| `/api/v1/projects/:id/index` | POST | Запуск индексации |
|
|
199
|
+
| `/api/v1/projects/:id/index/status` | GET | Статус индексации |
|
|
200
|
+
|
|
201
|
+
### WebSocket Events
|
|
202
|
+
|
|
203
|
+
| Event | Namespace | Описание |
|
|
204
|
+
|-------|-----------|----------|
|
|
205
|
+
| `indexing_progress` | `/projects` | Прогресс индексации |
|
|
206
|
+
| `indexing_complete` | `/projects` | Завершение индексации |
|
|
207
|
+
| `indexing_error` | `/projects` | Ошибка индексации |
|
|
208
|
+
|
|
209
|
+
## Структуры данных
|
|
210
|
+
|
|
211
|
+
### Project Object
|
|
212
|
+
|
|
213
|
+
```javascript
|
|
214
|
+
{
|
|
215
|
+
id: "proj_abc123",
|
|
216
|
+
name: "My Project",
|
|
217
|
+
path: "/path/to/project",
|
|
218
|
+
description: "Project description",
|
|
219
|
+
indexStatus: "completed", // pending, indexing, completed, failed
|
|
220
|
+
indexingProgress: 100,
|
|
221
|
+
filesIndexed: 150,
|
|
222
|
+
lastIndexed: "2025-06-28T12:00:00Z",
|
|
223
|
+
createdAt: "2025-06-28T11:00:00Z",
|
|
224
|
+
updatedAt: "2025-06-28T12:00:00Z"
|
|
225
|
+
}
|
|
121
226
|
```
|
|
122
227
|
|
|
123
|
-
###
|
|
228
|
+
### Indexing Status
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
{
|
|
232
|
+
projectId: "proj_abc123",
|
|
233
|
+
indexStatus: "completed",
|
|
234
|
+
indexingProgress: 100,
|
|
235
|
+
filesIndexed: 150,
|
|
236
|
+
totalFiles: 150,
|
|
237
|
+
lastUpdated: "2025-06-28T12:00:00Z",
|
|
238
|
+
startedAt: "2025-06-28T11:45:00Z",
|
|
239
|
+
completedAt: "2025-06-28T12:00:00Z"
|
|
240
|
+
}
|
|
241
|
+
```
|
|
124
242
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
243
|
+
### Progress Event
|
|
244
|
+
|
|
245
|
+
```javascript
|
|
246
|
+
{
|
|
247
|
+
projectId: "proj_abc123",
|
|
248
|
+
percentage: 75,
|
|
249
|
+
processedFiles: 112,
|
|
250
|
+
totalFiles: 150,
|
|
251
|
+
currentFile: "src/components/App.tsx",
|
|
252
|
+
status: "indexing",
|
|
253
|
+
filesPerSecond: 8.5,
|
|
254
|
+
estimatedTimeRemaining: 4500
|
|
255
|
+
}
|
|
256
|
+
```
|
|
129
257
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
258
|
+
### Complete Event
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
{
|
|
262
|
+
projectId: "proj_abc123",
|
|
263
|
+
totalFiles: 150,
|
|
264
|
+
duration: 18750,
|
|
265
|
+
success: true,
|
|
266
|
+
errors: [],
|
|
267
|
+
statistics: {
|
|
268
|
+
byLanguage: {
|
|
269
|
+
"typescript": 45,
|
|
270
|
+
"javascript": 38,
|
|
271
|
+
"css": 12,
|
|
272
|
+
"html": 8,
|
|
273
|
+
"json": 5,
|
|
274
|
+
"markdown": 2
|
|
275
|
+
},
|
|
276
|
+
totalLines: 12450,
|
|
277
|
+
totalSize: 1024000
|
|
278
|
+
}
|
|
279
|
+
}
|
|
134
280
|
```
|
|
135
281
|
|
|
136
|
-
##
|
|
282
|
+
## Обработка ошибок
|
|
137
283
|
|
|
138
|
-
###
|
|
284
|
+
### Типичные ошибки индексации
|
|
139
285
|
|
|
140
|
-
```
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
286
|
+
```javascript
|
|
287
|
+
// Проект не найден
|
|
288
|
+
{
|
|
289
|
+
status: 404,
|
|
290
|
+
code: 'PROJECT_NOT_FOUND',
|
|
291
|
+
message: 'Project with ID "proj_123" not found'
|
|
292
|
+
}
|
|
147
293
|
|
|
148
|
-
|
|
294
|
+
// Индексация уже запущена
|
|
295
|
+
{
|
|
296
|
+
status: 409,
|
|
297
|
+
code: 'INDEXING_IN_PROGRESS',
|
|
298
|
+
message: 'Indexing is already in progress for this project'
|
|
299
|
+
}
|
|
149
300
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
301
|
+
// Ошибка доступа к файлам
|
|
302
|
+
{
|
|
303
|
+
status: 500,
|
|
304
|
+
code: 'FILESYSTEM_ERROR',
|
|
305
|
+
message: 'Cannot access project files',
|
|
306
|
+
details: {
|
|
307
|
+
path: '/path/to/project',
|
|
308
|
+
error: 'Permission denied'
|
|
309
|
+
}
|
|
310
|
+
}
|
|
153
311
|
```
|
|
154
312
|
|
|
155
|
-
###
|
|
156
|
-
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
|
|
313
|
+
### Стратегия retry
|
|
314
|
+
|
|
315
|
+
```javascript
|
|
316
|
+
async function retryableIndexing(projectId, maxRetries = 3) {
|
|
317
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
318
|
+
try {
|
|
319
|
+
await sdk.projects.startIndexing(projectId);
|
|
320
|
+
console.log('✅ Indexing started successfully');
|
|
321
|
+
return true;
|
|
322
|
+
|
|
323
|
+
} catch (error) {
|
|
324
|
+
console.warn(`⚠️ Attempt ${attempt} failed:`, error.message);
|
|
325
|
+
|
|
326
|
+
// Не повторяем для клиентских ошибок
|
|
327
|
+
if (error.status >= 400 && error.status < 500) {
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Последняя попытка
|
|
332
|
+
if (attempt === maxRetries) {
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Задержка между попытками
|
|
337
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
338
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
160
342
|
```
|
|
161
343
|
|
|
162
|
-
##
|
|
344
|
+
## Диагностика проблем
|
|
163
345
|
|
|
164
|
-
|
|
346
|
+
### Проверка доступности API
|
|
165
347
|
|
|
166
|
-
```
|
|
167
|
-
//
|
|
168
|
-
await sdk.
|
|
348
|
+
```javascript
|
|
349
|
+
// Проверка endpoints для индексации
|
|
350
|
+
const diagnostics = await sdk.diagnoseAPI();
|
|
169
351
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
console.log(`Тип изменения: ${data.file.changeType}`);
|
|
175
|
-
});
|
|
352
|
+
const indexingEndpoints = [
|
|
353
|
+
'/api/v1/projects',
|
|
354
|
+
'/api/v1/projects/:id/index'
|
|
355
|
+
];
|
|
176
356
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
357
|
+
indexingEndpoints.forEach(endpoint => {
|
|
358
|
+
const status = diagnostics[endpoint];
|
|
359
|
+
if (status?.success) {
|
|
360
|
+
console.log(`✅ ${endpoint} - OK`);
|
|
361
|
+
} else {
|
|
362
|
+
console.error(`❌ ${endpoint} - ${status?.error || 'Failed'}`);
|
|
363
|
+
}
|
|
184
364
|
});
|
|
185
|
-
|
|
186
|
-
// Отключение от WebSocket после завершения работы
|
|
187
|
-
await sdk.projects.disconnectWebSocket();
|
|
188
365
|
```
|
|
189
366
|
|
|
190
|
-
|
|
367
|
+
### WebSocket диагностика
|
|
191
368
|
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
console.error('Ошибка авторизации. Проверьте API ключ');
|
|
202
|
-
} else {
|
|
203
|
-
console.error(`Ошибка индексации: ${error.message}`);
|
|
204
|
-
}
|
|
369
|
+
```javascript
|
|
370
|
+
// Проверка WebSocket для projects
|
|
371
|
+
const wsStatus = await sdk.diagnoseWebSocket();
|
|
372
|
+
|
|
373
|
+
if (wsStatus.projects?.connected) {
|
|
374
|
+
console.log('✅ Projects WebSocket - Connected');
|
|
375
|
+
} else {
|
|
376
|
+
console.error('❌ Projects WebSocket - Disconnected');
|
|
377
|
+
console.error('Error:', wsStatus.projects?.error);
|
|
205
378
|
}
|
|
206
379
|
```
|
|
207
380
|
|
|
208
|
-
##
|
|
381
|
+
## Рекомендации по производительности
|
|
382
|
+
|
|
383
|
+
### 1. Используйте WebSocket мониторинг
|
|
384
|
+
|
|
385
|
+
```javascript
|
|
386
|
+
// ✅ Правильно - с WebSocket
|
|
387
|
+
await sdk.projects.connectWebSocket();
|
|
388
|
+
sdk.projects.onIndexingProgress(handleProgress);
|
|
389
|
+
await sdk.projects.startIndexing(projectId);
|
|
390
|
+
|
|
391
|
+
// ❌ Неэффективно - polling
|
|
392
|
+
await sdk.projects.startIndexing(projectId);
|
|
393
|
+
while (true) {
|
|
394
|
+
const status = await sdk.projects.getIndexingStatus(projectId);
|
|
395
|
+
if (status.indexStatus === 'completed') break;
|
|
396
|
+
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
397
|
+
}
|
|
398
|
+
```
|
|
209
399
|
|
|
210
|
-
|
|
400
|
+
### 2. Правильно управляйте WebSocket
|
|
211
401
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
402
|
+
```javascript
|
|
403
|
+
// ✅ Отключайтесь после завершения
|
|
404
|
+
sdk.projects.onIndexingComplete(() => {
|
|
405
|
+
sdk.projects.disconnectWebSocket();
|
|
406
|
+
});
|
|
216
407
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
baseURL: 'https://api.example.com',
|
|
221
|
-
apiKey: 'ваш_api_ключ' // Обязательно для WebSocket авторизации
|
|
408
|
+
// ✅ Отключайтесь при ошибках
|
|
409
|
+
sdk.projects.onIndexingError(() => {
|
|
410
|
+
sdk.projects.disconnectWebSocket();
|
|
222
411
|
});
|
|
412
|
+
```
|
|
223
413
|
|
|
224
|
-
|
|
225
|
-
|
|
414
|
+
### 3. Обрабатывайте большие проекты
|
|
415
|
+
|
|
416
|
+
```javascript
|
|
417
|
+
// Для больших проектов показывайте детальный прогресс
|
|
418
|
+
sdk.projects.onIndexingProgress((data) => {
|
|
419
|
+
const { percentage, currentFile, filesPerSecond } = data;
|
|
420
|
+
|
|
421
|
+
// Обновление UI
|
|
422
|
+
updateProgressBar(percentage);
|
|
423
|
+
updateCurrentFile(currentFile);
|
|
424
|
+
updateSpeed(filesPerSecond);
|
|
425
|
+
|
|
426
|
+
// Оценка времени
|
|
427
|
+
const remaining = (100 - percentage) / filesPerSecond;
|
|
428
|
+
updateETA(remaining);
|
|
429
|
+
});
|
|
430
|
+
```
|
|
226
431
|
|
|
227
|
-
|
|
432
|
+
---
|
|
228
433
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
434
|
+
**Документация индексации для SDK v2.5.0**
|
|
435
|
+
**Совместимость:** AI Solver Backend v1.0.0
|
|
436
|
+
**Обновлено:** 28 июня 2025
|