solver-sdk 2.6.2 → 2.7.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 (67) hide show
  1. package/README.md +44 -55
  2. package/dist/cjs/api/chat-api/index.js +68 -68
  3. package/dist/cjs/api/chat-api/index.js.map +1 -1
  4. package/dist/cjs/api/projects-api.js +7 -0
  5. package/dist/cjs/api/projects-api.js.map +1 -1
  6. package/dist/cjs/code-solver-sdk.js +24 -2
  7. package/dist/cjs/code-solver-sdk.js.map +1 -1
  8. package/dist/cjs/constants/websocket-events.constants.js +5 -0
  9. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  10. package/dist/cjs/constants/websocket-namespaces.constants.js +2 -0
  11. package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -1
  12. package/dist/cjs/index.js +1 -0
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js +42 -0
  15. package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js.map +1 -0
  16. package/dist/cjs/utils/http-client.js +11 -3
  17. package/dist/cjs/utils/http-client.js.map +1 -1
  18. package/dist/cjs/ws/file-editing-ws-client.js +162 -0
  19. package/dist/cjs/ws/file-editing-ws-client.js.map +1 -0
  20. package/dist/esm/api/chat-api/index.js +68 -68
  21. package/dist/esm/api/chat-api/index.js.map +1 -1
  22. package/dist/esm/api/projects-api.js +7 -0
  23. package/dist/esm/api/projects-api.js.map +1 -1
  24. package/dist/esm/code-solver-sdk.js +24 -2
  25. package/dist/esm/code-solver-sdk.js.map +1 -1
  26. package/dist/esm/constants/websocket-events.constants.js +5 -0
  27. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  28. package/dist/esm/constants/websocket-namespaces.constants.js +2 -0
  29. package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -1
  30. package/dist/esm/index.js +1 -0
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/interfaces/websocket/vscode-command.interfaces.js +39 -0
  33. package/dist/esm/interfaces/websocket/vscode-command.interfaces.js.map +1 -0
  34. package/dist/esm/utils/http-client.js +11 -3
  35. package/dist/esm/utils/http-client.js.map +1 -1
  36. package/dist/esm/ws/file-editing-ws-client.js +158 -0
  37. package/dist/esm/ws/file-editing-ws-client.js.map +1 -0
  38. package/dist/types/api/chat-api/index.d.ts +7 -0
  39. package/dist/types/api/chat-api/index.d.ts.map +1 -1
  40. package/dist/types/api/chat-api/interfaces.d.ts +7 -0
  41. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
  42. package/dist/types/api/chat-api/models.d.ts +10 -1
  43. package/dist/types/api/chat-api/models.d.ts.map +1 -1
  44. package/dist/types/api/projects-api.d.ts +18 -0
  45. package/dist/types/api/projects-api.d.ts.map +1 -1
  46. package/dist/types/code-solver-sdk.d.ts +8 -0
  47. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  48. package/dist/types/constants/websocket-events.constants.d.ts +5 -1
  49. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  50. package/dist/types/constants/websocket-namespaces.constants.d.ts +3 -1
  51. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -1
  52. package/dist/types/index.d.ts +1 -0
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts +56 -0
  55. package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts.map +1 -0
  56. package/dist/types/utils/http-client.d.ts.map +1 -1
  57. package/dist/types/ws/file-editing-ws-client.d.ts +85 -0
  58. package/dist/types/ws/file-editing-ws-client.d.ts.map +1 -0
  59. package/docs/ARCHITECTURE.md +268 -0
  60. package/docs/QUICK_START.md +126 -0
  61. package/docs/README.md +25 -279
  62. package/docs/VSCODE_INTEGRATION.md +432 -0
  63. package/docs/WEBSOCKET.md +49 -10
  64. package/package.json +1 -1
  65. package/docs/API_REFERENCE.md +0 -703
  66. package/docs/INTEGRATION_GUIDE_V2.5.md +0 -516
  67. package/docs/README_V2.5.md +0 -266
