solver-sdk 1.0.6 → 1.2.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 (58) hide show
  1. package/README.md +177 -3
  2. package/dist/cjs/api/dependencies-api.js +131 -0
  3. package/dist/cjs/api/dependencies-api.js.map +1 -0
  4. package/dist/cjs/api/models-api.js +140 -0
  5. package/dist/cjs/api/models-api.js.map +1 -0
  6. package/dist/cjs/api/projects-api.js +22 -0
  7. package/dist/cjs/api/projects-api.js.map +1 -1
  8. package/dist/cjs/api/reasoning-api.js +8 -0
  9. package/dist/cjs/api/reasoning-api.js.map +1 -1
  10. package/dist/cjs/code-solver-sdk.js +45 -4
  11. package/dist/cjs/code-solver-sdk.js.map +1 -1
  12. package/dist/cjs/index.js +6 -2
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/models/types.js +35 -1
  15. package/dist/cjs/models/types.js.map +1 -1
  16. package/dist/cjs/utils/code-solver-websocket-client.js +52 -16
  17. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  18. package/dist/cjs/utils/http-client.js +6 -0
  19. package/dist/cjs/utils/http-client.js.map +1 -1
  20. package/dist/esm/api/dependencies-api.js +127 -0
  21. package/dist/esm/api/dependencies-api.js.map +1 -0
  22. package/dist/esm/api/models-api.js +136 -0
  23. package/dist/esm/api/models-api.js.map +1 -0
  24. package/dist/esm/api/projects-api.js +22 -0
  25. package/dist/esm/api/projects-api.js.map +1 -1
  26. package/dist/esm/api/reasoning-api.js +8 -0
  27. package/dist/esm/api/reasoning-api.js.map +1 -1
  28. package/dist/esm/code-solver-sdk.js +45 -4
  29. package/dist/esm/code-solver-sdk.js.map +1 -1
  30. package/dist/esm/index.js +3 -1
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/models/types.js +34 -0
  33. package/dist/esm/models/types.js.map +1 -1
  34. package/dist/esm/utils/code-solver-websocket-client.js +52 -16
  35. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  36. package/dist/esm/utils/http-client.js +6 -0
  37. package/dist/esm/utils/http-client.js.map +1 -1
  38. package/dist/types/api/dependencies-api.d.ts +54 -0
  39. package/dist/types/api/dependencies-api.d.ts.map +1 -0
  40. package/dist/types/api/models-api.d.ts +302 -0
  41. package/dist/types/api/models-api.d.ts.map +1 -0
  42. package/dist/types/api/projects-api.d.ts +6 -0
  43. package/dist/types/api/projects-api.d.ts.map +1 -1
  44. package/dist/types/api/reasoning-api.d.ts +7 -0
  45. package/dist/types/api/reasoning-api.d.ts.map +1 -1
  46. package/dist/types/code-solver-sdk.d.ts +28 -1
  47. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  48. package/dist/types/index.d.ts +5 -1
  49. package/dist/types/index.d.ts.map +1 -1
  50. package/dist/types/interfaces/sdk-options.d.ts +27 -0
  51. package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
  52. package/dist/types/models/types.d.ts +186 -0
  53. package/dist/types/models/types.d.ts.map +1 -1
  54. package/dist/types/utils/code-solver-websocket-client.d.ts +125 -12
  55. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  56. package/dist/types/utils/http-client.d.ts +4 -0
  57. package/dist/types/utils/http-client.d.ts.map +1 -1
  58. package/package.json +21 -17
package/README.md CHANGED
@@ -152,6 +152,89 @@ wsClient.on('complete', (data) => {
152
152
  });
