solver-sdk 5.1.3 → 5.1.5

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.
Files changed (34) hide show
  1. package/README.md +475 -364
  2. package/dist/cjs/api/indexing-api.js +182 -0
  3. package/dist/cjs/api/indexing-api.js.map +1 -0
  4. package/dist/cjs/api/projects-api.js +42 -3
  5. package/dist/cjs/api/projects-api.js.map +1 -1
  6. package/dist/cjs/api/search-api.js +19 -2
  7. package/dist/cjs/api/search-api.js.map +1 -1
  8. package/dist/cjs/code-solver-sdk.js +62 -5
  9. package/dist/cjs/code-solver-sdk.js.map +1 -1
  10. package/dist/cjs/utils/project-sync-client.js +284 -0
  11. package/dist/cjs/utils/project-sync-client.js.map +1 -0
  12. package/dist/esm/api/indexing-api.js +178 -0
  13. package/dist/esm/api/indexing-api.js.map +1 -0
  14. package/dist/esm/api/projects-api.js +42 -3
  15. package/dist/esm/api/projects-api.js.map +1 -1
  16. package/dist/esm/api/search-api.js +19 -2
  17. package/dist/esm/api/search-api.js.map +1 -1
  18. package/dist/esm/code-solver-sdk.js +62 -5
  19. package/dist/esm/code-solver-sdk.js.map +1 -1
  20. package/dist/esm/utils/project-sync-client.js +280 -0
  21. package/dist/esm/utils/project-sync-client.js.map +1 -0
  22. package/dist/types/api/indexing-api.d.ts +131 -0
  23. package/dist/types/api/indexing-api.d.ts.map +1 -0
  24. package/dist/types/api/projects-api.d.ts +31 -2
  25. package/dist/types/api/projects-api.d.ts.map +1 -1
  26. package/dist/types/api/search-api.d.ts +7 -0
  27. package/dist/types/api/search-api.d.ts.map +1 -1
  28. package/dist/types/code-solver-sdk.d.ts +30 -1
  29. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  30. package/dist/types/interfaces/sdk-options.d.ts +16 -0
  31. package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
  32. package/dist/types/utils/project-sync-client.d.ts +142 -0
  33. package/dist/types/utils/project-sync-client.d.ts.map +1 -0
  34. package/package.json +14 -8
package/README.md CHANGED
@@ -1,29 +1,8 @@
1
- # Code Solver SDK v5.1.0
1
+ # Code Solver SDK
2
2
 
3
- > **🗑️ Ультра-чистый JavaScript/TypeScript SDK для VS Code Extensions**
4
- > Без legacy кода, без мертвых методов, только актуальный API
3
+ 🚀 **Официальный JavaScript/TypeScript SDK для Code Solver API**
5
4
 
6
- JavaScript/TypeScript SDK для работы с Code Solver API. Предоставляет простой интерфейс для индексации кода, семантического поиска функций, работы с AI чатом и **новую Delta-Chunking архитектуру** для Cursor-подобной синхронизации проектов.
7
-
8
- ## 🎯 Основные возможности
9
-
10
- - **🔄 Delta-Chunking** - Cursor-like инкрементальная синхронизация проектов
11
- - **💬 Chat API** - взаимодействие с AI моделями (Claude, GPT)
12
- - **🔍 Code Search** - семантический поиск по коду и функциям
13
- - **📊 Project Indexing** - индексация и анализ проектов с **богатой информацией**
14
- - **📝 Context API** - получение контекста для AI
15
- - **🛠️ Code Modification** - модификация кода через AI
16
- - **🔇 Настраиваемое логирование** - полный контроль над выводом в консоль
17
- - **✨ Улучшенная типизация** - полные TypeScript типы с примерами и документацией
18
-
19
- ## 🚀 Что нового в v5.1.0
20
-
21
- > **🔄 Delta-Chunking API** - добавлена полная документация для новой архитектуры синхронизации
22
-
23
- - ✨ **Delta-Chunking интеграция** - встроено в основной CodeSolverSDK класс
24
- - 📝 **Полная документация** - все методы, типы и примеры использования
25
- - 🔐 **Шифрование и chunking** - конфигурация encryption и chunking опций
26
- - 🎯 **Готово к продакшену** - интеграция с backend полностью реализована
5
+ Современный SDK для интеграции с Code Solver - платформой для анализа кода, векторного поиска и AI-ассистента. Поддерживает WebSocket для real-time уведомлений и delta-chunking для эффективной синхронизации.
27
6
 
28
7
  ## 📦 Установка
29
8
 
@@ -31,453 +10,585 @@ JavaScript/TypeScript SDK для работы с Code Solver API. Предост
31
10
  npm install solver-sdk
32
11
  ```
33
12
 
34
- ## ⚙️ Конфигурация
35
-
36
- ```javascript
37
- const sdk = await CodeSolverSDK.create({
38
- baseURL: 'http://localhost:3000', // Обязательный
39
- apiKey: 'your-api-key', // Опционально
40
- timeout: 30000, // Таймаут запросов (мс)
41
- debug: 'error' // Уровень логирования
42
- });
43
- ```
44
-
45
- ### 📊 Уровни логирования
46
- - `'silent'` - полное отключение
47
- - `'error'` - только ошибки (рекомендуется)
48
- - `'warn'` - предупреждения и ошибки
49
- - `'info'` - базовая информация
50
- - `'debug'` - подробная отладка
51
-
52
13
  ## 🚀 Быстрый старт
53
14
 
54
15
  ```javascript
