solver-sdk 5.9.0 → 6.0.1
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 +156 -84
- package/dist/cjs/api/indexing-api.js +38 -156
- package/dist/cjs/api/indexing-api.js.map +1 -1
- package/dist/cjs/api/projects-api.js +134 -779
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +1 -51
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/delta-chunking/delta-chunking-manager.js +9 -178
- package/dist/cjs/delta-chunking/delta-chunking-manager.js.map +1 -1
- package/dist/cjs/delta-chunking/delta-chunking-utils.js +34 -112
- package/dist/cjs/delta-chunking/delta-chunking-utils.js.map +1 -1
- package/dist/esm/api/indexing-api.js +36 -154
- package/dist/esm/api/indexing-api.js.map +1 -1
- package/dist/esm/api/projects-api.js +133 -745
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +1 -51
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/delta-chunking/delta-chunking-manager.js +9 -178
- package/dist/esm/delta-chunking/delta-chunking-manager.js.map +1 -1
- package/dist/esm/delta-chunking/delta-chunking-utils.js +34 -112
- package/dist/esm/delta-chunking/delta-chunking-utils.js.map +1 -1
- package/dist/types/api/indexing-api.d.ts +20 -129
- package/dist/types/api/indexing-api.d.ts.map +1 -1
- package/dist/types/api/projects-api.d.ts +36 -497
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -31
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/delta-chunking/delta-chunking-manager.d.ts +10 -23
- package/dist/types/delta-chunking/delta-chunking-manager.d.ts.map +1 -1
- package/dist/types/delta-chunking/delta-chunking-utils.d.ts +20 -11
- package/dist/types/delta-chunking/delta-chunking-utils.d.ts.map +1 -1
- package/dist/types/interfaces/sdk-options.d.ts +4 -4
- package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,7 +73,15 @@ interface CodeSolverSDKOptions {
|
|
|
73
73
|
// Delta-Chunking настройки
|
|
74
74
|
deltaChunking?: {
|
|
75
75
|
enabled?: boolean; // Включить delta-chunking (по умолчанию true)
|
|
76
|
-
|
|
76
|
+
|
|
77
|
+
// Настройки разбиения на чанки (точная архитектура)
|
|
78
|
+
chunking?: {
|
|
79
|
+
maxChars?: number; // Максимум символов в чанке (2000, ~500 токенов)
|
|
80
|
+
minChars?: number; // Минимум символов в чанке (500, ~130 токенов)
|
|
81
|
+
useTreeSitter?: boolean; // Использовать tree-sitter парсер (в разработке)
|
|
82
|
+
preserveContext?: boolean; // Сохранять контекст между чанками
|
|
83
|
+
};
|
|
84
|
+
|
|
77
85
|
maxConcurrentChunks?: number; // Максимум параллельных чанков (5)
|
|
78
86
|
};
|
|
79
87
|
}
|
|
@@ -286,102 +294,154 @@ sdk.disconnectWebSocket();
|
|
|
286
294
|
|
|
287
295
|
---
|
|
288
296
|
|
|
289
|
-
|
|
297
|
+
# Backend SDK v6.0.0 API
|
|
298
|
+
|
|
299
|
+
## Projects API (`sdk.projects`)
|
|
300
|
+
```typescript
|
|
301
|
+
// Управление проектами
|
|
302
|
+
createProject(name: string, data?: any): Promise<Project>
|
|
303
|
+
getAllProjects(): Promise<Project[]>
|
|
304
|
+
getProject(projectId: string): Promise<Project | null>
|
|
305
|
+
findOrCreateProject(projectPath: string, projectName: string): Promise<Project>
|
|
306
|
+
deleteProject(projectId: string): Promise<void>
|
|
290
307
|
|
|
291
|
-
|
|
308
|
+
// Статус и состояние
|
|
309
|
+
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>
|
|
310
|
+
getIndexingStatus(projectId: string): Promise<IndexingStatus>
|
|
311
|
+
startIndexing(projectId: string, options?: IndexingOptions): Promise<any>
|
|
312
|
+
cancelIndexing(projectId: string): Promise<boolean>
|
|
313
|
+
resetIndexing(projectId: string): Promise<ResetResult>
|
|
314
|
+
|
|
315
|
+
// Session Recovery
|
|
316
|
+
getRecoveryStatus(projectId: string): Promise<RecoveryStatus>
|
|
317
|
+
resumeSync(projectId: string, options?: ResumeOptions): Promise<ResumeResult>
|
|
318
|
+
cancelRecovery(projectId: string): Promise<{ success: boolean }>
|
|
319
|
+
initializeDeltaSync(projectId: string, clientRootHash: string): Promise<SyncInitResult>
|
|
320
|
+
```
|
|
292
321
|
|
|
322
|
+
## Delta Manager API (`sdk.deltaManager`)
|
|
293
323
|
```typescript
|
|
294
|
-
|
|
324
|
+
syncEncryptedChunks(projectId: string, encryptedChunks: EncryptedChunk[], rootHash: string, options?: SyncOptions): Promise<SyncResult>
|
|
325
|
+
getSyncStatus(projectId: string): Promise<SyncStatus>
|
|
326
|
+
cancelSync(projectId: string): Promise<boolean>
|
|
327
|
+
```
|
|
295
328
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
apiKey: 'your-api-key'
|
|
303
|
-
});
|
|
329
|
+
## Chat API (`sdk.chat`)
|
|
330
|
+
```typescript
|
|
331
|
+
chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>
|
|
332
|
+
chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<AsyncIterable<ChatStreamChunk>>
|
|
333
|
+
cancelCurrentRequest(): void
|
|
334
|
+
```
|
|
304
335
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const projectId = project.id;
|
|
311
|
-
|
|
312
|
-
// 2. 🔄 КРИТИЧЕСКИ ВАЖНО: Проверить прерванные сессии
|
|
313
|
-
const recoveryStatus = await sdk.projects.getRecoveryStatus(projectId);
|
|
314
|
-
|
|
315
|
-
if (recoveryStatus.hasInterruptedSession) {
|
|
316
|
-
// 🎨 Cursor-like UX: Показать диалог восстановления
|
|
317
|
-
const info = recoveryStatus.recoveryInfo!;
|
|
318
|
-
const choice = await showUserChoice({
|
|
319
|
-
title: 'Indexing was interrupted',
|
|
320
|
-
message: `Indexing was interrupted at ${info.progress.percentage}%. Continue from where you left off?`,
|
|
321
|
-
buttons: [
|
|
322
|
-
{ text: '🔄 Continue Indexing', value: 'continue' },
|
|
323
|
-
{ text: '🆕 Start Fresh', value: 'fresh' }
|
|
324
|
-
]
|
|
325
|
-
});
|
|
336
|
+
## Search API (`sdk.search`)
|
|
337
|
+
```typescript
|
|
338
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>
|
|
339
|
+
searchThenFetch(query: string, options?: SearchThenFetchOptions): Promise<SearchThenFetchResult>
|
|
340
|
+
```
|
|
326
341
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
342
|
+
## WebSocket API (`sdk.projectSync`)
|
|
343
|
+
```typescript
|
|
344
|
+
connectProjectSync(projectId: string): Promise<void>
|
|
345
|
+
onSyncProgress(callback: (progress: SyncProgressEvent) => void): void
|
|
346
|
+
onSyncCompleted(callback: (result: SyncCompletedEvent) => void): void
|
|
347
|
+
onSyncError(callback: (error: SyncErrorEvent) => void): void
|
|
348
|
+
disconnectWebSocket(): void
|
|
349
|
+
```
|
|
333
350
|
|
|
334
|
-
// 3. 🔍 Проверить нужна ли синхронизация (Smart Sync)
|
|
335
|
-
const clientHash = await computeMerkleRootHash(projectPath);
|
|
336
|
-
const state = await sdk.projects.getProjectState(projectId, clientHash);
|
|
337
351
|
|
|
338
|
-
|
|
339
|
-
console.log('✅ Проект актуален, синхронизация не нужна');
|
|
340
|
-
return { success: true, message: 'Project is up to date' };
|
|
341
|
-
}
|
|
352
|
+
### 🏗️ **Projects API (`sdk.projects`)**
|
|
342
353
|
|
|
343
|
-
|
|
344
|
-
return await startFreshIndexing(projectId, clientHash);
|
|
345
|
-
}
|
|
354
|
+
#### ✅ **Основные методы для клиента:**
|
|
346
355
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
continueFromLastBatch: true
|
|
354
|
-
});
|
|
356
|
+
```typescript
|
|
357
|
+
// 🔍 Управление проектами
|
|
358
|
+
createProject(name: string, data?: any): Promise<Project>
|
|
359
|
+
getAllProjects(): Promise<Project[]>
|
|
360
|
+
getProject(projectId: string): Promise<Project | null>
|
|
361
|
+
findOrCreateProject(projectPath: string, projectName: string): Promise<Project>
|
|
355
362
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
return await startFreshIndexing(projectId); // Fallback
|
|
359
|
-
}
|
|
363
|
+
// 📊 Smart Sync - проверка состояния проекта
|
|
364
|
+
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>
|
|
360
365
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
return await performDeltaSync(projectId, merkleHash, {
|
|
366
|
-
resumeFromSession: resumed.sessionId
|
|
367
|
-
});
|
|
368
|
-
}
|
|
366
|
+
// 🔄 Session Recovery - восстановление прерванных сессий
|
|
367
|
+
getRecoveryStatus(projectId: string): Promise<RecoveryStatus>
|
|
368
|
+
resumeSync(projectId: string, options?: ResumeOptions): Promise<ResumeResult>
|
|
369
|
+
cancelRecovery(projectId: string): Promise<{ success: boolean }>
|
|
369
370
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
// Вычислить hash если не передан
|
|
378
|
-
if (!clientHash) {
|
|
379
|
-
clientHash = await computeMerkleRootHash(workspacePath);
|
|
380
|
-
}
|
|
371
|
+
// 🚀 Delta Sync инициализация
|
|
372
|
+
initializeDeltaSync(projectId: string, clientRootHash: string): Promise<{
|
|
373
|
+
needsSync: boolean;
|
|
374
|
+
sessionId?: string;
|
|
375
|
+
lastSyncHash?: string;
|
|
376
|
+
}>
|
|
381
377
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
378
|
+
// 🧹 Очистка и управление
|
|
379
|
+
resetIndexing(projectId: string): Promise<ResetResult>
|
|
380
|
+
deleteProject(projectId: string): Promise<void>
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### 🔄 **Delta Manager API (`sdk.deltaManager`)**
|
|
384
|
+
|
|
385
|
+
#### ✅ **Методы для отправки chunks:**
|
|
386
|
+
|
|
387
|
+
```typescript
|
|
388
|
+
// 📤 Отправка готовых зашифрованных chunks на сервер
|
|
389
|
+
syncEncryptedChunks(
|
|
390
|
+
projectId: string,
|
|
391
|
+
encryptedChunks: EncryptedChunk[],
|
|
392
|
+
rootHash: string,
|
|
393
|
+
options?: SyncOptions
|
|
394
|
+
): Promise<SyncResult>
|
|
395
|
+
|
|
396
|
+
// 🧹 Очистка удаленных файлов из векторной базы
|
|
397
|
+
cleanupDeletedFiles(
|
|
398
|
+
projectId: string,
|
|
399
|
+
currentFiles: FileContent[]
|
|
400
|
+
): Promise<CleanupResult>
|
|
401
|
+
|
|
402
|
+
// 📊 Получение статуса синхронизации
|
|
403
|
+
getSyncStatus(projectId: string): Promise<SyncStatus>
|
|
404
|
+
|
|
405
|
+
// ❌ Отмена синхронизации
|
|
406
|
+
cancelSync(projectId: string): Promise<boolean>
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### 💬 **Chat API (`sdk.chat`)**
|
|
410
|
+
|
|
411
|
+
```typescript
|
|
412
|
+
// 💬 Отправка сообщения в чат
|
|
413
|
+
chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>
|
|
414
|
+
|
|
415
|
+
// 🌊 Потоковая отправка (streaming)
|
|
416
|
+
chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<AsyncIterable<ChatStreamChunk>>
|
|
417
|
+
|
|
418
|
+
// ❌ Отмена активного запроса
|
|
419
|
+
cancelCurrentRequest(): void
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### 🔍 **Search API (`sdk.search`)**
|
|
423
|
+
|
|
424
|
+
```typescript
|
|
425
|
+
// 🔍 Векторный поиск по коду
|
|
426
|
+
search(query: string, options?: SearchOptions): Promise<SearchResult[]>
|
|
427
|
+
|
|
428
|
+
// 🔍 Поиск с последующей выборкой контекста
|
|
429
|
+
searchThenFetch(query: string, options?: SearchThenFetchOptions): Promise<SearchThenFetchResult>
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### 🌐 **WebSocket API (`sdk.projectSync`)**
|
|
433
|
+
|
|
434
|
+
```typescript
|
|
435
|
+
// 🔌 Подключение к WebSocket для real-time уведомлений
|
|
436
|
+
connectProjectSync(projectId: string): Promise<void>
|
|
437
|
+
|
|
438
|
+
// 📡 Подписка на события синхронизации
|
|
439
|
+
onSyncProgress(callback: (progress: SyncProgressEvent) => void): void
|
|
440
|
+
onSyncCompleted(callback: (result: SyncCompletedEvent) => void): void
|
|
441
|
+
onSyncError(callback: (error: SyncErrorEvent) => void): void
|
|
442
|
+
|
|
443
|
+
// 🔌 Отключение WebSocket
|
|
444
|
+
disconnectWebSocket(): void
|
|
385
445
|
|
|
386
446
|
/**
|
|
387
447
|
* 🧹 Полная очистка проекта (удаление всех данных)
|
|
@@ -491,7 +551,19 @@ interface SyncResult {
|
|
|
491
551
|
#### Примеры использования
|
|
492
552
|
|
|
493
553
|
```javascript
|
|
494
|
-
// Полный цикл delta-chunking синхронизации
|
|
554
|
+
// Полный цикл delta-chunking синхронизации с оптимальной конфигурацией
|
|
555
|
+
const sdk = new CodeSolverSDK({
|
|
556
|
+
baseURL: 'https://api.codesolver.app',
|
|
557
|
+
apiKey: 'your-api-key',
|
|
558
|
+
deltaChunking: {
|
|
559
|
+
enabled: true,
|
|
560
|
+
chunking: {
|
|
561
|
+
maxChars: 2000, // Оптимальный размер для большинства файлов (~500 токенов)
|
|
562
|
+
minChars: 500, // Минимум для избежания мелких чанков (~130 токенов)
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
});
|
|
566
|
+
|
|
495
567
|
const syncResult = await sdk.deltaSync.initializeSync('project-id', {
|
|
496
568
|
incremental: true,
|
|
497
569
|
compression: true
|
|
@@ -1,169 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 🚨 АРХИТЕКТУРНАЯ ОШИБКА: IndexingApi удален!
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* индексации
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.IndexingApi = void 0;
|
|
10
|
-
/**
|
|
11
|
-
* API для управления индексацией проектов
|
|
5
|
+
* Backend SDK не должен работать с файловыми путями!
|
|
6
|
+
* Вся логика индексации перенесена в Projects API.
|
|
12
7
|
*
|
|
13
|
-
*
|
|
14
|
-
* ```javascript
|
|
15
|
-
* // Создание и индексация проекта
|
|
16
|
-
* const result = await sdk.indexing.indexProject('/path/to/project', 'My Project');
|
|
17
|
-
* console.log('Project ID:', result.projectId);
|
|
8
|
+
* ✅ ИСПОЛЬЗУЙТЕ вместо этого:
|
|
18
9
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Создание проекта (в Client Extension):
|
|
12
|
+
* const project = await sdk.projects.createProject('My Project', {
|
|
13
|
+
* description: 'Описание проекта'
|
|
14
|
+
* });
|
|
22
15
|
*
|
|
23
|
-
* //
|
|
24
|
-
* const
|
|
25
|
-
* console.log('Final status:', finalStatus.status);
|
|
16
|
+
* // Получение статуса индексации:
|
|
17
|
+
* const status = await sdk.projects.getIndexingStatus(project.id);
|
|
26
18
|
*
|
|
27
|
-
* // Отмена
|
|
28
|
-
* await sdk.
|
|
19
|
+
* // Отмена индексации:
|
|
20
|
+
* await sdk.projects.cancelIndexing(project.id);
|
|
21
|
+
*
|
|
22
|
+
* // Real-time статус через WebSocket:
|
|
23
|
+
* await sdk.connectProjectSync(project.id);
|
|
24
|
+
* sdk.onSyncProgress((progress) => {
|
|
25
|
+
* console.log('Progress:', progress.percentage);
|
|
26
|
+
* });
|
|
29
27
|
* ```
|
|
30
28
|
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.IndexingApi = void 0;
|
|
31
31
|
class IndexingApi {
|
|
32
|
-
constructor(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const project = await this.httpClient.post('/api/v1/projects', createRequest);
|
|
50
|
-
// Запускаем индексацию
|
|
51
|
-
const indexingResult = await this.httpClient.post(`/api/v1/projects/${project.id}/index`);
|
|
52
|
-
return {
|
|
53
|
-
projectId: project.id,
|
|
54
|
-
name: project.name,
|
|
55
|
-
status: indexingResult.status || 'started',
|
|
56
|
-
message: indexingResult.message || 'Индексация запущена'
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Получает текущий статус индексации проекта
|
|
61
|
-
*
|
|
62
|
-
* ⚠️ ВАЖНО: Для real-time уведомлений используйте WebSocket:
|
|
63
|
-
* ```typescript
|
|
64
|
-
* // Правильно (real-time):
|
|
65
|
-
* await sdk.connectWebSocket();
|
|
66
|
-
* sdk.projectSync.on('sync-status-update', (status) => {
|
|
67
|
-
* console.log('Статус обновлен:', status);
|
|
68
|
-
* });
|
|
69
|
-
*
|
|
70
|
-
* // Неправильно (не делайте polling):
|
|
71
|
-
* // setInterval(() => sdk.indexing.getStatus(id), 2000); // ❌
|
|
72
|
-
* ```
|
|
73
|
-
*
|
|
74
|
-
* @param {string} projectId ID проекта
|
|
75
|
-
* @returns {Promise<IndexingStatus>} Текущий статус индексации
|
|
76
|
-
*/
|
|
77
|
-
async getStatus(projectId) {
|
|
78
|
-
this.validateProjectId(projectId);
|
|
79
|
-
const status = await this.httpClient.get(`/api/v1/projects/${projectId}/indexing-status`);
|
|
80
|
-
return {
|
|
81
|
-
status: status.status || 'unknown',
|
|
82
|
-
progress: status.progress || 0,
|
|
83
|
-
totalFiles: status.totalFiles,
|
|
84
|
-
processedFiles: status.processedFiles,
|
|
85
|
-
currentFile: status.currentFile,
|
|
86
|
-
error: status.error,
|
|
87
|
-
updatedAt: new Date().toISOString()
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* ⚠️ DEPRECATED: Метод отключен. Используйте WebSocket для real-time уведомлений
|
|
92
|
-
*
|
|
93
|
-
* @deprecated Используйте WebSocket подход:
|
|
94
|
-
* ```typescript
|
|
95
|
-
* await sdk.connectWebSocket();
|
|
96
|
-
* sdk.projectSync.on('sync-status-update', (status) => {
|
|
97
|
-
* if (status.status === 'completed') {
|
|
98
|
-
* console.log('Индексация завершена!');
|
|
99
|
-
* }
|
|
100
|
-
* });
|
|
101
|
-
* sdk.projectSync.subscribeToProject(projectId);
|
|
102
|
-
* ```
|
|
103
|
-
*
|
|
104
|
-
* @param {string} projectId ID проекта
|
|
105
|
-
* @param {number} [timeout=300000] Таймаут в миллисекундах
|
|
106
|
-
* @returns {Promise<IndexingStatus>} Бросает ошибку
|
|
107
|
-
*/
|
|
108
|
-
async waitForCompletion(projectId, timeout = 300000) {
|
|
109
|
-
throw new Error('❌ waitForCompletion() ОТКЛЮЧЕН для предотвращения polling.\n\n' +
|
|
110
|
-
'✅ ИСПОЛЬЗУЙТЕ WebSocket для real-time уведомлений:\n\n' +
|
|
111
|
-
'await sdk.connectWebSocket();\n' +
|
|
112
|
-
'sdk.projectSync.on(\'sync-status-update\', (status) => {\n' +
|
|
113
|
-
' if (status.status === \'completed\') {\n' +
|
|
114
|
-
' console.log(\'Индексация завершена!\');\n' +
|
|
115
|
-
' }\n' +
|
|
116
|
-
'});\n' +
|
|
117
|
-
'sdk.projectSync.subscribeToProject(projectId);\n\n' +
|
|
118
|
-
'📖 Подробнее: https://docs.codesolver.dev/websocket');
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Отменяет текущую индексацию проекта
|
|
122
|
-
*
|
|
123
|
-
* @param {string} projectId ID проекта
|
|
124
|
-
* @returns {Promise<void>}
|
|
125
|
-
*/
|
|
126
|
-
async cancelIndexing(projectId) {
|
|
127
|
-
this.validateProjectId(projectId);
|
|
128
|
-
await this.httpClient.post(`/api/v1/projects/${projectId}/cancel-indexing`);
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Перезапускает индексацию проекта
|
|
132
|
-
*
|
|
133
|
-
* @param {string} projectId ID проекта
|
|
134
|
-
* @returns {Promise<IndexingStatus>} Статус после перезапуска
|
|
135
|
-
*/
|
|
136
|
-
async restartIndexing(projectId) {
|
|
137
|
-
this.validateProjectId(projectId);
|
|
138
|
-
// Сначала отменяем текущую индексацию
|
|
139
|
-
try {
|
|
140
|
-
await this.cancelIndexing(projectId);
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
// Игнорируем ошибки отмены - возможно индексация уже завершена
|
|
144
|
-
}
|
|
145
|
-
// Запускаем новую индексацию
|
|
146
|
-
const result = await this.httpClient.post(`/api/v1/projects/${projectId}/index`);
|
|
147
|
-
return {
|
|
148
|
-
status: result.status || 'started',
|
|
149
|
-
progress: 0,
|
|
150
|
-
updatedAt: new Date().toISOString()
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Валидация ID проекта
|
|
155
|
-
* @private
|
|
156
|
-
*/
|
|
157
|
-
validateProjectId(projectId) {
|
|
158
|
-
if (projectId === undefined || projectId === null) {
|
|
159
|
-
throw new Error('Project ID is required');
|
|
160
|
-
}
|
|
161
|
-
if (typeof projectId !== 'string') {
|
|
162
|
-
throw new Error('Project ID must be a string');
|
|
163
|
-
}
|
|
164
|
-
if (projectId.trim().length === 0) {
|
|
165
|
-
throw new Error('Project ID cannot be empty');
|
|
166
|
-
}
|
|
32
|
+
constructor() {
|
|
33
|
+
throw new Error(`
|
|
34
|
+
🚨 АРХИТЕКТУРНАЯ ОШИБКА: IndexingApi недоступен!
|
|
35
|
+
|
|
36
|
+
Backend SDK не должен работать с файловыми путями.
|
|
37
|
+
|
|
38
|
+
✅ ИСПОЛЬЗУЙТЕ Projects API:
|
|
39
|
+
- sdk.projects.createProject() - создание проекта
|
|
40
|
+
- sdk.projects.getIndexingStatus() - статус индексации
|
|
41
|
+
- sdk.projects.cancelIndexing() - отмена индексации
|
|
42
|
+
|
|
43
|
+
✅ ИСПОЛЬЗУЙТЕ WebSocket для real-time:
|
|
44
|
+
- sdk.connectProjectSync() - подключение
|
|
45
|
+
- sdk.onSyncProgress() - прогресс индексации
|
|
46
|
+
|
|
47
|
+
📖 Документация: https://docs.codesolver.dev/projects-api
|
|
48
|
+
`);
|
|
167
49
|
}
|
|
168
50
|
}
|
|
169
51
|
exports.IndexingApi = IndexingApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexing-api.js","sourceRoot":"","sources":["../../../src/api/indexing-api.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"indexing-api.js","sourceRoot":"","sources":["../../../src/api/indexing-api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAEH,MAAa,WAAW;IACtB;QACE,MAAM,IAAI,KAAK,CAAC;;;;;;;;;;;;;;;KAef,CAAC,CAAC;IACL,CAAC;CACF;AAnBD,kCAmBC"}
|