153
153
  ```
154
154
 
155
+ ## API для работы с зависимостями
156
+
157
+ SDK предоставляет API для работы с зависимостями файлов в проекте, что позволяет анализировать структуру проекта, импорты/экспорты и выявлять циклические зависимости.
158
+
159
+ ### Получение зависимостей файла
160
+
161
+ ```typescript
162
+ // Получение зависимостей конкретного файла
163
+ const fileDependencies = await sdk.dependencies.getFileDependencies(projectId, {
164
+ filePath: 'src/app.js'
165
+ });
166
+
167
+ console.log('Импорты:', fileDependencies.imports);
168
+ console.log('Импортируется в:', fileDependencies.importedBy);
169
+ console.log('Экспорты:', fileDependencies.exports);
170
+ console.log('Экспортируемые из импортов:', fileDependencies.exportedBy);
171
+ ```
172
+
173
+ ### Получение графа зависимостей
174
+
175
+ ```typescript
176
+ // Получение полного графа зависимостей проекта
177
+ const dependencyGraph = await sdk.dependencies.getDependencyGraph(projectId);
178
+
179
+ console.log('Узлы графа:', dependencyGraph.nodes);
180
+ console.log('Связи в графе:', dependencyGraph.edges);
181
+ ```
182
+
183
+ ### Анализ зависимостей
184
+
185
+ ```typescript
186
+ // Анализ графа зависимостей и поиск циклов
187
+ const analysis = await sdk.dependencies.analyzeDependencyGraph(projectId);
188
+
189
+ console.log('Циклические зависимости:', analysis.cycles);
190
+ console.log('Статистика графа:', analysis.statistics);
191
+ ```
192
+
193
+ ### Статистика зависимостей
194
+
195
+ ```typescript
196
+ // Получение статистики зависимостей в проекте
197
+ const stats = await sdk.dependencies.getDependencyStatistics(projectId);
198
+
199
+ console.log('Общее количество зависимостей:', stats.totalDependencies);
200
+ console.log('Уникальные файлы:', stats.uniqueFiles);
201
+ console.log('Импорты:', stats.importCount);
202
+ console.log('Экспорты:', stats.exportCount);
203
+ console.log('Циклические зависимости:', stats.cyclicDependenciesCount);
204
+ ```
205
+
206
+ ### Получение связанных компонентов
207
+
208
+ ```typescript
209
+ // Получение связанных компонентов для файла
210
+ const relatedComponents = await sdk.dependencies.getRelatedComponents(projectId, {
211
+ filePath: 'src/app.js',
212
+ maxDepth: 3,
213
+ includeIncoming: true,
214
+ includeOutgoing: true,
215
+ maxNodes: 20
216
+ });
217
+
218
+ console.log('Исходный файл:', relatedComponents.source);
219
+ console.log('Связанные компоненты:', relatedComponents.nodes);
220
+ ```
221
+
222
+ ### WebSocket события для зависимостей
223
+
224
+ Для получения уведомлений об изменениях в зависимостях в реальном времени можно использовать WebSocket:
225
+
226
+ ```typescript
227
+ // Подключение к WebSocket для зависимостей
228
+ const wsClient = sdk.getWebSocketClient();
229
+ await wsClient.connectToDependencies(projectId);
230
+
231
+ // Обработка события обновления зависимостей
232
+ wsClient.on('dependency_update', (data) => {
233
+ console.log('Обновление зависимостей:', data);
234
+ console.log('Затронутые файлы:', data.affectedFiles);
235
+ });
236
+ ```
237
+
155
238
  ## Тестирование и совместимость
156
239
 
157
240
  SDK тщательно тестируется в различных средах:
@@ -213,13 +296,104 @@ SDK поддерживает следующие опции при инициал
213
296
  | `httpsAgent` | object | Опции для HTTPS агента (Node.js) | Нет |
214
297
  | `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
215
298
 
