solver-sdk 2.0.3 → 2.1.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/dist/cjs/api/chat-api/index.js +211 -171
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/models.js +1 -1
- package/dist/cjs/api/chat-api/stream-utils.js +139 -151
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
- package/dist/cjs/api/projects-api.js +2 -7
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +2 -48
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/message-helpers.js +212 -0
- package/dist/cjs/utils/message-helpers.js.map +1 -0
- package/dist/cjs/ws/filesystem-ws-client.js +6 -16
- package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +213 -151
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/models.js +1 -1
- package/dist/esm/api/chat-api/stream-utils.js +139 -151
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
- package/dist/esm/api/projects-api.js +2 -7
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +2 -48
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/message-helpers.js +199 -0
- package/dist/esm/utils/message-helpers.js.map +1 -0
- package/dist/esm/ws/filesystem-ws-client.js +6 -16
- package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +23 -8
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/interfaces.d.ts +125 -8
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +163 -43
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/chat-api/stream-utils.d.ts +19 -16
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
- package/dist/types/api/projects-api.d.ts +1 -2
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -22
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/message-helpers.d.ts +84 -0
- package/dist/types/utils/message-helpers.d.ts.map +1 -0
- package/dist/types/ws/filesystem-ws-client.d.ts +2 -2
- package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
- package/docs/README.md +3 -3
- package/docs/WEBSOCKET.md +16 -133
- package/package.json +6 -3
- package/dist/cjs/api/filesystem-api.js +0 -123
- package/dist/cjs/api/filesystem-api.js.map +0 -1
- package/dist/esm/api/filesystem-api.js +0 -119
- package/dist/esm/api/filesystem-api.js.map +0 -1
- package/dist/types/api/filesystem-api.d.ts +0 -64
- package/dist/types/api/filesystem-api.d.ts.map +0 -1
package/docs/WEBSOCKET.md
CHANGED
|
@@ -18,38 +18,16 @@ const sdk = new CodeSolverSDK({
|
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
|
|
21
|
-
//
|
|
21
|
+
// Единое подключение ко всем сервисам
|
|
22
22
|
await sdk.connect();
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
## Работа с файловой системой
|
|
26
|
-
|
|
27
|
-
```javascript
|
|
28
|
-
// Обязательно: для файловой системы projectId всегда необходим
|
|
29
|
-
const projectId = 'your-project-id';
|
|
30
|
-
|
|
31
|
-
// Метод 1: Подключение через файловую систему
|
|
32
|
-
await sdk.filesystem.connectWebSocket(projectId);
|
|
33
|
-
|
|
34
|
-
// Метод 2: Альтернативный способ подключения
|
|
35
|
-
await sdk.filesystem.connectToProject(projectId);
|
|
36
|
-
|
|
37
|
-
// Чтение файла через REST API (предпочтительный метод)
|
|
38
|
-
const content = await sdk.context.getFileContent(projectId, 'src/index.js');
|
|
39
|
-
|
|
40
|
-
// Отключение
|
|
41
|
-
await sdk.filesystem.disconnectWebSocket();
|
|
42
|
-
```
|
|
43
|
-
|
|
44
25
|
## Работа с индексацией проектов
|
|
45
26
|
|
|
46
27
|
```javascript
|
|
47
|
-
// Подключение к WebSocket для проектов
|
|
28
|
+
// Подключение к WebSocket для проектов
|
|
48
29
|
await sdk.projects.connectWebSocket();
|
|
49
30
|
|
|
50
|
-
// Или можно сразу указать проект (projectId опциональный)
|
|
51
|
-
await sdk.projects.connectWebSocket('project-id');
|
|
52
|
-
|
|
53
31
|
// Отслеживание прогресса индексации
|
|
54
32
|
sdk.projects.on('indexing_progress', (data) => {
|
|
55
33
|
console.log(`Прогресс индексации: ${data.progress}%`);
|
|
@@ -78,11 +56,7 @@ const reasoning = await sdk.reasoning.createReasoning({
|
|
|
78
56
|
});
|
|
79
57
|
|
|
80
58
|
// Подключение к WebSocket для рассуждений
|
|
81
|
-
|
|
82
|
-
await sdk.reasoning.connectWebSocket();
|
|
83
|
-
|
|
84
|
-
// Присоединение к конкретному рассуждению
|
|
85
|
-
await sdk.reasoning.joinReasoning(reasoning.id);
|
|
59
|
+
await sdk.reasoning.connectWebSocket(reasoning.id);
|
|
86
60
|
|
|
87
61
|
// Подписка на события
|
|
88
62
|
sdk.reasoning.on('thinking', (data) => {
|
|
@@ -99,36 +73,6 @@ sdk.reasoning.on('complete', (data) => {
|
|
|
99
73
|
await sdk.reasoning.startReasoning(reasoning.id);
|
|
100
74
|
```
|
|
101
75
|
|
|
102
|
-
## Работа с зависимостями
|
|
103
|
-
|
|
104
|
-
```javascript
|
|
105
|
-
// Подключение к WebSocket для зависимостей без указания projectId
|
|
106
|
-
await sdk.dependencies.connectWebSocket();
|
|
107
|
-
|
|
108
|
-
// Затем необходимо присоединиться к конкретному проекту
|
|
109
|
-
await sdk.dependencies.joinProject('your-project-id');
|
|
110
|
-
|
|
111
|
-
// Подписка на события зависимостей
|
|
112
|
-
sdk.dependencies.on('dependency_update', (data) => {
|
|
113
|
-
console.log('Обновление зависимостей:', data);
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
// Отключение
|
|
117
|
-
await sdk.dependencies.disconnectWebSocket();
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## Смена активного проекта
|
|
121
|
-
|
|
122
|
-
SDK поддерживает концепцию "активного проекта", что позволяет переключаться между проектами без полного переподключения:
|
|
123
|
-
|
|
124
|
-
```javascript
|
|
125
|
-
// Установка активного проекта
|
|
126
|
-
sdk.setActiveProject('new-project-id');
|
|
127
|
-
|
|
128
|
-
// После этого вызова SDK автоматически переподключит
|
|
129
|
-
// filesystem-namespace к новому проекту
|
|
130
|
-
```
|
|
131
|
-
|
|
132
76
|
## Потоковый чат с мышлением AI
|
|
133
77
|
|
|
134
78
|
```javascript
|
|
@@ -151,8 +95,7 @@ const messages = [
|
|
|
151
95
|
const options = {
|
|
152
96
|
model: 'claude-3-7-sonnet-20240229',
|
|
153
97
|
thinking: true,
|
|
154
|
-
temperature: 0.7
|
|
155
|
-
projectId: 'project-id' // Указываем projectId для контекста проекта
|
|
98
|
+
temperature: 0.7
|
|
156
99
|
};
|
|
157
100
|
|
|
158
101
|
// Отправка с потоковым получением ответа
|
|
@@ -163,52 +106,24 @@ const response = await sdk.chat.streamChatWithThinking(
|
|
|
163
106
|
);
|
|
164
107
|
```
|
|
165
108
|
|
|
166
|
-
##
|
|
167
|
-
|
|
168
|
-
WebSocket клиенты в SDK автоматически обрабатывают ping/pong сообщения и reconnect:
|
|
169
|
-
|
|
170
|
-
```javascript
|
|
171
|
-
// Все WebSocket клиенты имеют автоматический ping/pong
|
|
172
|
-
// с настраиваемыми таймаутами
|
|
173
|
-
const sdk = new CodeSolverSDK({
|
|
174
|
-
websocket: {
|
|
175
|
-
pingInterval: 25000, // Интервал отправки ping (мс)
|
|
176
|
-
pingTimeout: 10000, // Таймаут ожидания pong (мс)
|
|
177
|
-
reconnect: true, // Автоматическое переподключение
|
|
178
|
-
reconnectAttempts: 5 // Макс. количество попыток
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
// При разрыве соединения SDK попытается автоматически переподключиться
|
|
183
|
-
// Вам не нужно писать свой код для обработки reconnect
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
## Метод connect в SDK и пространства имен
|
|
187
|
-
|
|
188
|
-
Метод `sdk.connect()` подключает только базовые пространства имен и не устанавливает подключение ко всем сервисам:
|
|
109
|
+
## Работа с зависимостями
|
|
189
110
|
|
|
190
111
|
```javascript
|
|
191
|
-
//
|
|
192
|
-
await sdk.
|
|
112
|
+
// Подключение к пространству имен зависимостей
|
|
113
|
+
await sdk.dependencies.connectWebSocket(projectId);
|
|
193
114
|
|
|
194
|
-
//
|
|
195
|
-
|
|
115
|
+
// Подписка на события зависимостей
|
|
116
|
+
sdk.dependencies.on('dependency_update', (data) => {
|
|
117
|
+
console.log('Обновление зависимостей:', data);
|
|
118
|
+
});
|
|
196
119
|
|
|
197
|
-
//
|
|
198
|
-
await sdk.
|
|
120
|
+
// Отключение
|
|
121
|
+
await sdk.dependencies.disconnectWebSocket();
|
|
199
122
|
```
|
|
200
123
|
|
|
201
|
-
##
|
|
124
|
+
## Автоматическая авторизация
|
|
202
125
|
|
|
203
|
-
|
|
204
|
-
|-----|-------|---------------------|
|
|
205
|
-
| `sdk.filesystem` | `connectWebSocket(projectId)` | **Обязательно** |
|
|
206
|
-
| `sdk.filesystem` | `connectToProject(projectId)` | **Обязательно** |
|
|
207
|
-
| `sdk.projects` | `connectWebSocket([projectId])` | **Опционально** |
|
|
208
|
-
| `sdk.reasoning` | `connectWebSocket()` | **Нет** |
|
|
209
|
-
| `sdk.reasoning` | `joinReasoning(reasoningId)` | **Обязательно** |
|
|
210
|
-
| `sdk.dependencies` | `connectWebSocket()` | **Нет** |
|
|
211
|
-
| `sdk.dependencies` | `joinProject(projectId)` | **Обязательно** |
|
|
126
|
+
**Важно:** Авторизация происходит автоматически, если указан `apiKey` при инициализации SDK. Отдельных действий для авторизации не требуется.
|
|
212
127
|
|
|
213
128
|
## Обработка ошибок и переподключение
|
|
214
129
|
|
|
@@ -233,45 +148,13 @@ if (!isHealthy) {
|
|
|
233
148
|
return;
|
|
234
149
|
}
|
|
235
150
|
|
|
236
|
-
//
|
|
151
|
+
// Попытка подключения
|
|
237
152
|
const connected = await sdk.connect();
|
|
238
153
|
if (!connected) {
|
|
239
154
|
console.warn('WebSocket соединение не установлено, работа будет ограничена');
|
|
240
155
|
}
|
|
241
|
-
|
|
242
|
-
// Для работы с файловой системой необходимо отдельное подключение с projectId
|
|
243
|
-
const projectId = 'your-project-id';
|
|
244
|
-
await sdk.filesystem.connectWebSocket(projectId);
|
|
245
156
|
```
|
|
246
157
|
|
|
247
|
-
## Использование в Cursor
|
|
248
|
-
|
|
249
|
-
В Cursor клиенте projectId обычно получается через API проектов:
|
|
250
|
-
|
|
251
|
-
```javascript
|
|
252
|
-
// Получаем projectId для текущей рабочей области
|
|
253
|
-
const workspacePath = '/path/to/project';
|
|
254
|
-
const project = await sdk.projects.getOrCreateProjectByPath(workspacePath);
|
|
255
|
-
const projectId = project.id;
|
|
256
|
-
|
|
257
|
-
// Используем полученный projectId для подключения к файловой системе
|
|
258
|
-
await sdk.filesystem.connectWebSocket(projectId);
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
## Статус реализации функций
|
|
262
|
-
|
|
263
|
-
| Функция | Статус | Примечание |
|
|
264
|
-
|---------|--------|------------|
|
|
265
|
-
| `sdk.connect()` | ✅ Реализовано | Включает базовое подключение ко всем namespace |
|
|
266
|
-
| `sdk.setActiveProject()` | ✅ Реализовано | Работает в связке с filesystem-клиентом |
|
|
267
|
-
| `sdk.filesystem.connectWebSocket()` | ✅ Реализовано | Подключение к WebSocket для файловой системы |
|
|
268
|
-
| `sdk.filesystem.connectToProject()` | ✅ Реализовано | Альтернативный синтаксис для connectWebSocket |
|
|
269
|
-
| `sdk.context.getFileContent()` | ✅ Реализовано | Рекомендуемый метод для чтения файлов (через REST) |
|
|
270
|
-
| `sdk.projects.connectWebSocket()` | ✅ Реализовано | Подключение к namespace индексации |
|
|
271
|
-
| `sdk.reasoning.connectWebSocket()` | ✅ Реализовано | Требует последующего `joinReasoning()` |
|
|
272
|
-
| `sdk.dependencies.connectWebSocket()` | ✅ Реализовано | Требует последующего `joinProject()` |
|
|
273
|
-
| `sdk.chat.streamChatWithThinking()` | ✅ Реализовано | Потоковое получение ответов с мышлением |
|
|
274
|
-
|
|
275
158
|
## Основные события WebSocket
|
|
276
159
|
|
|
277
160
|
| Событие | Описание |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solver-sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "SDK для интеграции с Code Solver Backend API",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -34,11 +34,15 @@
|
|
|
34
34
|
"build:esm": "tsc -p tsconfig.esm.json",
|
|
35
35
|
"build:types": "tsc -p tsconfig.types.json",
|
|
36
36
|
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
|
|
37
|
+
"test:quick": "node quick-test.js",
|
|
38
|
+
"test:unit": "npx jest sdk-test/unit/ --testMatch=\"**/sdk-test/unit/**/*.test.js\"",
|
|
39
|
+
"test:mock": "./sdk-test/run-integration-tests.sh mock-only",
|
|
40
|
+
"test:integration": "./scripts/run-integration-tests.sh",
|
|
41
|
+
"test:integration:full": "./sdk-test/run-integration-tests.sh with-backend",
|
|
37
42
|
"test:node": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/node",
|
|
38
43
|
"test:browser": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/browser",
|
|
39
44
|
"test:indexing": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --experimental-vm-modules node_modules/.bin/jest tests/unit/indexing",
|
|
40
45
|
"test:indexing:integration": "NODE_TLS_REJECT_UNAUTHORIZED=0 TEST_WITH_BACKEND=true node --experimental-vm-modules node_modules/.bin/jest tests/unit/indexing",
|
|
41
|
-
"test:integration": "./scripts/run-integration-tests.sh",
|
|
42
46
|
"test:reasoning": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --experimental-vm-modules node_modules/.bin/jest tests/unit/reasoning-api.test.js",
|
|
43
47
|
"test:reasoning:websocket": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --experimental-vm-modules node_modules/.bin/jest tests/integration/reasoning-websocket.test.js",
|
|
44
48
|
"test:reasoning:anthropic": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --experimental-vm-modules node_modules/.bin/jest tests/integration/anthropic-reasoning-format.test.js",
|
|
@@ -97,7 +101,6 @@
|
|
|
97
101
|
"jest-junit": "^16.0.0",
|
|
98
102
|
"rollup": "^4.12.0",
|
|
99
103
|
"rollup-plugin-dts": "^6.1.1",
|
|
100
|
-
"rollup-plugin-terser": "^7.0.2",
|
|
101
104
|
"ts-jest": "^29.1.2",
|
|
102
105
|
"typescript": "^5.7.3",
|
|
103
106
|
"ws": "^8.18.1"
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FilesystemApi = void 0;
|
|
4
|
-
const code_solver_websocket_client_js_1 = require("../utils/code-solver-websocket-client.js");
|
|
5
|
-
/**
|
|
6
|
-
* API для работы с файловой системой через WebSocket
|
|
7
|
-
*/
|
|
8
|
-
class FilesystemApi {
|
|
9
|
-
/**
|
|
10
|
-
* Создает новый API для работы с файловой системой
|
|
11
|
-
* @param httpClient HTTP клиент
|
|
12
|
-
*/
|
|
13
|
-
constructor(httpClient) {
|
|
14
|
-
/** WebSocket клиент */
|
|
15
|
-
this.wsClient = null;
|
|
16
|
-
/** Родительский SDK */
|
|
17
|
-
this.parentSdk = null;
|
|
18
|
-
/** Активный ID проекта */
|
|
19
|
-
this.activeProjectId = null;
|
|
20
|
-
this.httpClient = httpClient;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Устанавливает родительский SDK
|
|
24
|
-
* @param sdk Родительский SDK
|
|
25
|
-
*/
|
|
26
|
-
setParent(sdk) {
|
|
27
|
-
this.parentSdk = sdk;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Подключается к WebSocket для файловой системы
|
|
31
|
-
* @param {string} projectId ID проекта
|
|
32
|
-
* @returns {Promise<boolean>} Результат подключения
|
|
33
|
-
*/
|
|
34
|
-
async connectWebSocket(projectId) {
|
|
35
|
-
if (!projectId) {
|
|
36
|
-
console.error('[FilesystemApi] Не указан projectId при подключении к WebSocket');
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
if (!this.parentSdk || typeof this.parentSdk.getWebSocketClient !== 'function') {
|
|
41
|
-
throw new Error('Родительский SDK не настроен или не поддерживает WebSocket');
|
|
42
|
-
}
|
|
43
|
-
this.wsClient = this.parentSdk.getWebSocketClient();
|
|
44
|
-
// Используем метод getFileSystemClient из SDK для подключения
|
|
45
|
-
const fileSystemClient = this.parentSdk.getFileSystemClient();
|
|
46
|
-
if (!fileSystemClient) {
|
|
47
|
-
throw new Error('Клиент файловой системы не доступен');
|
|
48
|
-
}
|
|
49
|
-
// Подключаемся с projectId
|
|
50
|
-
const connected = await fileSystemClient.connectToProject(projectId);
|
|
51
|
-
if (!connected) {
|
|
52
|
-
console.warn('[FilesystemApi] Не удалось подключиться к WebSocket для файловой системы');
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
// Сохраняем активный ID проекта
|
|
56
|
-
this.activeProjectId = projectId;
|
|
57
|
-
}
|
|
58
|
-
return connected;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
console.error('[FilesystemApi] Ошибка при подключении к WebSocket:', error.message);
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Подключается к проекту через WebSocket (альтернативный синтаксис)
|
|
67
|
-
* @param projectId ID проекта
|
|
68
|
-
* @returns Результат подключения
|
|
69
|
-
*/
|
|
70
|
-
async connectToProject(projectId) {
|
|
71
|
-
return this.connectWebSocket(projectId);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Отключается от WebSocket
|
|
75
|
-
* @returns {Promise<void>}
|
|
76
|
-
*/
|
|
77
|
-
async disconnectWebSocket() {
|
|
78
|
-
if (this.wsClient) {
|
|
79
|
-
await this.wsClient.disconnect(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM);
|
|
80
|
-
this.activeProjectId = null;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Проверяет, подключен ли WebSocket
|
|
85
|
-
* @returns {boolean} Состояние подключения
|
|
86
|
-
*/
|
|
87
|
-
isWebSocketConnected() {
|
|
88
|
-
return this.wsClient ? this.wsClient.isConnected(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM) : false;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Получает активный ID проекта
|
|
92
|
-
* @returns ID проекта или null
|
|
93
|
-
*/
|
|
94
|
-
getActiveProjectId() {
|
|
95
|
-
return this.activeProjectId;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Подписывается на событие через WebSocket
|
|
99
|
-
* @param event Название события
|
|
100
|
-
* @param callback Функция обратного вызова
|
|
101
|
-
*/
|
|
102
|
-
on(event, callback) {
|
|
103
|
-
if (!this.wsClient) {
|
|
104
|
-
console.warn('[FilesystemApi] WebSocket не подключен');
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
this.wsClient.on(event, callback);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Отправляет событие через WebSocket
|
|
111
|
-
* @param event Название события
|
|
112
|
-
* @param data Данные для отправки
|
|
113
|
-
*/
|
|
114
|
-
emitSocketEvent(event, data) {
|
|
115
|
-
if (!this.wsClient) {
|
|
116
|
-
console.warn('[FilesystemApi] WebSocket не подключен');
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
this.wsClient.send(code_solver_websocket_client_js_1.WebSocketNamespace.FILESYSTEM, event, data);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
exports.FilesystemApi = FilesystemApi;
|
|
123
|
-
//# sourceMappingURL=filesystem-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-api.js","sourceRoot":"","sources":["../../../src/api/filesystem-api.ts"],"names":[],"mappings":";;;AACA,8FAA8E;AAG9E;;GAEG;AACH,MAAa,aAAa;IAaxB;;;OAGG;IACH,YAAY,UAAsB;QAblC,uBAAuB;QACf,aAAQ,GAAQ,IAAI,CAAC;QAE7B,uBAAuB;QACf,cAAS,GAAQ,IAAI,CAAC;QAE9B,0BAA0B;QAClB,oBAAe,GAAkB,IAAI,CAAC;QAO5C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,GAAQ;QACvB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,KAAK,UAAU,EAAE,CAAC;gBAC/E,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;YAEpD,8DAA8D;YAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,2BAA2B;YAC3B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAErE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACnC,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACpF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC7C,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,mBAAmB;QAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,oDAAkB,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,oBAAoB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,oDAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1F,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACI,EAAE,CAAC,KAAa,EAAE,QAAkB;QACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,KAAa,EAAE,IAAS;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oDAAkB,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;CACF;AArID,sCAqIC"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { WebSocketNamespace } from '../utils/code-solver-websocket-client.js';
|
|
2
|
-
/**
|
|
3
|
-
* API для работы с файловой системой через WebSocket
|
|
4
|
-
*/
|
|
5
|
-
export class FilesystemApi {
|
|
6
|
-
/**
|
|
7
|
-
* Создает новый API для работы с файловой системой
|
|
8
|
-
* @param httpClient HTTP клиент
|
|
9
|
-
*/
|
|
10
|
-
constructor(httpClient) {
|
|
11
|
-
/** WebSocket клиент */
|
|
12
|
-
this.wsClient = null;
|
|
13
|
-
/** Родительский SDK */
|
|
14
|
-
this.parentSdk = null;
|
|
15
|
-
/** Активный ID проекта */
|
|
16
|
-
this.activeProjectId = null;
|
|
17
|
-
this.httpClient = httpClient;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Устанавливает родительский SDK
|
|
21
|
-
* @param sdk Родительский SDK
|
|
22
|
-
*/
|
|
23
|
-
setParent(sdk) {
|
|
24
|
-
this.parentSdk = sdk;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Подключается к WebSocket для файловой системы
|
|
28
|
-
* @param {string} projectId ID проекта
|
|
29
|
-
* @returns {Promise<boolean>} Результат подключения
|
|
30
|
-
*/
|
|
31
|
-
async connectWebSocket(projectId) {
|
|
32
|
-
if (!projectId) {
|
|
33
|
-
console.error('[FilesystemApi] Не указан projectId при подключении к WebSocket');
|
|
34
|
-
return false;
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
if (!this.parentSdk || typeof this.parentSdk.getWebSocketClient !== 'function') {
|
|
38
|
-
throw new Error('Родительский SDK не настроен или не поддерживает WebSocket');
|
|
39
|
-
}
|
|
40
|
-
this.wsClient = this.parentSdk.getWebSocketClient();
|
|
41
|
-
// Используем метод getFileSystemClient из SDK для подключения
|
|
42
|
-
const fileSystemClient = this.parentSdk.getFileSystemClient();
|
|
43
|
-
if (!fileSystemClient) {
|
|
44
|
-
throw new Error('Клиент файловой системы не доступен');
|
|
45
|
-
}
|
|
46
|
-
// Подключаемся с projectId
|
|
47
|
-
const connected = await fileSystemClient.connectToProject(projectId);
|
|
48
|
-
if (!connected) {
|
|
49
|
-
console.warn('[FilesystemApi] Не удалось подключиться к WebSocket для файловой системы');
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
// Сохраняем активный ID проекта
|
|
53
|
-
this.activeProjectId = projectId;
|
|
54
|
-
}
|
|
55
|
-
return connected;
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
console.error('[FilesystemApi] Ошибка при подключении к WebSocket:', error.message);
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Подключается к проекту через WebSocket (альтернативный синтаксис)
|
|
64
|
-
* @param projectId ID проекта
|
|
65
|
-
* @returns Результат подключения
|
|
66
|
-
*/
|
|
67
|
-
async connectToProject(projectId) {
|
|
68
|
-
return this.connectWebSocket(projectId);
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Отключается от WebSocket
|
|
72
|
-
* @returns {Promise<void>}
|
|
73
|
-
*/
|
|
74
|
-
async disconnectWebSocket() {
|
|
75
|
-
if (this.wsClient) {
|
|
76
|
-
await this.wsClient.disconnect(WebSocketNamespace.FILESYSTEM);
|
|
77
|
-
this.activeProjectId = null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Проверяет, подключен ли WebSocket
|
|
82
|
-
* @returns {boolean} Состояние подключения
|
|
83
|
-
*/
|
|
84
|
-
isWebSocketConnected() {
|
|
85
|
-
return this.wsClient ? this.wsClient.isConnected(WebSocketNamespace.FILESYSTEM) : false;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Получает активный ID проекта
|
|
89
|
-
* @returns ID проекта или null
|
|
90
|
-
*/
|
|
91
|
-
getActiveProjectId() {
|
|
92
|
-
return this.activeProjectId;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Подписывается на событие через WebSocket
|
|
96
|
-
* @param event Название события
|
|
97
|
-
* @param callback Функция обратного вызова
|
|
98
|
-
*/
|
|
99
|
-
on(event, callback) {
|
|
100
|
-
if (!this.wsClient) {
|
|
101
|
-
console.warn('[FilesystemApi] WebSocket не подключен');
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
this.wsClient.on(event, callback);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Отправляет событие через WebSocket
|
|
108
|
-
* @param event Название события
|
|
109
|
-
* @param data Данные для отправки
|
|
110
|
-
*/
|
|
111
|
-
emitSocketEvent(event, data) {
|
|
112
|
-
if (!this.wsClient) {
|
|
113
|
-
console.warn('[FilesystemApi] WebSocket не подключен');
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
this.wsClient.send(WebSocketNamespace.FILESYSTEM, event, data);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=filesystem-api.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-api.js","sourceRoot":"","sources":["../../../src/api/filesystem-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { HttpClient } from '../utils/http-client.js';
|
|
2
|
-
/**
|
|
3
|
-
* API для работы с файловой системой через WebSocket
|
|
4
|
-
*/
|
|
5
|
-
export declare class FilesystemApi {
|
|
6
|
-
/** HTTP клиент */
|
|
7
|
-
private readonly httpClient;
|
|
8
|
-
/** WebSocket клиент */
|
|
9
|
-
private wsClient;
|
|
10
|
-
/** Родительский SDK */
|
|
11
|
-
private parentSdk;
|
|
12
|
-
/** Активный ID проекта */
|
|
13
|
-
private activeProjectId;
|
|
14
|
-
/**
|
|
15
|
-
* Создает новый API для работы с файловой системой
|
|
16
|
-
* @param httpClient HTTP клиент
|
|
17
|
-
*/
|
|
18
|
-
constructor(httpClient: HttpClient);
|
|
19
|
-
/**
|
|
20
|
-
* Устанавливает родительский SDK
|
|
21
|
-
* @param sdk Родительский SDK
|
|
22
|
-
*/
|
|
23
|
-
setParent(sdk: any): void;
|
|
24
|
-
/**
|
|
25
|
-
* Подключается к WebSocket для файловой системы
|
|
26
|
-
* @param {string} projectId ID проекта
|
|
27
|
-
* @returns {Promise<boolean>} Результат подключения
|
|
28
|
-
*/
|
|
29
|
-
connectWebSocket(projectId: string): Promise<boolean>;
|
|
30
|
-
/**
|
|
31
|
-
* Подключается к проекту через WebSocket (альтернативный синтаксис)
|
|
32
|
-
* @param projectId ID проекта
|
|
33
|
-
* @returns Результат подключения
|
|
34
|
-
*/
|
|
35
|
-
connectToProject(projectId: string): Promise<boolean>;
|
|
36
|
-
/**
|
|
37
|
-
* Отключается от WebSocket
|
|
38
|
-
* @returns {Promise<void>}
|
|
39
|
-
*/
|
|
40
|
-
disconnectWebSocket(): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Проверяет, подключен ли WebSocket
|
|
43
|
-
* @returns {boolean} Состояние подключения
|
|
44
|
-
*/
|
|
45
|
-
isWebSocketConnected(): boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Получает активный ID проекта
|
|
48
|
-
* @returns ID проекта или null
|
|
49
|
-
*/
|
|
50
|
-
getActiveProjectId(): string | null;
|
|
51
|
-
/**
|
|
52
|
-
* Подписывается на событие через WebSocket
|
|
53
|
-
* @param event Название события
|
|
54
|
-
* @param callback Функция обратного вызова
|
|
55
|
-
*/
|
|
56
|
-
on(event: string, callback: Function): void;
|
|
57
|
-
/**
|
|
58
|
-
* Отправляет событие через WebSocket
|
|
59
|
-
* @param event Название события
|
|
60
|
-
* @param data Данные для отправки
|
|
61
|
-
*/
|
|
62
|
-
emitSocketEvent(event: string, data: any): void;
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=filesystem-api.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-api.d.ts","sourceRoot":"","sources":["../../../src/api/filesystem-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;GAEG;AACH,qBAAa,aAAa;IACxB,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAa;IAE7B,uBAAuB;IACvB,OAAO,CAAC,SAAS,CAAa;IAE9B,0BAA0B;IAC1B,OAAO,CAAC,eAAe,CAAuB;IAE9C;;;OAGG;gBACS,UAAU,EAAE,UAAU;IAIlC;;;OAGG;IACI,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAIhC;;;;OAIG;IACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoClE;;;;OAIG;IACU,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjD;;;OAGG;IACI,oBAAoB,IAAI,OAAO;IAItC;;;OAGG;IACI,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAI1C;;;;OAIG;IACI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IASlD;;;;OAIG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAQvD"}
|