solver-sdk 1.7.4 → 1.7.6

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 (71) hide show
  1. package/README.md +25 -49
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +32 -192
  3. package/dist/cjs/api/chat-api/index.js.map +1 -0
  4. package/dist/cjs/api/chat-api/interfaces.js +3 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
  6. package/dist/cjs/api/chat-api/models.js +6 -0
  7. package/dist/cjs/api/chat-api/models.js.map +1 -0
  8. package/dist/cjs/api/chat-api/stream-utils.js +192 -0
  9. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
  10. package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
  11. package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
  12. package/dist/cjs/api/projects-api.js +211 -0
  13. package/dist/cjs/api/projects-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +10 -15
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/constants/websocket-events.constants.js +77 -52
  17. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  18. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  19. package/dist/esm/api/{chat-api.js → chat-api/index.js} +29 -192
  20. package/dist/esm/api/chat-api/index.js.map +1 -0
  21. package/dist/esm/api/chat-api/interfaces.js +2 -0
  22. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  23. package/dist/esm/api/chat-api/models.js +5 -0
  24. package/dist/esm/api/chat-api/models.js.map +1 -0
  25. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  26. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  27. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  28. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  29. package/dist/esm/api/projects-api.js +211 -0
  30. package/dist/esm/api/projects-api.js.map +1 -1
  31. package/dist/esm/code-solver-sdk.js +8 -13
  32. package/dist/esm/code-solver-sdk.js.map +1 -1
  33. package/dist/esm/constants/websocket-events.constants.js +76 -51
  34. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  35. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  36. package/dist/types/api/chat-api/index.d.ts +81 -0
  37. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  38. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  39. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  40. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +8 -79
  41. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  42. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  43. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  44. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  45. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  46. package/dist/types/api/projects-api.d.ts +76 -0
  47. package/dist/types/api/projects-api.d.ts.map +1 -1
  48. package/dist/types/code-solver-sdk.d.ts +1 -1
  49. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  50. package/dist/types/constants/websocket-events.constants.d.ts +65 -36
  51. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  52. package/dist/types/types/index.d.ts +8 -0
  53. package/dist/types/types/index.d.ts.map +1 -1
  54. package/dist/types/utils/code-solver-websocket-client.d.ts +28 -34
  55. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  56. package/docs/API_REFERENCE.md +432 -0
  57. package/docs/INTEGRATION_EXAMPLES.md +342 -0
  58. package/docs/README.md +78 -53
  59. package/docs/WEBSOCKET.md +191 -400
  60. package/docs/advanced/PING_PONG.md +212 -0
  61. package/docs/features/THINKING.md +158 -0
  62. package/docs/indexing/INDEXING.md +434 -210
  63. package/package.json +2 -2
  64. package/dist/cjs/api/chat-api.js.map +0 -1
  65. package/dist/esm/api/chat-api.js.map +0 -1
  66. package/dist/types/api/chat-api.d.ts.map +0 -1
  67. package/docs/REGIONS.md +0 -140
  68. package/docs/WEBSOCKET_EVENTS.md +0 -183
  69. package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
  70. package/docs/thinking/streaming-thinking-guide.md +0 -164
  71. package/docs/thinking/thinking-mode.md +0 -366
