solver-sdk 3.1.18 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +114 -505
  2. package/dist/cjs/api/chat-api/cancel-methods.js +77 -0
  3. package/dist/cjs/api/chat-api/cancel-methods.js.map +1 -0
  4. package/dist/cjs/api/chat-api/index.js +3 -2
  5. package/dist/cjs/api/chat-api/index.js.map +1 -1
  6. package/dist/cjs/api/chat-api/interfaces.js.map +1 -1
  7. package/dist/cjs/api/projects-api.js +119 -77
  8. package/dist/cjs/api/projects-api.js.map +1 -1
  9. package/dist/cjs/api/tools-api.js +86 -0
  10. package/dist/cjs/api/tools-api.js.map +1 -0
  11. package/dist/cjs/code-solver-sdk.js +10 -0
  12. package/dist/cjs/code-solver-sdk.js.map +1 -1
  13. package/dist/cjs/index.js +1 -0
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/types/index.js +2 -1
  16. package/dist/cjs/types/index.js.map +1 -1
  17. package/dist/esm/api/chat-api/cancel-methods.js +73 -0
  18. package/dist/esm/api/chat-api/cancel-methods.js.map +1 -0
  19. package/dist/esm/api/chat-api/index.js +3 -2
  20. package/dist/esm/api/chat-api/index.js.map +1 -1
  21. package/dist/esm/api/chat-api/interfaces.js.map +1 -1
  22. package/dist/esm/api/projects-api.js +119 -77
  23. package/dist/esm/api/projects-api.js.map +1 -1
  24. package/dist/esm/api/tools-api.js +82 -0
  25. package/dist/esm/api/tools-api.js.map +1 -0
  26. package/dist/esm/code-solver-sdk.js +10 -0
  27. package/dist/esm/code-solver-sdk.js.map +1 -1
  28. package/dist/esm/index.js +1 -0
  29. package/dist/esm/index.js.map +1 -1
  30. package/dist/esm/types/index.js +2 -1
  31. package/dist/esm/types/index.js.map +1 -1
  32. package/dist/types/api/chat-api/cancel-methods.d.ts +57 -0
  33. package/dist/types/api/chat-api/cancel-methods.d.ts.map +1 -0
  34. package/dist/types/api/chat-api/index.d.ts +2 -2
  35. package/dist/types/api/chat-api/index.d.ts.map +1 -1
  36. package/dist/types/api/chat-api/interfaces.d.ts +18 -0
  37. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
  38. package/dist/types/api/projects-api.d.ts +88 -40
  39. package/dist/types/api/projects-api.d.ts.map +1 -1
  40. package/dist/types/api/tools-api.d.ts +61 -0
  41. package/dist/types/api/tools-api.d.ts.map +1 -0
  42. package/dist/types/code-solver-sdk.d.ts +8 -0
  43. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  44. package/dist/types/index.d.ts +1 -0
  45. package/dist/types/index.d.ts.map +1 -1
  46. package/dist/types/types/index.d.ts +218 -8
  47. package/dist/types/types/index.d.ts.map +1 -1
  48. package/package.json +1 -1
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
- # Code Solver SDK v3.1.15
1
+ # Code Solver SDK v5.0.0
2
2
 
3
- > **JavaScript/TypeScript SDK для VS Code Extensions**
4
- > Подключение к AI бэкенду для индексации, поиска и работы с кодом
3
+ > **🗑️ Ультра-чистый JavaScript/TypeScript SDK для VS Code Extensions**
4
+ > Без legacy кода, без мертвых методов, только актуальный API
5
5
 
6
6
  JavaScript/TypeScript SDK для работы с Code Solver API. Предоставляет простой интерфейс для индексации кода, семантического поиска функций и работы с AI чатом.
7
7
 
@@ -9,87 +9,15 @@ JavaScript/TypeScript SDK для работы с Code Solver API. Предост
9
9
 
10
10
  - **💬 Chat API** - взаимодействие с AI моделями (Claude, GPT)
11
11
  - **🔍 Code Search** - семантический поиск по коду и функциям
12
- - **📊 Project Indexing** - индексация и анализ проектов
12
+ - **📊 Project Indexing** - индексация и анализ проектов с **богатой информацией**
13
13
  - **📝 Context API** - получение контекста для AI