@@ -1,516 +0,0 @@
1
- # 🚀 Полное руководство по интеграции SDK v2.5.0
2
-
3
- Это руководство показывает, как правильно интегрировать Code Solver SDK v2.5.0 в production проект.
4
-
5
- ## 📋 Содержание
6
-
7
- - [Быстрый старт](#быстрый-старт)
8
- - [Инициализация](#инициализация)
9
- - [WebSocket управление](#websocket-управление)
10
- - [API диагностика](#api-диагностика)
11
- - [Работа с проектами](#работа-с-проектами)
12
- - [Рассуждения и мышление](#рассуждения-и-мышление)
13
- - [Обработка ошибок](#обработка-ошибок)
14
- - [Best practices](#best-practices)
15
-
16
- ## 🚀 Быстрый старт
17
-
18
- ### Установка
19
-
20
- ```bash
21
- npm install solver-sdk
22
- ```
23
-
24
- ### Минимальный рабочий пример
25
-
26
- ```javascript
27
- import { CodeSolverSDK } from 'solver-sdk';
28
-
29
- // ✅ Рекомендуемый способ (с валидацией)
30
- const sdk = await CodeSolverSDK.create({
31
- baseURL: 'http://localhost:3000',
32
- apiKey: 'your-api-key',
33
- websocket: { autoConnect: false }
34
- });
35
-
36
- // Проверка API
37
- const diagnosis = await sdk.diagnoseAPI();
38
- if (diagnosis.healthy) {
39
- console.log('✅ SDK готов к работе');
40
- } else {
41
- console.log('❌ Проблемы:', diagnosis.errors);
42
- }
43
- ```
44
-
45
- ## 🎮 Инициализация
46
-
47
- ### Способ 1: С валидацией API (рекомендуется)
48
-
49
- ```javascript
50
- try {
51
- const sdk = await CodeSolverSDK.create({
52
- baseURL: 'http://localhost:3000',
53
- apiKey: 'your-api-key',
54
- websocket: {
55
- autoConnect: false, // Контролируем WebSocket вручную
56
- reconnect: true, // Автоматическое переподключение
57
- reconnectAttempts: 3, // Максимум 3 попытки
58
- reconnectDelay: 1000 // Задержка между попытками
59
- },
60
- timeout: 30000, // Таймаут HTTP запросов
61
- debug: true // Включить отладочные логи
62
- });
63
-
64
- console.log('✅ SDK инициализирован с валидацией API');
65
- } catch (error) {
66
- console.error('❌ Ошибка инициализации:', error.message);
67
- // API недоступен или неправильные настройки
68
- }
69
- ```
70
-
71
- ### Способ 2: Быстрая инициализация
72
-
73
- ```javascript
74
- // Без проверки API - для быстрого старта
75
- const sdk = new CodeSolverSDK({
76
- baseURL: 'http://localhost:3000',
77
- apiKey: 'your-api-key',
78
- websocket: { autoConnect: false }
79
- });
80
-
81
- // Проверка отдельно
82
- const isHealthy = await sdk.checkHealth();
83
- console.log(`API статус: ${isHealthy ? 'OK' : 'недоступен'}`);
84
- ```
85
-
86
- ## 🔌 WebSocket управление
87
-
88
- ### Контролируемое подключение
89
-
90
- ```javascript
91
- // ❌ СТАРЫЙ способ (автоматическое подключение)
92
- // const sdk = new CodeSolverSDK(); // WebSocket подключался сразу
93
-
94
- // ✅ НОВЫЙ способ v2.5.0 (ручное управление)
95
- const sdk = new CodeSolverSDK({
96
- websocket: { autoConnect: false } // Важно!
97
- });
98
-
99
- // Подключение только когда нужно
100
- if (needIndexing) {
101
- const indexingClient = sdk.getIndexingClient();
102
- const connected = await indexingClient.connectToIndexing();
103
-
104
- if (connected) {
105
- console.log('✅ WebSocket для индексации подключен');
106
-
107
- // Подписка на события
108
- sdk.projects.on('indexing_progress', (data) => {
109
- console.log(`Прогресс: ${data.progress}%`);
110
- });
111
- }
112
- }
113
-
114
- if (needReasoning) {
115
- await sdk.reasoning.connectWebSocket();
116
- console.log('✅ WebSocket для рассуждений подключен');
117
- }
118
- ```
119
-
120
- ### Обработка ошибок WebSocket
121
-
122
- ```javascript
123
- // ✅ Честные ошибки v2.5.0 (без fallback'ов)
124
- try {
125
- sdk.projects.on('indexing_complete', callback);
126
- } catch (error) {
127
- console.error('❌ WebSocket не подключен:', error.message);
128
- // Нужно подключиться перед использованием
129
- await sdk.projects.connectWebSocket();
130
- }
131
-
132
- // ✅ Проверка перед использованием
133
- if (sdk.projects.isWebSocketConnected()) {
134
- sdk.projects.emitSocketEvent('custom_event', data);
135
- } else {
136
- console.log('WebSocket не подключен, подключаемся...');
137
- await sdk.projects.connectWebSocket();
138
- }
139
- ```
140
-
141
- ## 🔍 API диагностика
142
-
143
- ### Полная диагностика
144
-
145
- ```javascript
146
- const diagnosis = await sdk.diagnoseAPI();
147
-
148
- console.log(`API здоровье: ${diagnosis.healthy ? 'OK' : 'Проблемы'}`);
149
- console.log(`Проверено endpoints: ${diagnosis.total}`);
150
- console.log(`Работающих: ${diagnosis.working}`);
151
- console.log(`Проблемных: ${diagnosis.failed}`);
152
-
153
- if (!diagnosis.healthy) {
154
- console.log('\nПроблемные endpoints:');
155
- diagnosis.errors.forEach(error => {
156
- console.log(`❌ ${error}`);
157
- });
158
-
159
- console.log('\nРабочие endpoints:');
160
- diagnosis.working.forEach(endpoint => {
161
- console.log(`✅ ${endpoint}`);
162
- });
163
- }
164
- ```
165
-
166
- ### Диагностика WebSocket
167
-
168
- ```javascript
169
- // Проверка состояния всех WebSocket соединений
170
- const wsStatus = {
171
- projects: sdk.projects.isWebSocketConnected(),
172
- reasoning: sdk.reasoning.isWebSocketConnected(),
173
- dependencies: sdk.dependencies.isWebSocketConnected()
174
- };
175
-
176
- console.log('WebSocket статус:', wsStatus);
177
-
178
- // Подключение только нужных сервисов
179
- for (const [service, connected] of Object.entries(wsStatus)) {
180
- if (!connected && needService[service]) {
181
- await sdk[service].connectWebSocket();
182
- }
183
- }
184
- ```
185
-
186
- ## 📁 Работа с проектами
187
-
188
- ### Создание и индексация
189
-
190
- ```javascript
191
- try {
192
- // Создание проекта
193
- const project = await sdk.projects.createProject(
194
- 'My Project',
195
- '/path/to/project',
196
- {
197
- excludePatterns: ['node_modules', '.git', 'dist']
198
- }
199
- );
200
-
201
- console.log('✅ Проект создан:', project.id);
202
-
203
- // Индексация с WebSocket мониторингом
204
- await sdk.projects.connectWebSocket();
205
-
206
- sdk.projects.on('indexing_progress', (data) => {
207
- console.log(`📊 Прогресс: ${data.progress}% (${data.processedFiles}/${data.totalFiles})`);
208
- });
209
-
210
- sdk.projects.on('indexing_complete', (data) => {
211
- console.log(`✅ Индексация завершена: ${data.success ? 'успешно' : 'с ошибками'}`);
212
- });
213
-
214
- // Запуск индексации
215
- const indexResult = await sdk.projects.indexProject(project.id, {
216
- indexingMode: 'auto', // auto, full, incremental
217
- forceFull: false
218
- });
219
-
220
- console.log('✅ Индексация запущена:', indexResult);
221
-
222
- } catch (error) {
223
- console.error('❌ Ошибка работы с проектом:', error.message);
224
- }
225
- ```
226
-
227
- ## 🧠 Рассуждения и мышление
228
-
229
- ### Новые алиасы методов v2.5.0
230
-
231
- ```javascript
232
- // ✅ Короткие алиасы (новое в v2.5.0)
233
- const reasoning = await sdk.reasoning.create({
234
- projectId: project.id,
235
- query: 'Объясни архитектуру проекта'
236
- });
237
-
238
- await sdk.reasoning.start(reasoning.id);
239
- const result = await sdk.reasoning.getReasoning(reasoning.id);
240
- await sdk.reasoning.stop(reasoning.id);
241
-
242
- // ✅ Полные названия (совместимость)
243
- const reasoning2 = await sdk.reasoning.createReasoning({
244
- projectId: project.id,
245
- query: 'Как улучшить производительность?'
246
- });
247
-
248
- await sdk.reasoning.startReasoning(reasoning2.id);
249
- await sdk.reasoning.stopReasoning(reasoning2.id);
250
- ```
251
-
252
- ### Потоковое мышление с Anthropic
253
-
254
- ```javascript
255
- // Настройка для Anthropic Claude thinking
256
- const stream = await sdk.chat.streamChatWithThinking([
257
- {
258
- role: 'user',
259
- content: [
260
- {
261
- type: 'text',
262
- text: 'Объясни, как работает этот код:'
263
- },
264
- {
265
- type: 'text',
266
- text: codeContent
267
- }
268
- ]
269
- }
270
- ], {
271
- model: 'claude-3-5-sonnet-20241022',
272
- thinking: true, // Включаем мышление
273
- preserveSignature: true // Сохраняем подписи
274
- });
275
-
276
- // Обработка потока
277
- for await (const chunk of stream) {
278
- if (chunk.type === 'thinking') {
279
- console.log('🤔 Мышление:', chunk.thinking);
280
- } else if (chunk.type === 'content') {
281
- process.stdout.write(chunk.content);
282
- } else if (chunk.type === 'signature') {
283
- console.log('🔐 Подпись сохранена');
284
- }
285
- }
286
- ```
287
-
288
- ## ❌ Обработка ошибок
289
-
290
- ### "Fail Fast" подход v2.5.0
291
-
292
- ```javascript
293
- // ✅ Честные ошибки (без fallback'ов)
294
- try {
295
- // WebSocket методы сразу бросают ошибку
296
- sdk.projects.on('event', callback);
297
- } catch (error) {
298
- console.error('❌ WebSocket не подключен');
299
- // Решение: подключиться перед использованием
300
- await sdk.projects.connectWebSocket();
301
- sdk.projects.on('event', callback);
302
- }
303
-
304
- try {
305
- // API методы честно сообщают о проблемах
306
- const projects = await sdk.projects.getAllProjects();
307
- } catch (error) {
308
- console.error('❌ API ошибка:', error.message);
309
-
310
- // Диагностика проблемы
311
- const diagnosis = await sdk.diagnoseAPI();
312
- if (!diagnosis.healthy) {
313
- console.log('Проблема с API endpoints:', diagnosis.errors);
314
- }
315
- }
316
- ```
317
-
318
- ### Retry логика
319
-
320
- ```javascript
321
- async function withRetry(operation, maxAttempts = 3) {
322
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
323
- try {
324
- return await operation();
325
- } catch (error) {
326
- console.log(`Попытка ${attempt}/${maxAttempts} неудачна:`, error.message);
327
-
328
- if (attempt === maxAttempts) {
329
- throw error; // Последняя попытка - бросаем ошибку
330
- }
331
-
332
- // Экспоненциальная задержка
333
- await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
334
- }
335
- }
336
- }
337
-
338
- // Использование
339
- const projects = await withRetry(() => sdk.projects.getAllProjects());
340
- ```
341
-
342
- ## 💡 Best Practices
343
-
344
- ### 1. Инициализация в production
345
-
346
- ```javascript
347
- class SolverSDKManager {
348
- constructor(config) {
349
- this.config = config;
350
- this.sdk = null;
351
- this.isReady = false;
352
- }
353
-
354
- async initialize() {
355
- try {
356
- // Валидация с таймаутом
357
- this.sdk = await Promise.race([
358
- CodeSolverSDK.create({
359
- ...this.config,
360
- websocket: { autoConnect: false }
361
- }),
362
- new Promise((_, reject) =>
363
- setTimeout(() => reject(new Error('Timeout')), 10000)
364
- )
365
- ]);
366
-
367
- // Диагностика
368
- const diagnosis = await this.sdk.diagnoseAPI();
369
- if (!diagnosis.healthy) {
370
- throw new Error(`API проблемы: ${diagnosis.errors.join(', ')}`);
371
- }
372
-
373
- this.isReady = true;
374
- console.log('✅ SDK готов к production использованию');
375
-
376
- } catch (error) {
377
- console.error('❌ Не удалось инициализировать SDK:', error.message);
378
- throw error;
379
- }
380
- }
381
-
382
- ensureReady() {
383
- if (!this.isReady) {
384
- throw new Error('SDK не инициализирован. Вызовите initialize() сначала.');
385
- }
386
- }
387
-
388
- async getProjects() {
389
- this.ensureReady();
390
- return this.sdk.projects.getAllProjects();
391
- }
392
- }
393
-
394
- // Использование
395
- const sdkManager = new SolverSDKManager({
396
- baseURL: process.env.SOLVER_API_URL,
397
- apiKey: process.env.SOLVER_API_KEY
398
- });
399
-
400
- await sdkManager.initialize();
401
- ```
402
-
403
- ### 2. WebSocket lifecycle управление
404
-
405
- ```javascript
406
- class WebSocketManager {
407
- constructor(sdk) {
408
- this.sdk = sdk;
409
- this.connections = new Set();
410
- }
411
-
412
- async connectService(serviceName) {
413
- if (this.connections.has(serviceName)) {
414
- return; // Уже подключен
415
- }
416
-
417
- const service = this.sdk[serviceName];
418
- const connected = await service.connectWebSocket();
419
-
420
- if (connected) {
421
- this.connections.add(serviceName);
422
- console.log(`✅ ${serviceName} WebSocket подключен`);
423
- }
424
- }
425
-
426
- async disconnectAll() {
427
- for (const serviceName of this.connections) {
428
- await this.sdk[serviceName].disconnectWebSocket();
429
- }
430
- this.connections.clear();
431
- console.log('✅ Все WebSocket соединения закрыты');
432
- }
433
-
434
- isServiceConnected(serviceName) {
435
- return this.connections.has(serviceName);
436
- }
437
- }
438
-
439
- // Использование
440
- const wsManager = new WebSocketManager(sdk);
441
-
442
- // Подключение по требованию
443
- if (needIndexing) await wsManager.connectService('projects');
444
- if (needReasoning) await wsManager.connectService('reasoning');
445
-
446
- // Cleanup при завершении работы
447
- process.on('SIGINT', () => {
448
- wsManager.disconnectAll();
449
- process.exit(0);
450
- });
451
- ```
452
-
453
- ### 3. Error boundary для React
454
-
455
- ```jsx
456
- import React, { Component } from 'react';
457
-
458
- class SDKErrorBoundary extends Component {
459
- constructor(props) {
460
- super(props);
461
- this.state = { hasError: false, error: null };
462
- }
463
-
464
- static getDerivedStateFromError(error) {
465
- return { hasError: true, error };
466
- }
467
-
468
- componentDidCatch(error, errorInfo) {
469
- // Логируем ошибки SDK
470
- console.error('SDK Error:', error);
471
-
472
- // Диагностика при ошибке
473
- if (this.props.sdk) {
474
- this.props.sdk.diagnoseAPI().then(diagnosis => {
475
- if (!diagnosis.healthy) {
476
- console.error('API проблемы:', diagnosis.errors);
477
- }
478
- });
479
- }
480
- }
481
-
482
- render() {
483
- if (this.state.hasError) {
484
- return (
485
- <div className="error-boundary">
486
- <h2>⚠️ Ошибка SDK</h2>
487
- <p>{this.state.error?.message}</p>
488
- <button onClick={() => this.setState({ hasError: false })}>
489
- Попробовать снова
490
- </button>
491
- </div>
492
- );
493
- }
494
-
495
- return this.props.children;
496
- }
497
- }
498
-
499
- // Использование
500
- <SDKErrorBoundary sdk={sdk}>
501
- <YourApp />
502
- </SDKErrorBoundary>
503
- ```
504
-
505
- ## 🎯 Заключение
506
-
507
- SDK v2.5.0 готов к production использованию с полным контролем над инициализацией, WebSocket соединениями и честной обработкой ошибок.
508
-
509
- **Ключевые принципы:**
510
- - ✅ Используйте `autoConnect: false` для контроля WebSocket
511
- - ✅ Применяйте `diagnoseAPI()` для проверки endpoints
512
- - ✅ Обрабатывайте честные ошибки без fallback'ов
513
- - ✅ Подключайте WebSocket только когда нужно
514
- - ✅ Используйте алиасы методов для удобства
515
-
516
- **Результат:** Стабильная работа в production без скрытых проблем!