55
16
  import { CodeSolverSDK } from 'solver-sdk';
56
17
 
57
- // Создание SDK
58
- const sdk = await CodeSolverSDK.create({
18
+ const sdk = new CodeSolverSDK({
59
19
  baseURL: 'http://localhost:3000',
60
- debug: 'error' // Рекомендуемый уровень для production
20
+ apiKey: 'your-api-key',
21
+ webSocket: { enabled: true } // Включить WebSocket для real-time уведомлений
61
22
  });
62
23
 
63
- // 1. Создание проекта (с автоматической дедупликацией)
64
- const project = await sdk.projects.createProject(
65
- 'My Project',
66
- '/path/to/project'
67
- );
24
+ // Подключение к WebSocket
25
+ await sdk.connectWebSocket();
68
26
 
69
- // 2. Запуск индексации
70
- await sdk.projects.startIndexing(project.id);
27
+ // Создание проекта
28
+ const project = await sdk.projects.createProject('My Project', '/path/to/project');
29
+
30
+ // Запуск индексации с real-time статусом
31
+ const indexResult = await sdk.indexing.indexProject('/path', 'My Project');
71
32
 
72
- // 3. Проверка статуса
73
- const status = await sdk.projects.getIndexingStatus(project.id);
74
- console.log(`Статус: ${status.status}, прогресс: ${status.progress}%`);
33
+ // Подписка на real-time уведомления
34
+ sdk.projectSync.on('sync-status-update', (status) => {
35
+ console.log(`Индексация: ${status.progress}%`);
36
+ });
75
37
 
76
- // 4. Поиск в коде
38
+ // Поиск по коду
77
39
  const results = await sdk.search.searchCode(project.id, {
78
- query: 'function calculateSum',
40
+ query: 'function authenticate',
79
41
  limit: 10
80
42
  });
43
+ ```
44
+
45
+ ## 📖 API Reference
46
+
47
+ ### 🏗️ Инициализация SDK
81
48
 
82
- // 5. Чат с AI
83
- const response = await sdk.chat.chat([
84
- { role: 'user', content: 'Объясни найденный код' }
85
- ], { projectId: project.id });
49
+ #### `new CodeSolverSDK(options)`
86
50
 
87
- console.log(response.content);
51
+ ```typescript
52
+ interface CodeSolverSDKOptions {
53
+ baseURL: string; // URL API сервера
54
+ apiKey?: string; // API ключ для авторизации
55
+ timeout?: number; // Таймаут запросов (по умолчанию 45000ms)
56
+ headers?: Record<string, string>; // Дополнительные HTTP заголовки
57
+
58
+ // WebSocket настройки
59
+ webSocket?: {
60
+ enabled?: boolean; // Включить WebSocket (по умолчанию true)
61
+ connectionTimeout?: number; // Таймаут подключения (10000ms)
62
+ maxRetries?: number; // Максимум попыток переподключения (3)
63
+ retryDelay?: number; // Задержка между попытками (2000ms)
64
+ debug?: boolean; // Отладочные логи (false)
65
+ };
66
+
67
+ // Delta-Chunking настройки
68
+ deltaChunking?: {
69
+ enabled?: boolean; // Включить delta-chunking (по умолчанию true)
70
+ chunkSize?: number; // Размер чанка (4096 байт)
71
+ maxConcurrentChunks?: number; // Максимум параллельных чанков (5)
72
+ };
73
+ }
88
74
  ```
89
75
 
90
- ## 📋 API Методы
76
+ ### 📁 Projects API (`sdk.projects`)
91
77
 
92
- ### 📁 Projects API
93
- ```javascript
78
+ #### Управление проектами
79
+
80
+ ```typescript
94
81
  // Создание проекта
95
- await sdk.projects.createProject('Project Name', '/project/path');
96
- await sdk.projects.createProject('Project Name', '/project/path', { description: 'Optional' });
82
+ createProject(name: string, path: string, data?: any): Promise<Project>
83
+
84
+ // Получение всех проектов
85
+ getAllProjects(): Promise<Project[]>
86
+ getProjects(): Promise<Project[]> // Псевдоним
97
87
 
98
- // Получение проектов
99
- await sdk.projects.getAllProjects(); // Все проекты
100
- await sdk.projects.getReadyProjects(); // Только готовые к работе
101
- await sdk.projects.getProject(projectId); // Конкретный проект с полной информацией
88
+ // Получение проекта по ID
89
+ getProject(projectId: string): Promise<Project | null>
90
+
91
+ // Поиск или создание проекта
92
+ findOrCreateProject(projectPath: string, projectName: string, description?: string): Promise<Project>
93
+
94
+ // Получение статуса индексации проекта
95
+ getIndexingStatus(projectId: string): Promise<any>
102
96
  ```
103
97
 
104
- ### ⚙️ Indexing API
98
+ #### Примеры использования
99
+
105
100
  ```javascript
106
- // Управление индексацией
107
- await sdk.projects.startIndexing(projectId);
108
- await sdk.projects.cancelIndexing(projectId);
101
+ // Создание нового проекта
102
+ const project = await sdk.projects.createProject(
103
+ 'My Web App',
104
+ '/Users/dev/my-web-app',
105
+ { description: 'React приложение' }
106
+ );
109
107
 
110
- // Статус индексации
111
- const status = await sdk.projects.getIndexingStatus(projectId);
112
- console.log(`${status.status}: ${status.progress}%`);
108
+ // Получение всех проектов пользователя
109
+ const projects = await sdk.projects.getAllProjects();
110
+ console.log( вас ${projects.length} проектов`);
111
+
112
+ // Поиск существующего или создание нового
113
+ const project = await sdk.projects.findOrCreateProject(
114
+ '/path/to/project',
115
+ 'My Project',
116
+ 'Описание проекта'
117
+ );
113
118
  ```
114
119
 
115
- ### 🔍 Search API
120
+ ### 🚀 Indexing API (`sdk.indexing`)
121
+
122
+ #### Управление индексацией
123
+
124
+ ```typescript
125
+ // Создание проекта и запуск индексации
126
+ indexProject(projectPath: string, projectName: string, description?: string): Promise<IndexProjectResult>
127
+
128
+ // Получение статуса индексации
129
+ getStatus(projectId: string): Promise<IndexingStatus>
130
+
131
+ // Ожидание завершения индексации (DEPRECATED - используйте WebSocket)
132
+ waitForCompletion(projectId: string, timeout?: number): Promise<IndexingStatus>
133
+
134
+ // Отмена индексации
135
+ cancelIndexing(projectId: string): Promise<void>
136
+
137
+ // Перезапуск индексации
138
+ restartIndexing(projectId: string): Promise<IndexingStatus>
139
+ ```
140
+
141
+ #### Типы данных
142
+
143
+ ```typescript
144
+ interface IndexingStatus {
145
+ status: string; // 'pending' | 'processing' | 'completed' | 'failed'
146
+ progress: number; // Прогресс 0-100
147
+ totalFiles?: number; // Общее количество файлов
148
+ processedFiles?: number; // Обработано файлов
149
+ currentFile?: string; // Текущий обрабатываемый файл
150
+ error?: string; // Сообщение об ошибке
151
+ updatedAt?: string; // Время последнего обновления
152
+ }
153
+ ```
154
+
155
+ #### Примеры использования
156
+
116
157
  ```javascript
117
- // Поиск в коде
118
- const results = await sdk.search.searchCode(projectId, {
119
- query: 'function name',
120
- limit: 20
158
+ // Запуск индексации
159
+ const result = await sdk.indexing.indexProject(
160
+ '/Users/dev/my-project',
161
+ 'My Project'
162
+ );
163
+ console.log('Project ID:', result.projectId);
164
+
165
+ // Получение статуса (единичный запрос)
166
+ const status = await sdk.indexing.getStatus(result.projectId);
167
+ console.log(`Прогресс: ${status.progress}%`);
168
+
169
+ // ⚠️ ВАЖНО: Для real-time статуса используйте WebSocket!
170
+ sdk.projectSync.on('sync-status-update', (status) => {
171
+ console.log(`Статус обновлен: ${status.status}, прогресс: ${status.progress}%`);
121
172
  });
173
+ ```
174
+
175
+ ### 🔍 Search API (`sdk.search`)
176
+
177
+ #### Поиск по коду
178
+
179
+ ```typescript
180
+ // Основной поиск по коду
181
+ searchCode(projectId: string, params: SearchCodeParams): Promise<SearchResult[]>
182
+ searchCode(params: SearchCodeParams): Promise<SearchResult[]> // Альтернативная сигнатура
183
+
184
+ // Семантический поиск
185
+ semanticSearch(projectId: string, params: Omit<SearchCodeParams, 'projectId'>): Promise<SearchResult[]>
122
186
 
123
187
  // Поиск функций
124
- const functions = await sdk.search.searchFunctions(projectId, {
125
- query: 'calculateSum',
126
- limit: 10
127
- });
188
+ searchFunctions(projectId: string, params: SearchFunctionsParams): Promise<FunctionSearchResult>
189
+ ```
190
+
191
+ #### Параметры поиска
192
+
193
+ ```typescript
194
+ interface SearchCodeParams {
195
+ projectId?: string; // ID проекта (если не передан отдельно)
196
+ query: string; // Поисковый запрос
197
+ limit?: number; // Максимум результатов (по умолчанию 10)
198
+ maxResults?: number; // Альтернативное название для limit
199
+ semantic?: boolean; // Флаг семантического поиска
200
+ }
128
201
 
129
- // Статистика
130
- const stats = await sdk.search.getFunctionStats(projectId);
202
+ interface SearchResult {
203
+ id: string; // Уникальный ID результата
204
+ score: number; // Оценка релевантности (0-1)
205
+ filePath: string; // Путь к файлу
206
+ fileName: string; // Имя файла
207
+ language: string; // Язык программирования
208
+ snippet: string; // Фрагмент кода
209
+ line: number; // Номер строки
210
+ size: number; // Размер фрагмента
211
+ indexedAt?: string; // Время индексации
212
+ }
131
213
  ```
132
214
 
133
- ### 💬 Chat API
215
+ #### Примеры использования
216
+
134
217
  ```javascript
135
- // Обычный чат
136
- const response = await sdk.chat.chat([
137
- { role: 'user', content: 'Explain this code' }
138
- ], { projectId });
218
+ // Обычный поиск
219
+ const results = await sdk.search.searchCode('project-id', {
220
+ query: 'function authenticate',
221
+ limit: 20
222
+ });
139
223
 
140
- // Потоковый чат
141
- for await (const chunk of sdk.chat.streamChat(messages, { projectId })) {
142
- console.log(chunk.text);
143
- }
224
+ results.forEach(result => {
225
+ console.log(`${result.fileName}:${result.line} - ${result.snippet}`);
226
+ });
227
+
228
+ // Семантический поиск
229
+ const semanticResults = await sdk.search.semanticSearch('project-id', {
230
+ query: 'user authentication logic'
231
+ });
144
232
 
145
- // С thinking (мышление Claude)
146
- const response = await sdk.chat.chat(messages, {
147
- projectId,
148
- thinking: { type: 'enabled', budget_tokens: 5000 }
233
+ // Альтернативная сигнатура
234
+ const results = await sdk.search.searchCode({
235
+ projectId: 'project-id',
236
+ query: 'error handling',
237
+ limit: 5
149
238
  });
150
239
  ```
151
240
 
152
- ## 🔄 Delta-Chunking API
241
+ ### 🔌 WebSocket API (`sdk.projectSync`)
153
242
 
154
- > **🚀 Новый Cursor-подобный подход к синхронизации проектов**
155
- > Инкрементальные обновления, шифрование, real-time статус
243
+ #### Real-time уведомления
156
244
 
157
- ### Создание SDK с Delta-Chunking
245
+ ```typescript
246
+ // Подключение к WebSocket
247
+ connectWebSocket(): Promise<void>
158
248
 
159
- ```javascript
160
- import { CodeSolverSDK } from 'solver-sdk';
249
+ // Отключение от WebSocket
250
+ disconnectWebSocket(): void
161
251
 
162
- // Создание SDK с включенным delta-chunking
163
- const sdk = await CodeSolverSDK.create({
164
- baseURL: 'http://localhost:3000',
165
- apiKey: 'your-api-key',
166
- deltaChunking: { // ✨ Опциональная секция
167
- enabled: true, // Включить delta-chunking
168
- encryption: {
169
- enabled: true,
170
- key: 'your-32-char-encryption-key-here!' // 32 символа
171
- },
172
- chunking: {
173
- maxTokens: 400, // Максимальный размер чанка
174
- minTokens: 100, // Минимальный размер чанка
175
- useTreeSitter: false, // Пока простая разбивка
176
- preserveContext: true // Сохранять контекст между чанками
177
- },
178
- fileWatching: {
179
- enabled: false, // Автоматическое наблюдение (в разработке)
180
- pollInterval: 1000, // Интервал проверки изменений
181
- ignorePatterns: ['node_modules/**'] // Игнорируемые файлы
182
- }
183
- },
184
- debug: 'error'
185
- });
252
+ // Проверка статуса подключения
253
+ isWebSocketConnected: boolean
254
+
255
+ // Подписка на проект
256
+ projectSync.subscribeToProject(projectId: string): void
257
+
258
+ // Отписка от проекта
259
+ projectSync.unsubscribeFromProject(projectId: string): void
186
260
 
187
- // Проверяем что delta-chunking включен
188
- console.log('Delta-chunking доступен:', sdk.isDeltaChunkingEnabled);
261
+ // Обработчики событий
262
+ projectSync.on(eventName: string, handler: Function): void
263
+ projectSync.off(eventName: string, handler: Function): void
189
264
  ```
190
265
 
191
- ### Синхронизация проекта
266
+ #### События WebSocket
267
+
268
+ ```typescript
269
+ // Обновление статуса синхронизации
270
+ 'sync-status-update': (data: SyncStatusUpdate) => void
271
+
272
+ // Прогресс синхронизации
273
+ 'sync-progress': (data: SyncProgressEvent) => void
274
+
275
+ // Завершение синхронизации
276
+ 'sync-completed': (data: SyncCompletedEvent) => void
277
+
278
+ // Ошибки
279
+ 'error': (data: ErrorEvent) => void
280
+
281
+ // Подключение/отключение
282
+ 'connected': (data: { socketId: string }) => void
283
+ 'disconnected': (data: { reason: string }) => void
284
+ ```
285
+
286
+ #### Примеры использования
192
287
 
193
288
  ```javascript
194
- // Основной метод синхронизации (только если deltaChunking.enabled = true)
195
- const result = await sdk.syncProject('project-id', '/path/to/project', {
196
- forceFull: false, // Инкрементальная синхронизация
197
- batchSize: 50, // Чанков за раз
198
- ignorePatterns: [ // Игнорировать файлы/папки
199
- 'node_modules/**',
200
- '*.log',
201
- '.git/**'
202
- ],
203
- includeExtensions: ['.ts', '.js', '.py'], // Только эти расширения
204
- maxFileSizeKB: 1024, // Максимальный размер файла 1MB
205
- onProgress: (current, total) => { // Callback прогресса
206
- console.log(`Прогресс: ${current}/${total} (${Math.round(current/total*100)}%)`);
289
+ // Подключение и подписка на проект
290
+ await sdk.connectWebSocket();
291
+ sdk.projectSync.subscribeToProject('project-id');
292
+
293
+ // Обработка событий
294
+ sdk.projectSync.on('sync-status-update', (status) => {
295
+ console.log(`Проект ${status.projectId}: ${status.status} (${status.progress}%)`);
296
+ });
297
+
298
+ sdk.projectSync.on('sync-completed', (data) => {
299
+ if (data.success) {
300
+ console.log(`Синхронизация завершена за ${data.duration}мс`);
301
+ } else {
302
+ console.error(`Ошибка синхронизации: ${data.error}`);
207
303
  }
208
304
  });
209
305
 
210
- console.log(`✅ Синхронизация завершена: ${result.processedChunks} чанков`);
306
+ sdk.projectSync.on('error', (error) => {
307
+ console.error(`WebSocket ошибка: ${error.error}`);
308
+ });
309
+
310
+ // Отключение
311
+ sdk.disconnectWebSocket();
312
+ ```
313
+
314
+ ### 🔄 Delta-Chunking API (`sdk.deltaSync`)
315
+
316
+ #### Синхронизация с delta-chunking
317
+
318
+ ```typescript
319
+ // Инициализация синхронизации
320
+ initializeSync(projectId: string, options?: SyncOptions): Promise<SyncResult>
321
+
322
+ // Отправка delta чанков
323
+ sendDeltaChunks(projectId: string, chunks: EncryptedChunk[]): Promise<void>
324
+
325
+ // Финализация синхронизации
326
+ finalizeDeltaSync(projectId: string): Promise<SyncResult>
327
+
328
+ // Отмена синхронизации
329
+ cancelDeltaSync(projectId: string): Promise<void>
330
+
331
+ // Получение статуса синхронизации
332
+ getSyncStatus(projectId: string): Promise<SyncStatus>
333
+ ```
334
+
335
+ #### Типы данных
336
+
337
+ ```typescript
338
+ interface SyncOptions {
339
+ incremental?: boolean; // Инкрементальная синхронизация
340
+ compression?: boolean; // Сжатие чанков
341
+ encryption?: boolean; // Шифрование чанков
342
+ }
343
+
344
+ interface EncryptedChunk {
345
+ id: string; // ID чанка
346
+ data: string; // Зашифрованные данные (base64)
347
+ hash: string; // SHA-256 хэш
348
+ size: number; // Размер оригинальных данных
349
+ metadata?: any; // Дополнительные метаданные
350
+ }
351
+
352
+ interface SyncResult {
353
+ sessionId: string; // ID сессии синхронизации
354
+ status: string; // Статус операции
355
+ message?: string; // Сообщение о результате
356
+ chunksProcessed?: number; // Количество обработанных чанков
357
+ }
211
358
  ```
212
359
 
213
- ### Синхронизация файлов (для браузера)
360
+ #### Примеры использования
214
361
 
215
362
  ```javascript
216
- // Для web/браузерных приложений без доступа к файловой системе
217
- const files = [
218
- {
219
- path: 'src/index.ts',
220
- content: 'console.log("Hello World");',
221
- size: 28
222
- },
363
+ // Полный цикл delta-chunking синхронизации
364
+ const syncResult = await sdk.deltaSync.initializeSync('project-id', {
365
+ incremental: true,
366
+ compression: true
367
+ });
368
+
369
+ console.log('Сессия синхронизации:', syncResult.sessionId);
370
+
371
+ // Подготовка и отправка чанков
372
+ const chunks = [
223
373
  {
224
- path: 'src/utils.ts',
225
- content: 'export const sum = (a, b) => a + b;',
226
- size: 37
374
+ id: 'chunk-1',
375
+ data: btoa('console.log("Hello World");'), // base64
376
+ hash: 'sha256-hash',
377
+ size: 26
227
378
  }
228
379
  ];
229
380
 
230
- const result = await sdk.syncFiles('project-id', files, {
231
- batchSize: 20,
232
- onProgress: (current, total) => {
233
- console.log(`📤 Загружено: ${current}/${total}`);
234
- }
381
+ await sdk.deltaSync.sendDeltaChunks('project-id', chunks);
382
+
383
+ // Финализация
384
+ const finalResult = await sdk.deltaSync.finalizeDeltaSync('project-id');
385
+ console.log('Синхронизация завершена:', finalResult.status);
386
+
387
+ // Мониторинг через WebSocket
388
+ sdk.projectSync.on('sync-progress', (progress) => {
389
+ console.log(`Обработано ${progress.currentChunk}/${progress.totalChunks} чанков`);
235
390
  });
236
391
  ```
237
392
 
238
- ### Автоматическое наблюдение за изменениями
393
+ ### 💬 Chat API (`sdk.chat`)
239
394
 
240
- ```javascript
241
- // Запуск file watcher (в разработке)
242
- const watcher = await sdk.startAutoSync('project-id', '/path/to/watch');
395
+ #### AI-ассистент
243
396
 
244
- // Проверка активности
245
- console.log(`👀 Auto-sync активен: ${watcher.isActive}`);
397
+ ```typescript
398
+ // Отправка сообщения
399
+ sendMessage(messages: Message[], options?: ChatOptions): Promise<ChatResponse>
246
400
 
247
- // Остановка наблюдения
248
- await watcher.stop();
249
- console.log('🔴 File watcher остановлен');
401
+ // Потоковый чат
402
+ streamChat(messages: Message[], options?: StreamChatOptions): AsyncGenerator<ChatChunk>
250
403
  ```
251
404
 
252
- ### Статус и управление
405
+ #### Примеры использования
253
406
 
254
407
  ```javascript
255
- // Проверка статуса синхронизации
256
- const status = await sdk.getSyncStatus('project-id');
257
- console.log(`📊 Статус: ${status.status}, прогресс: ${status.progress || 0}%`);
258
-
259
- // Отмена активной синхронизации
260
- const cancelled = await sdk.cancelSync('project-id');
261
- if (cancelled) {
262
- console.log('❌ Синхронизация отменена');
408
+ // Простой чат
409
+ const response = await sdk.chat.sendMessage([
410
+ { role: 'user', content: 'Объясни что такое async/await' }
411
+ ]);
412
+
413
+ console.log(response.choices[0].message.content);
414
+
415
+ // Потоковый чат
416
+ const stream = sdk.chat.streamChat([
417
+ { role: 'user', content: 'Напиши функцию сортировки' }
418
+ ]);
419
+
420
+ for await (const chunk of stream) {
421
+ process.stdout.write(chunk.choices[0]?.delta?.content || '');
263
422
  }
264
423
  ```
265
424
 
266
- ### Полный пример workflow
425
+ ## 💡 Рекомендации по использованию
426
+
427
+ ### Real-time уведомления
428
+ Для получения актуальных данных в реальном времени используйте WebSocket:
267
429
 
268
430
  ```javascript
269
- import { CodeSolverSDK } from 'solver-sdk';
431
+ // Правильно: WebSocket для real-time статуса
432
+ await sdk.connectWebSocket();
433
+ sdk.projectSync.on('sync-status-update', (status) => {
434
+ console.log(`Статус: ${status.status}, прогресс: ${status.progress}%`);
435
+ });
436
+
437
+ // ❌ Избегайте частых REST запросов
438
+ // setInterval(() => sdk.indexing.getStatus(id), 2000);
439
+ ```
270
440
 
271
- async function syncProject() {
272
- // 1. Создание SDK
273
- const sdk = await CodeSolverSDK.create({
274
- baseURL: 'http://localhost:3000',
275
- deltaChunking: {
276
- enabled: true,
277
- encryption: { enabled: true, key: 'my-secret-key-32-characters-long!' }
278
- },
279
- debug: 'info'
280
- });
281
-
282
- try {
283
- // 2. Синхронизация с прогрессом
284
- const result = await sdk.syncProject('my-project-id', './my-project', {
285
- onProgress: (current, total) => {
286
- const percent = Math.round((current / total) * 100);
287
- console.log(`🔄 Синхронизация: ${percent}% (${current}/${total} чанков)`);
288
- },
289
- ignorePatterns: ['node_modules/**', 'dist/**', '*.log']
290
- });
291
-
292
- // 3. Результат
293
- console.log('🎉 Синхронизация завершена:', {
294
- success: result.success,
295
- processedChunks: result.processedChunks,
296
- duration: result.duration + 'ms',
297
- newFiles: result.details?.newFiles,
298
- changedFiles: result.details?.changedFiles
299
- });
300
-
301
- // 4. Проверка финального статуса
302
- const status = await sdk.getSyncStatus('my-project-id');
303
- console.log(`✅ Финальный статус: ${status.status}`);
304
-
305
- } catch (error) {
306
- console.error('❌ Ошибка синхронизации:', error.message);
307
-
308
- // Отменяем если что-то пошло не так
309
- await sdk.cancelSync('my-project-id');
441
+ ### Обработка лимитов
442
+ SDK автоматически обрабатывает ограничения сервера. При превышении лимитов возвращается ошибка 429.
443
+
444
+ ## 🔧 Обработка ошибок
445
+
446
+ ```javascript
447
+ try {
448
+ const project = await sdk.projects.createProject('Test', '/path');
449
+ } catch (error) {
450
+ if (error.status === 401) {
451
+ console.error('Неверный API ключ');
452
+ } else if (error.status === 429) {
453
+ console.error('Слишком много запросов, попробуйте позже');
454
+ } else {
455
+ console.error('Ошибка API:', error.message);
310
456
  }
311
457
  }
312
458
 
313
- // Запуск
314
- syncProject();
459
+ // WebSocket ошибки
460
+ sdk.projectSync.on('error', (error) => {
461
+ if (error.recoverable) {
462
+ console.warn('Временная ошибка WebSocket:', error.error);
463
+ } else {
464
+ console.error('Критическая ошибка WebSocket:', error.error);
465
+ }
466
+ });
315
467
  ```
316
468
 
317
- ## 💡 Типы данных
469
+ ## 🚀 Продвинутое использование
318
470
 
319
- ### Project
320
- ```typescript
321
- interface Project {
322
- id: string;
323
- name: string;
324
- path: string;
325
- ready: boolean; // Готов к работе
326
- fileCount: number; // Количество файлов
327
- indexStatus: 'pending' | 'indexing' | 'indexed' | 'failed' | 'cancelled';
328
- indexingProgress?: number; // 0-100%
329
- languageStats?: {[lang: string]: number}; // Статистика языков
330
- indexingErrors?: any[]; // Ошибки индексации
331
- // ... и еще 10+ полей
332
- }
471
+ ### Настройка HTTP клиента
472
+
473
+ ```javascript
474
+ const sdk = new CodeSolverSDK({
475
+ baseURL: 'https://api.codesolver.dev',
476
+ apiKey: process.env.CODESOLVER_API_KEY,
477
+ timeout: 60000,
478
+ headers: {
479
+ 'User-Agent': 'MyApp/1.0.0',
480
+ 'X-Custom-Header': 'value'
481
+ }
482
+ });
333
483
  ```
334
484
 
335
- ### Delta-Chunking Types
485
+ ### WebSocket с переподключением
336
486
 
337
- ```typescript
338
- // Расширенная конфигурация CodeSolverSDK с delta-chunking
339
- interface CodeSolverSDKOptions {
340
- baseURL: string;
341
- apiKey?: string;
342
- deltaChunking?: { // ✨ Опциональная секция
343
- enabled: boolean; // Включение delta-chunking функциональности
344
-
345
- encryption?: {
346
- enabled: boolean; // Включить шифрование чанков
347
- key: string; // 32-символьный ключ для AES-256
348
- };
349
-
350
- chunking?: {
351
- maxTokens?: number; // Максимальный размер чанка (по умолчанию: 400)
352
- minTokens?: number; // Минимальный размер чанка (по умолчанию: 100)
353
- useTreeSitter?: boolean; // Использовать tree-sitter парсер (в разработке)
354
- preserveContext?: boolean; // Сохранять контекст между чанками
355
- };
356
-
357
- fileWatching?: {
358
- enabled: boolean; // Включить автоматическое наблюдение за изменениями
359
- pollInterval?: number; // Интервал проверки изменений в мс (по умолчанию: 1000)
360
- ignorePatterns?: string[]; // Паттерны для игнорирования файлов
361
- };
362
- };
363
- timeout?: number; // Таймаут запросов (мс)
364
- debug?: 'silent' | 'error' | 'warn' | 'info' | 'debug';
365
- }
487
+ ```javascript
488
+ const sdk = new CodeSolverSDK({
489
+ baseURL: 'wss://api.codesolver.dev',
490
+ webSocket: {
491
+ enabled: true,
492
+ maxRetries: 5,
493
+ retryDelay: 3000,
494
+ debug: true
495
+ }
496
+ });
366
497
 
367
- // Опции синхронизации
368
- interface SyncOptions {
369
- forceFull?: boolean; // Принудительная полная синхронизация
370
- batchSize?: number; // Размер батча для загрузки чанков (по умолчанию: 50)
371
- ignorePatterns?: string[]; // Паттерны для игнорирования файлов
372
- includeExtensions?: string[]; // Включать только определенные расширения
373
- maxFileSizeKB?: number; // Максимальный размер файла для обработки (KB)
374
- onProgress?: (current: number, total: number) => void; // Callback прогресса
375
- timeoutMs?: number; // Таймаут для операций
376
- }
498
+ sdk.projectSync.on('connected', () => {
499
+ console.log('WebSocket подключен');
500
+ });
377
501
 
378
- // Результат синхронизации
379
- interface SyncResult {
380
- success: boolean;
381
- projectId: string;
382
- sessionId?: string;
383
- processedChunks: number;
384
- totalChunks: number;
385
- duration: number; // Время выполнения в мс
386
- error?: string;
387
- details?: {
388
- newFiles: number;
389
- changedFiles: number;
390
- deletedFiles: number;
391
- failedChunks: number;
392
- };
393
- }
502
+ sdk.projectSync.on('disconnected', (data) => {
503
+ console.log('WebSocket отключен:', data.reason);
504
+ });
505
+ ```
394
506
 
395
- // Статус синхронизации
396
- interface SyncStatus {
397
- status: 'inactive' | 'initializing' | 'active' | 'finalizing' | 'completed' | 'failed';
398
- progress?: number; // 0-100%
399
- chunksReceived?: number;
400
- chunksProcessed?: number;
401
- sessionId?: string;
402
- errors?: string[];
403
- startTime?: Date;
404
- estimatedCompletion?: Date;
405
- }
507
+ ### Delta-Chunking с шифрованием
406
508
 
407
- // File watcher для автоматической синхронизации
408
- interface FileWatcher {
409
- projectId: string;
410
- watchPath: string;
411
- isActive: boolean;
412
- start(): Promise<void>;
413
- stop(): Promise<void>;
414
- }
509
+ ```javascript
510
+ const syncResult = await sdk.deltaSync.initializeSync('project-id', {
511
+ incremental: true,
512
+ compression: true,
513
+ encryption: true
514
+ });
415
515
 
416
- // Контент файла
417
- interface FileContent {
418
- path: string; // Относительный путь файла
419
- content: string; // Содержимое файла
420
- size: number; // Размер в байтах
421
- }
516
+ // Шифрование чанков на клиенте
517
+ const encryptedChunks = chunks.map(chunk => ({
518
+ ...chunk,
519
+ data: encrypt(chunk.data), // Ваша функция шифрования
520
+ hash: sha256(chunk.data)
521
+ }));
522
+
523
+ await sdk.deltaSync.sendDeltaChunks('project-id', encryptedChunks);
422
524
  ```
423
525
 
424
- ## 📚 Пример использования
526
+ ## 📊 Мониторинг и диагностика
425
527
 
426
528
  ```javascript
427
- import { CodeSolverSDK } from 'solver-sdk';
529
+ // Диагностика API
530
+ const diagnosis = await sdk.diagnoseAPI();
531
+ console.log('Статус API:', diagnosis);
428
532
 
429
- const sdk = await CodeSolverSDK.create({
430
- baseURL: 'http://localhost:3000'
431
- });
533
+ // Health check
534
+ const health = await sdk.httpClient.get('/health');
535
+ console.log('Здоровье сервера:', health);
432
536
 
433
- // Работа с проектом
434
- const project = await sdk.projects.createProject('My App', '/path/to/app');
435
- await sdk.projects.startIndexing(project.id);
436
-
437
- // Ожидание индексации
438
- let status;
439
- do {
440
- status = await sdk.projects.getIndexingStatus(project.id);
441
- console.log(`${status.status}: ${status.progress}%`);
442
- await new Promise(r => setTimeout(r, 2000));
443
- } while (status.status === 'indexing');
444
-
445
- // Поиск и чат
446
- const results = await sdk.search.searchCode(project.id, {
447
- query: 'function main',
448
- limit: 5
449
- });
450
-
451
- const response = await sdk.chat.chat([
452
- { role: 'user', content: 'Explain this code' }
453
- ], { projectId: project.id });
537
+ // Детальная информация о системе
538
+ const info = await sdk.httpClient.get('/health/info');
539
+ console.log('Информация о системе:', info);
454
540
  ```
455
541
 
456
- ## 🔧 Устранение неполадок
542
+ ## 🔄 Миграция с предыдущих версий
543
+
544
+ ### С версии 4.x на 5.x
457
545
 
458
546
  ```javascript
459
- // Проверка подключения
460
- const response = await fetch('http://localhost:3000/health');
461
- console.log('Backend доступен:', response.ok);
547
+ // Старый способ (4.x)
548
+ const status = await sdk.projects.getIndexingStatus(projectId);
462
549
 
463
- // Увеличение таймаута для больших проектов
464
- const sdk = await CodeSolverSDK.create({
465
- baseURL: 'http://localhost:3000',
466
- timeout: 120000 // 2 минуты
467
- });
550
+ // Новый способ (5.x)
551
+ const status = await sdk.indexing.getStatus(projectId);
468
552
 
469
- // Отладка с подробными логами
470
- const sdk = await CodeSolverSDK.create({
471
- baseURL: 'http://localhost:3000',
472
- debug: 'debug'
553
+ // Или лучше - WebSocket
554
+ sdk.projectSync.on('sync-status-update', (status) => {
555
+ // Real-time статус
473
556
  });
474
557
  ```
475
558
 
559
+ ## 📝 Changelog
560
+
561
+ ### v5.1.5 (Latest)
562
+ - ✅ Исправлена документация - убраны детали внутренней реализации
563
+ - ✅ Удалены несуществующие методы из документации
564
+ - ✅ Сосредоточено только на пользовательском API
565
+
566
+ ### v5.1.4
567
+ - ✅ Полная документация всех API методов
568
+ - ✅ Добавлен `IndexingApi` для управления индексацией
569
+ - ✅ Добавлен `ProjectSyncClient` для WebSocket уведомлений
570
+ - ✅ Исправлена генерация URL в `SearchApi`
571
+ - ✅ Добавлен метод `semanticSearch`
572
+ - ✅ Добавлен метод `findOrCreateProject`
573
+ - ✅ Улучшена обработка ошибок WebSocket
574
+ - ✅ Обновлена документация и примеры
575
+
576
+ ### v5.0.0
577
+ - 🚀 Полная переработка архитектуры
578
+ - 🔌 WebSocket поддержка для real-time уведомлений
579
+ - 🔄 Delta-chunking для эффективной синхронизации
580
+ - 🛡️ Автоматическая обработка лимитов сервера
581
+
582
+ ## 📞 Поддержка
583
+
584
+ - **GitHub**: [Issues](https://github.com/codesolver/solver-sdk/issues)
585
+ - **Email**: support@codesolver.dev
586
+ - **Документация**: [docs.codesolver.dev](https://docs.codesolver.dev)
587
+
476
588
  ## 📄 Лицензия
477
589
 
478
- MIT License
590
+ MIT License - см. [LICENSE](LICENSE) файл.
479
591
 
480
592
  ---
481
593
 
482
- > **Документация актуальна для v5.0.0**
483
- > История изменений: [CHANGELOG.md](CHANGELOG.md)
594
+ **🚀 Code Solver SDK v5.1.5** - Создано с ❤️ для разработчиков