solver-sdk 1.8.0 → 1.8.1
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.
- package/README.md +176 -468
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
- package/dist/cjs/api/chat-api/index.js.map +1 -0
- package/dist/cjs/api/chat-api/interfaces.js +3 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
- package/dist/cjs/api/chat-api/models.js +6 -0
- package/dist/cjs/api/chat-api/models.js.map +1 -0
- package/dist/cjs/api/chat-api/stream-utils.js +192 -0
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/cjs/api/projects-api.js +279 -5
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +12 -17
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +77 -52
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +87 -56
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/http-client.js +7 -0
- package/dist/cjs/utils/http-client.js.map +1 -1
- package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
- package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
- package/dist/esm/api/chat-api/index.js.map +1 -0
- package/dist/esm/api/chat-api/interfaces.js +2 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -0
- package/dist/esm/api/chat-api/models.js +5 -0
- package/dist/esm/api/chat-api/models.js.map +1 -0
- package/dist/esm/api/chat-api/stream-utils.js +188 -0
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
- package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
- package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/esm/api/projects-api.js +279 -5
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +10 -15
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +76 -51
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +87 -56
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/http-client.js +7 -0
- package/dist/esm/utils/http-client.js.map +1 -1
- package/dist/esm/utils/reasoning-auth-helper.js +54 -0
- package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +81 -0
- package/dist/types/api/chat-api/index.d.ts.map +1 -0
- package/dist/types/api/chat-api/interfaces.d.ts +47 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
- package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
- package/dist/types/api/chat-api/models.d.ts.map +1 -0
- package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +114 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -1
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +65 -36
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/interfaces/http-client.d.ts +1 -1
- package/dist/types/interfaces/http-client.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +44 -43
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/http-client.d.ts +5 -0
- package/dist/types/utils/http-client.d.ts.map +1 -1
- package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +432 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/PING_PONG.md +212 -0
- package/docs/README.md +102 -0
- package/docs/WEBSOCKET.md +299 -0
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +231 -0
- package/package.json +4 -3
- package/dist/cjs/api/chat-api.js.map +0 -1
- package/dist/esm/api/chat-api.js.map +0 -1
- package/dist/types/api/chat-api.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -2,20 +2,59 @@
|
|
|
2
2
|
|
|
3
3
|
SDK для интеграции с Code Solver Backend API. Поддерживает работу как в браузере, так и в Node.js.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="https://www.npmjs.com/package/solver-sdk"><img src="https://img.shields.io/npm/v/solver-sdk.svg" alt="NPM Version" /></a>
|
|
7
|
+
<a href="https://www.npmjs.com/package/solver-sdk"><img src="https://img.shields.io/npm/dm/solver-sdk.svg" alt="NPM Downloads" /></a>
|
|
8
|
+
<a href="https://github.com/code-solver/browser-sdk/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/solver-sdk.svg" alt="License" /></a>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
## 📋 Содержание
|
|
12
|
+
|
|
13
|
+
- [Основные возможности](#основные-возможности)
|
|
14
|
+
- [Установка](#установка)
|
|
15
|
+
- [Быстрый старт](#быстрый-старт)
|
|
16
|
+
- [CommonJS (Node.js)](#в-среде-commonjs-nodejs)
|
|
17
|
+
- [ESM (Node.js)](#в-среде-esm-nodejs)
|
|
18
|
+
- [Браузер](#в-браузере)
|
|
19
|
+
- [API](#api)
|
|
20
|
+
- [Основные компоненты](#основные-компоненты)
|
|
21
|
+
- [Опции SDK](#опции-sdk)
|
|
22
|
+
- [Продвинутые функции](#продвинутые-функции)
|
|
23
|
+
- [Проекты и индексация](#работа-с-проектами)
|
|
24
|
+
- [Поиск кода](#поиск-кода)
|
|
25
|
+
- [WebSocket и подписки](#работа-с-рассуждениями-через-websocket)
|
|
26
|
+
- [Работа с зависимостями](#api-для-работы-с-зависимостями)
|
|
27
|
+
- [Потоковая передача мышления](#потоковая-передача-мышления)
|
|
28
|
+
- [Региональные эндпоинты](#работа-с-региональными-эндпоинтами)
|
|
29
|
+
- [Примеры](#примеры)
|
|
30
|
+
- [Совместимость](#совместимость)
|
|
31
|
+
- [Разработка и тестирование](#разработка-и-тестирование)
|
|
32
|
+
- [Документация](#документация)
|
|
33
|
+
- [Лицензия](#лицензия)
|
|
34
|
+
|
|
35
|
+
## Основные возможности
|
|
36
|
+
|
|
37
|
+
- **Кросс-платформенность**: совместимость с ESM, CommonJS, браузером и Node.js
|
|
38
|
+
- **Типизация**: полная поддержка TypeScript
|
|
39
|
+
- **Расширенная работа с WebSocket**:
|
|
11
40
|
- Автоматический ping/pong механизм для мониторинга соединений
|
|
12
41
|
- Сбор статистики времени отклика (RTT) и состояния соединений
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
42
|
+
- Интеллектуальный механизм переподключения с экспоненциальной задержкой
|
|
43
|
+
- Настраиваемый мониторинг здоровья соединения
|
|
44
|
+
- **Потоковая передача мышления**:
|
|
45
|
+
- Метод `streamChatWithThinking()` для потоковой передачи процесса мышления модели
|
|
46
|
+
- Полная поддержка официального Anthropic API со всеми типами блоков контента
|
|
47
|
+
- Единый стандартизированный формат событий
|
|
48
|
+
- **Работа с регионами**:
|
|
49
|
+
- Поддержка региональных эндпоинтов Anthropic API
|
|
50
|
+
- Автоматическое переключение между регионами при ошибках
|
|
51
|
+
- Поддержка регионов: 'us-east-1', 'eu-west-1', 'ap-southeast-2'
|
|
52
|
+
- **Индексация и поиск**:
|
|
53
|
+
- Инкрементальная индексация отдельных файлов
|
|
54
|
+
- Семантический поиск кода
|
|
55
|
+
- **Обработка ошибок**:
|
|
56
|
+
- Интеллектуальные повторные попытки
|
|
57
|
+
- Обширная диагностика соединений
|
|
19
58
|
|
|
20
59
|
## Установка
|
|
21
60
|
|
|
@@ -23,7 +62,7 @@ SDK для интеграции с Code Solver Backend API. Поддержива
|
|
|
23
62
|
npm install solver-sdk
|
|
24
63
|
```
|
|
25
64
|
|
|
26
|
-
##
|
|
65
|
+
## Быстрый старт
|
|
27
66
|
|
|
28
67
|
### В среде CommonJS (Node.js)
|
|
29
68
|
|
|
@@ -53,14 +92,7 @@ example().catch(console.error);
|
|
|
53
92
|
### В среде ESM (Node.js)
|
|
54
93
|
|
|
55
94
|
```javascript
|
|
56
|
-
|
|
57
|
-
import { createRequire } from 'module';
|
|
58
|
-
const require = createRequire(import.meta.url);
|
|
59
|
-
const { CodeSolverSDK } = require('solver-sdk');
|
|
60
|
-
|
|
61
|
-
// Вариант 2: Прямой импорт (если в package.json указан "type": "module")
|
|
62
|
-
// import * as sdk from 'solver-sdk';
|
|
63
|
-
// const { CodeSolverSDK } = sdk;
|
|
95
|
+
import { CodeSolverSDK } from 'solver-sdk';
|
|
64
96
|
|
|
65
97
|
// Создание экземпляра SDK
|
|
66
98
|
const sdk = new CodeSolverSDK({
|
|
@@ -95,7 +127,32 @@ example().catch(console.error);
|
|
|
95
127
|
</script>
|
|
96
128
|
```
|
|
97
129
|
|
|
98
|
-
##
|
|
130
|
+
## API
|
|
131
|
+
|
|
132
|
+
### Основные компоненты
|
|
133
|
+
|
|
134
|
+
- `CodeSolverSDK` - Основной класс SDK
|
|
135
|
+
- `ReasoningApi` - API для работы с рассуждениями
|
|
136
|
+
- `ProjectsApi` - API для работы с проектами
|
|
137
|
+
- `SearchApi` - API для поиска кода
|
|
138
|
+
- `AgentsApi` - API для работы с агентами
|
|
139
|
+
- `ContextApi` - API для работы с контекстом кода
|
|
140
|
+
- `DependenciesApi` - API для работы с зависимостями
|
|
141
|
+
- `ChatApi` - API для работы с чатом и потоковой передачей мышления
|
|
142
|
+
|
|
143
|
+
### Опции SDK
|
|
144
|
+
|
|
145
|
+
| Опция | Тип | Описание | Обязательна |
|
|
146
|
+
|-------|-----|----------|-------------|
|
|
147
|
+
| `baseURL` | string | Базовый URL API | Да |
|
|
148
|
+
| `apiKey` | string | API ключ для авторизации | Нет |
|
|
149
|
+
| `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
|
|
150
|
+
| `headers` | object | Пользовательские HTTP заголовки | Нет |
|
|
151
|
+
| `httpsAgent` | object | Опции для HTTPS агента (Node.js) | Нет |
|
|
152
|
+
| `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
|
|
153
|
+
| `websocket` | object | Настройки WebSocket (reconnect, timeout и др.) | Нет |
|
|
154
|
+
|
|
155
|
+
## Продвинутые функции
|
|
99
156
|
|
|
100
157
|
### Работа с проектами
|
|
101
158
|
|
|
@@ -139,9 +196,6 @@ const reasoning = await sdk.reasoning.createReasoning({
|
|
|
139
196
|
query: 'Объясни, как работает этот проект'
|
|
140
197
|
});
|
|
141
198
|
|
|
142
|
-
// Запуск процесса рассуждения
|
|
143
|
-
await sdk.reasoning.startReasoning(reasoning.id);
|
|
144
|
-
|
|
145
199
|
// Подключение через WebSocket
|
|
146
200
|
const wsClient = sdk.getWebSocketClient();
|
|
147
201
|
await wsClient.connectToReasoning(reasoning.id);
|
|
@@ -150,12 +204,16 @@ await wsClient.connectToReasoning(reasoning.id);
|
|
|
150
204
|
wsClient.enablePingPong(30000, 3);
|
|
151
205
|
|
|
152
206
|
// Обработка событий мышления
|
|
153
|
-
wsClient.on('
|
|
154
|
-
|
|
207
|
+
wsClient.on('content_block_delta', (data) => {
|
|
208
|
+
if (data.delta?.type === 'thinking_delta') {
|
|
209
|
+
console.log('Фрагмент размышления:', data.delta.thinking);
|
|
210
|
+
} else if (data.delta?.type === 'text_delta') {
|
|
211
|
+
console.log('Фрагмент ответа:', data.delta.text);
|
|
212
|
+
}
|
|
155
213
|
});
|
|
156
214
|
|
|
157
|
-
wsClient.on('
|
|
158
|
-
console.log('Завершено:', data
|
|
215
|
+
wsClient.on('message_stop', (data) => {
|
|
216
|
+
console.log('Завершено:', data);
|
|
159
217
|
|
|
160
218
|
// Отключаем механизм ping/pong и закрываем соединение
|
|
161
219
|
wsClient.disablePingPong();
|
|
@@ -163,63 +221,13 @@ wsClient.on('complete', (data) => {
|
|
|
163
221
|
});
|
|
164
222
|
|
|
165
223
|
// Мониторинг качества соединения
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
console.log(`Среднее время отклика: ${stats.averageRtt}ms`);
|
|
169
|
-
}, 60000);
|
|
224
|
+
const diagnostics = wsClient.diagnoseConnection(WebSocketNamespace.REASONING);
|
|
225
|
+
console.log(`Состояние соединения:`, diagnostics);
|
|
170
226
|
```
|
|
171
227
|
|
|
172
|
-
###
|
|
228
|
+
### API для работы с зависимостями
|
|
173
229
|
|
|
174
230
|
```javascript
|
|
175
|
-
// Инкрементальная индексация отдельного файла
|
|
176
|
-
async function updateSingleFile() {
|
|
177
|
-
const projectId = 'your-project-id';
|
|
178
|
-
const filePath = 'src/components/App.js';
|
|
179
|
-
const fileContent = 'console.log("Hello World");';
|
|
180
|
-
|
|
181
|
-
// Обновление индекса отдельного файла
|
|
182
|
-
const result = await sdk.projects.updateFileIndex(
|
|
183
|
-
projectId,
|
|
184
|
-
filePath,
|
|
185
|
-
{
|
|
186
|
-
content: fileContent, // Содержимое файла
|
|
187
|
-
force: false // true для принудительного обновления
|
|
188
|
-
}
|
|
189
|
-
);
|
|
190
|
-
|
|
191
|
-
console.log(`Файл ${result.filePath} успешно проиндексирован`);
|
|
192
|
-
console.log(`Метаданные файла:`, result.fileIndex);
|
|
193
|
-
|
|
194
|
-
// Альтернативный вариант через ContextApi
|
|
195
|
-
await sdk.context.updateFileIndex(
|
|
196
|
-
projectId,
|
|
197
|
-
filePath,
|
|
198
|
-
fileContent,
|
|
199
|
-
false // force flag
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Чтение файла с диска и обновление индекса
|
|
204
|
-
async function updateFileFromDisk() {
|
|
205
|
-
const projectId = 'your-project-id';
|
|
206
|
-
const filePath = 'src/components/App.js';
|
|
207
|
-
|
|
208
|
-
// Обновление индекса без передачи содержимого
|
|
209
|
-
// SDK прочитает файл с диска
|
|
210
|
-
const result = await sdk.projects.updateFileIndex(projectId, filePath);
|
|
211
|
-
|
|
212
|
-
console.log(`Файл ${result.filePath} успешно проиндексирован`);
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
## API для работы с зависимостями
|
|
217
|
-
|
|
218
|
-
SDK предоставляет API для работы с зависимостями файлов в проекте, что позволяет анализировать структуру проекта, импорты/экспорты и выявлять циклические зависимости.
|
|
219
|
-
|
|
220
|
-
### Получение зависимостей файла
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
231
|
// Получение зависимостей конкретного файла
|
|
224
232
|
const fileDependencies = await sdk.dependencies.getFileDependencies(projectId, {
|
|
225
233
|
filePath: 'src/app.js'
|
|
@@ -227,302 +235,24 @@ const fileDependencies = await sdk.dependencies.getFileDependencies(projectId, {
|
|
|
227
235
|
|
|
228
236
|
console.log('Импорты:', fileDependencies.imports);
|
|
229
237
|
console.log('Импортируется в:', fileDependencies.importedBy);
|
|
230
|
-
console.log('Экспорты:', fileDependencies.exports);
|
|
231
|
-
console.log('Экспортируемые из импортов:', fileDependencies.exportedBy);
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### Получение графа зависимостей
|
|
235
238
|
|
|
236
|
-
```typescript
|
|
237
239
|
// Получение полного графа зависимостей проекта
|
|
238
240
|
const dependencyGraph = await sdk.dependencies.getDependencyGraph(projectId);
|
|
239
241
|
|
|
240
|
-
console.log('Узлы графа:', dependencyGraph.nodes);
|
|
241
|
-
console.log('Связи в графе:', dependencyGraph.edges);
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### Анализ зависимостей
|
|
245
|
-
|
|
246
|
-
```typescript
|
|
247
242
|
// Анализ графа зависимостей и поиск циклов
|
|
248
243
|
const analysis = await sdk.dependencies.analyzeDependencyGraph(projectId);
|
|
249
|
-
|
|
250
244
|
console.log('Циклические зависимости:', analysis.cycles);
|
|
251
|
-
console.log('Статистика графа:', analysis.statistics);
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### Статистика зависимостей
|
|
255
|
-
|
|
256
|
-
```typescript
|
|
257
|
-
// Получение статистики зависимостей в проекте
|
|
258
|
-
const stats = await sdk.dependencies.getDependencyStatistics(projectId);
|
|
259
|
-
|
|
260
|
-
console.log('Общее количество зависимостей:', stats.totalDependencies);
|
|
261
|
-
console.log('Уникальные файлы:', stats.uniqueFiles);
|
|
262
|
-
console.log('Импорты:', stats.importCount);
|
|
263
|
-
console.log('Экспорты:', stats.exportCount);
|
|
264
|
-
console.log('Циклические зависимости:', stats.cyclicDependenciesCount);
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
### Получение связанных компонентов
|
|
268
245
|
|
|
269
|
-
```typescript
|
|
270
|
-
// Получение связанных компонентов для файла
|
|
271
|
-
const relatedComponents = await sdk.dependencies.getRelatedComponents(projectId, {
|
|
272
|
-
filePath: 'src/app.js',
|
|
273
|
-
maxDepth: 3,
|
|
274
|
-
includeIncoming: true,
|
|
275
|
-
includeOutgoing: true,
|
|
276
|
-
maxNodes: 20
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
console.log('Исходный файл:', relatedComponents.source);
|
|
280
|
-
console.log('Связанные компоненты:', relatedComponents.nodes);
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### WebSocket события для зависимостей
|
|
284
|
-
|
|
285
|
-
Для получения уведомлений об изменениях в зависимостях в реальном времени можно использовать WebSocket:
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
246
|
// Подключение к WebSocket для зависимостей
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
// Обработка события обновления зависимостей
|
|
293
|
-
wsClient.on('dependency_update', (data) => {
|
|
247
|
+
await sdk.dependencies.connectWebSocket(projectId);
|
|
248
|
+
sdk.dependencies.on('dependency_update', (data) => {
|
|
294
249
|
console.log('Обновление зависимостей:', data);
|
|
295
|
-
console.log('Затронутые файлы:', data.affectedFiles);
|
|
296
|
-
});
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
## Тестирование и совместимость
|
|
300
|
-
|
|
301
|
-
SDK тщательно тестируется в различных средах:
|
|
302
|
-
|
|
303
|
-
```bash
|
|
304
|
-
# Запуск всех тестов
|
|
305
|
-
npm test
|
|
306
|
-
|
|
307
|
-
# Тесты браузерной совместимости
|
|
308
|
-
npm run test:browser
|
|
309
|
-
|
|
310
|
-
# Тесты Node.js совместимости
|
|
311
|
-
npm run test:node
|
|
312
|
-
|
|
313
|
-
# Тесты VS Code Web совместимости
|
|
314
|
-
npm run test:vscode
|
|
315
|
-
|
|
316
|
-
# Проверка покрытия кода тестами
|
|
317
|
-
npm run test:coverage
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### Поддерживаемые среды
|
|
321
|
-
|
|
322
|
-
SDK протестирован и работает в следующих средах:
|
|
323
|
-
|
|
324
|
-
- **Браузеры**: Chrome 80+, Firefox 72+, Safari 14+, Edge 80+
|
|
325
|
-
- **Node.js**: Версии 14.x и выше (как CommonJS, так и ESM)
|
|
326
|
-
- **VS Code**: Desktop и Web версии
|
|
327
|
-
|
|
328
|
-
### Решение проблем совместимости
|
|
329
|
-
|
|
330
|
-
Если у вас возникли проблемы с совместимостью, обратитесь к разделу "Устранение неполадок" в файле [INTEGRATION.md](./INTEGRATION.md).
|
|
331
|
-
|
|
332
|
-
## Сборка из исходного кода
|
|
333
|
-
|
|
334
|
-
Для сборки SDK из исходного кода:
|
|
335
|
-
|
|
336
|
-
```bash
|
|
337
|
-
# Установка зависимостей
|
|
338
|
-
npm install
|
|
339
|
-
|
|
340
|
-
# Сборка SDK
|
|
341
|
-
npm run build
|
|
342
|
-
|
|
343
|
-
# Очистка директории сборки
|
|
344
|
-
npm run clean
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
## Опции SDK
|
|
348
|
-
|
|
349
|
-
SDK поддерживает следующие опции при инициализации:
|
|
350
|
-
|
|
351
|
-
| Опция | Тип | Описание | Обязательна |
|
|
352
|
-
|-------|-----|----------|-------------|
|
|
353
|
-
| `baseURL` | string | Базовый URL API | Да |
|
|
354
|
-
| `apiKey` | string | API ключ для авторизации | Нет |
|
|
355
|
-
| `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
|
|
356
|
-
| `headers` | object | Пользовательские HTTP заголовки | Нет |
|
|
357
|
-
| `httpsAgent` | object | Опции для HTTPS агента (Node.js) | Нет |
|
|
358
|
-
| `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
|
|
359
|
-
|
|
360
|
-
## Документация
|
|
361
|
-
|
|
362
|
-
Подробная документация по использованию SDK доступна в директории [`docs`](./docs):
|
|
363
|
-
|
|
364
|
-
- [Начало работы](./docs/GETTING_STARTED.md) - инструкции по установке и базовому использованию SDK
|
|
365
|
-
- [Работа с проектами](./docs/PROJECTS.md) - управление проектами через SDK
|
|
366
|
-
- [Индексация проектов](./docs/INDEXING.md) - работа с индексацией и отслеживание через WebSocket
|
|
367
|
-
- [Документация API](./docs/API.md) - полная документация по всем методам SDK
|
|
368
|
-
|
|
369
|
-
## Тестирование и локальная разработка
|
|
370
|
-
|
|
371
|
-
### Предварительные требования
|
|
372
|
-
|
|
373
|
-
Для локальной разработки и тестирования требуется:
|
|
374
|
-
- Node.js 16+
|
|
375
|
-
- npm 8+
|
|
376
|
-
- Запущенный локальный сервер Code Solver Backend (по умолчанию на https://localhost:3000)
|
|
377
|
-
|
|
378
|
-
### Тестирование SDK
|
|
379
|
-
|
|
380
|
-
SDK включает несколько типов тестов:
|
|
381
|
-
|
|
382
|
-
#### Модульные тесты
|
|
383
|
-
|
|
384
|
-
Эти тесты проверяют внутреннюю логику SDK без взаимодействия с реальным бэкендом:
|
|
385
|
-
|
|
386
|
-
```bash
|
|
387
|
-
# Запуск всех тестов
|
|
388
|
-
npm test
|
|
389
|
-
|
|
390
|
-
# Запуск тестов для индексации
|
|
391
|
-
npm run test:indexing
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
#### Интеграционные тесты
|
|
395
|
-
|
|
396
|
-
Эти тесты проверяют взаимодействие SDK с реальным бэкендом:
|
|
397
|
-
|
|
398
|
-
```bash
|
|
399
|
-
# Запуск интеграционных тестов индексации
|
|
400
|
-
npm run test:integration
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
> **Важно:** Для запуска интеграционных тестов необходимо, чтобы локальный сервер Code Solver Backend был запущен на https://localhost:3000.
|
|
404
|
-
|
|
405
|
-
### Примеры использования
|
|
406
|
-
|
|
407
|
-
В директории [`examples`](./examples) находятся примеры использования SDK:
|
|
408
|
-
|
|
409
|
-
#### Проверка подключения к API
|
|
410
|
-
|
|
411
|
-
Пример проверяет доступность API и WebSocket соединения:
|
|
412
|
-
|
|
413
|
-
```bash
|
|
414
|
-
npm run example:check-api
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
#### Индексация проектов
|
|
418
|
-
|
|
419
|
-
Пример демонстрирует процесс индексации проекта с отслеживанием через WebSocket:
|
|
420
|
-
|
|
421
|
-
```bash
|
|
422
|
-
npm run example:indexing
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Режим разработки
|
|
426
|
-
|
|
427
|
-
Для запуска SDK в режиме разработки с локальным сервером:
|
|
428
|
-
|
|
429
|
-
1. Запустите локальный сервер Code Solver Backend
|
|
430
|
-
2. Используйте следующие настройки в вашем коде:
|
|
431
|
-
|
|
432
|
-
```javascript
|
|
433
|
-
const sdk = new CodeSolverSDK({
|
|
434
|
-
baseURL: 'https://localhost:3000',
|
|
435
|
-
apiKey: 'test-api-key',
|
|
436
|
-
httpsAgent: new https.Agent({
|
|
437
|
-
rejectUnauthorized: false // Для самоподписанных сертификатов
|
|
438
|
-
}),
|
|
439
|
-
websocket: {
|
|
440
|
-
reconnect: true,
|
|
441
|
-
rejectUnauthorized: false
|
|
442
|
-
}
|
|
443
|
-
});
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
#### Игнорирование самоподписанных сертификатов
|
|
447
|
-
|
|
448
|
-
При разработке с локальным сервером используйте:
|
|
449
|
-
|
|
450
|
-
```bash
|
|
451
|
-
# В Node.js скриптах
|
|
452
|
-
NODE_TLS_REJECT_UNAUTHORIZED=0 node your-script.js
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
## Лицензия
|
|
456
|
-
|
|
457
|
-
[MIT](./LICENSE)
|
|
458
|
-
|
|
459
|
-
## API Reference
|
|
460
|
-
|
|
461
|
-
### Основные компоненты
|
|
462
|
-
|
|
463
|
-
- `CodeSolverSDK` - Основной класс SDK
|
|
464
|
-
- `ReasoningApi` - API для работы с рассуждениями
|
|
465
|
-
- `ProjectsApi` - API для работы с проектами
|
|
466
|
-
- `SearchApi` - API для поиска кода
|
|
467
|
-
- `AgentsApi` - API для работы с агентами
|
|
468
|
-
- `ContextApi` - API для работы с контекстом кода
|
|
469
|
-
- `CodeModificationApi` - API для модификации кода
|
|
470
|
-
|
|
471
|
-
### Настройка соединения с сервером
|
|
472
|
-
|
|
473
|
-
```javascript
|
|
474
|
-
const sdk = new CodeSolverSDK({
|
|
475
|
-
baseURL: 'https://localhost:3000', // URL сервера (обязательный параметр)
|
|
476
|
-
apiKey: 'your-api-key', // API ключ (если требуется)
|
|
477
|
-
timeout: 30000, // Таймаут запросов в миллисекундах
|
|
478
|
-
headers: { // Дополнительные HTTP заголовки
|
|
479
|
-
'Custom-Header': 'value'
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
## Версия 1.0.5
|
|
485
|
-
|
|
486
|
-
- Улучшена совместимость с CommonJS и ESM модулями
|
|
487
|
-
- Добавлена поддержка WebSocket соединений
|
|
488
|
-
- Добавлена встроенная зависимость ws для Node.js
|
|
489
|
-
|
|
490
|
-
## Режим мышления (Thinking Mode)
|
|
491
|
-
|
|
492
|
-
Режим мышления позволяет получать промежуточные рассуждения модели в процессе формирования ответа. Это особенно полезно для отладки и понимания логики работы AI.
|
|
493
|
-
|
|
494
|
-
### Использование через REST API
|
|
495
|
-
|
|
496
|
-
```javascript
|
|
497
|
-
const { CodeSolverSDK } = require('solver-sdk');
|
|
498
|
-
|
|
499
|
-
const sdk = new CodeSolverSDK({
|
|
500
|
-
baseURL: 'https://api.example.com',
|
|
501
|
-
apiKey: 'ваш-ключ-api'
|
|
502
250
|
});
|
|
503
|
-
|
|
504
|
-
// Запрос с включенным режимом мышления
|
|
505
|
-
const response = await sdk.chat.chat([
|
|
506
|
-
{ role: 'user', content: 'Как реализовать алгоритм сортировки слиянием?' }
|
|
507
|
-
], {
|
|
508
|
-
model: 'Claude',
|
|
509
|
-
thinking: true // Активируем режим мышления
|
|
510
|
-
});
|
|
511
|
-
|
|
512
|
-
// Вывод хода мыслей
|
|
513
|
-
if (response.choices && response.choices[0] && response.choices[0].thinking) {
|
|
514
|
-
console.log('Ход мыслей модели:');
|
|
515
|
-
console.log(response.choices[0].thinking);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
// Вывод финального ответа
|
|
519
|
-
console.log('Ответ модели:');
|
|
520
|
-
console.log(response.choices[0].message.content);
|
|
521
251
|
```
|
|
522
252
|
|
|
523
|
-
###
|
|
253
|
+
### Потоковая передача мышления
|
|
524
254
|
|
|
525
|
-
|
|
255
|
+
Версия 1.7.4 включает полную поддержку потоковой передачи мышления через Anthropic API, а также улучшенную обработку ошибок:
|
|
526
256
|
|
|
527
257
|
```javascript
|
|
528
258
|
const { CodeSolverSDK } = require('solver-sdk');
|
|
@@ -542,22 +272,34 @@ async function streamThinking() {
|
|
|
542
272
|
const options = {
|
|
543
273
|
model: 'claude-3-7-sonnet-20240229',
|
|
544
274
|
temperature: 0.7,
|
|
545
|
-
thinking: true
|
|
275
|
+
thinking: true,
|
|
276
|
+
authToken: 'your-auth-token' // Унифицированный параметр для аутентификации WebSocket
|
|
546
277
|
};
|
|
547
278
|
|
|
548
279
|
// Обработчик событий WebSocket
|
|
549
280
|
const handleEvent = (eventType, data) => {
|
|
550
281
|
switch(eventType) {
|
|
551
|
-
case '
|
|
552
|
-
|
|
282
|
+
case 'content_block_start':
|
|
283
|
+
if (data.content_block && data.content_block.type === 'thinking') {
|
|
284
|
+
console.log('Начало размышлений:');
|
|
285
|
+
}
|
|
553
286
|
break;
|
|
554
287
|
|
|
555
|
-
case '
|
|
556
|
-
|
|
288
|
+
case 'content_block_delta':
|
|
289
|
+
if (data.delta && data.delta.type === 'thinking_delta') {
|
|
290
|
+
process.stdout.write(data.delta.thinking); // Потоковый вывод размышлений
|
|
291
|
+
} else if (data.delta && data.delta.type === 'text_delta') {
|
|
292
|
+
process.stdout.write(data.delta.text); // Потоковый вывод итогового текста
|
|
293
|
+
}
|
|
557
294
|
break;
|
|
558
295
|
|
|
559
|
-
case '
|
|
560
|
-
|
|
296
|
+
case 'error':
|
|
297
|
+
console.error('Ошибка:', data.message);
|
|
298
|
+
|
|
299
|
+
// Обработка ошибки географических ограничений
|
|
300
|
+
if (data.type === 'geo_restriction') {
|
|
301
|
+
console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
|
|
302
|
+
}
|
|
561
303
|
break;
|
|
562
304
|
}
|
|
563
305
|
};
|
|
@@ -573,133 +315,99 @@ async function streamThinking() {
|
|
|
573
315
|
console.log(`Запрос успешно отправлен. Socket ID: ${response.socketId}`);
|
|
574
316
|
} catch (error) {
|
|
575
317
|
console.error('Ошибка:', error);
|
|
318
|
+
|
|
319
|
+
// Проверка наличия ошибки географических ограничений
|
|
320
|
+
if (error.type === 'geo_restriction') {
|
|
321
|
+
console.error('Необходимо включить VPN для доступа к API Anthropic из вашего региона');
|
|
322
|
+
}
|
|
576
323
|
}
|
|
577
324
|
}
|
|
578
325
|
|
|
579
326
|
streamThinking();
|
|
580
327
|
```
|
|
581
328
|
|
|
582
|
-
#### Поддерживаемые события WebSocket
|
|
583
|
-
|
|
584
|
-
SDK теперь поддерживает полный набор событий из документации Anthropic:
|
|
329
|
+
#### Поддерживаемые события WebSocket для мышления
|
|
585
330
|
|
|
586
331
|
- `message_start` - начало сообщения от модели
|
|
587
332
|
- `content_block_start` - начало блока контента (текст или thinking)
|
|
588
|
-
- `
|
|
589
|
-
- `
|
|
590
|
-
- `
|
|
333
|
+
- `content_block_delta` - дельта блока контента со следующими типами:
|
|
334
|
+
- `delta.type === 'thinking_delta'` - фрагмент размышления модели
|
|
335
|
+
- `delta.type === 'text_delta'` - фрагмент текстового ответа
|
|
336
|
+
- `delta.type === 'input_json_delta'` - фрагмент JSON для инструментов
|
|
337
|
+
- `delta.type === 'signature_delta'` - подпись блока мышления
|
|
591
338
|
- `content_block_stop` - завершение блока контента
|
|
592
|
-
- `message_delta` -
|
|
339
|
+
- `message_delta` - дельта сообщения
|
|
593
340
|
- `message_stop` - завершение сообщения
|
|
594
|
-
- `ping` - событие для поддержания соединения
|
|
595
|
-
- `tool_use_start` - начало использования инструмента
|
|
596
|
-
- `input_json_delta` - фрагмент JSON входных данных для инструмента
|
|
597
341
|
|
|
598
|
-
|
|
342
|
+
## Примеры
|
|
599
343
|
|
|
600
|
-
|
|
601
|
-
- `examples/chat-example.js` - пример использования thinking в обычном чате
|
|
602
|
-
- `examples/thinking-example.js` - пример использования thinking через WebSocket
|
|
344
|
+
В директории [`examples`](./examples) доступны примеры использования SDK:
|
|
603
345
|
|
|
604
|
-
|
|
346
|
+
```bash
|
|
347
|
+
# Проверка подключения к API
|
|
348
|
+
npm run example:check-api
|
|
605
349
|
|
|
606
|
-
|
|
350
|
+
# Индексация проектов
|
|
351
|
+
npm run example:indexing
|
|
607
352
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
const options = {
|
|
611
|
-
model: 'claude-3-7-sonnet-20240229',
|
|
612
|
-
thinking: true, // Активируем режим мышления
|
|
613
|
-
temperature: 0.7,
|
|
614
|
-
maxTokens: 4096
|
|
615
|
-
};
|
|
616
|
-
|
|
617
|
-
// Использование с автоматическим созданием WebSocket соединения
|
|
618
|
-
const response = await sdk.chat.streamChatWithThinking(messages, options, eventHandler);
|
|
619
|
-
|
|
620
|
-
// Или с существующим socketId
|
|
621
|
-
const connectResponse = await sdk.chat.connectWebSocket();
|
|
622
|
-
options.socketId = connectResponse.socketId;
|
|
623
|
-
const response = await sdk.chat.streamChatWithThinking(messages, options, eventHandler);
|
|
353
|
+
# Работа с зависимостями
|
|
354
|
+
npm run example:dependencies
|
|
624
355
|
```
|
|
625
356
|
|
|
626
|
-
##
|
|
357
|
+
## Совместимость
|
|
627
358
|
|
|
628
|
-
|
|
359
|
+
SDK тщательно протестирован в различных средах и поддерживает:
|
|
629
360
|
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
4. Добавлена обработка таймаутов при ожидании ответов от сервера.
|
|
361
|
+
- **Браузеры**: Chrome 80+, Firefox 72+, Safari 14+, Edge 80+
|
|
362
|
+
- **Node.js**: Версии 14.x и выше (как CommonJS, так и ESM)
|
|
363
|
+
- **VS Code**: Desktop и Web версии
|
|
634
364
|
|
|
635
|
-
|
|
365
|
+
## Разработка и тестирование
|
|
636
366
|
|
|
637
367
|
```bash
|
|
638
|
-
|
|
639
|
-
|
|
368
|
+
# Установка зависимостей
|
|
369
|
+
npm install
|
|
640
370
|
|
|
641
|
-
|
|
371
|
+
# Сборка SDK
|
|
372
|
+
npm run build
|
|
642
373
|
|
|
643
|
-
|
|
644
|
-
npm
|
|
374
|
+
# Запуск всех тестов
|
|
375
|
+
npm test
|
|
376
|
+
|
|
377
|
+
# Тесты для рассуждений и WebSocket
|
|
378
|
+
npm run test:reasoning:all
|
|
379
|
+
|
|
380
|
+
# Запуск примеров
|
|
381
|
+
npm run example:check-api
|
|
645
382
|
```
|
|
646
383
|
|
|
647
|
-
###
|
|
648
|
-
|
|
649
|
-
Публичный API SDK остался без изменений, но внутренняя логика работы с WebSocket была значительно улучшена.
|
|
650
|
-
Если вы столкнулись с проблемами при подключении к серверу WebSocket или получении данных через Socket.IO,
|
|
651
|
-
обновление до версии 1.6.1 должно их решить.
|
|
652
|
-
|
|
653
|
-
## Обновления и важные изменения
|
|
654
|
-
|
|
655
|
-
### Синхронизация WebSocket событий (v1.6.3)
|
|
656
|
-
|
|
657
|
-
Произведена полная синхронизация констант WebSocket событий между SDK и бэкендом. Добавлена поддержка новых событий:
|
|
658
|
-
|
|
659
|
-
- `REASONING_CREATED` (`reasoning:created`)
|
|
660
|
-
- `JOINED_REASONING` (`joined_reasoning`)
|
|
661
|
-
- `JOIN_RESPONSE` (`join_response`)
|
|
662
|
-
- `UPDATE_CONTEXT_OPTIONS` (`update_context_options`)
|
|
663
|
-
- `ESTIMATE_CONTEXT` (`estimate_context`)
|
|
664
|
-
- `CONTEXT_OPTIONS_UPDATED` (`context_options_updated`)
|
|
665
|
-
- `CONTEXT_ESTIMATION` (`context_estimation`)
|
|
666
|
-
- `CHAT_REQUEST` (`chat_request`)
|
|
667
|
-
- `CHAT_STARTED` (`chat_started`)
|
|
668
|
-
- `MESSAGE_START` (`message_start`)
|
|
669
|
-
- `CONTENT_BLOCK_START` (`content_block_start`)
|
|
670
|
-
- `THINKING_DELTA` (`thinking_delta`)
|
|
671
|
-
- `TEXT_DELTA` (`text_delta`)
|
|
672
|
-
- `CONTENT_BLOCK_STOP` (`content_block_stop`)
|
|
673
|
-
- `MESSAGE_STOP` (`message_stop`)
|
|
674
|
-
- `TYPESCRIPT_ERRORS` (`typescript_errors`)
|
|
675
|
-
- `TYPESCRIPT_ERRORS_RECEIVED` (`typescript_errors_received`)
|
|
676
|
-
- `TEST_MODULES_CREATED` (`test_modules_created`)
|
|
677
|
-
- `CREATE_TEST_MODULES` (`create_test_modules`)
|
|
678
|
-
- `CONNECTION_PING` (`connection_ping`)
|
|
679
|
-
- `CONNECTION_PONG` (`connection_pong`)
|
|
680
|
-
- `RECONNECT_TOKEN` (`reconnect_token`)
|
|
681
|
-
- `JOIN` (`join`)
|
|
682
|
-
- `JOINED` (`joined`)
|
|
683
|
-
|
|
684
|
-
### Улучшенная совместимость с модульными системами
|
|
685
|
-
|
|
686
|
-
Добавлены тесты совместимости для проверки работы SDK в различных окружениях:
|
|
687
|
-
- CommonJS (для Node.js)
|
|
688
|
-
- ESM (для современного JavaScript)
|
|
689
|
-
|
|
690
|
-
Для запуска тестов используйте:
|
|
384
|
+
### Локальная разработка
|
|
691
385
|
|
|
692
|
-
```
|
|
693
|
-
|
|
694
|
-
|
|
386
|
+
```javascript
|
|
387
|
+
const sdk = new CodeSolverSDK({
|
|
388
|
+
baseURL: 'https://localhost:3000',
|
|
389
|
+
apiKey: 'test-api-key',
|
|
390
|
+
httpsAgent: new https.Agent({
|
|
391
|
+
rejectUnauthorized: false // Для самоподписанных сертификатов
|
|
392
|
+
}),
|
|
393
|
+
websocket: {
|
|
394
|
+
reconnect: true,
|
|
395
|
+
rejectUnauthorized: false
|
|
396
|
+
}
|
|
397
|
+
});
|
|
695
398
|
```
|
|
696
399
|
|
|
697
|
-
|
|
400
|
+
## Документация
|
|
401
|
+
|
|
402
|
+
Подробная документация доступна в директории [`docs`](./docs):
|
|
698
403
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
404
|
+
- [Начало работы](./docs/GETTING_STARTED.md)
|
|
405
|
+
- [Работа с проектами](./docs/PROJECTS.md)
|
|
406
|
+
- [Индексация проектов](./docs/INDEXING.md)
|
|
407
|
+
- [Потоковая передача мышления](./docs/THINKING_ARCHITECTURE.md)
|
|
408
|
+
- [Работа с регионами](./docs/ADVANCED.md)
|
|
409
|
+
- [Полное API](./docs/API.md)
|
|
702
410
|
|
|
703
|
-
|
|
411
|
+
## Лицензия
|
|
704
412
|
|
|
705
|
-
|
|
413
|
+
[MIT](./LICENSE)
|