solver-sdk 6.0.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 +18 -14
- 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 -9
- package/dist/cjs/code-solver-sdk.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 -9
- package/dist/esm/code-solver-sdk.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 +0 -7
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,336 +1,64 @@
|
|
|
1
1
|
import { HttpClient } from '../utils/http-client.js';
|
|
2
|
-
import { Project,
|
|
3
|
-
ResumeOptions } from '../types/index.js';
|
|
2
|
+
import { Project, ProjectOptions, ProjectState, RecoveryInfo, ResumeOptions } from '../types/index.js';
|
|
4
3
|
import { SyncInitRequest, DeltaChunksBatchRequest, SyncStatus, SyncResult, FilePathMapping } from '../types/delta-chunking.js';
|
|
5
|
-
declare global {
|
|
6
|
-
var solverSdkProjectCache: Record<string, string> | undefined;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Константы для API путей
|
|
10
|
-
*/
|
|
11
|
-
export declare enum ApiEndpoints {
|
|
12
|
-
PROJECTS = "/api/v1/projects",
|
|
13
|
-
PROJECT = "/api/v1/projects/:id",
|
|
14
|
-
PROJECT_INDEXING_STATUS = "/api/v1/projects/:id/indexing_status",
|
|
15
|
-
PROJECT_CANCEL_INDEXING = "/api/v1/projects/:id/cancel_indexing",
|
|
16
|
-
PROJECT_CLEAR_ERROR = "/api/v1/projects/:id/clear_error"
|
|
17
|
-
}
|
|
18
4
|
/**
|
|
19
5
|
* API для работы с проектами
|
|
20
6
|
*/
|
|
21
7
|
export declare class ProjectsApi {
|
|
22
|
-
/** HTTP клиент для выполнения запросов */
|
|
23
8
|
private readonly httpClient;
|
|
24
|
-
/**
|
|
25
|
-
* Создает новый экземпляр API для работы с проектами
|
|
26
|
-
* @param {HttpClient} httpClient HTTP клиент
|
|
27
|
-
*/
|
|
28
9
|
constructor(httpClient: HttpClient);
|
|
29
10
|
/**
|
|
30
|
-
*
|
|
31
|
-
* @param {string} projectId ID проекта
|
|
32
|
-
* @throws {Error} Если ID проекта не валиден
|
|
33
|
-
*/
|
|
34
|
-
private validateProjectId;
|
|
35
|
-
/**
|
|
36
|
-
* Получает список всех проектов с полной информацией
|
|
37
|
-
*
|
|
38
|
-
* @returns {Promise<Project[]>} Массив проектов с богатой информацией:
|
|
39
|
-
* - Базовые поля: id, name, path, description
|
|
40
|
-
* - Статус индексации: indexStatus, indexingProgress, ready
|
|
41
|
-
* - Статистика: fileCount, languageStats
|
|
42
|
-
* - Ошибки: indexingErrors, indexingWarnings, lastError
|
|
43
|
-
* - Автореиндексация: needsReindexing, changeInfo, autoReindexing
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* ```typescript
|
|
47
|
-
* const projects = await sdk.getAllProjects();
|
|
48
|
-
* projects.forEach(project => {
|
|
49
|
-
* console.log(`${project.name}: ${project.ready ? 'Ready' : 'Indexing...'}`);
|
|
50
|
-
* if (project.ready) {
|
|
51
|
-
* console.log(`Files: ${project.fileCount}, Languages:`, project.languageStats);
|
|
52
|
-
* }
|
|
53
|
-
* });
|
|
54
|
-
* ```
|
|
55
|
-
*
|
|
56
|
-
* @throws {Error} Если не удалось получить проекты или сервер вернул ошибку
|
|
11
|
+
* Получает все проекты пользователя
|
|
57
12
|
*/
|
|
58
13
|
getAllProjects(): Promise<Project[]>;
|
|
59
14
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* @returns {Promise<Project[]>} Массив проектов пользователя
|
|
15
|
+
* Альтернативное имя для getAllProjects() для совместимости
|
|
63
16
|
*/
|
|
64
17
|
getProjects(): Promise<Project[]>;
|
|
65
18
|
/**
|
|
66
|
-
* Находит
|
|
67
|
-
* Для совместимости с интеграционными тестами
|
|
68
|
-
*
|
|
69
|
-
* @param {string} projectPath Путь к проекту (для совместимости)
|
|
70
|
-
* @param {string} projectName Имя проекта
|
|
71
|
-
* @param {string} [description] Описание проекта
|
|
72
|
-
* @returns {Promise<Project>} Найденный или созданный проект
|
|
19
|
+
* Находит или создает проект с указанным путем и именем
|
|
73
20
|
*/
|
|
74
|
-
findOrCreateProject(projectPath: string, projectName: string
|
|
21
|
+
findOrCreateProject(projectPath: string, projectName: string): Promise<Project>;
|
|
75
22
|
/**
|
|
76
|
-
* Получает
|
|
77
|
-
* @returns {Promise<Project[]>} Список готовых проектов
|
|
23
|
+
* Получает проекты, готовые к использованию
|
|
78
24
|
*/
|
|
79
25
|
getReadyProjects(): Promise<Project[]>;
|
|
80
26
|
/**
|
|
81
|
-
* Получает
|
|
82
|
-
*
|
|
83
|
-
* @param {string} projectId Уникальный идентификатор проекта
|
|
84
|
-
* @returns {Promise<Project>} Полная информация о проекте включая:
|
|
85
|
-
* - Статус готовности (ready) - можно ли работать с проектом
|
|
86
|
-
* - Прогресс индексации (indexingProgress) - процент завершения
|
|
87
|
-
* - Информацию об ошибках (indexingErrors, lastError)
|
|
88
|
-
* - Статистику файлов (fileCount, languageStats)
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```typescript
|
|
92
|
-
* const project = await sdk.getProject("proj_123");
|
|
93
|
-
*
|
|
94
|
-
* if (project.ready) {
|
|
95
|
-
* console.log(`Проект ${project.name} готов к работе`);
|
|
96
|
-
* console.log(`Файлов: ${project.fileCount}`);
|
|
97
|
-
* } else if (project.indexingProgress) {
|
|
98
|
-
* console.log(`Индексация: ${project.indexingProgress}%`);
|
|
99
|
-
* }
|
|
100
|
-
*
|
|
101
|
-
* if (project.indexingErrors?.length > 0) {
|
|
102
|
-
* console.warn('Есть ошибки индексации:', project.indexingErrors);
|
|
103
|
-
* }
|
|
104
|
-
* ```
|
|
105
|
-
*
|
|
106
|
-
* @throws {Error} Если проект не найден или произошла ошибка сервера
|
|
27
|
+
* Получает проект по ID
|
|
107
28
|
*/
|
|
108
29
|
getProject(projectId: string): Promise<Project>;
|
|
109
30
|
/**
|
|
110
|
-
* Создает новый проект
|
|
111
|
-
*
|
|
112
|
-
* @param {string} name Название проекта (отображаемое имя)
|
|
113
|
-
* @param {string} path Абсолютный путь к проекту в файловой системе
|
|
114
|
-
* @param {any} data Дополнительные параметры:
|
|
115
|
-
* - description?: string - Описание проекта
|
|
116
|
-
* - любые другие поля, которые будут переданы в backend
|
|
117
|
-
*
|
|
118
|
-
* @returns {Promise<Project>} Созданный или найденный проект с полной информацией.
|
|
119
|
-
* После создания проект будет в статусе "pending" и начнет индексироваться автоматически.
|
|
120
|
-
*
|
|
121
|
-
* @example
|
|
122
|
-
* ```typescript
|
|
123
|
-
* // Простое создание
|
|
124
|
-
* const project = await sdk.createProject(
|
|
125
|
-
* "My React App",
|
|
126
|
-
* "/Users/developer/my-react-app"
|
|
127
|
-
* );
|
|
128
|
-
*
|
|
129
|
-
* // С описанием
|
|
130
|
-
* const project = await sdk.createProject(
|
|
131
|
-
* "Backend API",
|
|
132
|
-
* "/path/to/backend",
|
|
133
|
-
* { description: "Node.js REST API with TypeScript" }
|
|
134
|
-
* );
|
|
135
|
-
*
|
|
136
|
-
* console.log(`Проект создан: ${project.name}`);
|
|
137
|
-
* console.log(`Статус: ${project.indexStatus}`);
|
|
138
|
-
*
|
|
139
|
-
* // Мониторинг индексации
|
|
140
|
-
* if (project.indexStatus === 'pending') {
|
|
141
|
-
* console.log('Индексация начнется автоматически...');
|
|
142
|
-
* }
|
|
143
|
-
* ```
|
|
144
|
-
*
|
|
145
|
-
* @throws {Error} Если путь недоступен, проект не может быть создан, или ошибка сервера
|
|
31
|
+
* Создает новый проект
|
|
146
32
|
*/
|
|
147
|
-
createProject(name: string,
|
|
33
|
+
createProject(name: string, data?: any, options?: ProjectOptions): Promise<Project>;
|
|
34
|
+
/**
|
|
35
|
+
* Удаляет проект
|
|
36
|
+
*/
|
|
37
|
+
deleteProject(projectId: string): Promise<void>;
|
|
148
38
|
/**
|
|
149
39
|
* Получает статус проекта
|
|
150
|
-
* @param {string} projectId ID проекта
|
|
151
|
-
* @returns {Promise<any>} Статус проекта
|
|
152
40
|
*/
|
|
153
41
|
getProjectStatus(projectId: string): Promise<any>;
|
|
154
42
|
/**
|
|
155
43
|
* Запускает индексацию проекта
|
|
156
|
-
* @param {string} projectId ID проекта
|
|
157
|
-
* @param {any} options Опции индексации
|
|
158
|
-
* @returns {Promise<any>} Результат запуска индексации
|
|
159
44
|
*/
|
|
160
45
|
startIndexing(projectId: string, options?: {
|
|
161
46
|
force?: boolean;
|
|
162
47
|
}): Promise<any>;
|
|
163
48
|
/**
|
|
164
|
-
*
|
|
165
|
-
* @param projectId - ID проекта
|
|
166
|
-
* @returns Promise<{ success: boolean }>
|
|
167
|
-
* @throws Error если метод не поддерживается
|
|
168
|
-
*/
|
|
169
|
-
/**
|
|
170
|
-
* 🗑️ Удалить проект полностью (ВНИМАНИЕ: Удаляет ВСЕ данные!)
|
|
171
|
-
*
|
|
172
|
-
* Удаляет проект и все связанные данные из системы:
|
|
173
|
-
* - Все чанки и векторы из Qdrant
|
|
174
|
-
* - Все записи из PostgreSQL
|
|
175
|
-
* - Метаданные проекта
|
|
176
|
-
* - Сессии синхронизации
|
|
177
|
-
*
|
|
178
|
-
* @param projectId ID проекта для удаления
|
|
179
|
-
* @returns Результат удаления
|
|
180
|
-
*
|
|
181
|
-
* @example
|
|
182
|
-
* ```typescript
|
|
183
|
-
* // ВНИМАНИЕ: Это действие необратимо!
|
|
184
|
-
* const result = await sdk.projects.deleteProject(projectId);
|
|
185
|
-
*
|
|
186
|
-
* if (result.success) {
|
|
187
|
-
* console.log('✅ Проект полностью удален');
|
|
188
|
-
* }
|
|
189
|
-
* ```
|
|
190
|
-
*/
|
|
191
|
-
deleteProject(projectId: string): Promise<{
|
|
192
|
-
success: boolean;
|
|
193
|
-
message?: string;
|
|
194
|
-
}>;
|
|
195
|
-
/**
|
|
196
|
-
* Получает текущий статус индексации проекта (единичный запрос)
|
|
197
|
-
*
|
|
198
|
-
* ⚠️ ВАЖНО: Для real-time уведомлений используйте WebSocket:
|
|
199
|
-
* ```typescript
|
|
200
|
-
* // Правильно (real-time):
|
|
201
|
-
* await sdk.connectWebSocket();
|
|
202
|
-
* sdk.projectSync.on('sync-status-update', (status) => {
|
|
203
|
-
* console.log('Статус обновлен:', status);
|
|
204
|
-
* });
|
|
205
|
-
*
|
|
206
|
-
* // Неправильно (не делайте polling):
|
|
207
|
-
* // setInterval(() => sdk.projects.getIndexingStatus(id), 2000); // ❌
|
|
208
|
-
* ```
|
|
209
|
-
*
|
|
210
|
-
* @param {string} projectId Идентификатор проекта
|
|
211
|
-
* @returns {Promise<any>} Текущий статус индексации (snapshot)
|
|
49
|
+
* Получает статус индексации проекта
|
|
212
50
|
*/
|
|
213
51
|
getIndexingStatus(projectId: string): Promise<any>;
|
|
214
52
|
/**
|
|
215
53
|
* Отменяет индексацию проекта
|
|
216
|
-
* @param {string} projectId Идентификатор проекта
|
|
217
|
-
* @returns {Promise<boolean>} Результат отмены индексации
|
|
218
54
|
*/
|
|
219
55
|
cancelIndexing(projectId: string): Promise<boolean>;
|
|
220
56
|
/**
|
|
221
|
-
*
|
|
222
|
-
* @param {string} projectId Идентификатор проекта
|
|
223
|
-
* @returns {Promise<boolean>} Результат остановки индексации
|
|
224
|
-
*/
|
|
225
|
-
stopIndexing(projectId: string): Promise<boolean>;
|
|
226
|
-
/**
|
|
227
|
-
* Очищает ошибку индексации проекта
|
|
228
|
-
* @param {string} projectId Идентификатор проекта
|
|
229
|
-
* @returns {Promise<boolean>} Результат очистки ошибки
|
|
57
|
+
* Очищает ошибку индексации
|
|
230
58
|
*/
|
|
231
59
|
clearIndexingError(projectId: string): Promise<boolean>;
|
|
232
|
-
/**
|
|
233
|
-
* Обновляет индекс конкретного файла в проекте
|
|
234
|
-
* @param {string} projectId ID проекта
|
|
235
|
-
* @param {string} filePath Путь к файлу (относительно корня проекта)
|
|
236
|
-
* @param {Object} options Опции обновления индекса
|
|
237
|
-
* @param {string} [options.content] Содержимое файла (если не указано, будет прочитано с диска)
|
|
238
|
-
* @param {boolean} [options.force=false] Принудительная переиндексация, даже если файл не изменился
|
|
239
|
-
* @param {string} [options.language] Язык файла (если не указан, будет определен автоматически)
|
|
240
|
-
* @param {boolean} [options.updateDependencies=false] Обновлять зависимости после индексации файла
|
|
241
|
-
* @returns {Promise<FileIndexResponse>} Информация об обновленном индексе файла
|
|
242
|
-
*/
|
|
243
|
-
updateFileIndex(projectId: string, filePath: string, options?: {
|
|
244
|
-
content?: string;
|
|
245
|
-
force?: boolean;
|
|
246
|
-
language?: string;
|
|
247
|
-
updateDependencies?: boolean;
|
|
248
|
-
}): Promise<FileIndexResponse>;
|
|
249
|
-
/**
|
|
250
|
-
* Кэширует соответствие пути и ID проекта
|
|
251
|
-
* @param path Путь к проекту
|
|
252
|
-
* @param projectId ID проекта
|
|
253
|
-
* @private
|
|
254
|
-
*/
|
|
255
|
-
private cacheProjectId;
|
|
256
|
-
/**
|
|
257
|
-
* Получает ID проекта из кэша
|
|
258
|
-
* @param path Путь к проекту
|
|
259
|
-
* @returns ID проекта или null, если не найдено
|
|
260
|
-
* @private
|
|
261
|
-
*/
|
|
262
|
-
private getCachedProjectId;
|
|
263
|
-
/**
|
|
264
|
-
* Получает или создает проект по пути
|
|
265
|
-
* @param path Путь к проекту
|
|
266
|
-
* @param name Имя проекта (опционально, если не указано - будет сгенерировано из пути)
|
|
267
|
-
* @returns Данные проекта
|
|
268
|
-
*/
|
|
269
|
-
getOrCreateProject(path: string, name?: string): Promise<Project>;
|
|
270
|
-
/**
|
|
271
|
-
* Индексирует проект по указанному пути
|
|
272
|
-
* @param path Путь к проекту
|
|
273
|
-
* @param options Опции индексации
|
|
274
|
-
* @returns Результат операции индексации
|
|
275
|
-
*/
|
|
276
|
-
indexProjectByPath(path: string, options?: {
|
|
277
|
-
name?: string;
|
|
278
|
-
forceFull?: boolean;
|
|
279
|
-
excludePatterns?: string[];
|
|
280
|
-
}): Promise<{
|
|
281
|
-
success: boolean;
|
|
282
|
-
status: string;
|
|
283
|
-
projectId: string;
|
|
284
|
-
}>;
|
|
285
|
-
/**
|
|
286
|
-
* Создание и индексация проекта в одной операции
|
|
287
|
-
* @param path Путь к проекту
|
|
288
|
-
* @param options Опции создания и индексации
|
|
289
|
-
* @param {string} [options.name] Имя проекта (если не указано, будет получено из пути)
|
|
290
|
-
* @param {boolean} [options.forceFull=false] Принудительная полная индексация
|
|
291
|
-
* @param {string} [options.indexingMode] Режим индексации: 'full', 'incremental', 'auto'
|
|
292
|
-
* @param {string[]} [options.includePatterns] Паттерны для включения файлов
|
|
293
|
-
* @param {string[]} [options.excludePatterns] Паттерны для исключения файлов
|
|
294
|
-
* @returns Информация о созданном проекте и начатой индексации
|
|
295
|
-
*/
|
|
296
|
-
createAndIndexProject(path: string, options?: {
|
|
297
|
-
name?: string;
|
|
298
|
-
forceFull?: boolean;
|
|
299
|
-
indexingMode?: 'full' | 'incremental' | 'auto';
|
|
300
|
-
includePatterns?: string[];
|
|
301
|
-
excludePatterns?: string[];
|
|
302
|
-
}): Promise<{
|
|
303
|
-
projectId: string;
|
|
304
|
-
indexingStatus: string;
|
|
305
|
-
}>;
|
|
306
|
-
/**
|
|
307
|
-
* Проверяет существование проекта и создает резервную копию при необходимости
|
|
308
|
-
* @param projectId ID проекта для проверки
|
|
309
|
-
* @param options Опции для создания резервной копии
|
|
310
|
-
* @returns Существующий проект или созданную резервную копию
|
|
311
|
-
*/
|
|
312
|
-
ensureProjectExists(projectId: string, options?: {
|
|
313
|
-
createBackup?: boolean;
|
|
314
|
-
backupPath?: string;
|
|
315
|
-
backupName?: string;
|
|
316
|
-
}): Promise<Project>;
|
|
317
|
-
/**
|
|
318
|
-
* Получает или создает проект по пути с расширенными опциями
|
|
319
|
-
* @param path Путь к проекту
|
|
320
|
-
* @param options Дополнительные опции
|
|
321
|
-
* @returns Найденный или созданный проект
|
|
322
|
-
*/
|
|
323
|
-
getOrCreateProjectByPath(path: string, options?: {
|
|
324
|
-
name?: string;
|
|
325
|
-
preferExisting?: boolean;
|
|
326
|
-
indexingTimeout?: number;
|
|
327
|
-
maxFileSize?: number;
|
|
328
|
-
}): Promise<Project>;
|
|
329
60
|
/**
|
|
330
61
|
* Инициализация синхронизации проекта для Delta Chunking
|
|
331
|
-
* @param projectId ID проекта
|
|
332
|
-
* @param request Данные для инициализации синхронизации
|
|
333
|
-
* @returns Результат инициализации с needsSync и опциональным sessionId
|
|
334
62
|
*/
|
|
335
63
|
sendInitialSync(projectId: string, request: SyncInitRequest): Promise<{
|
|
336
64
|
needsSync: boolean;
|
|
@@ -339,9 +67,6 @@ export declare class ProjectsApi {
|
|
|
339
67
|
}>;
|
|
340
68
|
/**
|
|
341
69
|
* Отправка батча зашифрованных чанков для Delta Chunking
|
|
342
|
-
* @param projectId ID проекта
|
|
343
|
-
* @param batchRequest Батч зашифрованных чанков
|
|
344
|
-
* @returns Результат обработки батча
|
|
345
70
|
*/
|
|
346
71
|
sendDeltaSync(projectId: string, batchRequest: DeltaChunksBatchRequest): Promise<{
|
|
347
72
|
processed: number;
|
|
@@ -350,173 +75,48 @@ export declare class ProjectsApi {
|
|
|
350
75
|
}>;
|
|
351
76
|
/**
|
|
352
77
|
* Получение статуса синхронизации Delta Chunking
|
|
353
|
-
* @param projectId ID проекта
|
|
354
|
-
* @returns Текущий статус синхронизации
|
|
355
78
|
*/
|
|
356
79
|
getDeltaSyncStatus(projectId: string): Promise<SyncStatus>;
|
|
357
80
|
/**
|
|
358
81
|
* Завершение синхронизации Delta Chunking
|
|
359
|
-
* @param projectId ID проекта
|
|
360
|
-
* @returns Результат завершения синхронизации
|
|
361
82
|
*/
|
|
362
83
|
finalizeDeltaSync(projectId: string): Promise<SyncResult>;
|
|
363
84
|
/**
|
|
364
85
|
* Отмена синхронизации Delta Chunking
|
|
365
|
-
* @param projectId ID проекта
|
|
366
|
-
* @returns Результат отмены
|
|
367
86
|
*/
|
|
368
87
|
cancelDeltaSync(projectId: string): Promise<{
|
|
369
88
|
success: boolean;
|
|
370
89
|
message?: string;
|
|
371
90
|
}>;
|
|
372
91
|
/**
|
|
373
|
-
*
|
|
374
|
-
*
|
|
375
|
-
* Проверяет текущее состояние проекта на сервере. Если передан clientRootHash,
|
|
376
|
-
* дополнительно проверяет нужна ли синхронизация.
|
|
377
|
-
*
|
|
378
|
-
* @param projectId ID проекта
|
|
379
|
-
* @param clientRootHash (опционально) Merkle root hash клиента для проверки sync
|
|
380
|
-
* @returns Состояние проекта
|
|
381
|
-
*
|
|
382
|
-
* @example
|
|
383
|
-
* ```typescript
|
|
384
|
-
* // Проверка только состояния проекта
|
|
385
|
-
* const state = await sdk.projects.getProjectState(projectId);
|
|
386
|
-
* console.log(`Проект "${state.projectName}" содержит ${state.totalChunks} чанков`);
|
|
387
|
-
*
|
|
388
|
-
* // Проверка нужна ли синхронизация
|
|
389
|
-
* const clientHash = await computeMerkleRootHash(workspacePath);
|
|
390
|
-
* const stateWithSync = await sdk.projects.getProjectState(projectId, clientHash);
|
|
391
|
-
*
|
|
392
|
-
* if (stateWithSync.syncRequired) {
|
|
393
|
-
* console.log("Требуется синхронизация");
|
|
394
|
-
* await sdk.projects.initializeDeltaSync(projectId, clientHash);
|
|
395
|
-
* } else {
|
|
396
|
-
* console.log("Проект актуален, синхронизация не нужна");
|
|
397
|
-
* }
|
|
398
|
-
* ```
|
|
92
|
+
* Получение состояния проекта с проверкой синхронизации
|
|
399
93
|
*/
|
|
400
94
|
getProjectState(projectId: string, clientRootHash?: string): Promise<ProjectState>;
|
|
401
95
|
/**
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
* Используется при открытии проекта для показа пользователю опции
|
|
405
|
-
* "Continue indexing" если есть незавершенная синхронизация.
|
|
406
|
-
*
|
|
407
|
-
* @param projectId ID проекта
|
|
408
|
-
* @returns Статус восстановления с информацией о прерванной сессии
|
|
409
|
-
*
|
|
410
|
-
* @example
|
|
411
|
-
* ```typescript
|
|
412
|
-
* // Проверка при открытии проекта
|
|
413
|
-
* const recoveryStatus = await sdk.projects.getRecoveryStatus(projectId);
|
|
414
|
-
*
|
|
415
|
-
* if (recoveryStatus.hasInterruptedSession) {
|
|
416
|
-
* // Показать UI: "Continue indexing" button
|
|
417
|
-
* const info = recoveryStatus.recoveryInfo!;
|
|
418
|
-
* console.log(`Прерванная синхронизация: ${info.progress.percentage}% завершено`);
|
|
419
|
-
*
|
|
420
|
-
* // Пользователь нажал "Continue"
|
|
421
|
-
* const resumed = await sdk.projects.resumeSync(projectId);
|
|
422
|
-
* } else {
|
|
423
|
-
* // Обычная синхронизация
|
|
424
|
-
* await sdk.projects.initializeDeltaSync(projectId, merkleHash);
|
|
425
|
-
* }
|
|
426
|
-
* ```
|
|
96
|
+
* Получение статуса восстановления сессии
|
|
427
97
|
*/
|
|
428
98
|
getRecoveryStatus(projectId: string): Promise<{
|
|
429
99
|
hasInterruptedSession: boolean;
|
|
430
100
|
recoveryInfo?: RecoveryInfo;
|
|
431
101
|
}>;
|
|
432
102
|
/**
|
|
433
|
-
*
|
|
434
|
-
*
|
|
435
|
-
* Подготавливает прерванную сессию к возобновлению. После успешного
|
|
436
|
-
* вызова клиент может продолжить отправку чанков через обычный endpoint.
|
|
437
|
-
*
|
|
438
|
-
* @param projectId ID проекта
|
|
439
|
-
* @param options Опции возобновления (форсировать, пропустить дубликаты, etc.)
|
|
440
|
-
* @returns Результат возобновления с информацией для продолжения
|
|
441
|
-
*
|
|
442
|
-
* @example
|
|
443
|
-
* ```typescript
|
|
444
|
-
* // Возобновить с настройками по умолчанию
|
|
445
|
-
* const resumed = await sdk.projects.resumeSync(projectId);
|
|
446
|
-
*
|
|
447
|
-
* if (resumed.success) {
|
|
448
|
-
* console.log(`Сессия ${resumed.sessionId} готова к возобновлению`);
|
|
449
|
-
*
|
|
450
|
-
* // Продолжить отправку чанков с определенного батча
|
|
451
|
-
* if (resumed.continueFromBatch) {
|
|
452
|
-
* console.log(`Начать с батча ${resumed.continueFromBatch}`);
|
|
453
|
-
* }
|
|
454
|
-
*
|
|
455
|
-
* // Использовать обычный endpoint для отправки
|
|
456
|
-
* await sdk.deltaChunking.sendBatch(projectId, chunks);
|
|
457
|
-
* }
|
|
458
|
-
*
|
|
459
|
-
* // Возобновить с принудительными настройками
|
|
460
|
-
* const forced = await sdk.projects.resumeSync(projectId, {
|
|
461
|
-
* forceResume: true,
|
|
462
|
-
* skipDuplicates: true,
|
|
463
|
-
* continueFromLastBatch: true
|
|
464
|
-
* });
|
|
465
|
-
* ```
|
|
103
|
+
* Восстановление прерванной синхронизации
|
|
466
104
|
*/
|
|
467
105
|
resumeSync(projectId: string, options?: ResumeOptions): Promise<{
|
|
468
106
|
success: boolean;
|
|
469
|
-
message
|
|
470
|
-
sessionId?: string;
|
|
107
|
+
message?: string;
|
|
471
108
|
continueFromBatch?: number;
|
|
472
|
-
|
|
109
|
+
sessionId?: string;
|
|
473
110
|
}>;
|
|
474
111
|
/**
|
|
475
|
-
*
|
|
476
|
-
*
|
|
477
|
-
* Отменяет прерванную сессию если пользователь решил не восстанавливать
|
|
478
|
-
* синхронизацию. После этого будет выполнена обычная полная синхронизация.
|
|
479
|
-
*
|
|
480
|
-
* @param projectId ID проекта
|
|
481
|
-
* @returns Результат отмены
|
|
482
|
-
*
|
|
483
|
-
* @example
|
|
484
|
-
* ```typescript
|
|
485
|
-
* // Пользователь нажал "Start fresh" вместо "Continue"
|
|
486
|
-
* const cancelled = await sdk.projects.cancelRecovery(projectId);
|
|
487
|
-
*
|
|
488
|
-
* if (cancelled.success) {
|
|
489
|
-
* console.log('Прерванная сессия отменена, начинаем полную синхронизацию');
|
|
490
|
-
* await sdk.projects.initializeDeltaSync(projectId, newMerkleHash);
|
|
491
|
-
* }
|
|
492
|
-
* ```
|
|
112
|
+
* Отмена восстановления сессии
|
|
493
113
|
*/
|
|
494
114
|
cancelRecovery(projectId: string): Promise<{
|
|
495
115
|
success: boolean;
|
|
496
|
-
message
|
|
116
|
+
message?: string;
|
|
497
117
|
}>;
|
|
498
118
|
/**
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
* Начинает новую сессию синхронизации с использованием delta-chunking.
|
|
502
|
-
* Алиас для удобства - делегирует к DeltaChunkingManager.
|
|
503
|
-
*
|
|
504
|
-
* @param projectId ID проекта
|
|
505
|
-
* @param clientRootHash Merkle root hash клиента
|
|
506
|
-
* @returns Результат инициализации
|
|
507
|
-
*
|
|
508
|
-
* @example
|
|
509
|
-
* ```typescript
|
|
510
|
-
* const merkleHash = await computeMerkleRootHash(workspacePath);
|
|
511
|
-
* const result = await sdk.projects.initializeDeltaSync(projectId, merkleHash);
|
|
512
|
-
*
|
|
513
|
-
* if (result.needsSync) {
|
|
514
|
-
* console.log(`Started sync session: ${result.sessionId}`);
|
|
515
|
-
* // Продолжить отправку чанков...
|
|
516
|
-
* } else {
|
|
517
|
-
* console.log('Project is up to date');
|
|
518
|
-
* }
|
|
519
|
-
* ```
|
|
119
|
+
* Инициализация Delta Sync
|
|
520
120
|
*/
|
|
521
121
|
initializeDeltaSync(projectId: string, clientRootHash: string): Promise<{
|
|
522
122
|
needsSync: boolean;
|
|
@@ -524,95 +124,34 @@ export declare class ProjectsApi {
|
|
|
524
124
|
lastSyncHash?: string;
|
|
525
125
|
}>;
|
|
526
126
|
/**
|
|
527
|
-
*
|
|
528
|
-
*
|
|
529
|
-
* Очищает все проиндексированные данные, но сохраняет сам проект:
|
|
530
|
-
* - Удаляет все векторы из Qdrant
|
|
531
|
-
* - Удаляет все chunks из PostgreSQL
|
|
532
|
-
* - Удаляет сессии синхронизации
|
|
533
|
-
* - Сбрасывает статус индексации
|
|
534
|
-
*
|
|
535
|
-
* @param projectId ID проекта
|
|
536
|
-
* @returns Результат сброса с статистикой
|
|
537
|
-
*
|
|
538
|
-
* @example
|
|
539
|
-
* ```typescript
|
|
540
|
-
* // Сброс индексации (проект остается)
|
|
541
|
-
* const result = await sdk.projects.resetIndexing(projectId);
|
|
542
|
-
*
|
|
543
|
-
* console.log(`Cleared: ${result.clearedData.vectorsDeleted} vectors, ${result.clearedData.chunksDeleted} chunks`);
|
|
544
|
-
*
|
|
545
|
-
* // После сброса можно начать новую индексацию
|
|
546
|
-
* const merkleHash = await computeMerkleRootHash(workspacePath);
|
|
547
|
-
* await sdk.projects.initializeDeltaSync(projectId, merkleHash);
|
|
548
|
-
* ```
|
|
127
|
+
* Сброс индексации проекта
|
|
549
128
|
*/
|
|
550
129
|
resetIndexing(projectId: string): Promise<{
|
|
551
130
|
success: boolean;
|
|
552
131
|
message: string;
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
chunksDeleted: number;
|
|
556
|
-
sessionsDeleted: number;
|
|
557
|
-
};
|
|
132
|
+
clearedChunks?: number;
|
|
133
|
+
clearedFiles?: number;
|
|
558
134
|
}>;
|
|
559
135
|
/**
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
* Выполняет полный перезапуск индексации:
|
|
563
|
-
* 1. Очищает все существующие данные
|
|
564
|
-
* 2. Сбрасывает статус проекта
|
|
565
|
-
* 3. Подготавливает к новой синхронизации
|
|
566
|
-
*
|
|
567
|
-
* @param projectId ID проекта
|
|
568
|
-
* @returns Результат перезапуска
|
|
569
|
-
*
|
|
570
|
-
* @example
|
|
571
|
-
* ```typescript
|
|
572
|
-
* // Перезапуск индексации
|
|
573
|
-
* const result = await sdk.projects.restartIndexing(projectId);
|
|
574
|
-
*
|
|
575
|
-
* if (result.readyForNewSync) {
|
|
576
|
-
* console.log('Project ready for new indexing');
|
|
577
|
-
*
|
|
578
|
-
* // Начать новую синхронизацию
|
|
579
|
-
* const merkleHash = await computeMerkleRootHash(workspacePath);
|
|
580
|
-
* await sdk.projects.initializeDeltaSync(projectId, merkleHash);
|
|
581
|
-
* }
|
|
582
|
-
* ```
|
|
136
|
+
* Перезапуск индексации проекта
|
|
583
137
|
*/
|
|
584
138
|
restartIndexing(projectId: string): Promise<{
|
|
585
139
|
success: boolean;
|
|
586
140
|
message: string;
|
|
587
|
-
|
|
588
|
-
vectorsDeleted: number;
|
|
589
|
-
chunksDeleted: number;
|
|
590
|
-
sessionsDeleted: number;
|
|
591
|
-
};
|
|
592
|
-
readyForNewSync: boolean;
|
|
141
|
+
newSessionId?: string;
|
|
593
142
|
}>;
|
|
594
143
|
/**
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
* Возвращает список obfuscatedPath для всех файлов проекта.
|
|
598
|
-
* Используется для точной очистки удаленных файлов.
|
|
599
|
-
*
|
|
600
|
-
* @param projectId ID проекта
|
|
601
|
-
* @returns Mapping обфусцированных путей
|
|
602
|
-
*
|
|
603
|
-
* @example
|
|
604
|
-
* ```typescript
|
|
605
|
-
* const mapping = await sdk.projects.getFilePathMapping(projectId);
|
|
606
|
-
* console.log(`Найдено ${mapping.files.length} файлов в проекте`);
|
|
607
|
-
*
|
|
608
|
-
* mapping.files.forEach(file => {
|
|
609
|
-
* console.log(`${file.obfuscatedPath}: ${file.chunkCount} чанков`);
|
|
610
|
-
* });
|
|
611
|
-
* ```
|
|
144
|
+
* Получение маппинга файловых путей
|
|
612
145
|
*/
|
|
613
146
|
getFilePathMapping(projectId: string): Promise<{
|
|
614
147
|
success: boolean;
|
|
615
|
-
|
|
148
|
+
mapping: FilePathMapping[];
|
|
149
|
+
totalFiles: number;
|
|
616
150
|
}>;
|
|
151
|
+
/**
|
|
152
|
+
* Валидация ID проекта
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
private validateProjectId;
|
|
617
156
|
}
|
|
618
157
|
//# sourceMappingURL=projects-api.d.ts.map
|