14
14
  - **🛠️ Code Modification** - модификация кода через AI
15
15
  - **🔇 Настраиваемое логирование** - полный контроль над выводом в консоль
16
+ - **✨ Улучшенная типизация** - полные TypeScript типы с примерами и документацией
16
17
 
17
- ## 🔄 Последние обновления v3.1.15
18
+ ## 🚀 Что нового в v5.0.0
18
19
 
19
- ### 🐛 Критические исправления (v3.1.15)
20
-
21
- - **ИСПРАВЛЕНА КРИТИЧЕСКАЯ ОШИБКА 404**: Полностью обновлен SDK для работы с унифицированным API
22
- - Все методы теперь используют правильный endpoint `/api/v1/projects`
23
- - Убраны ссылки на несуществующий endpoint `/projects/find-or-create`
24
- - Полная совместимость с backend API v3.1.14
25
- - Решены все проблемы с дедупликацией проектов
26
-
27
- ### 🎯 Унифицированная архитектура
28
-
29
- - **Один endpoint для всех операций**: Все методы создания проектов используют единый `POST /projects` с автоматической дедупликацией
30
- - **Никаких дубликатов**: Система автоматически находит существующие проекты по пути
31
- - **Упрощенная API**: Убрана избыточность, улучшена консистентность
32
-
33
- ### 🔄 Предыдущие обновления v3.1.9
34
-
35
- ### ✅ КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: Соответствие официальной документации Anthropic API
36
-
37
- - **🔧 Tool choice валидация**: Исправлена согласно официальной документации
38
- - Только `tool_choice: "any"` или `{ type: "any" }` с thinking (как в документации)
39
- - Убраны неточные валидации `auto`, `none` с thinking
40
- - **🛡️ Interleaved thinking**: Улучшена логика добавления beta header
41
- - Добавляет `interleaved-thinking-2025-05-14` только если `options.beta` не установлен
42
- - **📋 onEvent callback**: Финальное исправление структуры данных
43
- - 100% соответствие стандарту Anthropic API в onEvent callbacks
44
-
45
- ### v3.1.8 (предыдущие обновления)
46
-
47
- ### 🚨 КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ: onEvent callback данные
48
- - **Проблема решена**: onEvent callback теперь получает **оригинальные события Anthropic API**
49
- - **Исправлено**: `content_block_start` содержит полный `content_block` объект с правильными `id`, `name`, `input`
50
- - **Исправлено**: `input_json_delta` передается как `delta.type: 'input_json_delta'` вместо обычного text
51
- - **Убрано**: Лишние поля `projectId`, `timestamp` которые нарушали стандарт Anthropic
52
- - **Результат**: Полная совместимость с Anthropic API стандартом для tool_use событий
53
-
54
- ### 🔧 Что было исправлено:
55
- ```javascript
56
- // ❌ БЫЛО (v3.1.7): onEvent получал обработанные данные
57
- onEvent: (type, data) => {
58
- // data содержал: { projectId, timestamp, content_block: null }
59
- }
60
-
61
- // ✅ СТАЛО (v3.1.8): onEvent получает оригинальные данные
62
- onEvent: (type, data) => {
63
- // data содержит стандартные Anthropic события:
64
- // content_block_start: { type, index, content_block: { type: 'tool_use', id, name, input } }
65
- // content_block_delta: { type, index, delta: { type: 'input_json_delta', partial_json } }
66
- }
67
- ```
68
-
69
- ### v3.1.7 (предыдущие обновления)
70
-
71
- ### 🚨 ИСПРАВЛЕНО: Избыточное логирование в консоли
72
- - **Проблема решена**: SDK больше не создает спам в Developer Console VS Code
73
- - **Новые уровни логирования**: `'silent' | 'error' | 'warn' | 'info' | 'debug'`
74
- - **Детальный контроль потоков**: Настройка логирования SSE событий, chunk'ов и callbacks
75
- - **Обратная совместимость**: Старые опции `debug: true/false/'verbose'` работают как раньше
76
-
77
- ### v3.1.6 (предыдущие обновления)
78
-
79
- - **🔧 КРИТИЧЕСКОЕ ИСПРАВЛЕНИЕ**: Восстановлена передача `content_block_start` событий для `tool_use` блоков
80
- - **✅ Tool Continuation**: Исправлена поддержка tool continuation функциональности
81
- - **🛠️ Новые события**: Добавлена обработка `input_json_delta`, `signature_delta` для инструментов
82
- - **📊 Улучшенная обработка**: Корректная обработка всех типов content блоков (thinking, text, tool_use)
83
- - **🔒 Валидация**: Исправлена валидация `tool_choice` согласно документации Anthropic
84
-
85
- ### v3.1.5 (предыдущие улучшения)
86
- - **✅ Исправлена критическая проблема `toJSON`** - решена ошибка сериализации в VS Code IPC
87
- - **🆕 Новые API методы**: `getIndexingStatus()`, `getProjectInfo()` для безопасной работы
88
- - **🔧 Безопасная сериализация**: Все Date объекты автоматически преобразуются в ISO строки
89
- - **🧠 Thinking API**: Полная поддержка мышления Claude с real-time выводом
90
- - **📊 Real-time данные**: Приоритет live данных над статическими из БД
91
-
92
- > **Для разработчиков инструментов**: v3.1.6 восстанавливает корректную работу tool continuation!
20
+ > **Чистая версия** - убраны все устаревшие методы. Только актуальный API без мертвого кода.
93
21
 