216
- ## Документация API
299
+ ## Документация
300
+
301
+ Подробная документация по использованию SDK доступна в директории [`docs`](./docs):
302
+
303
+ - [Начало работы](./docs/GETTING_STARTED.md) - инструкции по установке и базовому использованию SDK
304
+ - [Работа с проектами](./docs/PROJECTS.md) - управление проектами через SDK
305
+ - [Индексация проектов](./docs/INDEXING.md) - работа с индексацией и отслеживание через WebSocket
306
+ - [Документация API](./docs/API.md) - полная документация по всем методам SDK
307
+
308
+ ## Тестирование и локальная разработка
309
+
310
+ ### Предварительные требования
311
+
312
+ Для локальной разработки и тестирования требуется:
313
+ - Node.js 16+
314
+ - npm 8+
315
+ - Запущенный локальный сервер Code Solver Backend (по умолчанию на https://localhost:3000)
316
+
317
+ ### Тестирование SDK
318
+
319
+ SDK включает несколько типов тестов:
320
+
321
+ #### Модульные тесты
217
322
 
218
- Полная документация API доступна в папке `docs/`.
323
+ Эти тесты проверяют внутреннюю логику SDK без взаимодействия с реальным бэкендом:
324
+
325
+ ```bash
326
+ # Запуск всех тестов
327
+ npm test
328
+
329
+ # Запуск тестов для индексации
330
+ npm run test:indexing
331
+ ```
332
+
333
+ #### Интеграционные тесты
334
+
335
+ Эти тесты проверяют взаимодействие SDK с реальным бэкендом:
336
+
337
+ ```bash
338
+ # Запуск интеграционных тестов индексации
339
+ npm run test:integration
340
+ ```
341
+
342
+ > **Важно:** Для запуска интеграционных тестов необходимо, чтобы локальный сервер Code Solver Backend был запущен на https://localhost:3000.
343
+
344
+ ### Примеры использования
345
+
346
+ В директории [`examples`](./examples) находятся примеры использования SDK:
347
+
348
+ #### Проверка подключения к API
349
+
350
+ Пример проверяет доступность API и WebSocket соединения:
351
+
352
+ ```bash
353
+ npm run example:check-api
354
+ ```
355
+
356
+ #### Индексация проектов
357
+
358
+ Пример демонстрирует процесс индексации проекта с отслеживанием через WebSocket:
359
+
360
+ ```bash
361
+ npm run example:indexing
362
+ ```
363
+
364
+ ### Режим разработки
365
+
366
+ Для запуска SDK в режиме разработки с локальным сервером:
367
+
368
+ 1. Запустите локальный сервер Code Solver Backend
369
+ 2. Используйте следующие настройки в вашем коде:
370
+
371
+ ```javascript
372
+ const sdk = new CodeSolverSDK({
373
+ baseURL: 'https://localhost:3000',
374
+ apiKey: 'test-api-key',
375
+ httpsAgent: new https.Agent({
376
+ rejectUnauthorized: false // Для самоподписанных сертификатов
377
+ }),
378
+ websocket: {
379
+ reconnect: true,
380
+ rejectUnauthorized: false
381
+ }
382
+ });
383
+ ```
384
+
385
+ #### Игнорирование самоподписанных сертификатов
386
+
387
+ При разработке с локальным сервером используйте:
388
+
389
+ ```bash
390
+ # В Node.js скриптах
391
+ NODE_TLS_REJECT_UNAUTHORIZED=0 node your-script.js
392
+ ```
219
393
 
220
394
  ## Лицензия
221
395
 
222
- MIT
396
+ [MIT](./LICENSE)
223
397
 
224
398
  ## API Reference
225
399
 
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DependenciesApi = void 0;
4
+ /**
5
+ * API для работы с зависимостями файлов в проектах
6
+ */
7
+ class DependenciesApi {
8
+ /**
9
+ * Создает новый экземпляр API для работы с зависимостями
10
+ * @param httpClient HTTP клиент для запросов к API
11
+ */
12
+ constructor(httpClient) {
13
+ this.client = httpClient;
14
+ this.baseUrl = '/dependencies';
15
+ }
16
+ /**
17
+ * Получает зависимости конкретного файла
18
+ * @param projectId ID проекта
19
+ * @param params Параметры запроса зависимостей файла
20
+ * @returns Зависимости файла
21
+ */
22
+ async getFileDependencies(projectId, params) {
23
+ try {
24
+ const response = await this.client.get(`/projects/${projectId}/dependencies/file`, { params: { path: params.filePath } });
25
+ if (!response.success || !response.data) {
26
+ throw new Error(response.error || 'Ошибка при получении зависимостей файла');
27
+ }
28
+ return response.data;
29
+ }
30
+ catch (error) {
31
+ throw new Error(`Ошибка при получении зависимостей файла: ${error.message}`);
32
+ }
33
+ }
34
+ /**
35
+ * Получает граф зависимостей проекта
36
+ * @param projectId ID проекта
37
+ * @returns Граф зависимостей
38
+ */
39
+ async getDependencyGraph(projectId) {
40
+ try {
41
+ const response = await this.client.get(`/projects/${projectId}/dependencies/graph`);
42
+ if (!response.success || !response.data) {
43
+ throw new Error(response.error || 'Ошибка при получении графа зависимостей');
44
+ }
45
+ return response.data;
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Ошибка при получении графа зависимостей: ${error.message}`);
49
+ }
50
+ }
51
+ /**
52
+ * Получает статистику зависимостей проекта
53
+ * @param projectId ID проекта
54
+ * @returns Статистика зависимостей
55
+ */
56
+ async getDependencyStatistics(projectId) {
57
+ try {
58
+ const response = await this.client.get(`/projects/${projectId}/dependencies/stats`);
59
+ if (!response.success || !response.data) {
60
+ throw new Error(response.error || 'Ошибка при получении статистики зависимостей');
61
+ }
62
+ return response.data;
63
+ }
64
+ catch (error) {
65
+ throw new Error(`Ошибка при получении статистики зависимостей: ${error.message}`);
66
+ }
67
+ }
68
+ /**
69
+ * Получает детальную информацию о файле
70
+ * @param projectId ID проекта
71
+ * @param filePath Путь к файлу
72
+ * @returns Информация о файле
73
+ */
74
+ async getFileDetails(projectId, filePath) {
75
+ try {
76
+ const response = await this.client.get(`/projects/${projectId}/dependencies/file-details`, { params: { path: filePath } });
77
+ if (!response.success || !response.data) {
78
+ throw new Error(response.error || 'Ошибка при получении информации о файле');
79
+ }
80
+ return response.data;
81
+ }
82
+ catch (error) {
83
+ throw new Error(`Ошибка при получении информации о файле: ${error.message}`);
84
+ }
85
+ }
86
+ /**
87
+ * Получает связанные компоненты для файла
88
+ * @param projectId ID проекта
89
+ * @param params Параметры запроса связанных компонентов
90
+ * @returns Связанные компоненты
91
+ */
92
+ async getRelatedComponents(projectId, params) {
93
+ try {
94
+ const response = await this.client.get(`/projects/${projectId}/dependencies/related`, {
95
+ params: {
96
+ path: params.filePath,
97
+ maxDepth: params.maxDepth || 3,
98
+ includeIncoming: params.includeIncoming || true,
99
+ includeOutgoing: params.includeOutgoing || true,
100
+ maxNodes: params.maxNodes || 20
101
+ }
102
+ });
103
+ if (!response.success || !response.data) {
104
+ throw new Error(response.error || 'Ошибка при получении связанных компонентов');
105
+ }
106
+ return response.data;
107
+ }
108
+ catch (error) {
109
+ throw new Error(`Ошибка при получении связанных компонентов: ${error.message}`);
110
+ }
111
+ }
112
+ /**
113
+ * Анализирует граф зависимостей проекта
114
+ * @param projectId ID проекта
115
+ * @returns Результат анализа
116
+ */
117
+ async analyzeDependencyGraph(projectId) {
118
+ try {
119
+ const response = await this.client.get(`/projects/${projectId}/dependencies/analyze`);
120
+ if (!response.success || !response.data) {
121
+ throw new Error(response.error || 'Ошибка при анализе графа зависимостей');
122
+ }
123
+ return response.data;
124
+ }
125
+ catch (error) {
126
+ throw new Error(`Ошибка при анализе графа зависимостей: ${error.message}`);
127
+ }
128
+ }
129
+ }
130
+ exports.DependenciesApi = DependenciesApi;
131
+ //# sourceMappingURL=dependencies-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies-api.js","sourceRoot":"","sources":["../../../src/api/dependencies-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModelsApi = void 0;
4
+ /**
5
+ * API для работы с моделями
6
+ *
7
+ * Предоставляет методы для получения информации о доступных моделях ИИ
8
+ * и их провайдерах. Позволяет получить полный список моделей, список
9
+ * провайдеров, модели конкретного провайдера или информацию о провайдере
10
+ * для конкретной модели.
11
+ *
12
+ * @example
13
+ * ```javascript
14
+ * // Получение всех доступных моделей
15
+ * const allModels = await sdk.models.getAllModels();
16
+ * console.log(allModels.models);
17
+ *
18
+ * // Получение провайдеров
19
+ * const providers = await sdk.models.getProviders();
20
+ * console.log(providers.providers);
21
+ *
22
+ * // Получение моделей конкретного провайдера
23
+ * const openaiModels = await sdk.models.getProviderModels('openai');
24
+ * console.log(openaiModels.models);
25
+ *
26
+ * // Получение информации о провайдере для модели
27
+ * const modelInfo = await sdk.models.getModelProvider('gpt-4o');
28
+ * console.log(modelInfo.provider);
29
+ * ```
30
+ */
31
+ class ModelsApi {
32
+ /**
33
+ * Создает новый экземпляр API для работы с моделями
34
+ * @param {HttpClient} httpClient HTTP клиент
35
+ */
36
+ constructor(httpClient) {
37
+ this.httpClient = httpClient;
38
+ }
39
+ /**
40
+ * Получает список всех доступных моделей
41
+ *
42
+ * Возвращает полный список доступных моделей, сгруппированных по провайдерам.
43
+ * Каждая модель содержит информацию о своих возможностях, размере контекстного
44
+ * окна и других характеристиках.
45
+ *
46
+ * @returns {Promise<AllModelsResponse>} Список моделей по провайдерам
47
+ *
48
+ * @example
49
+ * ```javascript
50
+ * const allModels = await sdk.models.getAllModels();
51
+ *
52
+ * // Получение всех моделей OpenAI
53
+ * const openaiModels = allModels.models
54
+ * .find(provider => provider.provider === 'openai')?.models || [];
55
+ *
56
+ * // Получение всех доступных моделей всех провайдеров
57
+ * const allAvailableModels = allModels.models
58
+ * .flatMap(provider => provider.models);
59
+ * ```
60
+ */
61
+ async getAllModels() {
62
+ return this.httpClient.get('/api/v1/models');
63
+ }
64
+ /**
65
+ * Получает список провайдеров моделей
66
+ *
67
+ * Возвращает список всех доступных провайдеров моделей с информацией
68
+ * об их возможностях и поддерживаемых функциях.
69
+ *
70
+ * @returns {Promise<ProvidersResponse>} Список провайдеров
71
+ *
72
+ * @example
73
+ * ```javascript
74
+ * const providers = await sdk.models.getProviders();
75
+ *
76
+ * // Получение провайдера по ID
77
+ * const openai = providers.providers.find(p => p.id === 'openai');
78
+ *
79
+ * // Проверка поддержки определенной возможности
80
+ * const supportsChat = providers.providers
81
+ * .some(p => p.capabilities.includes('chat'));
82
+ * ```
83
+ */
84
+ async getProviders() {
85
+ return this.httpClient.get('/api/v1/models/providers');
86
+ }
87
+ /**
88
+ * Получает модели конкретного провайдера
89
+ *
90
+ * Возвращает список моделей для указанного провайдера, включая информацию
91
+ * о контекстном окне, поддерживаемых языках и других характеристиках.
92
+ *
93
+ * @param {string} providerId Идентификатор провайдера (например, openai, anthropic, google)
94
+ * @returns {Promise<ProviderModels>} Модели провайдера
95
+ *
96
+ * @example
97
+ * ```javascript
98
+ * // Получение моделей OpenAI
99
+ * const openaiModels = await sdk.models.getProviderModels('openai');
100
+ *
101
+ * // Получение модели с наибольшим контекстным окном
102
+ * const modelWithLargestContext = openaiModels.models
103
+ * .sort((a, b) => b.contextWindow - a.contextWindow)[0];
104
+ *
105
+ * // Получение модели по умолчанию
106
+ * const defaultModel = openaiModels.models
107
+ * .find(model => model.isDefault);
108
+ * ```
109
+ */
110
+ async getProviderModels(providerId) {
111
+ return this.httpClient.get(`/api/v1/models/providers/${providerId}`);
112
+ }
113
+ /**
114
+ * Получает информацию о провайдере для указанной модели
115
+ *
116
+ * Возвращает информацию о провайдере, которому принадлежит указанная модель,
117
+ * а также сведения о доступности модели в данный момент.
118
+ *
119
+ * @param {string} modelId Идентификатор модели (например, gpt-4o, claude-3-opus)
120
+ * @returns {Promise<ModelProviderInfo>} Информация о модели и провайдере
121
+ *
122
+ * @example
123
+ * ```javascript
124
+ * // Получение информации о провайдере для модели
125
+ * const modelInfo = await sdk.models.getModelProvider('gpt-4o');
126
+ *
127
+ * // Проверка доступности модели
128
+ * if (modelInfo.isAvailable) {
129
+ * console.log(`Модель ${modelInfo.modelId} доступна у провайдера ${modelInfo.provider.name}`);
130
+ * } else {
131
+ * console.log(`Модель ${modelInfo.modelId} в данный момент недоступна`);
132
+ * }
133
+ * ```
134
+ */
135
+ async getModelProvider(modelId) {
136
+ return this.httpClient.get(`/api/v1/models/${modelId}/provider`);
137
+ }
138
+ }
139
+ exports.ModelsApi = ModelsApi;
140
+ //# sourceMappingURL=models-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-api.js","sourceRoot":"","sources":["../../../src/api/models-api.ts"],"names":[],"mappings":";;;AAiMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAa,SAAS;IAIpB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,KAAK,CAAC,YAAY;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACI,KAAK,CAAC,YAAY;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,OAAO,WAAW,CAAC,CAAC;IACnE,CAAC;CACF;AAlHD,8BAkHC"}
@@ -12,6 +12,22 @@ class ProjectsApi {
12
12
  constructor(httpClient) {
13
13
  this.httpClient = httpClient;
14
14
  }
15
+ /**
16
+ * Проверяет валидность идентификатора проекта
17
+ * @param {string} projectId ID проекта
18
+ * @throws {Error} Если ID проекта не валиден
19
+ */
20
+ validateProjectId(projectId) {
21
+ if (projectId === undefined || projectId === null) {
22
+ throw new Error('Project ID is required');
23
+ }
24
+ if (typeof projectId !== 'string') {
25
+ throw new Error('Project ID must be a string');
26
+ }
27
+ if (projectId.trim() === '') {
28
+ throw new Error('Project ID cannot be empty');
29
+ }
30
+ }
15
31
  /**
16
32
  * Получает список всех проектов
17
33
  * @returns {Promise<Project[]>} Список проектов
@@ -25,6 +41,7 @@ class ProjectsApi {
25
41
  * @returns {Promise<Project>} Проект
26
42
  */
27
43
  async getProject(projectId) {
44
+ this.validateProjectId(projectId);
28
45
  return this.httpClient.get(`/api/v1/projects/${projectId}`);
29
46
  }
30
47
  /**
@@ -48,6 +65,7 @@ class ProjectsApi {
48
65
  * @returns {Promise<Project>} Обновленный проект
49
66
  */
50
67
  async updateProject(projectId, data) {
68
+ this.validateProjectId(projectId);
51
69
  return this.httpClient.put(`/api/v1/projects/${projectId}`, data);
52
70
  }
53
71
  /**
@@ -56,6 +74,7 @@ class ProjectsApi {
56
74
  * @returns {Promise<void>}
57
75
  */
58
76
  async deleteProject(projectId) {
77
+ this.validateProjectId(projectId);
59
78
  return this.httpClient.delete(`/api/v1/projects/${projectId}`);
60
79
  }
61
80
  /**
@@ -64,6 +83,7 @@ class ProjectsApi {
64
83
  * @returns {Promise<IndexingResponse>} Информация о начатой индексации
65
84
  */
66
85
  async indexProject(projectId) {
86
+ this.validateProjectId(projectId);
67
87
  return this.httpClient.post(`/api/v1/projects/${projectId}/index`);
68
88
  }
69
89
  /**
@@ -72,6 +92,7 @@ class ProjectsApi {
72
92
  * @returns {Promise<void>}
73
93
  */
74
94
  async stopIndexing(projectId) {
95
+ this.validateProjectId(projectId);
75
96
  return this.httpClient.post(`/api/v1/projects/${projectId}/cancel-indexing`);
76
97
  }
77
98
  /**
@@ -80,6 +101,7 @@ class ProjectsApi {
80
101
  * @returns {Promise<IndexingStatus>} Статус индексации
81
102
  */
82
103
  async getIndexingStatus(projectId) {
104
+ this.validateProjectId(projectId);
83
105
  return this.httpClient.get(`/api/v1/projects/${projectId}/indexing-status`);
84
106
  }
85
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":";;;AA0FA;;GAEG;AACH,MAAa,WAAW;IAItB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,UAAU,CAAC,SAAiB;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,IAAY,EACZ,IAAY,EACZ,OAAwB;QAExB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC9C,IAAI;YACJ,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CACxB,SAAiB,EACjB,IAAgC;QAEhC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,SAAiB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,SAAS,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,SAAiB;QACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,SAAS,kBAAkB,CAAC,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,kBAAkB,CAAC,CAAC;IAC9E,CAAC;CACF;AAhGD,kCAgGC"}
1
+ {"version":3,"file":"projects-api.js","sourceRoot":"","sources":["../../../src/api/projects-api.ts"],"names":[],"mappings":";;;AA0FA;;GAEG;AACH,MAAa,WAAW;IAItB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CAAC,SAAc;QACtC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,UAAU,CAAC,SAAiB;QACvC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,aAAa,CACxB,IAAY,EACZ,IAAY,EACZ,OAAwB;QAExB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC9C,IAAI;YACJ,IAAI;YACJ,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,aAAa,CACxB,SAAiB,EACjB,IAAgC;QAEhC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC1C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,SAAiB;QACzC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,SAAS,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,SAAiB;QACzC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,SAAS,kBAAkB,CAAC,CAAC;IAC/E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC9C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,oBAAoB,SAAS,kBAAkB,CAAC,CAAC;IAC9E,CAAC;CACF;AAzHD,kCAyHC"}
@@ -76,6 +76,14 @@ class ReasoningApi {
76
76
  async getAllReasonings(projectId) {
77
77
  return this.httpClient.get(`/api/v1/reasoning/project/${projectId}`);
78
78
  }
79
+ /**
80
+ * Получает список доступных моделей для рассуждений
81
+ * @deprecated Используйте sdk.models.getAllModels() вместо этого метода
82
+ * @returns {Promise<AllModelsResponse>} Список доступных моделей
83
+ */
84
+ async getModels() {
85
+ return this.httpClient.get('/api/v1/models');
86
+ }
79
87
  }
80
88
  exports.ReasoningApi = ReasoningApi;
81
89
  //# sourceMappingURL=reasoning-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reasoning-api.js","sourceRoot":"","sources":["../../../src/api/reasoning-api.ts"],"names":[],"mappings":";;;AAyKA;;GAEG;AACH,MAAa,YAAY;IAIvB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,MAA4B;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,WAAmB;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,OAAyB;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,cAAc,CAAC,WAAmB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CAAC,WAAmB;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,WAAW,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;CACF;AAnFD,oCAmFC"}
1
+ {"version":3,"file":"reasoning-api.js","sourceRoot":"","sources":["../../../src/api/reasoning-api.ts"],"names":[],"mappings":";;;AA0KA;;GAEG;AACH,MAAa,YAAY;IAIvB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,MAA4B;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CAAC,WAAmB;QAC3C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,OAAyB;QACpD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,cAAc,CAAC,WAAmB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,WAAmB;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CAAC,WAAmB;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,WAAW,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,CAAC;CACF;AA5FD,oCA4FC"}
@@ -10,8 +10,10 @@ const code_modification_api_js_1 = require("./api/code-modification-api.js");
10
10
  const code_solver_websocket_client_js_1 = require("./utils/code-solver-websocket-client.js");
11
11
  const agents_api_js_1 = require("./api/agents-api.js");
12
12
  const chat_api_js_1 = require("./api/chat-api.js");
13
+ const models_api_js_1 = require("./api/models-api.js");
14
+ const dependencies_api_js_1 = require("./api/dependencies-api.js");
13
15
  // Версия SDK
14
- const SDK_VERSION = '1.0.0';
16
+ const SDK_VERSION = '1.2.0';
15
17
  /**
16
18
  * Определение типа среды выполнения
17
19
  * @returns 'browser' | 'node' | 'unknown'
@@ -62,6 +64,8 @@ class CodeSolverSDK {
62
64
  this._reasoning = new reasoning_api_js_1.ReasoningApi(this.httpClient);
63
65
  this._codeModification = new code_modification_api_js_1.CodeModificationApi(this.httpClient);
64
66
  this._chat = new chat_api_js_1.ChatApi(this.httpClient);
67
+ this._models = new models_api_js_1.ModelsApi(this.httpClient);
68
+ this._dependencies = new dependencies_api_js_1.DependenciesApi(this.httpClient);
65
69
  }
66
70
  /**
67
71
  * Проверяет доступность API
@@ -82,9 +86,14 @@ class CodeSolverSDK {
82
86
  */
83
87
  getWebSocketClient() {
84
88
  if (!this.wsClient) {
85
- this.wsClient = new code_solver_websocket_client_js_1.CodeSolverWebSocketClient(this._options.baseURL, {
89
+ const wsURL = this.wsURL;
90
+ this.wsClient = new code_solver_websocket_client_js_1.CodeSolverWebSocketClient(wsURL, {
86
91
  apiKey: this._options.apiKey,
87
- headers: this._options.headers
92
+ headers: this._options.headers,
93
+ autoReconnect: this.wsConfig.reconnect,
94
+ maxRetries: this.wsConfig.reconnectAttempts,
95
+ retryDelay: this.wsConfig.reconnectDelay,
96
+ rejectUnauthorized: this.wsConfig.rejectUnauthorized
88
97
  });
89
98
  }
90
99
  return this.wsClient;
@@ -133,11 +142,41 @@ class CodeSolverSDK {
133
142
  return this._chat;
134
143
  }
135
144
  /**
136
- * Опции SDK
145
+ * API для работы с моделями
146
+ */
147
+ get models() {
148
+ return this._models;
149
+ }
150
+ /**
151
+ * Доступ к API зависимостей
152
+ */
153
+ get dependencies() {
154
+ return this._dependencies;
155
+ }
156
+ /**
157
+ * Получает опции SDK
137
158
  */
138
159
  get options() {
139
160
  return this._options;
140
161
  }
162
+ /**
163
+ * Получает конфигурацию WebSocket
164
+ */
165
+ get wsConfig() {
166
+ return this._options.websocket || {};
167
+ }
168
+ /**
169
+ * Получает URL для WebSocket соединений
170
+ */
171
+ get wsURL() {
172
+ return this._options.wsURL || this._options.baseURL.replace(/^http/, 'ws');
173
+ }
174
+ /**
175
+ * Получает HTTP-клиент
176
+ */
177
+ get client() {
178
+ return this.httpClient;
179
+ }
141
180
  /**
142
181
  * Получает текущую среду выполнения
143
182
  * @returns {string} Среда выполнения ('browser', 'node', 'unknown')
@@ -215,6 +254,8 @@ class CodeSolverSDK {
215
254
  this._reasoning = new reasoning_api_js_1.ReasoningApi(newHttpClient);
216
255
  this._codeModification = new code_modification_api_js_1.CodeModificationApi(newHttpClient);
217
256
  this._chat = new chat_api_js_1.ChatApi(newHttpClient);
257
+ this._models = new models_api_js_1.ModelsApi(newHttpClient);
258
+ this._dependencies = new dependencies_api_js_1.DependenciesApi(newHttpClient);
218
259
  // Если есть WebSocket клиент, пересоздаем его
219
260
  if (this.wsClient) {
220
261
  const isConnected = this.wsClient.isConnectedToReasoning() || this.wsClient.isConnectedToIndexing();