solver-sdk 2.0.3 → 2.1.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 (57) hide show
  1. package/dist/cjs/api/chat-api/index.js +205 -171
  2. package/dist/cjs/api/chat-api/index.js.map +1 -1
  3. package/dist/cjs/api/chat-api/models.js +1 -1
  4. package/dist/cjs/api/chat-api/stream-utils.js +139 -151
  5. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
  6. package/dist/cjs/api/projects-api.js +2 -7
  7. package/dist/cjs/api/projects-api.js.map +1 -1
  8. package/dist/cjs/code-solver-sdk.js +2 -48
  9. package/dist/cjs/code-solver-sdk.js.map +1 -1
  10. package/dist/cjs/index.js +2 -1
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/utils/message-helpers.js +212 -0
  13. package/dist/cjs/utils/message-helpers.js.map +1 -0
  14. package/dist/cjs/ws/filesystem-ws-client.js +6 -16
  15. package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
  16. package/dist/esm/api/chat-api/index.js +207 -151
  17. package/dist/esm/api/chat-api/index.js.map +1 -1
  18. package/dist/esm/api/chat-api/models.js +1 -1
  19. package/dist/esm/api/chat-api/stream-utils.js +139 -151
  20. package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
  21. package/dist/esm/api/projects-api.js +2 -7
  22. package/dist/esm/api/projects-api.js.map +1 -1
  23. package/dist/esm/code-solver-sdk.js +2 -48
  24. package/dist/esm/code-solver-sdk.js.map +1 -1
  25. package/dist/esm/index.js +2 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/utils/message-helpers.js +199 -0
  28. package/dist/esm/utils/message-helpers.js.map +1 -0
  29. package/dist/esm/ws/filesystem-ws-client.js +6 -16
  30. package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
  31. package/dist/types/api/chat-api/index.d.ts +23 -8
  32. package/dist/types/api/chat-api/index.d.ts.map +1 -1
  33. package/dist/types/api/chat-api/interfaces.d.ts +125 -8
  34. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
  35. package/dist/types/api/chat-api/models.d.ts +163 -43
  36. package/dist/types/api/chat-api/models.d.ts.map +1 -1
  37. package/dist/types/api/chat-api/stream-utils.d.ts +19 -16
  38. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
  39. package/dist/types/api/projects-api.d.ts +1 -2
  40. package/dist/types/api/projects-api.d.ts.map +1 -1
  41. package/dist/types/code-solver-sdk.d.ts +1 -22
  42. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/index.d.ts.map +1 -1
  45. package/dist/types/utils/message-helpers.d.ts +84 -0
  46. package/dist/types/utils/message-helpers.d.ts.map +1 -0
  47. package/dist/types/ws/filesystem-ws-client.d.ts +2 -2
  48. package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
  49. package/docs/README.md +3 -3
  50. package/docs/WEBSOCKET.md +16 -133
  51. package/package.json +7 -2
  52. package/dist/cjs/api/filesystem-api.js +0 -123
  53. package/dist/cjs/api/filesystem-api.js.map +0 -1
  54. package/dist/esm/api/filesystem-api.js +0 -119
  55. package/dist/esm/api/filesystem-api.js.map +0 -1
  56. package/dist/types/api/filesystem-api.d.ts +0 -64
  57. 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
- // Общее подключение к базовым WebSocket сервисам
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 для проектов без указания projectId
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
- // Не требует projectId в методе connectWebSocket
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
- ## Автоматический ping/pong и reconnect
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
- // Общее подключение не передает projectId для файловой системы
192
- await sdk.connect();
112
+ // Подключение к пространству имен зависимостей
113
+ await sdk.dependencies.connectWebSocket(projectId);
193
114
 
194
- // Поэтому для работы с файловой системой нужно явно подключиться
195
- await sdk.filesystem.connectWebSocket('your-project-id');
115
+ // Подписка на события зависимостей
116
+ sdk.dependencies.on('dependency_update', (data) => {
117
+ console.log('Обновление зависимостей:', data);
118
+ });
196
119
 
197
- // Или можно при подключении сразу указать projectId, который будет использован для подключения к файловой системе
198
- await sdk.connect('your-project-id');
120
+ // Отключение
121
+ await sdk.dependencies.disconnectWebSocket();
199
122
  ```
200
123
 
201
- ## Сравнение сигнатур методов connectWebSocket
124
+ ## Автоматическая авторизация
202
125
 
203
- | API | Метод | Требуется projectId? |
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
- // Подключение к WebSocket серверу
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.0.3",
3
+ "version": "2.1.0",
4
4
  "description": "SDK для интеграции с Code Solver Backend API",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -34,6 +34,11 @@
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": "./sdk-test/run-integration-tests.sh without-backend",
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",
@@ -97,7 +102,7 @@
97
102
  "jest-junit": "^16.0.0",
98
103
  "rollup": "^4.12.0",
99
104
  "rollup-plugin-dts": "^6.1.1",
100
- "rollup-plugin-terser": "^7.0.2",
105
+ "@rollup/plugin-terser": "^0.4.4",
101
106
  "ts-jest": "^29.1.2",
102
107
  "typescript": "^5.7.3",
103
108
  "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":"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"}
@@ -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"}