94
22
  ## 📦 Установка
95
23
 
@@ -97,518 +25,199 @@ onEvent: (type, data) => {
97
25
  npm install solver-sdk
98
26
  ```
99
27
 
100
- ## 🔇 Настройка логирования (v3.1.7+)
101
-
102
- SDK предлагает гибкую систему логирования для контроля вывода в консоль:
103
-
104
- ### 📊 Уровни логирования
105
- ```javascript
106
- const sdk = await CodeSolverSDK.create({
107
- baseURL: 'http://localhost:3000',
108
-
109
- // Уровни логирования (от тихого к подробному):
110
- debug: 'silent', // Полное отключение (даже ошибки)
111
- debug: 'error', // Только ошибки (рекомендуется для VS Code)
112
- debug: 'warn', // Предупреждения и ошибки
113
- debug: 'info', // Базовая информация
114
- debug: 'debug', // Подробная отладка
115
-
116
- // Обратная совместимость:
117
- debug: false, // Отключено
118
- debug: true, // Базовое логирование
119
- debug: 'verbose' // Подробное (аналог 'debug')
120
- });
121
- ```
28
+ ## ⚙️ Конфигурация
122
29
 
123
- ### 🎛️ Детальный контроль потоков
124
30
  ```javascript
125
31
  const sdk = await CodeSolverSDK.create({
126
- baseURL: 'http://localhost:3000',
127
- debug: 'debug', // или любой уровень
128
-
129
- // Точная настройка логирования потоков:
130
- streamLogging: {
131
- sseEvents: false, // SSE события (content_block_start/delta/stop)
132
- streamChunks: false, // Chunk'и потока (каждый кусок текста)
133
- eventCallbacks: false,// onEvent callback'и
134
- importantOnly: true // Только важные события (start, stop, errors)
135
- }
32
+ baseURL: 'http://localhost:3000', // Обязательный
33
+ apiKey: 'your-api-key', // Опционально
34
+ timeout: 30000, // Таймаут запросов (мс)
35
+ debug: 'error' // Уровень логирования
136
36
  });
137
37
  ```
138
38
 
139
- ### 🎯 Рекомендуемые настройки
140
- ```javascript
141
- // 🔹 VS Code Extension (production):
142
- debug: 'error'
143
-
144
- // 🔹 Development:
145
- debug: 'info'
146
-
147
- // 🔹 Deep debugging:
148
- debug: 'debug',
149
- streamLogging: { sseEvents: true, streamChunks: true }
150
-
151
- // 🔹 Полная тишина:
152
- debug: 'silent'
153
- ```
39
+ ### 📊 Уровни логирования
40
+ - `'silent'` - полное отключение
41
+ - `'error'` - только ошибки (рекомендуется)
42
+ - `'warn'` - предупреждения и ошибки
43
+ - `'info'` - базовая информация
44
+ - `'debug'` - подробная отладка
154
45
 
155
46
  ## 🚀 Быстрый старт
156
47
 
157
48
  ```javascript
158
49
  import { CodeSolverSDK } from 'solver-sdk';
159
50
 
160
- // Создание SDK с чистой консолью (рекомендуется для VS Code)
51
+ // Создание SDK
161
52
  const sdk = await CodeSolverSDK.create({
162
53
  baseURL: 'http://localhost:3000',
163
- debug: 'error' // Только ошибки, никакого спама
54
+ debug: 'error' // Рекомендуемый уровень для production
164
55
  });
165
56
 
166
- // Или с детальным логированием для отладки
167
- const debugSdk = await CodeSolverSDK.create({
168
- baseURL: 'http://localhost:3000',
169
- debug: 'debug',
170
- streamLogging: {
171
- sseEvents: true, // Логировать SSE события
172
- streamChunks: true, // Логировать chunk'и потока
173
- eventCallbacks: true // Логировать onEvent callbacks
174
- }
175
- });
176
-
177
- // Создание и индексация проекта
178
- const project = await sdk.projects.findOrCreateProject(
179
- '/path/to/project',
180
- 'My Project'
57
+ // 1. Создание проекта автоматической дедупликацией)
58
+ const project = await sdk.projects.createProject(
59
+ 'My Project',
60
+ '/path/to/project'
181
61
  );
182
62
 
63
+ // 2. Запуск индексации
183
64
  await sdk.projects.startIndexing(project.id);
184
65
 
185
- // 📝 Важно (v3.1.15): Все методы создания проектов теперь используют
186
- // единый endpoint /api/v1/projects с автоматической дедупликацией.
187
- // Никаких дубликатов проектов!
66
+ // 3. Проверка статуса
67
+ const status = await sdk.projects.getIndexingStatus(project.id);
68
+ console.log(`Статус: ${status.status}, прогресс: ${status.progress}%`);
188
69
 
189
- // Поиск кода
190
- const searchResults = await sdk.search.searchCode(project.id, {
70
+ // 4. Поиск в коде
71
+ const results = await sdk.search.searchCode(project.id, {
191
72
  query: 'function calculateSum',
192
73
  limit: 10
193
74
  });
194
75
 
195
- // Поиск функций
196
- const functions = await sdk.search.searchFunctions(project.id, {
197
- query: 'FileIndexingService',
198
- limit: 5
199
- });
200
-
201
- // Работа с чатом
76
+ // 5. Чат с AI
202
77
  const response = await sdk.chat.chat([
203
- { role: 'user', content: 'Объясни этот код' }
78
+ { role: 'user', content: 'Объясни найденный код' }
204
79
  ], { projectId: project.id });
205
80
 
206
- // Потоковый чат с thinking (мышлением)
207
- for await (const chunk of sdk.chat.streamChat([
208
- { role: 'user', content: 'Объясни рекурсию пошагово' }
209
- ], {
210
- projectId: project.id,
211
- thinking: {
212
- type: 'enabled',
213
- budget_tokens: 5000
214
- },
215
- onEvent: (type, data) => {
216
- if (type === 'content_block_delta' && data.delta?.type === 'thinking_delta') {
217
- console.log(`🧠 Думает: ${data.delta.thinking}`);
218
- } else if (type === 'content_block_delta' && data.delta?.type === 'text_delta') {
219
- console.log(`💬 Отвечает: ${data.delta.text}`);
220
- }
221
- }
222
- })) {
223
- if (chunk.text) {
224
- process.stdout.write(chunk.text);
225
- }
226
- }
81
+ console.log(response.content);
227
82
  ```
228
83
 
229
84
  ## 📋 API Методы
230
85
 
231
86
  ### 📁 Projects API
232
87
  ```javascript
233
- // Создание проекта (исправленная сигнатура)
234
- await sdk.projects.createProject(
235
- 'Project Name', // name
236
- '/project/path', // path
237
- { description: 'Desc' } // data (опционально)
238
- );
239
-
240
- // Получение списка проектов
241
- await sdk.projects.getProjects();
242
-
243
- // Получение информации о проекте
244
- await sdk.projects.getProject(projectId);
88
+ // Создание проекта
89
+ await sdk.projects.createProject('Project Name', '/project/path');
90
+ await sdk.projects.createProject('Project Name', '/project/path', { description: 'Optional' });
245
91
 
246
- // Получение готовых проектов
247
- await sdk.projects.getReadyProjects();
92
+ // Получение проектов
93
+ await sdk.projects.getAllProjects(); // Все проекты
94
+ await sdk.projects.getReadyProjects(); // Только готовые к работе
95
+ await sdk.projects.getProject(projectId); // Конкретный проект с полной информацией
248
96
  ```
249
97
 
250
- ### 🔄 Projects & Indexing API
98
+ ### ⚙️ Indexing API
251
99
  ```javascript
252
- // Создание/поиск проекта и запуск индексации
253
- const project = await sdk.projects.findOrCreateProject('/path/to/project', 'Project Name');
254
- await sdk.projects.startIndexing(project.id, { force: false }); // options опционально
255
-
256
- // Получение real-time статуса индексации
257
- const indexingStatus = await sdk.projects.getIndexingStatus(project.id);
258
- console.log('Статус:', indexingStatus.status, 'Прогресс:', indexingStatus.progress + '%');
259
-
260
- // Получение общей информации о проекте
261
- const projectInfo = await sdk.projects.getProjectInfo(project.id);
262
-
263
- // Ожидание завершения индексации
264
- while (true) {
265
- const status = await sdk.projects.getIndexingStatus(project.id);
266
- console.log(`Прогресс: ${status.progress}%, Файлы: ${status.processedFiles}/${status.totalFiles}`);
267
-
268
- if (status.status === 'complete') break;
269
- if (status.status === 'failed') throw new Error('Ошибка индексации: ' + status.error);
270
-
271
- await new Promise(resolve => setTimeout(resolve, 2000));
272
- }
100
+ // Управление индексацией
101
+ await sdk.projects.startIndexing(projectId);
102
+ await sdk.projects.cancelIndexing(projectId);
103
+
104
+ // Статус индексации
105
+ const status = await sdk.projects.getIndexingStatus(projectId);
106
+ console.log(`${status.status}: ${status.progress}%`);
273
107
  ```
274
108
 
275
109
  ### 🔍 Search API
276
110
  ```javascript
277
- // Поиск кода (гибкая сигнатура)
278
- // Способ 1: projectId отдельно
279
- await sdk.search.searchCode(projectId, {
280
- query: 'search query',
111
+ // Поиск в коде
112
+ const results = await sdk.search.searchCode(projectId, {
113
+ query: 'function name',
281
114
  limit: 20
282
115
  });
283
116
 
284
- // Способ 2: projectId в параметрах
285
- await sdk.search.searchCode({
286
- projectId: projectId,
287
- query: 'search query',
288
- limit: 20
289
- });
290
-
291
- // Поиск функций (гибкая сигнатура)
292
- // Способ 1: projectId отдельно
117
+ // Поиск функций
293
118
  const functions = await sdk.search.searchFunctions(projectId, {
294
- query: 'calculateSum',
295
- limit: 10
296
- });
297
-
298
- // Способ 2: projectId в параметрах
299
- const functions = await sdk.search.searchFunctions({
300
- projectId: projectId,
301
- query: 'calculateSum',
119
+ query: 'calculateSum',
302
120
  limit: 10
303
121
  });
304
122
 
305
- // Статистика функций в проекте
123
+ // Статистика
306
124
  const stats = await sdk.search.getFunctionStats(projectId);
307
- console.log(`Всего функций: ${stats.stats.totalFunctions}`);
308
125
  ```
309
126
 
310
127
  ### 💬 Chat API
311
128
  ```javascript
312
- // Обычный чат (projectId опционален в реализации, но рекомендуется)
129
+ // Обычный чат
313
130
  const response = await sdk.chat.chat([
314
- { role: 'user', content: 'Объясни этот код' }
315
- ], { projectId: 'your-project-id' }); // projectId опционален
131
+ { role: 'user', content: 'Explain this code' }
132
+ ], { projectId });
316
133
 
317
- // Потоковый чат
318
- for await (const chunk of sdk.chat.streamChat(messages, { projectId: 'your-project-id' })) {
134
+ // Потоковый чат
135
+ for await (const chunk of sdk.chat.streamChat(messages, { projectId })) {
319
136
  console.log(chunk.text);
320
137
  }
321
138
 
322
- // 🧠 Chat с thinking (мышлением Claude)
323
- const response = await sdk.chat.chat([
324
- { role: 'user', content: 'Объясни рекурсию подробно' }
325
- ], {
326
- projectId: 'your-project-id',
327
- thinking: {
328
- type: 'enabled',
329
- budget_tokens: 5000 // Бюджет для мышления
330
- }
139
+ // С thinking (мышление Claude)
140
+ const response = await sdk.chat.chat(messages, {
141
+ projectId,
142
+ thinking: { type: 'enabled', budget_tokens: 5000 }
331
143
  });
144
+ ```
145
+
146
+ ## 💡 Типы данных
332
147
 
333
- // 🧠 Потоковый чат с thinking и real-time выводом
334
- for await (const chunk of sdk.chat.streamChat([
335
- { role: 'user', content: 'Проанализируй архитектуру проекта' }
336
- ], {
337
- projectId: 'your-project-id',
338
- thinking: {
339
- type: 'enabled',
340
- budget_tokens: 8000
341
- },
342
- onEvent: (type, data) => {
343
- if (type === 'content_block_delta' && data.delta?.type === 'thinking_delta') {
344
- console.log(`🧠 Думает: ${data.delta.thinking}`);
345
- } else if (type === 'content_block_delta' && data.delta?.type === 'text_delta') {
346
- console.log(`💬 Отвечает: ${data.delta.text}`);
347
- }
348
- }
349
- })) {
350
- if (chunk.text) {
351
- process.stdout.write(chunk.text);
352
- }
148
+ ### Project
149
+ ```typescript
150
+ interface Project {
151
+ id: string;
152
+ name: string;
153
+ path: string;
154
+ ready: boolean; // Готов к работе
155
+ fileCount: number; // Количество файлов
156
+ indexStatus: 'pending' | 'indexing' | 'indexed' | 'failed' | 'cancelled';
157
+ indexingProgress?: number; // 0-100%
158
+ languageStats?: {[lang: string]: number}; // Статистика языков
159
+ indexingErrors?: any[]; // Ошибки индексации
160
+ // ... и еще 10+ полей
353
161
  }
354
162
  ```
355
163
 
356
- ## ⚙️ Конфигурация
164
+ ## 📚 Пример использования
357
165
 
358
166
  ```javascript
167
+ import { CodeSolverSDK } from 'solver-sdk';
168
+
359
169
  const sdk = await CodeSolverSDK.create({
360
- baseURL: 'http://localhost:3000', // Обязательный
361
- apiKey: 'your-api-key', // Рекомендуется
362
- timeout: 30000, // Таймаут запросов
363
- debug: false // Отладка
170
+ baseURL: 'http://localhost:3000'
364
171
  });
365
- ```
366
-
367
- **⚠️ Важно**: Для Chat API `projectId` **рекомендуется**, но не обязателен в реализации:
368
- ```javascript
369
- // ✅ РАБОТАЕТ (но без контекста проекта)
370
- const response = await sdk.chat.chat(messages);
371
-
372
- // ✅ РЕКОМЕНДУЕТСЯ (с контекстом проекта)
373
- const response = await sdk.chat.chat(messages, { projectId: 'your-project-id' });
374
-
375
- // 💡 Получить projectId можно так:
376
- const projects = await sdk.projects.getReadyProjects();
377
- const projectId = projects[0].id;
378
- ```
379
172
 
380
- ## 🧪 Тестирование
381
-
382
- ```bash
383
- # Все тесты
384
- npm test
385
-
386
- # Только HTTP тесты
387
- npm test -- --testNamePattern="HTTP"
388
-
389
- # Интеграционные тесты
390
- npm run test:integration
391
-
392
- # Тесты индексации
393
- npm test -- --testPathPattern="indexing"
394
- ```
395
-
396
- ## 📚 Примеры использования
397
-
398
- ### Полный цикл работы с проектом
399
-
400
- ```javascript
401
- import { CodeSolverSDK } from 'solver-sdk';
173
+ // Работа с проектом
174
+ const project = await sdk.projects.createProject('My App', '/path/to/app');
175
+ await sdk.projects.startIndexing(project.id);
402
176
 
403
- async function fullWorkflow() {
404
- const sdk = await CodeSolverSDK.create({
405
- baseURL: 'http://localhost:3000'
406
- });
407
-
408
- try {
409
- // 1. Создаем проект
410
- const project = await sdk.projects.findOrCreateProject(
411
- '/path/to/react-app',
412
- 'My React App'
413
- );
414
-
415
- // 2. Запускаем индексацию
416
- console.log('Запуск индексации...');
417
- await sdk.projects.startIndexing(project.id);
418
-
419
- // 3. Ждем завершения индексации
420
- console.log('Ожидание завершения индексации...');
421
- while (true) {
422
- const status = await sdk.projects.getIndexingStatus(project.id);
423
- if (status.status === 'complete') break;
424
- if (status.status === 'failed') throw new Error('Ошибка индексации: ' + status.error);
425
- await new Promise(resolve => setTimeout(resolve, 2000));
426
- }
427
-
428
- // 4. Ищем React компоненты
429
- const components = await sdk.search.searchCode(project.id, {
430
- query: 'React.Component class',
431
- limit: 10
432
- });
433
-
434
- // 5. Задаем вопрос AI о коду
435
- const aiResponse = await sdk.chat.chat([
436
- {
437
- role: 'user',
438
- content: `Проанализируй найденные React компоненты: ${JSON.stringify(components)}`
439
- }
440
- ], { projectId: project.id });
441
-
442
- console.log('✅ Анализ завершен');
443
- console.log('📊 Компоненты:', components.results.length);
444
- console.log('🤖 AI анализ:', aiResponse.content);
445
-
446
- } catch (error) {
447
- console.error('❌ Ошибка:', error.message);
448
- }
449
- }
177
+ // Ожидание индексации
178
+ let status;
179
+ do {
180
+ status = await sdk.projects.getIndexingStatus(project.id);
181
+ console.log(`${status.status}: ${status.progress}%`);
182
+ await new Promise(r => setTimeout(r, 2000));
183
+ } while (status.status === 'indexing');
184
+
185
+ // Поиск и чат
186
+ const results = await sdk.search.searchCode(project.id, {
187
+ query: 'function main',
188
+ limit: 5
189
+ });
450
190
 
451
- fullWorkflow();
191
+ const response = await sdk.chat.chat([
192
+ { role: 'user', content: 'Explain this code' }
193
+ ], { projectId: project.id });
452
194
  ```
453
195
 
454
196
  ## 🔧 Устранение неполадок
455
197
 
456
- ### ✅ Исправлена проблема toJSON (v3.1.5)
457
- ```javascript
458
- // ❌ СТАРАЯ ОШИБКА (до v3.1.5):
459
- // CodeExpectedError: Method not found: toJSON
460
-
461
- // ✅ РЕШЕНИЕ: Обновите SDK до последней версии
462
- npm install solver-sdk@latest # v3.1.15
463
-
464
- // ✅ Теперь все API возвращают JSON-совместимые объекты
465
- const status = await sdk.projects.getIndexingStatus(projectId);
466
- // Все Date объекты автоматически преобразуются в ISO строки
467
- ```
468
-
469
- ### Проблемы с подключением
470
198
  ```javascript
471
- // Проверка здоровья API
472
- const isHealthy = await sdk.checkHealth();
473
- console.log('API доступен:', isHealthy);
474
- ```
199
+ // Проверка подключения
200
+ const response = await fetch('http://localhost:3000/health');
201
+ console.log('Backend доступен:', response.ok);
475
202
 
476
- ### Таймауты и повторы
477
- ```javascript
478
- // Увеличение таймаутов для больших проектов
203
+ // Увеличение таймаута для больших проектов
479
204
  const sdk = await CodeSolverSDK.create({
480
205
  baseURL: 'http://localhost:3000',
481
206
  timeout: 120000 // 2 минуты
482
207
  });
208
+
209
+ // Отладка с подробными логами
210
+ const sdk = await CodeSolverSDK.create({
211
+ baseURL: 'http://localhost:3000',
212
+ debug: 'debug'
213
+ });
483
214
  ```
484
215
 
485
216
  ## 📄 Лицензия
486
217
 
487
218
  MIT License
488
219
 
489
- ## 🔧 Индексация: полный workflow
490
-
491
- ```javascript
492
- async function indexProject(projectPath, projectName) {
493
- const sdk = await CodeSolverSDK.create({
494
- baseURL: 'http://localhost:3000'
495
- });
496
-
497
- // 1. Создать/найти проект
498
- const project = await sdk.projects.findOrCreateProject(projectPath, projectName);
499
-
500
- // 2. Запустить индексацию
501
- await sdk.projects.startIndexing(project.id);
502
-
503
- // 3. Мониторинг прогресса
504
- while (true) {
505
- const status = await sdk.projects.getIndexingStatus(project.id);
506
-
507
- if (status.status === 'complete') {
508
- console.log('✅ Индексация завершена!');
509
- break;
510
- } else if (status.status === 'failed') {
511
- console.log('❌ Ошибка:', status.error);
512
- break;
513
- }
514
-
515
- console.log(`📊 Прогресс: ${status.progress || 0}%`);
516
- await new Promise(resolve => setTimeout(resolve, 2000));
517
- }
518
-
519
- return project;
520
- }
521
- ```
522
-
523
- ## 🔌 VS Code Extension (готовый код)
524
-
525
- ```typescript
526
- import { CodeSolverSDK } from 'solver-sdk';
527
- import * as vscode from 'vscode';
528
-
529
- let sdk: CodeSolverSDK;
530
-
531
- export async function activate(context: vscode.ExtensionContext) {
532
- sdk = await CodeSolverSDK.create({
533
- baseURL: 'http://localhost:3000'
534
- });
535
-
536
- // Команда индексации
537
- const indexCmd = vscode.commands.registerCommand('extension.indexProject', async () => {
538
- const folder = vscode.workspace.workspaceFolders?.[0];
539
- if (!folder) return;
540
-
541
- return vscode.window.withProgress({
542
- location: vscode.ProgressLocation.Notification,
543
- title: 'Индексация проекта',
544
- cancellable: false
545
- }, async (progress) => {
546
- const project = await sdk.projects.findOrCreateProject(folder.uri.fsPath, folder.name);
547
- await sdk.projects.startIndexing(project.id);
548
-
549
- while (true) {
550
- const status = await sdk.projects.getIndexingStatus(project.id);
551
- if (status.status === 'complete') break;
552
- progress.report({ message: `${status.progress || 0}%` });
553
- await new Promise(resolve => setTimeout(resolve, 2000));
554
- }
555
-
556
- vscode.window.showInformationMessage('✅ Проект проиндексирован!');
557
- });
558
- });
559
-
560
- // Команда поиска функций
561
- const searchCmd = vscode.commands.registerCommand('extension.searchFunctions', async () => {
562
- const query = await vscode.window.showInputBox({ prompt: 'Поиск функций' });
563
- if (!query) return;
564
-
565
- const projects = await sdk.projects.getReadyProjects();
566
- if (projects.length === 0) return;
567
-
568
- const response = await sdk.search.searchFunctions(projects[0].id, { query, limit: 20 });
569
-
570
- if (!response.success || response.results.length === 0) {
571
- vscode.window.showInformationMessage('Функции не найдены');
572
- return;
573
- }
574
-
575
- const items = response.results.map(fn => ({
576
- label: fn.name,
577
- description: fn.signature,
578
- detail: `${fn.filePath}:${fn.startLine}`,
579
- function: fn
580
- }));
581
-
582
- const selected = await vscode.window.showQuickPick(items);
583
- if (selected) {
584
- const doc = await vscode.workspace.openTextDocument(selected.function.filePath);
585
- const editor = await vscode.window.showTextDocument(doc);
586
-
587
- const range = new vscode.Range(
588
- selected.function.startLine - 1, 0,
589
- selected.function.endLine - 1, 0
590
- );
591
-
592
- editor.selection = new vscode.Selection(range.start, range.end);
593
- editor.revealRange(range, vscode.TextEditorRevealType.InCenter);
594
- }
595
- });
596
-
597
- context.subscriptions.push(indexCmd, searchCmd);
598
- }
599
-
600
- // package.json для VS Code Extension
601
- {
602
- "contributes": {
603
- "commands": [
604
- { "command": "extension.indexProject", "title": "📊 Индексировать проект" },
605
- { "command": "extension.searchFunctions", "title": "🔍 Поиск функций" }
606
- ]
607
- },
608
- "dependencies": { "solver-sdk": "^3.1.5" }
609
- }
610
- ```
611
-
612
220
  ---
613
221
 
614
- **🎉 Один файл = полная документация!**
222
+ > **Документация актуальна для v5.0.0**
223
+ > История изменений: [CHANGELOG.md](CHANGELOG.md)