solver-sdk 6.0.1 → 6.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/README.md +59 -1038
- package/dist/cjs/api/projects-api.js +5 -6
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/esm/api/projects-api.js +5 -6
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/types/api/projects-api.d.ts +2 -2
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
# Code Solver SDK
|
|
1
|
+
# Code Solver SDK v6.0.1
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Современный SDK для интеграции с Code Solver - платформой для анализа кода, векторного поиска и AI-ассистента. Поддерживает WebSocket для real-time уведомлений и delta-chunking для эффективной синхронизации.
|
|
3
|
+
Backend SDK для интеграции с Code Solver API
|
|
6
4
|
|
|
7
5
|
## 📦 Установка
|
|
8
6
|
|
|
@@ -10,1074 +8,97 @@
|
|
|
10
8
|
npm install solver-sdk
|
|
11
9
|
```
|
|
12
10
|
|
|
13
|
-
## 🚀
|
|
11
|
+
## 🚀 Инициализация
|
|
14
12
|
|
|
15
13
|
```typescript
|
|
16
14
|
import { CodeSolverSDK } from 'solver-sdk';
|
|
17
15
|
|
|
18
16
|
const sdk = new CodeSolverSDK({
|
|
19
17
|
baseURL: 'http://localhost:3000',
|
|
20
|
-
apiKey: 'your-api-key'
|
|
21
|
-
webSocket: { enabled: true }
|
|
18
|
+
apiKey: 'your-api-key'
|
|
22
19
|
});
|
|
23
|
-
|
|
24
|
-
// 🔄 Cursor-like workflow для VS Code расширения
|
|
25
|
-
async function openProject(projectPath: string) {
|
|
26
|
-
// 1. Создать/найти проект
|
|
27
|
-
const project = await sdk.projects.findOrCreateProject(projectPath, projectName);
|
|
28
|
-
|
|
29
|
-
// 2. Проверить прерванные сессии
|
|
30
|
-
const recovery = await sdk.projects.getRecoveryStatus(project.id);
|
|
31
|
-
if (recovery.hasInterruptedSession) {
|
|
32
|
-
// Показать диалог: "Continue indexing (67%)" или "Start fresh"
|
|
33
|
-
const choice = await showRecoveryDialog(recovery.recoveryInfo);
|
|
34
|
-
if (choice === 'continue') {
|
|
35
|
-
await sdk.projects.resumeSync(project.id);
|
|
36
|
-
} else {
|
|
37
|
-
await sdk.projects.cancelRecovery(project.id);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// 3. Smart Sync - проверить нужна ли синхронизация
|
|
42
|
-
const hash = await computeMerkleRootHash(projectPath);
|
|
43
|
-
const state = await sdk.projects.getProjectState(project.id, hash);
|
|
44
|
-
|
|
45
|
-
if (state.syncRequired) {
|
|
46
|
-
await sdk.projects.initializeDeltaSync(project.id, hash);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
20
|
```
|
|
50
21
|
|
|
51
22
|
## 📖 API Reference
|
|
52
23
|
|
|
53
|
-
###
|
|
54
|
-
|
|
55
|
-
#### `new CodeSolverSDK(options)`
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
interface CodeSolverSDKOptions {
|
|
59
|
-
baseURL: string; // URL API сервера
|
|
60
|
-
apiKey?: string; // API ключ для авторизации
|
|
61
|
-
timeout?: number; // Таймаут запросов (по умолчанию 45000ms)
|
|
62
|
-
headers?: Record<string, string>; // Дополнительные HTTP заголовки
|
|
63
|
-
|
|
64
|
-
// WebSocket настройки
|
|
65
|
-
webSocket?: {
|
|
66
|
-
enabled?: boolean; // Включить WebSocket (по умолчанию true)
|
|
67
|
-
connectionTimeout?: number; // Таймаут подключения (10000ms)
|
|
68
|
-
maxRetries?: number; // Максимум попыток переподключения (3)
|
|
69
|
-
retryDelay?: number; // Задержка между попытками (2000ms)
|
|
70
|
-
debug?: boolean; // Отладочные логи (false)
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
// Delta-Chunking настройки
|
|
74
|
-
deltaChunking?: {
|
|
75
|
-
enabled?: boolean; // Включить delta-chunking (по умолчанию true)
|
|
76
|
-
|
|
77
|
-
// Настройки разбиения на чанки (точная архитектура)
|
|
78
|
-
chunking?: {
|
|
79
|
-
maxChars?: number; // Максимум символов в чанке (2000, ~500 токенов)
|
|
80
|
-
minChars?: number; // Минимум символов в чанке (500, ~130 токенов)
|
|
81
|
-
useTreeSitter?: boolean; // Использовать tree-sitter парсер (в разработке)
|
|
82
|
-
preserveContext?: boolean; // Сохранять контекст между чанками
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
maxConcurrentChunks?: number; // Максимум параллельных чанков (5)
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### 📁 Projects API (`sdk.projects`)
|
|
91
|
-
|
|
92
|
-
#### 🏗️ Управление проектами
|
|
93
|
-
|
|
94
|
-
```typescript
|
|
95
|
-
// Создание проекта
|
|
96
|
-
createProject(name: string, path: string, data?: any): Promise<Project>
|
|
97
|
-
|
|
98
|
-
// Получение всех проектов
|
|
99
|
-
getAllProjects(): Promise<Project[]>
|
|
100
|
-
getProjects(): Promise<Project[]> // Псевдоним
|
|
101
|
-
|
|
102
|
-
// Получение проекта по ID
|
|
103
|
-
getProject(projectId: string): Promise<Project | null>
|
|
104
|
-
|
|
105
|
-
// Поиск или создание проекта
|
|
106
|
-
findOrCreateProject(projectPath: string, projectName: string, description?: string): Promise<Project>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
#### 📊 Управление состоянием и индексацией
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
// Получение статуса индексации проекта
|
|
113
|
-
getIndexingStatus(projectId: string): Promise<any>
|
|
114
|
-
|
|
115
|
-
// 🔍 Проверка состояния проекта (новое в v5.3.2+)
|
|
116
|
-
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>
|
|
117
|
-
|
|
118
|
-
// 🔄 Проверка прерванных сессий (новое в v5.5.0+)
|
|
119
|
-
getRecoveryStatus(projectId: string): Promise<{
|
|
120
|
-
hasInterruptedSession: boolean;
|
|
121
|
-
recoveryInfo?: RecoveryInfo;
|
|
122
|
-
}>
|
|
123
|
-
|
|
124
|
-
// 🔄 Возобновление прерванной синхронизации (новое в v5.5.0+)
|
|
125
|
-
resumeSync(projectId: string, options?: ResumeOptions): Promise<{
|
|
126
|
-
success: boolean;
|
|
127
|
-
message: string;
|
|
128
|
-
sessionId?: string;
|
|
129
|
-
continueFromBatch?: number;
|
|
130
|
-
resumeEndpoint?: string;
|
|
131
|
-
}>
|
|
132
|
-
|
|
133
|
-
// 🗑️ Отмена прерванной сессии (новое в v5.5.0+)
|
|
134
|
-
cancelRecovery(projectId: string): Promise<{
|
|
135
|
-
success: boolean;
|
|
136
|
-
message: string;
|
|
137
|
-
}>
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
#### 🧹 Управление данными проекта
|
|
141
|
-
|
|
142
|
-
```typescript
|
|
143
|
-
// 🧹 Очистка удаленных файлов (новое в v5.4.0+)
|
|
144
|
-
cleanupDeletedFiles(projectId: string, activeFiles: ActiveFile[]): Promise<FileCleanupResult>
|
|
145
|
-
|
|
146
|
-
// 🔍 Получение mapping обфусцированных путей (новое в v5.4.0+)
|
|
147
|
-
getFilePathMapping(projectId: string): Promise<{
|
|
148
|
-
success: boolean;
|
|
149
|
-
files: FilePathMapping[];
|
|
150
|
-
}>
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
### 🔍 Search API (`sdk.search`)
|
|
157
|
-
|
|
158
|
-
#### Поиск по коду
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
// Основной поиск по коду
|
|
162
|
-
searchCode(projectId: string, params: SearchCodeParams): Promise<SearchResult[]>
|
|
163
|
-
searchCode(params: SearchCodeParams): Promise<SearchResult[]> // Альтернативная сигнатура
|
|
164
|
-
|
|
165
|
-
// Семантический поиск
|
|
166
|
-
semanticSearch(projectId: string, params: Omit<SearchCodeParams, 'projectId'>): Promise<SearchResult[]>
|
|
167
|
-
|
|
168
|
-
// Поиск функций
|
|
169
|
-
searchFunctions(projectId: string, params: SearchFunctionsParams): Promise<FunctionSearchResult>
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
#### Параметры поиска
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
interface SearchCodeParams {
|
|
176
|
-
projectId?: string; // ID проекта (если не передан отдельно)
|
|
177
|
-
query: string; // Поисковый запрос
|
|
178
|
-
limit?: number; // Максимум результатов (по умолчанию 10)
|
|
179
|
-
maxResults?: number; // Альтернативное название для limit
|
|
180
|
-
semantic?: boolean; // Флаг семантического поиска
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
interface SearchResult {
|
|
184
|
-
id: string; // Уникальный ID результата
|
|
185
|
-
score: number; // Оценка релевантности (0-1)
|
|
186
|
-
filePath: string; // Путь к файлу
|
|
187
|
-
fileName: string; // Имя файла
|
|
188
|
-
language: string; // Язык программирования
|
|
189
|
-
snippet: string; // Фрагмент кода
|
|
190
|
-
line: number; // Номер строки
|
|
191
|
-
size: number; // Размер фрагмента
|
|
192
|
-
indexedAt?: string; // Время индексации
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
#### Примеры использования
|
|
197
|
-
|
|
198
|
-
```javascript
|
|
199
|
-
// Обычный поиск
|
|
200
|
-
const results = await sdk.search.searchCode('project-id', {
|
|
201
|
-
query: 'function authenticate',
|
|
202
|
-
limit: 20
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
results.forEach(result => {
|
|
206
|
-
console.log(`${result.fileName}:${result.line} - ${result.snippet}`);
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
// Семантический поиск
|
|
210
|
-
const semanticResults = await sdk.search.semanticSearch('project-id', {
|
|
211
|
-
query: 'user authentication logic'
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// Альтернативная сигнатура
|
|
215
|
-
const results = await sdk.search.searchCode({
|
|
216
|
-
projectId: 'project-id',
|
|
217
|
-
query: 'error handling',
|
|
218
|
-
limit: 5
|
|
219
|
-
});
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
### 🔌 WebSocket API (`sdk.projectSync`)
|
|
223
|
-
|
|
224
|
-
#### Real-time уведомления
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
// Подключение к WebSocket
|
|
228
|
-
connectWebSocket(): Promise<void>
|
|
229
|
-
|
|
230
|
-
// Отключение от WebSocket
|
|
231
|
-
disconnectWebSocket(): void
|
|
232
|
-
|
|
233
|
-
// Проверка статуса подключения
|
|
234
|
-
isWebSocketConnected: boolean
|
|
235
|
-
|
|
236
|
-
// Подписка на проект
|
|
237
|
-
projectSync.subscribeToProject(projectId: string): void
|
|
238
|
-
|
|
239
|
-
// Отписка от проекта
|
|
240
|
-
projectSync.unsubscribeFromProject(projectId: string): void
|
|
241
|
-
|
|
242
|
-
// Обработчики событий
|
|
243
|
-
projectSync.on(eventName: string, handler: Function): void
|
|
244
|
-
projectSync.off(eventName: string, handler: Function): void
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
#### События WebSocket
|
|
248
|
-
|
|
249
|
-
```typescript
|
|
250
|
-
// Обновление статуса синхронизации
|
|
251
|
-
'sync-status-update': (data: SyncStatusUpdate) => void
|
|
252
|
-
|
|
253
|
-
// Прогресс синхронизации
|
|
254
|
-
'sync-progress': (data: SyncProgressEvent) => void
|
|
255
|
-
|
|
256
|
-
// Завершение синхронизации
|
|
257
|
-
'sync-completed': (data: SyncCompletedEvent) => void
|
|
258
|
-
|
|
259
|
-
// Ошибки
|
|
260
|
-
'error': (data: ErrorEvent) => void
|
|
261
|
-
|
|
262
|
-
// Подключение/отключение
|
|
263
|
-
'connected': (data: { socketId: string }) => void
|
|
264
|
-
'disconnected': (data: { reason: string }) => void
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
#### Примеры использования
|
|
268
|
-
|
|
269
|
-
```javascript
|
|
270
|
-
// Подключение и подписка на проект
|
|
271
|
-
await sdk.connectWebSocket();
|
|
272
|
-
sdk.projectSync.subscribeToProject('project-id');
|
|
273
|
-
|
|
274
|
-
// Обработка событий
|
|
275
|
-
sdk.projectSync.on('sync-status-update', (status) => {
|
|
276
|
-
console.log(`Проект ${status.projectId}: ${status.status} (${status.progress}%)`);
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
sdk.projectSync.on('sync-completed', (data) => {
|
|
280
|
-
if (data.success) {
|
|
281
|
-
console.log(`Синхронизация завершена за ${data.duration}мс`);
|
|
282
|
-
} else {
|
|
283
|
-
console.error(`Ошибка синхронизации: ${data.error}`);
|
|
284
|
-
}
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
sdk.projectSync.on('error', (error) => {
|
|
288
|
-
console.error(`WebSocket ошибка: ${error.error}`);
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
// Отключение
|
|
292
|
-
sdk.disconnectWebSocket();
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
# Backend SDK v6.0.0 API
|
|
298
|
-
|
|
299
|
-
## Projects API (`sdk.projects`)
|
|
24
|
+
### Projects API (`sdk.projects`)
|
|
300
25
|
```typescript
|
|
301
|
-
//
|
|
26
|
+
// Базовое управление проектами
|
|
302
27
|
createProject(name: string, data?: any): Promise<Project>
|
|
303
|
-
getAllProjects(): Promise<Project[]>
|
|
304
|
-
getProject(projectId: string): Promise<Project
|
|
305
|
-
findOrCreateProject(
|
|
28
|
+
getAllProjects(): Promise<Project[]>
|
|
29
|
+
getProject(projectId: string): Promise<Project>
|
|
30
|
+
findOrCreateProject(projectName: string): Promise<Project> // Найти существующий или создать новый
|
|
306
31
|
deleteProject(projectId: string): Promise<void>
|
|
307
32
|
|
|
308
|
-
//
|
|
309
|
-
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>
|
|
310
|
-
getIndexingStatus(projectId: string): Promise<
|
|
311
|
-
startIndexing(projectId: string, options?:
|
|
33
|
+
// Проверка состояния синхронизации
|
|
34
|
+
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState> // Передать clientRootHash для проверки нужна ли синхронизация
|
|
35
|
+
getIndexingStatus(projectId: string): Promise<any>
|
|
36
|
+
startIndexing(projectId: string, options?: any): Promise<any>
|
|
312
37
|
cancelIndexing(projectId: string): Promise<boolean>
|
|
313
|
-
resetIndexing(projectId: string): Promise<
|
|
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
|
-
```
|
|
321
|
-
|
|
322
|
-
## Delta Manager API (`sdk.deltaManager`)
|
|
323
|
-
```typescript
|
|
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
|
-
```
|
|
328
|
-
|
|
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
|
-
```
|
|
335
|
-
|
|
336
|
-
## Search API (`sdk.search`)
|
|
337
|
-
```typescript
|
|
338
|
-
search(query: string, options?: SearchOptions): Promise<SearchResult[]>
|
|
339
|
-
searchThenFetch(query: string, options?: SearchThenFetchOptions): Promise<SearchThenFetchResult>
|
|
340
|
-
```
|
|
341
|
-
|
|
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
|
-
```
|
|
38
|
+
resetIndexing(projectId: string): Promise<any> // Очистить индекс, проект остается
|
|
39
|
+
restartIndexing(projectId: string): Promise<any> // Очистить + подготовить к новой индексации
|
|
350
40
|
|
|
41
|
+
// Session Recovery - восстановление прерванных синхронизаций
|
|
42
|
+
getRecoveryStatus(projectId: string): Promise<any> // Проверить есть ли прерванные сессии при старте
|
|
43
|
+
resumeSync(projectId: string, options?: any): Promise<any> // Продолжить прерванную синхронизацию
|
|
44
|
+
cancelRecovery(projectId: string): Promise<any> // Отменить восстановление, начать заново
|
|
45
|
+
initializeDeltaSync(projectId: string, clientRootHash: string): Promise<any> // ОБЯЗАТЕЛЬНО вызвать перед отправкой chunks
|
|
351
46
|
|
|
352
|
-
|
|
47
|
+
// Delta Sync API - отправка готовых chunks
|
|
48
|
+
sendInitialSync(projectId: string, request: any): Promise<any> // Инициализация с clientRootHash
|
|
49
|
+
sendDeltaSync(projectId: string, batchRequest: any): Promise<any> // Отправка батча зашифрованных chunks
|
|
50
|
+
getDeltaSyncStatus(projectId: string): Promise<any> // Статус текущей синхронизации
|
|
51
|
+
finalizeDeltaSync(projectId: string): Promise<any> // ОБЯЗАТЕЛЬНО вызвать после всех batches
|
|
52
|
+
cancelDeltaSync(projectId: string): Promise<any>
|
|
353
53
|
|
|
354
|
-
|
|
355
|
-
|
|
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>
|
|
362
|
-
|
|
363
|
-
// 📊 Smart Sync - проверка состояния проекта
|
|
364
|
-
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>
|
|
365
|
-
|
|
366
|
-
// 🔄 Session Recovery - восстановление прерванных сессий
|
|
367
|
-
getRecoveryStatus(projectId: string): Promise<RecoveryStatus>
|
|
368
|
-
resumeSync(projectId: string, options?: ResumeOptions): Promise<ResumeResult>
|
|
369
|
-
cancelRecovery(projectId: string): Promise<{ success: boolean }>
|
|
370
|
-
|
|
371
|
-
// 🚀 Delta Sync инициализация
|
|
372
|
-
initializeDeltaSync(projectId: string, clientRootHash: string): Promise<{
|
|
373
|
-
needsSync: boolean;
|
|
374
|
-
sessionId?: string;
|
|
375
|
-
lastSyncHash?: string;
|
|
376
|
-
}>
|
|
377
|
-
|
|
378
|
-
// 🧹 Очистка и управление
|
|
379
|
-
resetIndexing(projectId: string): Promise<ResetResult>
|
|
380
|
-
deleteProject(projectId: string): Promise<void>
|
|
54
|
+
// Диагностика
|
|
55
|
+
getFilePathMapping(projectId: string): Promise<any> // Получить маппинг обфусцированных путей с сервера
|
|
381
56
|
```
|
|
382
57
|
|
|
383
|
-
###
|
|
384
|
-
|
|
385
|
-
#### ✅ **Методы для отправки chunks:**
|
|
386
|
-
|
|
58
|
+
### Delta Manager API (`sdk.deltaManager`)
|
|
387
59
|
```typescript
|
|
388
|
-
//
|
|
389
|
-
syncEncryptedChunks(
|
|
390
|
-
|
|
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
|
-
// ❌ Отмена синхронизации
|
|
60
|
+
// Отправка готовых зашифрованных chunks (Client Extension уже подготовил)
|
|
61
|
+
syncEncryptedChunks(projectId: string, encryptedChunks: any[], rootHash: string, options?: any): Promise<any> // Chunks должны быть ready-to-send
|
|
62
|
+
getSyncStatus(projectId: string): Promise<any> // Статус delta-chunking процесса
|
|
406
63
|
cancelSync(projectId: string): Promise<boolean>
|
|
407
64
|
```
|
|
408
65
|
|
|
409
|
-
###
|
|
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
|
-
|
|
66
|
+
### Chat API (`sdk.chat`)
|
|
424
67
|
```typescript
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
// 🔍 Поиск с последующей выборкой контекста
|
|
429
|
-
searchThenFetch(query: string, options?: SearchThenFetchOptions): Promise<SearchThenFetchResult>
|
|
68
|
+
chat(messages: any[], options?: any): Promise<any> // Обычный запрос-ответ
|
|
69
|
+
chatStream(messages: any[], options?: any): Promise<AsyncIterable<any>> // Потоковый чат (streaming)
|
|
70
|
+
cancelCurrentRequest(): void // Прервать активный запрос
|
|
430
71
|
```
|
|
431
72
|
|
|
432
|
-
###
|
|
433
|
-
|
|
73
|
+
### Search API (`sdk.search`)
|
|
434
74
|
```typescript
|
|
435
|
-
|
|
436
|
-
|
|
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
|
|
445
|
-
|
|
446
|
-
/**
|
|
447
|
-
* 🧹 Полная очистка проекта (удаление всех данных)
|
|
448
|
-
*/
|
|
449
|
-
async function clearProjectData(projectId: string) {
|
|
450
|
-
// ВНИМАНИЕ: Это удалит ВСЕ проиндексированные данные!
|
|
451
|
-
|
|
452
|
-
// Способ 1: Удалить проект полностью
|
|
453
|
-
await sdk.projects.deleteProject(projectId);
|
|
454
|
-
console.log('✅ Проект и все данные удалены полностью');
|
|
455
|
-
|
|
456
|
-
// Способ 2: Очистить только файлы (оставить проект)
|
|
457
|
-
const result = await sdk.cleanupDeletedFiles(projectId, []); // Пустой список = удалить все
|
|
458
|
-
console.log(`✅ Очищено: ${result.deletedFromQdrant} векторов, ${result.deletedFromPostgres} записей`);
|
|
459
|
-
}
|
|
75
|
+
search(query: string, options?: any): Promise<any[]> // Векторный поиск по индексу
|
|
76
|
+
searchThenFetch(query: string, options?: any): Promise<any> // Поиск + загрузка полного контекста
|
|
460
77
|
```
|
|
461
78
|
|
|
462
|
-
###
|
|
463
|
-
|
|
79
|
+
### WebSocket API (`sdk.projectSync`)
|
|
464
80
|
```typescript
|
|
465
|
-
// Real-time
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
stage: progress.stage,
|
|
472
|
-
currentFile: progress.currentChunk,
|
|
473
|
-
totalFiles: progress.totalChunks,
|
|
474
|
-
eta: calculateETA(progress)
|
|
475
|
-
});
|
|
476
|
-
});
|
|
477
|
-
|
|
478
|
-
sdk.projectSync.on('sync-completed', (result) => {
|
|
479
|
-
if (result.success) {
|
|
480
|
-
showSuccessMessage(`✅ Indexing completed: ${result.totalProcessed} files processed`);
|
|
481
|
-
} else {
|
|
482
|
-
showErrorMessage(`❌ Indexing failed: ${result.errors.join(', ')}`);
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
// Периодическая проверка статуса (альтернатива WebSocket)
|
|
487
|
-
const interval = setInterval(async () => {
|
|
488
|
-
const status = await sdk.projects.getDeltaSyncStatus(projectId);
|
|
489
|
-
|
|
490
|
-
updateProgressUI({
|
|
491
|
-
progress: status.progress,
|
|
492
|
-
chunksProcessed: status.chunksProcessed,
|
|
493
|
-
totalChunks: status.totalChunks,
|
|
494
|
-
errors: status.errors
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
if (status.status === 'completed' || status.status === 'failed') {
|
|
498
|
-
clearInterval(interval);
|
|
499
|
-
}
|
|
500
|
-
}, 2000);
|
|
81
|
+
// Real-time уведомления о синхронизации
|
|
82
|
+
connectProjectSync(projectId: string): Promise<void> // Подключиться к конкретному проекту
|
|
83
|
+
onSyncProgress(callback: Function): void // Событие: прогресс индексации (%)
|
|
84
|
+
onSyncCompleted(callback: Function): void // Событие: синхронизация завершена
|
|
85
|
+
onSyncError(callback: Function): void // Событие: ошибка синхронизации
|
|
86
|
+
disconnectWebSocket(): void // Отключить WebSocket
|
|
501
87
|
```
|
|
502
88
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
### 🔄 Delta-Chunking API (`sdk.deltaSync`)
|
|
506
|
-
|
|
507
|
-
#### Синхронизация с delta-chunking
|
|
508
|
-
|
|
509
|
-
```typescript
|
|
510
|
-
// Инициализация синхронизации
|
|
511
|
-
initializeSync(projectId: string, options?: SyncOptions): Promise<SyncResult>
|
|
512
|
-
|
|
513
|
-
// Отправка delta чанков
|
|
514
|
-
sendDeltaChunks(projectId: string, chunks: EncryptedChunk[]): Promise<void>
|
|
515
|
-
|
|
516
|
-
// Финализация синхронизации
|
|
517
|
-
finalizeDeltaSync(projectId: string): Promise<SyncResult>
|
|
518
|
-
|
|
519
|
-
// Отмена синхронизации
|
|
520
|
-
cancelDeltaSync(projectId: string): Promise<void>
|
|
521
|
-
|
|
522
|
-
// Получение статуса синхронизации
|
|
523
|
-
getSyncStatus(projectId: string): Promise<SyncStatus>
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
#### Типы данных
|
|
527
|
-
|
|
528
|
-
```typescript
|
|
529
|
-
interface SyncOptions {
|
|
530
|
-
incremental?: boolean; // Инкрементальная синхронизация
|
|
531
|
-
compression?: boolean; // Сжатие чанков
|
|
532
|
-
encryption?: boolean; // Шифрование чанков
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
interface EncryptedChunk {
|
|
536
|
-
id: string; // ID чанка
|
|
537
|
-
data: string; // Зашифрованные данные (base64)
|
|
538
|
-
hash: string; // SHA-256 хэш
|
|
539
|
-
size: number; // Размер оригинальных данных
|
|
540
|
-
metadata?: any; // Дополнительные метаданные
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
interface SyncResult {
|
|
544
|
-
sessionId: string; // ID сессии синхронизации
|
|
545
|
-
status: string; // Статус операции
|
|
546
|
-
message?: string; // Сообщение о результате
|
|
547
|
-
chunksProcessed?: number; // Количество обработанных чанков
|
|
548
|
-
}
|
|
549
|
-
```
|
|
550
|
-
|
|
551
|
-
#### Примеры использования
|
|
552
|
-
|
|
553
|
-
```javascript
|
|
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
|
-
|
|
567
|
-
const syncResult = await sdk.deltaSync.initializeSync('project-id', {
|
|
568
|
-
incremental: true,
|
|
569
|
-
compression: true
|
|
570
|
-
});
|
|
571
|
-
|
|
572
|
-
console.log('Сессия синхронизации:', syncResult.sessionId);
|
|
573
|
-
|
|
574
|
-
// Подготовка и отправка чанков
|
|
575
|
-
const chunks = [
|
|
576
|
-
{
|
|
577
|
-
id: 'chunk-1',
|
|
578
|
-
data: btoa('console.log("Hello World");'), // base64
|
|
579
|
-
hash: 'sha256-hash',
|
|
580
|
-
size: 26
|
|
581
|
-
}
|
|
582
|
-
];
|
|
583
|
-
|
|
584
|
-
await sdk.deltaSync.sendDeltaChunks('project-id', chunks);
|
|
585
|
-
|
|
586
|
-
// Финализация
|
|
587
|
-
const finalResult = await sdk.deltaSync.finalizeDeltaSync('project-id');
|
|
588
|
-
console.log('Синхронизация завершена:', finalResult.status);
|
|
589
|
-
|
|
590
|
-
// Мониторинг через WebSocket
|
|
591
|
-
sdk.projectSync.on('sync-progress', (progress) => {
|
|
592
|
-
console.log(`Обработано ${progress.currentChunk}/${progress.totalChunks} чанков`);
|
|
593
|
-
});
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
### 💬 Chat API (`sdk.chat`)
|
|
597
|
-
|
|
598
|
-
#### AI-ассистент
|
|
599
|
-
|
|
600
|
-
```typescript
|
|
601
|
-
// Отправка сообщения
|
|
602
|
-
sendMessage(messages: Message[], options?: ChatOptions): Promise<ChatResponse>
|
|
603
|
-
|
|
604
|
-
// Потоковый чат
|
|
605
|
-
streamChat(messages: Message[], options?: StreamChatOptions): AsyncGenerator<ChatChunk>
|
|
606
|
-
|
|
607
|
-
// Continuation для interleaved thinking с tool_result
|
|
608
|
-
sendContinuation(messages: Message[], options?: StreamChatOptions): AsyncGenerator<ChatChunk>
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
#### Примеры использования
|
|
612
|
-
|
|
613
|
-
```javascript
|
|
614
|
-
// Простой чат
|
|
615
|
-
const response = await sdk.chat.sendMessage([
|
|
616
|
-
{ role: 'user', content: 'Объясни что такое async/await' }
|
|
617
|
-
]);
|
|
618
|
-
|
|
619
|
-
console.log(response.choices[0].message.content);
|
|
620
|
-
|
|
621
|
-
// Потоковый чат
|
|
622
|
-
const stream = sdk.chat.streamChat([
|
|
623
|
-
{ role: 'user', content: 'Напиши функцию сортировки' }
|
|
624
|
-
]);
|
|
625
|
-
|
|
626
|
-
for await (const chunk of stream) {
|
|
627
|
-
process.stdout.write(chunk.choices[0]?.delta?.content || '');
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
// Continuation после выполнения tool_use
|
|
631
|
-
const continuationMessages = [
|
|
632
|
-
{ role: 'user', content: 'прочитай README файл' },
|
|
633
|
-
{ role: 'assistant', content: [
|
|
634
|
-
{ type: 'thinking', thinking: '...', signature: '...' },
|
|
635
|
-
{ type: 'tool_use', id: 'toolu_abc123', name: 'read_file', input: { file_path: 'README.md' } }
|
|
636
|
-
]},
|
|
637
|
-
{ role: 'user', content: [{
|
|
638
|
-
type: 'tool_result',
|
|
639
|
-
tool_use_id: 'toolu_abc123',
|
|
640
|
-
content: 'Содержимое README файла...'
|
|
641
|
-
}]}
|
|
642
|
-
];
|
|
643
|
-
|
|
644
|
-
for await (const chunk of sdk.chat.sendContinuation(continuationMessages)) {
|
|
645
|
-
console.log('Continuation chunk:', chunk);
|
|
646
|
-
}
|
|
647
|
-
```
|
|
648
|
-
|
|
649
|
-
---
|
|
650
|
-
|
|
651
|
-
## 🛠️ **УПРАВЛЕНИЕ ДАННЫМИ ПРОЕКТА**
|
|
652
|
-
|
|
653
|
-
### 🧹 **Очистка и управление файлами**
|
|
654
|
-
|
|
655
|
-
```typescript
|
|
656
|
-
/**
|
|
657
|
-
* 🧹 Очистка удаленных файлов (рекомендуется вызывать регулярно)
|
|
658
|
-
*/
|
|
659
|
-
async function cleanupDeletedFiles(projectId: string, workspacePath: string) {
|
|
660
|
-
// Получить список активных файлов в workspace
|
|
661
|
-
const activeFiles = await getWorkspaceFiles(workspacePath);
|
|
662
|
-
|
|
663
|
-
// Очистить удаленные файлы из индекса
|
|
664
|
-
const result = await sdk.cleanupDeletedFiles(projectId, activeFiles.map(file => ({
|
|
665
|
-
filePath: file.path,
|
|
666
|
-
fileHash: file.hash,
|
|
667
|
-
lastModified: file.lastModified
|
|
668
|
-
})));
|
|
669
|
-
|
|
670
|
-
console.log(`🧹 Cleanup completed:`);
|
|
671
|
-
console.log(` - Removed from Qdrant: ${result.deletedFromQdrant} vectors`);
|
|
672
|
-
console.log(` - Removed from PostgreSQL: ${result.deletedFromPostgres} records`);
|
|
673
|
-
console.log(` - Active files: ${result.activeFiles}`);
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
/**
|
|
677
|
-
* 🔄 Управление индексацией проекта
|
|
678
|
-
*/
|
|
679
|
-
async function manageProjectIndexing(projectId: string) {
|
|
680
|
-
// Вариант 1: Сбросить индексацию (проект остается)
|
|
681
|
-
const reset = await sdk.projects.resetIndexing(projectId);
|
|
682
|
-
console.log(`✅ Индексация сброшена: ${reset.clearedData.vectorsDeleted} векторов очищено`);
|
|
683
|
-
|
|
684
|
-
// Вариант 2: Перезапустить индексацию (сброс + подготовка)
|
|
685
|
-
const restart = await sdk.projects.restartIndexing(projectId);
|
|
686
|
-
if (restart.readyForNewSync) {
|
|
687
|
-
console.log('✅ Готов к новой индексации');
|
|
688
|
-
// Начать новую синхронизацию
|
|
689
|
-
const hash = await computeMerkleRootHash(workspacePath);
|
|
690
|
-
await sdk.projects.initializeDeltaSync(projectId, hash);
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
// Вариант 3: Очистить только удаленные файлы
|
|
694
|
-
const result = await sdk.cleanupDeletedFiles(projectId, []); // Пустой список = удалить все
|
|
695
|
-
console.log(`✅ Файлы очищены: ${result.deletedFromQdrant + result.deletedFromPostgres} записей`);
|
|
696
|
-
|
|
697
|
-
// Вариант 4: Удалить проект полностью
|
|
698
|
-
await sdk.projects.deleteProject(projectId);
|
|
699
|
-
console.log('✅ Проект полностью удален из системы');
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
/**
|
|
703
|
-
* 🔍 Диагностика состояния проекта
|
|
704
|
-
*/
|
|
705
|
-
async function diagnoseProject(projectId: string) {
|
|
706
|
-
// Получить детальное состояние
|
|
707
|
-
const state = await sdk.projects.getProjectState(projectId);
|
|
708
|
-
console.log(`📊 Project State:`);
|
|
709
|
-
console.log(` - Name: ${state.projectName}`);
|
|
710
|
-
console.log(` - Total chunks: ${state.totalChunks}`);
|
|
711
|
-
console.log(` - Status: ${state.indexingStatus}`);
|
|
712
|
-
console.log(` - Last indexed: ${state.lastIndexedAt}`);
|
|
713
|
-
console.log(` - Merkle hash: ${state.merkleRootHash?.substring(0, 8)}...`);
|
|
714
|
-
|
|
715
|
-
// Проверить прерванные сессии
|
|
716
|
-
const recovery = await sdk.projects.getRecoveryStatus(projectId);
|
|
717
|
-
if (recovery.hasInterruptedSession) {
|
|
718
|
-
const info = recovery.recoveryInfo!;
|
|
719
|
-
console.log(`⚠️ Interrupted session found:`);
|
|
720
|
-
console.log(` - Progress: ${info.progress.percentage}% (${info.progress.processed}/${info.progress.total})`);
|
|
721
|
-
console.log(` - Interrupted: ${info.interruptedAt}`);
|
|
722
|
-
console.log(` - Can resume: ${info.canResume}`);
|
|
723
|
-
console.log(` - Reason: ${info.resumeReason}`);
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
// Получить file mapping для отладки
|
|
727
|
-
const mapping = await sdk.projects.getFilePathMapping(projectId);
|
|
728
|
-
console.log(`📁 File mapping: ${mapping.files.length} files indexed`);
|
|
729
|
-
}
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
### ⚠️ **Troubleshooting и восстановление**
|
|
733
|
-
|
|
734
|
-
```typescript
|
|
735
|
-
/**
|
|
736
|
-
* 🚨 Экстренное восстановление при проблемах
|
|
737
|
-
*/
|
|
738
|
-
async function emergencyRecovery(projectId: string) {
|
|
739
|
-
try {
|
|
740
|
-
console.log('🚨 Starting emergency recovery...');
|
|
741
|
-
|
|
742
|
-
// 1. Проверить состояние проекта
|
|
743
|
-
const state = await sdk.projects.getProjectState(projectId);
|
|
744
|
-
console.log(`Current state: ${state.indexingStatus}`);
|
|
745
|
-
|
|
746
|
-
// 2. Отменить все прерванные сессии
|
|
747
|
-
const cancelled = await sdk.projects.cancelRecovery(projectId);
|
|
748
|
-
if (cancelled.success) {
|
|
749
|
-
console.log('✅ Cancelled interrupted sessions');
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
// 3. Очистить поврежденные данные (если нужно)
|
|
753
|
-
const cleaned = await sdk.cleanupDeletedFiles(projectId, []);
|
|
754
|
-
console.log(`🧹 Cleaned ${cleaned.deletedFromQdrant + cleaned.deletedFromPostgres} corrupted records`);
|
|
755
|
-
|
|
756
|
-
// 4. Начать полную ресинхронизацию
|
|
757
|
-
const merkleHash = await computeMerkleRootHash(workspacePath);
|
|
758
|
-
await sdk.projects.initializeDeltaSync(projectId, merkleHash);
|
|
759
|
-
|
|
760
|
-
console.log('✅ Emergency recovery completed, full resync started');
|
|
761
|
-
|
|
762
|
-
} catch (error) {
|
|
763
|
-
console.error('❌ Emergency recovery failed:', error);
|
|
764
|
-
|
|
765
|
-
// Последний шанс: удалить и пересоздать проект
|
|
766
|
-
await sdk.projects.deleteProject(projectId);
|
|
767
|
-
const newProject = await sdk.projects.createProject(projectName, projectPath);
|
|
768
|
-
console.log(`🆕 Created new project: ${newProject.id}`);
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
/**
|
|
773
|
-
* 🔄 Принудительное возобновление (для сложных случаев)
|
|
774
|
-
*/
|
|
775
|
-
async function forceResumeSync(projectId: string) {
|
|
776
|
-
const resumed = await sdk.projects.resumeSync(projectId, {
|
|
777
|
-
forceResume: true, // Игнорировать canResume=false
|
|
778
|
-
skipDuplicates: true, // Пропустить дубликаты
|
|
779
|
-
continueFromLastBatch: false // Начать сначала, но с сохраненным прогрессом
|
|
780
|
-
});
|
|
781
|
-
|
|
782
|
-
if (resumed.success) {
|
|
783
|
-
console.log('✅ Force resume successful');
|
|
784
|
-
return resumed;
|
|
785
|
-
} else {
|
|
786
|
-
console.error('❌ Force resume failed, falling back to fresh sync');
|
|
787
|
-
return await startFreshIndexing(projectId);
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
```
|
|
791
|
-
|
|
792
|
-
---
|
|
793
|
-
|
|
794
|
-
## 💡 Рекомендации по использованию
|
|
795
|
-
|
|
796
|
-
### Real-time уведомления
|
|
797
|
-
Для получения актуальных данных в реальном времени используйте WebSocket:
|
|
798
|
-
|
|
799
|
-
```javascript
|
|
800
|
-
// ✅ Правильно: WebSocket для real-time статуса
|
|
801
|
-
await sdk.connectWebSocket();
|
|
802
|
-
sdk.projectSync.on('sync-status-update', (status) => {
|
|
803
|
-
console.log(`Статус: ${status.status}, прогресс: ${status.progress}%`);
|
|
804
|
-
});
|
|
805
|
-
|
|
806
|
-
// ❌ Избегайте частых REST запросов
|
|
807
|
-
// setInterval(() => sdk.indexing.getStatus(id), 2000);
|
|
808
|
-
```
|
|
809
|
-
|
|
810
|
-
### Обработка лимитов
|
|
811
|
-
SDK автоматически обрабатывает ограничения сервера. При превышении лимитов возвращается ошибка 429.
|
|
812
|
-
|
|
813
|
-
## 🔧 Обработка ошибок
|
|
814
|
-
|
|
815
|
-
```javascript
|
|
816
|
-
try {
|
|
817
|
-
const project = await sdk.projects.createProject('Test', '/path');
|
|
818
|
-
} catch (error) {
|
|
819
|
-
if (error.status === 401) {
|
|
820
|
-
console.error('Неверный API ключ');
|
|
821
|
-
} else if (error.status === 429) {
|
|
822
|
-
console.error('Слишком много запросов, попробуйте позже');
|
|
823
|
-
} else {
|
|
824
|
-
console.error('Ошибка API:', error.message);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
// WebSocket ошибки
|
|
829
|
-
sdk.projectSync.on('error', (error) => {
|
|
830
|
-
if (error.recoverable) {
|
|
831
|
-
console.warn('Временная ошибка WebSocket:', error.error);
|
|
832
|
-
} else {
|
|
833
|
-
console.error('Критическая ошибка WebSocket:', error.error);
|
|
834
|
-
}
|
|
835
|
-
});
|
|
836
|
-
```
|
|
837
|
-
|
|
838
|
-
## 🚀 Продвинутое использование
|
|
839
|
-
|
|
840
|
-
### Настройка HTTP клиента
|
|
841
|
-
|
|
842
|
-
```javascript
|
|
843
|
-
const sdk = new CodeSolverSDK({
|
|
844
|
-
baseURL: 'https://api.codesolver.dev',
|
|
845
|
-
apiKey: process.env.CODESOLVER_API_KEY,
|
|
846
|
-
timeout: 60000,
|
|
847
|
-
headers: {
|
|
848
|
-
'User-Agent': 'MyApp/1.0.0',
|
|
849
|
-
'X-Custom-Header': 'value'
|
|
850
|
-
}
|
|
851
|
-
});
|
|
852
|
-
```
|
|
853
|
-
|
|
854
|
-
### WebSocket с переподключением
|
|
855
|
-
|
|
856
|
-
```javascript
|
|
857
|
-
const sdk = new CodeSolverSDK({
|
|
858
|
-
baseURL: 'wss://api.codesolver.dev',
|
|
859
|
-
webSocket: {
|
|
860
|
-
enabled: true,
|
|
861
|
-
maxRetries: 5,
|
|
862
|
-
retryDelay: 3000,
|
|
863
|
-
debug: true
|
|
864
|
-
}
|
|
865
|
-
});
|
|
866
|
-
|
|
867
|
-
sdk.projectSync.on('connected', () => {
|
|
868
|
-
console.log('WebSocket подключен');
|
|
869
|
-
});
|
|
870
|
-
|
|
871
|
-
sdk.projectSync.on('disconnected', (data) => {
|
|
872
|
-
console.log('WebSocket отключен:', data.reason);
|
|
873
|
-
});
|
|
874
|
-
```
|
|
875
|
-
|
|
876
|
-
### Delta-Chunking с шифрованием
|
|
877
|
-
|
|
878
|
-
```javascript
|
|
879
|
-
const syncResult = await sdk.deltaSync.initializeSync('project-id', {
|
|
880
|
-
incremental: true,
|
|
881
|
-
compression: true,
|
|
882
|
-
encryption: true
|
|
883
|
-
});
|
|
884
|
-
|
|
885
|
-
// Шифрование чанков на клиенте
|
|
886
|
-
const encryptedChunks = chunks.map(chunk => ({
|
|
887
|
-
...chunk,
|
|
888
|
-
data: encrypt(chunk.data), // Ваша функция шифрования
|
|
889
|
-
hash: sha256(chunk.data)
|
|
890
|
-
}));
|
|
891
|
-
|
|
892
|
-
await sdk.deltaSync.sendDeltaChunks('project-id', encryptedChunks);
|
|
893
|
-
```
|
|
894
|
-
|
|
895
|
-
## 📊 Мониторинг и диагностика
|
|
896
|
-
|
|
897
|
-
```javascript
|
|
898
|
-
// Диагностика API
|
|
899
|
-
const diagnosis = await sdk.diagnoseAPI();
|
|
900
|
-
console.log('Статус API:', diagnosis);
|
|
901
|
-
|
|
902
|
-
// Health check
|
|
903
|
-
const health = await sdk.httpClient.get('/health');
|
|
904
|
-
console.log('Здоровье сервера:', health);
|
|
905
|
-
|
|
906
|
-
// Детальная информация о системе
|
|
907
|
-
const info = await sdk.httpClient.get('/health/info');
|
|
908
|
-
console.log('Информация о системе:', info);
|
|
909
|
-
```
|
|
910
|
-
|
|
911
|
-
## 🔄 Миграция с предыдущих версий
|
|
912
|
-
|
|
913
|
-
### С версии 4.x на 5.x
|
|
914
|
-
|
|
915
|
-
```javascript
|
|
916
|
-
// Старый способ (4.x)
|
|
917
|
-
const status = await sdk.projects.getIndexingStatus(projectId);
|
|
918
|
-
|
|
919
|
-
// Новый способ (5.x)
|
|
920
|
-
const status = await sdk.indexing.getStatus(projectId);
|
|
921
|
-
|
|
922
|
-
// Или лучше - WebSocket
|
|
923
|
-
sdk.projectSync.on('sync-status-update', (status) => {
|
|
924
|
-
// Real-time статус
|
|
925
|
-
});
|
|
926
|
-
```
|
|
927
|
-
|
|
928
|
-
## 📝 Changelog
|
|
929
|
-
|
|
930
|
-
### v5.2.0 (Latest) - КРИТИЧЕСКИЕ ИСПРАВЛЕНИЯ
|
|
931
|
-
- 🚨 **ОТКЛЮЧЕН waitForCompletion()** - предотвращение polling
|
|
932
|
-
- 🛡️ **Усилен rate limiting** статуса (2 запроса/минуту)
|
|
933
|
-
- ✅ **Принудительное использование WebSocket** для real-time уведомлений
|
|
934
|
-
- 📖 **Обновлена документация** с четкими инструкциями
|
|
935
|
-
|
|
936
|
-
### v5.1.5
|
|
937
|
-
- ✅ Исправлена документация - убраны детали внутренней реализации
|
|
938
|
-
- ✅ Удалены несуществующие методы из документации
|
|
939
|
-
- ✅ Сосредоточено только на пользовательском API
|
|
940
|
-
|
|
941
|
-
### v5.1.4
|
|
942
|
-
- ✅ Полная документация всех API методов
|
|
943
|
-
- ✅ Добавлен `IndexingApi` для управления индексацией
|
|
944
|
-
- ✅ Добавлен `ProjectSyncClient` для WebSocket уведомлений
|
|
945
|
-
- ✅ Исправлена генерация URL в `SearchApi`
|
|
946
|
-
- ✅ Добавлен метод `semanticSearch`
|
|
947
|
-
- ✅ Добавлен метод `findOrCreateProject`
|
|
948
|
-
- ✅ Улучшена обработка ошибок WebSocket
|
|
949
|
-
- ✅ Обновлена документация и примеры
|
|
950
|
-
|
|
951
|
-
### v5.0.0
|
|
952
|
-
- 🚀 Полная переработка архитектуры
|
|
953
|
-
- 🔌 WebSocket поддержка для real-time уведомлений
|
|
954
|
-
- 🔄 Delta-chunking для эффективной синхронизации
|
|
955
|
-
- 🛡️ Автоматическая обработка лимитов сервера
|
|
956
|
-
|
|
957
|
-
---
|
|
958
|
-
|
|
959
|
-
## 📋 **QUICK REFERENCE - Управление индексацией**
|
|
960
|
-
|
|
961
|
-
### 🔄 **Основные методы (обязательные для VS Code расширения)**
|
|
962
|
-
|
|
963
|
-
| Метод | Описание | Когда использовать |
|
|
964
|
-
|-------|----------|-------------------|
|
|
965
|
-
| `getRecoveryStatus(projectId)` | Проверка прерванных сессий | При открытии проекта |
|
|
966
|
-
| `getProjectState(projectId, hash?)` | Проверка актуальности | Перед синхронизацией |
|
|
967
|
-
| `resumeSync(projectId, options?)` | Продолжить прерванную синхронизацию | Кнопка "Continue" |
|
|
968
|
-
| `cancelRecovery(projectId)` | Отменить прерванную сессию | Кнопка "Start Fresh" |
|
|
969
|
-
| `initializeDeltaSync(projectId, hash)` | Начать новую синхронизацию | Новая индексация |
|
|
970
|
-
| `finalizeDeltaSync(projectId)` | Завершить синхронизацию | После отправки всех батчей |
|
|
971
|
-
| `cleanupDeletedFiles(projectId, files)` | Очистить удаленные файлы | При изменении файлов |
|
|
972
|
-
| `resetIndexing(projectId)` | **Сброс индексации** | Очистить данные, сохранить проект |
|
|
973
|
-
| `restartIndexing(projectId)` | **Перезапуск индексации** | Сброс + подготовка к новой |
|
|
974
|
-
| `deleteProject(projectId)` | **Полное удаление проекта** | Удалить проект и все данные |
|
|
975
|
-
|
|
976
|
-
### 🎯 **Полный список методов управления индексацией**
|
|
977
|
-
|
|
978
|
-
```typescript
|
|
979
|
-
// 🔍 ПРОВЕРКА СОСТОЯНИЯ
|
|
980
|
-
await sdk.projects.getProjectState(projectId, clientHash) // Нужна ли синхронизация?
|
|
981
|
-
await sdk.projects.getRecoveryStatus(projectId) // Есть ли прерванные сессии?
|
|
982
|
-
await sdk.projects.getDeltaSyncStatus(projectId) // Текущий статус синхронизации
|
|
983
|
-
|
|
984
|
-
// 🚀 УПРАВЛЕНИЕ СИНХРОНИЗАЦИЕЙ
|
|
985
|
-
await sdk.projects.initializeDeltaSync(projectId, hash) // Начать новую синхронизацию
|
|
986
|
-
await sdk.projects.resumeSync(projectId, options) // Продолжить прерванную
|
|
987
|
-
await sdk.projects.finalizeDeltaSync(projectId) // Завершить синхронизацию
|
|
988
|
-
await sdk.projects.cancelDeltaSync(projectId) // Отменить активную синхронизацию
|
|
989
|
-
|
|
990
|
-
// 🔄 УПРАВЛЕНИЕ ПРЕРЫВАНИЯМИ
|
|
991
|
-
await sdk.projects.cancelRecovery(projectId) // Отменить восстановление
|
|
992
|
-
|
|
993
|
-
// 🧹 УПРАВЛЕНИЕ ДАННЫМИ
|
|
994
|
-
await sdk.cleanupDeletedFiles(projectId, activeFiles) // Очистить удаленные файлы
|
|
995
|
-
await sdk.projects.getFilePathMapping(projectId) // Получить mapping файлов
|
|
996
|
-
await sdk.projects.resetIndexing(projectId) // Сброс индексации (проект остается)
|
|
997
|
-
await sdk.projects.restartIndexing(projectId) // Перезапуск индексации
|
|
998
|
-
await sdk.projects.deleteProject(projectId) // ПОЛНОЕ удаление проекта
|
|
999
|
-
|
|
1000
|
-
// 📊 МОНИТОРИНГ (WebSocket)
|
|
1001
|
-
sdk.projectSync.on('sync-progress', callback) // Real-time прогресс
|
|
1002
|
-
sdk.projectSync.on('sync-completed', callback) // Завершение синхронизации
|
|
1003
|
-
sdk.projectSync.on('sync-status-update', callback) // Обновления статуса
|
|
1004
|
-
```
|
|
1005
|
-
|
|
1006
|
-
### 🎯 **Cursor-like UX Pattern**
|
|
1007
|
-
|
|
1008
|
-
```typescript
|
|
1009
|
-
// Главный workflow для VS Code расширения
|
|
1010
|
-
async function openProject(projectPath: string) {
|
|
1011
|
-
// 1. Создать/найти проект
|
|
1012
|
-
const project = await sdk.projects.findOrCreateProject(projectPath, projectName);
|
|
1013
|
-
|
|
1014
|
-
// 2. Проверить прерванные сессии
|
|
1015
|
-
const recovery = await sdk.projects.getRecoveryStatus(project.id);
|
|
1016
|
-
|
|
1017
|
-
if (recovery.hasInterruptedSession) {
|
|
1018
|
-
// Показать диалог: "Continue indexing (67%)" или "Start fresh"
|
|
1019
|
-
const choice = await vscode.window.showInformationMessage(
|
|
1020
|
-
`Indexing was interrupted at ${recovery.recoveryInfo.progress.percentage}%. Continue?`,
|
|
1021
|
-
'Continue', 'Start Fresh'
|
|
1022
|
-
);
|
|
1023
|
-
|
|
1024
|
-
if (choice === 'Continue') {
|
|
1025
|
-
await sdk.projects.resumeSync(project.id);
|
|
1026
|
-
} else {
|
|
1027
|
-
await sdk.projects.cancelRecovery(project.id);
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
|
|
1031
|
-
// 3. Проверить нужна ли синхронизация
|
|
1032
|
-
const hash = await computeMerkleRootHash(projectPath);
|
|
1033
|
-
const state = await sdk.projects.getProjectState(project.id, hash);
|
|
1034
|
-
|
|
1035
|
-
if (state.syncRequired) {
|
|
1036
|
-
await sdk.projects.initializeDeltaSync(project.id, hash);
|
|
1037
|
-
}
|
|
1038
|
-
}
|
|
1039
|
-
```
|
|
1040
|
-
|
|
1041
|
-
### 🚨 **Error Handling Best Practices**
|
|
1042
|
-
|
|
1043
|
-
```typescript
|
|
1044
|
-
// Обработка всех возможных ошибок
|
|
1045
|
-
try {
|
|
1046
|
-
await performDeltaSync(projectId, merkleHash);
|
|
1047
|
-
await sdk.projects.finalizeDeltaSync(projectId); // ОБЯЗАТЕЛЬНО!
|
|
1048
|
-
} catch (error) {
|
|
1049
|
-
console.error('Sync failed:', error);
|
|
1050
|
-
|
|
1051
|
-
// Система автоматически пометит сессию для восстановления
|
|
1052
|
-
// При следующем открытии пользователь увидит "Continue indexing"
|
|
1053
|
-
}
|
|
1054
|
-
```
|
|
1055
|
-
|
|
1056
|
-
---
|
|
1057
|
-
|
|
1058
|
-
## 📞 Поддержка
|
|
1059
|
-
|
|
1060
|
-
- **GitHub**: [Issues](https://github.com/codesolver/solver-sdk/issues)
|
|
1061
|
-
- **Email**: support@codesolver.dev
|
|
1062
|
-
- **Документация**: [docs.codesolver.dev](https://docs.codesolver.dev)
|
|
1063
|
-
|
|
1064
|
-
## 📄 Лицензия
|
|
1065
|
-
|
|
1066
|
-
MIT License - см. [LICENSE](LICENSE) файл.
|
|
1067
|
-
|
|
1068
|
-
---
|
|
89
|
+
## ⚠️ Важные особенности
|
|
1069
90
|
|
|
1070
|
-
|
|
91
|
+
### Архитектурные принципы:
|
|
92
|
+
- **Backend SDK** = только HTTP API клиент, НЕ работает с файловой системой
|
|
93
|
+
- **Client Extension** сканирует файлы, вычисляет hashes, создает chunks
|
|
94
|
+
- **Обязательная последовательность**: `initializeDeltaSync()` → `sendDeltaSync()` → `finalizeDeltaSync()`
|
|
1071
95
|
|
|
1072
|
-
###
|
|
1073
|
-
-
|
|
1074
|
-
-
|
|
1075
|
-
-
|
|
1076
|
-
- 📖 **Enhanced UX** - готовые паттерны для VS Code
|
|
96
|
+
### Session Recovery:
|
|
97
|
+
- Всегда проверяйте `getRecoveryStatus()` при старте проекта
|
|
98
|
+
- Показывайте пользователю диалог "Continue (67%) | Start Fresh"
|
|
99
|
+
- `resumeSync()` продолжит с последнего batch, `cancelRecovery()` начнет заново
|
|
1077
100
|
|
|
1078
|
-
###
|
|
1079
|
-
-
|
|
1080
|
-
-
|
|
1081
|
-
-
|
|
1082
|
-
- 🧹 **Smart Cleanup** - точная очистка удаленных файлов
|
|
1083
|
-
- 🎨 **Production UX** - готовые паттерны для VS Code расширений
|
|
101
|
+
### WebSocket для real-time:
|
|
102
|
+
- Используйте WebSocket вместо polling для статуса
|
|
103
|
+
- `connectProjectSync(projectId)` подключает к конкретному проекту
|
|
104
|
+
- Все события автоматически фильтруются по projectId
|
|
@@ -23,15 +23,14 @@ class ProjectsApi {
|
|
|
23
23
|
return this.getAllProjects();
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
* Находит или создает проект
|
|
26
|
+
* Находит или создает проект по имени
|
|
27
27
|
*/
|
|
28
|
-
async findOrCreateProject(
|
|
29
|
-
if (!
|
|
30
|
-
throw new Error('Project
|
|
28
|
+
async findOrCreateProject(projectName) {
|
|
29
|
+
if (!projectName?.trim()) {
|
|
30
|
+
throw new Error('Project name is required');
|
|
31
31
|
}
|
|
32
32
|
const response = await this.httpClient.post('/api/v1/projects/find-or-create', {
|
|
33
|
-
|
|
34
|
-
name: projectName
|
|
33
|
+
name: projectName.trim()
|
|
35
34
|
});
|
|
36
35
|
return response;
|
|
37
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":";;;AAsBA;;GAEG;AACH,MAAa,WAAW;IAGtB,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,mDAAmD;IAEnD;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAY,kBAAkB,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mBAAmB,CAC9B,WAAmB
|
|
1
|
+
{"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,15 +20,14 @@ export class ProjectsApi {
|
|
|
20
20
|
return this.getAllProjects();
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Находит или создает проект
|
|
23
|
+
* Находит или создает проект по имени
|
|
24
24
|
*/
|
|
25
|
-
async findOrCreateProject(
|
|
26
|
-
if (!
|
|
27
|
-
throw new Error('Project
|
|
25
|
+
async findOrCreateProject(projectName) {
|
|
26
|
+
if (!projectName?.trim()) {
|
|
27
|
+
throw new Error('Project name is required');
|
|
28
28
|
}
|
|
29
29
|
const response = await this.httpClient.post('/api/v1/projects/find-or-create', {
|
|
30
|
-
|
|
31
|
-
name: projectName
|
|
30
|
+
name: projectName.trim()
|
|
32
31
|
});
|
|
33
32
|
return response;
|
|
34
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,OAAO,WAAW;IAGtB,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,mDAAmD;IAEnD;;OAEG;IACI,KAAK,CAAC,cAAc;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAY,kBAAkB,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,WAAW;QACtB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mBAAmB,CAC9B,WAAmB
|
|
1
|
+
{"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,9 +16,9 @@ export declare class ProjectsApi {
|
|
|
16
16
|
*/
|
|
17
17
|
getProjects(): Promise<Project[]>;
|
|
18
18
|
/**
|
|
19
|
-
* Находит или создает проект
|
|
19
|
+
* Находит или создает проект по имени
|
|
20
20
|
*/
|
|
21
|
-
findOrCreateProject(
|
|
21
|
+
findOrCreateProject(projectName: string): Promise<Project>;
|
|
22
22
|
/**
|
|
23
23
|
* Получает проекты, готовые к использованию
|
|
24
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects-api.d.ts","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EACL,OAAO,EAGP,cAAc,EAGd,YAAY,EACZ,YAAY,EACZ,aAAa,EACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,UAAU,EACV,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,UAAU,EAAE,UAAU;IAMlC;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAKjD;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAI9C;;OAEG;IACU,mBAAmB,CAC9B,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"projects-api.d.ts","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":"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"}
|