@@ -0,0 +1,342 @@
1
+ # Примеры интеграции с VS Code/Cursor
2
+
3
+ В этом документе приведены примеры использования SDK с VS Code или Cursor расширениями.
4
+
5
+ ## Содержание
6
+ - [Инициализация SDK](#инициализация-sdk)
7
+ - [Работа с проектами](#работа-с-проектами)
8
+ - [Отслеживание прогресса индексации](#отслеживание-прогресса-индексации)
9
+ - [Потоковый чат с мышлением](#потоковый-чат-с-мышлением)
10
+ - [Поиск в коде](#поиск-в-коде)
11
+
12
+ ## Инициализация SDK
13
+
14
+ Пример инициализации SDK в расширении VS Code/Cursor:
15
+
16
+ ```typescript
17
+ import * as vscode from 'vscode';
18
+ import { CodeSolverSDK } from 'solver-sdk';
19
+
20
+ // Инициализация SDK
21
+ const sdk = new CodeSolverSDK({
22
+ baseURL: 'https://api.example.com',
23
+ apiKey: 'your-api-key',
24
+ websocket: {
25
+ reconnect: true,
26
+ reconnectAttempts: 5,
27
+ reconnectDelay: 3000,
28
+ rejectUnauthorized: false // для самоподписанных сертификатов
29
+ }
30
+ });
31
+
32
+ // Проверка доступности API
33
+ async function checkConnection() {
34
+ try {
35
+ const isHealthy = await sdk.checkHealth();
36
+ if (isHealthy) {
37
+ vscode.window.showInformationMessage('API доступен');
38
+ } else {
39
+ vscode.window.showErrorMessage('API недоступен');
40
+ }
41
+ } catch (error) {
42
+ vscode.window.showErrorMessage(`Ошибка соединения: ${error.message}`);
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Работа с проектами
48
+
49
+ Пример автоматической работы с проектом при открытии рабочей области:
50
+
51
+ ```typescript
52
+ import * as path from 'path';
53
+
54
+ // Получение проекта по пути рабочей области
55
+ async function handleWorkspace() {
56
+ try {
57
+ // Получаем путь к текущей рабочей области
58
+ const workspaceFolders = vscode.workspace.workspaceFolders;
59
+ if (!workspaceFolders || workspaceFolders.length === 0) {
60
+ vscode.window.showWarningMessage('Откройте папку проекта');
61
+ return;
62
+ }
63
+
64
+ const workspacePath = workspaceFolders[0].uri.fsPath;
65
+ const projectName = path.basename(workspacePath);
66
+
67
+ // Получаем проект или создаем новый
68
+ const project = await sdk.projects.getOrCreateProject(
69
+ workspacePath,
70
+ projectName
71
+ );
72
+
73
+ if (project) {
74
+ vscode.window.showInformationMessage(`Проект "${projectName}" идентифицирован (ID: ${project.id})`);
75
+ return project;
76
+ }
77
+ } catch (error) {
78
+ vscode.window.showErrorMessage(`Ошибка: ${error.message}`);
79
+ }
80
+
81
+ return null;
82
+ }
83
+ ```
84
+
85
+ ## Отслеживание прогресса индексации
86
+
87
+ Пример отслеживания прогресса индексации:
88
+
89
+ ```typescript
90
+ // Запуск индексации проекта
91
+ async function indexProject(projectId, projectName) {
92
+ try {
93
+ // Запускаем индексацию
94
+ await sdk.projects.indexProject(projectId);
95
+
96
+ // Показываем прогресс
97
+ vscode.window.withProgress({
98
+ location: vscode.ProgressLocation.Notification,
99
+ title: `Индексация проекта "${projectName}"`,
100
+ cancellable: true
101
+ }, async (progress, token) => {
102
+ // Подключаемся к WebSocket для индексации
103
+ await sdk.projects.connectWebSocket();
104
+
105
+ return new Promise((resolve) => {
106
+ // Отслеживаем прогресс
107
+ sdk.projects.on('indexing_progress', (data) => {
108
+ progress.report({
109
+ message: `${data.progress}% (${data.processedFiles}/${data.totalFiles} файлов)`,
110
+ increment: data.progress
111
+ });
112
+ });
113
+
114
+ // Отслеживаем завершение
115
+ sdk.projects.on('indexing_complete', (data) => {
116
+ if (data.success) {
117
+ vscode.window.showInformationMessage('Индексация успешно завершена!');
118
+ } else {
119
+ vscode.window.showWarningMessage(`Индексация завершена с ошибками: ${data.errorMessage || 'неизвестная ошибка'}`);
120
+ }
121
+ sdk.projects.disconnectWebSocket();
122
+ resolve();
123
+ });
124
+
125
+ // Обработка отмены
126
+ token.onCancellationRequested(() => {
127
+ sdk.projects.stopIndexing(projectId)
128
+ .then(() => {
129
+ vscode.window.showInformationMessage('Индексация отменена');
130
+ sdk.projects.disconnectWebSocket();
131
+ resolve();
132
+ });
133
+ });
134
+ });
135
+ });
136
+ } catch (error) {
137
+ vscode.window.showErrorMessage(`Ошибка индексации: ${error.message}`);
138
+ }
139
+ }
140
+ ```
141
+
142
+ ## Потоковый чат с мышлением
143
+
144
+ Пример использования потокового чата с мышлением:
145
+
146
+ ```typescript
147
+ // Регистрация команды чата с мышлением
148
+ context.subscriptions.push(
149
+ vscode.commands.registerCommand('solver.chatWithThinking', async () => {
150
+ try {
151
+ // Запрашиваем ввод от пользователя
152
+ const question = await vscode.window.showInputBox({
153
+ prompt: 'Введите вопрос'
154
+ });
155
+
156
+ if (!question) return;
157
+
158
+ // Создаем и показываем панель для результата
159
+ const panel = vscode.window.createWebviewPanel(
160
+ 'chatWithThinking',
161
+ 'Ответ с мышлением',
162
+ vscode.ViewColumn.Beside,
163
+ { enableScripts: true }
164
+ );
165
+
166
+ // Начальный HTML для панели
167
+ panel.webview.html = `
168
+ <!DOCTYPE html>
169
+ <html>
170
+ <head>
171
+ <style>
172
+ body { font-family: var(--vscode-font-family); padding: 10px; }
173
+ .thinking { color: #666; font-style: italic; white-space: pre-wrap; }
174
+ .answer { white-space: pre-wrap; }
175
+ </style>
176
+ </head>
177
+ <body>
178
+ <h3>Вопрос: ${question}</h3>
179
+ <div class="thinking" id="thinking"></div>
180
+ <h4>Ответ:</h4>
181
+ <div class="answer" id="answer"></div>
182
+ </body>
183
+ </html>
184
+ `;
185
+
186
+ // Сообщения для чата
187
+ const messages = [
188
+ { role: 'user', content: question }
189
+ ];
190
+
191
+ // Опции для чата
192
+ const options = {
193
+ model: 'claude-3-7-sonnet-20240229',
194
+ thinking: true,
195
+ temperature: 0.7
196
+ };
197
+
198
+ // Обработчик событий чата
199
+ const handleEvent = (eventType, data) => {
200
+ if (eventType === 'thinking_delta' && data.thinking) {
201
+ // Обновляем содержимое мышления
202
+ panel.webview.postMessage({
203
+ command: 'appendThinking',
204
+ content: data.thinking
205
+ });
206
+ } else if (eventType === 'text_delta' && data.text) {
207
+ // Обновляем содержимое ответа
208
+ panel.webview.postMessage({
209
+ command: 'appendAnswer',
210
+ content: data.text
211
+ });
212
+ }
213
+ };
214
+
215
+ // Отправляем запрос с мышлением
216
+ await sdk.chat.streamChatWithThinking(
217
+ messages,
218
+ options,
219
+ handleEvent
220
+ );
221
+
222
+ // Настраиваем обработку сообщений в WebView
223
+ panel.webview.onDidReceiveMessage(message => {
224
+ const thinkingElement = document.getElementById('thinking');
225
+ const answerElement = document.getElementById('answer');
226
+
227
+ if (message.command === 'appendThinking') {
228
+ thinkingElement.textContent += message.content;
229
+ } else if (message.command === 'appendAnswer') {
230
+ answerElement.textContent += message.content;
231
+ }
232
+ });
233
+
234
+ } catch (error) {
235
+ vscode.window.showErrorMessage(`Ошибка чата: ${error.message}`);
236
+ }
237
+ })
238
+ );
239
+ ```
240
+
241
+ ## Поиск в коде
242
+
243
+ Пример семантического поиска в проекте:
244
+
245
+ ```typescript
246
+ // Поиск в проекте
247
+ async function searchInProject(projectId, query) {
248
+ try {
249
+ // Показываем индикатор прогресса
250
+ return vscode.window.withProgress({
251
+ location: vscode.ProgressLocation.Notification,
252
+ title: 'Поиск в проекте...',
253
+ cancellable: false
254
+ }, async (progress) => {
255
+ // Выполняем поиск
256
+ const results = await sdk.search.semanticSearch(projectId, {
257
+ query: query,
258
+ limit: 10,
259
+ includeContent: true
260
+ });
261
+
262
+ if (results.results.length === 0) {
263
+ vscode.window.showInformationMessage('Результаты не найдены');
264
+ return;
265
+ }
266
+
267
+ // Отображаем результаты
268
+ const panel = vscode.window.createWebviewPanel(
269
+ 'searchResults',
270
+ 'Результаты поиска',
271
+ vscode.ViewColumn.Beside,
272
+ { enableScripts: true }
273
+ );
274
+
275
+ // Формируем HTML для отображения результатов
276
+ panel.webview.html = `
277
+ <!DOCTYPE html>
278
+ <html>
279
+ <head>
280
+ <style>
281
+ body { font-family: var(--vscode-font-family); padding: 10px; }
282
+ .result { margin-bottom: 15px; padding: 10px; border: 1px solid #ccc; }
283
+ .path { cursor: pointer; color: var(--vscode-textLink-foreground); }
284
+ .snippet { background: var(--vscode-editor-inactiveSelectionBackground); padding: 10px; margin-top: 5px; white-space: pre-wrap; }
285
+ </style>
286
+ </head>
287
+ <body>
288
+ <h3>Результаты для: ${query}</h3>
289
+ ${results.results.map((result, index) => `
290
+ <div class="result">
291
+ <div class="path" data-path="${result.filePath}" data-start="${result.startLine}" data-end="${result.endLine}">
292
+ ${result.filePath}:${result.startLine}-${result.endLine}
293
+ </div>
294
+ <div class="snippet">${result.snippet || result.content || ''}</div>
295
+ </div>
296
+ `).join('')}
297
+
298
+ <script>
299
+ // Добавляем обработчик для открытия файлов
300
+ document.querySelectorAll('.path').forEach(elem => {
301
+ elem.addEventListener('click', () => {
302
+ const vscode = acquireVsCodeApi();
303
+ vscode.postMessage({
304
+ command: 'openFile',
305
+ filePath: elem.dataset.path,
306
+ startLine: parseInt(elem.dataset.start),
307
+ endLine: parseInt(elem.dataset.end)
308
+ });
309
+ });
310
+ });
311
+ </script>
312
+ </body>
313
+ </html>
314
+ `;
315
+
316
+ // Обработка сообщений от WebView
317
+ panel.webview.onDidReceiveMessage(
318
+ message => {
319
+ if (message.command === 'openFile') {
320
+ const uri = vscode.Uri.file(message.filePath);
321
+ vscode.workspace.openTextDocument(uri).then(doc => {
322
+ vscode.window.showTextDocument(doc).then(editor => {
323
+ const range = new vscode.Range(
324
+ new vscode.Position(message.startLine - 1, 0),
325
+ new vscode.Position(message.endLine - 1, 0)
326
+ );
327
+ editor.revealRange(range);
328
+ });
329
+ });
330
+ }
331
+ },
332
+ undefined,
333
+ context.subscriptions
334
+ );
335
+
336
+ return results;
337
+ });
338
+ } catch (error) {
339
+ vscode.window.showErrorMessage(`Ошибка поиска: ${error.message}`);
340
+ }
341
+ }
342
+ ```
package/docs/README.md CHANGED
@@ -1,77 +1,102 @@
1
- # Документация Solver SDK
1
+ 23# Code Solver SDK
2
2
 
3
- Эта директория содержит подробную документацию по Solver SDK версии 1.7.2.
3
+ JavaScript/TypeScript SDK для взаимодействия с API Code Solver, предназначенного для умной работы с кодом, семантического поиска и AI-ассистентов.
4
4
 
5
- ## Содержание
5
+ ## Установка
6
6
 
7
- ### Основная документация
8
-
9
- - [Потоковая передача мышления (Thinking Architecture)](./THINKING_ARCHITECTURE.md) - Архитектура системы потоковой передачи мышления
10
- - [Руководство по потоковой передаче мышления](./streaming-thinking-guide.md) - Практическое руководство по использованию потоковой передачи мышления
11
- - [Работа с региональными эндпоинтами](./REGIONS.md) - Информация о работе с региональными эндпоинтами Anthropic API
12
- - [Расширенные возможности SDK](./ADVANCED.md) - Продвинутые функции и конфигурация SDK
13
- - [WebSocket API](./WEBSOCKET.md) - Подробное руководство по работе с WebSocket
14
- - [Справочник WebSocket событий](./WEBSOCKET_EVENTS.md) - Полный список всех WebSocket событий SDK
15
- - [Механизм Ping/Pong](./PING_PONG.md) - Документация по мониторингу состояния WebSocket соединений
16
- - [Индексация проектов](./INDEXING.md) - Руководство по индексации и обновлению индекса проектов
7
+ ```bash
8
+ npm install @code-solver/sdk
9
+ ```
17
10
 
18
- ### Дополнительные материалы
11
+ ## Основные возможности
19
12
 
20
- - [Режим мышления](./thinking/thinking-mode.md) - Основная информация о режиме мышления
13
+ - **Работа с проектами**: создание, индексация и управление проектами
14
+ - **Семантический поиск**: поиск по смыслу в коде проекта
15
+ - **AI-чат с контекстом**: взаимодействие с AI-моделями в контексте проекта
16
+ - **Работа с WebSocket**: потоковая обработка событий и ответов
17
+ - **Мультиплатформенность**: поддержка как браузеров, так и Node.js
21
18
 
22
- ## Основные возможности SDK 1.7.2
19
+ ## Быстрый старт
23
20
 
24
- ### Потоковая передача мышления (Streaming Thinking)
21
+ ```javascript
22
+ import { CodeSolverSDK } from '@code-solver/sdk';
25
23
 
26
- В версии 1.7.2 добавлена полная поддержка потоковой передачи мышления с помощью метода `streamChatWithThinking()`. Это позволяет получать события мышления модели в реальном времени через WebSocket.
24
+ // Инициализация SDK
25
+ const sdk = new CodeSolverSDK({
26
+ baseURL: 'https://api.code-solver.com',
27
+ apiKey: 'ваш-api-ключ',
28
+ websocket: {
29
+ reconnect: true,
30
+ reconnectAttempts: 5
31
+ }
32
+ });
27
33
 
28
- ```javascript
29
- const response = await sdk.chat.streamChatWithThinking(
30
- messages,
31
- { model: 'claude-3-7-sonnet-20240229', thinking: true },
32
- handleEvent
34
+ // Проверка доступности API
35
+ const isAvailable = await sdk.checkHealth();
36
+ if (!isAvailable) {
37
+ console.error('API недоступен');
38
+ return;
39
+ }
40
+
41
+ // Создание проекта
42
+ const project = await sdk.projects.createProject(
43
+ 'Мой проект',
44
+ '/путь/к/проекту',
45
+ {
46
+ excludePatterns: ['node_modules', '.git', 'dist']
47
+ }
33
48
  );
34
- ```
35
49
 
36
- ### Региональные эндпоинты
50
+ // Индексация проекта
51
+ await sdk.projects.indexProject(project.id);
52
+
53
+ // Отслеживание прогресса индексации через WebSocket
54
+ sdk.projects.on('indexing_progress', (data) => {
55
+ console.log(`Прогресс индексации: ${data.progress}%`);
56
+ });
37
57
 
38
- SDK поддерживает работу с различными региональными эндпоинтами Anthropic API:
58
+ sdk.projects.on('indexing_complete', (data) => {
59
+ console.log('Индексация завершена!');
60
+ });
39
61
 
40
- ```javascript
41
- const sdk = new CodeSolverSDK({
42
- providers: {
43
- anthropic: {
44
- region: 'eu-west-1' // Использовать европейский регион
45
- }
62
+ // Семантический поиск
63
+ const searchResults = await sdk.search.semanticSearch(project.id, {
64
+ query: 'функция для обработки HTTP запросов',
65
+ limit: 10
66
+ });
67
+
68
+ // Взаимодействие с AI-ассистентом
69
+ const chatResponse = await sdk.chat.chat([
70
+ {
71
+ role: 'system',
72
+ content: 'Ты опытный программист, помогающий разработчику.'
73
+ },
74
+ {
75
+ role: 'user',
76
+ content: 'Объясни, как работает функция getUserProfile в моем проекте.'
46
77
  }
78
+ ], {
79
+ projectId: project.id,
80
+ model: 'claude-3-7-sonnet-20240229'
47
81
  });
48
82
 
49
- // Автоматическое переключение между регионами при ошибках
50
- const response = await sdk.chat.chatWithRegionFailover([...], options);
83
+ console.log(chatResponse.answer);
51
84
  ```
52
85
 
53
- ### WebSocket улучшения
54
-
55
- Улучшена надежность и диагностика WebSocket соединений:
86
+ ## Документация
56
87
 
57
- ```javascript
58
- // Диагностика соединения
59
- const diagnostics = sdk.getWebSocketClient().diagnoseConnection(namespace);
60
- console.log(diagnostics);
61
-
62
- // Мониторинг здоровья
63
- sdk.getWebSocketClient().setupConnectionHealthCheck(interval);
64
- ```
88
+ Подробная документация доступна в следующих файлах:
65
89
 
66
- ## Примеры кода
90
+ - [API Reference](./API_REFERENCE.md) - подробное описание всех методов SDK
91
+ - [Authentication](./AUTHENTICATION.md) - информация по аутентификации
92
+ - [Работа с WebSocket](./WEBSOCKET.md) - примеры работы с WebSocket соединениями
93
+ - [Примеры интеграции](./INTEGRATION_EXAMPLES.md) - примеры интеграции с VS Code/Cursor
67
94
 
68
- Примеры использования SDK доступны в директории `examples` корневого каталога проекта:
95
+ ## Поддерживаемые платформы
69
96
 
70
- - `example:check-api` - Проверка соединения с API
71
- - `example:indexing` - Индексация проектов
72
- - `example:dependencies` - Работа с зависимостями
73
- - `example:regions` - Проверка доступности регионов
97
+ - **Браузеры**: Chrome, Firefox, Safari, Edge
98
+ - **Node.js**: 14.x и выше
74
99
 
75
- ## Обратная связь
100
+ ## Лицензия
76
101
 
77
- Если вы обнаружили ошибки в документации или у вас есть предложения по улучшению, пожалуйста, создайте issue в репозитории проекта.
102
+ MIT