solver-sdk 1.9.0 → 2.0.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 (34) hide show
  1. package/dist/cjs/{code-solver-sdk.js → code-solver-sdk-v2.js} +219 -273
  2. package/dist/cjs/code-solver-sdk-v2.js.map +1 -0
  3. package/dist/cjs/constants/websocket-events.constants.js +24 -1
  4. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  5. package/dist/cjs/constants/websocket-namespaces.constants.js +2 -0
  6. package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -1
  7. package/dist/cjs/index.js +24 -49
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/ws/filesystem-ws-client.js +315 -0
  10. package/dist/cjs/ws/filesystem-ws-client.js.map +1 -0
  11. package/dist/esm/{code-solver-sdk.js → code-solver-sdk-v2.js} +219 -273
  12. package/dist/esm/code-solver-sdk-v2.js.map +1 -0
  13. package/dist/esm/constants/websocket-events.constants.js +23 -0
  14. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  15. package/dist/esm/constants/websocket-namespaces.constants.js +2 -0
  16. package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -1
  17. package/dist/esm/index.js +22 -97
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/ws/filesystem-ws-client.js +311 -0
  20. package/dist/esm/ws/filesystem-ws-client.js.map +1 -0
  21. package/dist/types/{code-solver-sdk.d.ts → code-solver-sdk-v2.d.ts} +81 -85
  22. package/dist/types/code-solver-sdk-v2.d.ts.map +1 -0
  23. package/dist/types/constants/websocket-events.constants.d.ts +21 -0
  24. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  25. package/dist/types/constants/websocket-namespaces.constants.d.ts +3 -1
  26. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -1
  27. package/dist/types/index.d.ts +20 -90
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/types/ws/filesystem-ws-client.d.ts +203 -0
  30. package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -0
  31. package/package.json +1 -1
  32. package/dist/cjs/code-solver-sdk.js.map +0 -1
  33. package/dist/esm/code-solver-sdk.js.map +0 -1
  34. package/dist/types/code-solver-sdk.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-events.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-events.constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-events.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-events.constants.ts"],"names":[],"mappings":"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"}
@@ -11,5 +11,7 @@ export var WebSocketNamespace;
11
11
  WebSocketNamespace["INDEXING"] = "/indexing";
12
12
  /** Пространство для зависимостей */
13
13
  WebSocketNamespace["DEPENDENCIES"] = "/dependencies";
14
+ /** Пространство для файловой системы */
15
+ WebSocketNamespace["FILESYSTEM"] = "/filesystem";
14
16
  })(WebSocketNamespace || (WebSocketNamespace = {}));
15
17
  //# sourceMappingURL=websocket-namespaces.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-namespaces.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-namespaces.constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,kBAYX;AAZD,WAAY,kBAAkB;IAC5B,iCAAiC;IACjC,mCAAa,CAAA;IAEb,mCAAmC;IACnC,8CAAwB,CAAA;IAExB,kCAAkC;IAClC,4CAAsB,CAAA;IAEtB,oCAAoC;IACpC,oDAA8B,CAAA;AAChC,CAAC,EAZW,kBAAkB,KAAlB,kBAAkB,QAY7B"}
1
+ {"version":3,"file":"websocket-namespaces.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-namespaces.constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B,iCAAiC;IACjC,mCAAa,CAAA;IAEb,mCAAmC;IACnC,8CAAwB,CAAA;IAExB,kCAAkC;IAClC,4CAAsB,CAAA;IAEtB,oCAAoC;IACpC,oDAA8B,CAAA;IAE9B,wCAAwC;IACxC,gDAA0B,CAAA;AAC5B,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B"}
package/dist/esm/index.js CHANGED
@@ -1,101 +1,26 @@
1
- import { CodeSolverSDK } from './code-solver-sdk';
2
- import { WebSocketEvents } from './constants/websocket-events.constants';
1
+ import { CodeSolverSDK } from './code-solver-sdk-v2.js';
3
2
  // Версия SDK
4
- export const VERSION = '1.2.0';
5
- // Создаем экземпляр SDK с настройками по умолчанию для примера
6
- const sdkInstance = new CodeSolverSDK({
7
- baseURL: 'https://api.codesolvers.io',
8
- mode: 'auto'
9
- });
10
- // Экспорт классов
11
- export { CodeSolverSDK } from './code-solver-sdk';
12
- // API классы
13
- export { SearchApi } from './api/search-api';
14
- export { ProjectsApi } from './api/projects-api';
15
- export { ContextApi } from './api/context-api';
16
- export { ReasoningApi } from './api/reasoning-api';
17
- export { CodeModificationApi } from './api/code-modification-api';
18
- export { AgentsApi } from './api/agents-api';
19
- export { ChatApi } from './api/chat-api';
20
- export { ModelsApi } from './api/models-api';
21
- export { DependenciesApi } from './api/dependencies-api';
22
- // Клиенты для коммуникации
23
- export { HttpClient } from './utils/http-client';
24
- export { SseClient } from './utils/sse-client';
25
- export { WebSocketClient } from './utils/websocket-client';
26
- export { IndexingWebSocketClient } from './utils/indexing-websocket-client';
27
- export { CodeSolverWebSocketClient, WebSocketNamespace } from './utils/code-solver-websocket-client';
28
- // Экспорт всех типов
29
- export * from './types/index';
30
- export * from './models/types';
31
- // Простой пример использования SDK
32
- /**
33
- * Пример использования SDK:
34
- *
35
- * ```typescript
36
- * // ESM импорт (браузер, современный Node.js)
37
- * import { CodeSolverSDK } from 'code-solver-sdk';
38
- *
39
- * // CommonJS импорт (Node.js)
40
- * // const { CodeSolverSDK } = require('code-solver-sdk');
41
- *
42
- * const sdk = new CodeSolverSDK({
43
- * baseURL: 'https://api.example.com',
44
- * apiKey: 'your-api-key' // если требуется
45
- * });
46
- *
47
- * // Пример работы с проектами
48
- * async function example() {
49
- * // Проверка доступности API
50
- * const isHealthy = await sdk.checkHealth();
51
- * console.log('API доступен:', isHealthy);
52
- *
53
- * // Получение списка проектов
54
- * const projects = await sdk.projects.getAllProjects();
55
- * console.log('Проекты:', projects);
56
- *
57
- * // Создание нового проекта
58
- * const newProject = await sdk.projects.createProject('Мой проект', '/path/to/project');
59
- * console.log('Новый проект:', newProject);
60
- *
61
- * // Запуск индексации
62
- * await sdk.projects.indexProject(newProject.id);
63
- *
64
- * // Поиск кода
65
- * const searchResults = await sdk.search.searchCode(newProject.id, {
66
- * query: 'function example',
67
- * limit: 10
68
- * });
69
- * console.log('Результаты поиска:', searchResults);
70
- *
71
- * // Работа с рассуждениями
72
- * const reasoning = await sdk.reasoning.createReasoning({
73
- * projectId: newProject.id,
74
- * query: 'Объясни, как работает этот проект'
75
- * });
76
- *
77
- * // Запуск процесса рассуждения
78
- * await sdk.reasoning.startReasoning(reasoning.id);
79
- *
80
- * // Подключение через WebSocket
81
- * const wsClient = sdk.getWebSocketClient();
82
- * await wsClient.connectToReasoning();
83
- *
84
- * // Обработка событий
85
- * wsClient.on('thinking', (data) => {
86
- * console.log('Размышление:', data.content);
87
- * });
88
- *
89
- * wsClient.on('complete', (data) => {
90
- * console.log('Завершено:', data.content);
91
- * wsClient.disconnectAll();
92
- * });
93
- * }
94
- * ```
95
- */
96
- // Экспорт стандартного экземпляра SDK и констант
97
- export { sdkInstance as sdk };
98
- export { WebSocketEvents };
3
+ export const VERSION = '2.0.0';
4
+ // Экспортируем основные интерфейсы и типы
5
+ export * from './interfaces/sdk-options.js';
6
+ export * from './interfaces/websocket/callbacks.interfaces.js';
7
+ export * from './constants/websocket-namespaces.constants.js';
8
+ export * from './constants/websocket-events.constants.js';
9
+ // Экспортируем типы WebSocket клиентов
10
+ export * from './ws/indexing-ws-client.js';
11
+ export * from './ws/reasoning-ws-client.js';
12
+ export * from './ws/filesystem-ws-client.js';
13
+ export * from './ws/dependencies-ws-client.js';
14
+ // Экспортируем API клиенты
15
+ export * from './api/projects-api.js';
16
+ export * from './api/search-api.js';
17
+ export * from './api/reasoning-api.js';
18
+ export * from './api/context-api.js';
19
+ export * from './api/code-modification-api.js';
20
+ export * from './api/agents-api.js';
21
+ export * from './api/chat-api/index.js';
22
+ export * from './api/models-api.js';
23
+ export * from './api/dependencies-api.js';
99
24
  // Экспорт по умолчанию
100
25
  export default CodeSolverSDK;
101
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAGzE,aAAa;AACb,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,+DAA+D;AAC/D,MAAM,WAAW,GAAG,IAAI,aAAa,CAAC;IACpC,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,MAAM;CACb,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAqBzD,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAErG,qBAAqB;AACrB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAE/B,mCAAmC;AACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,iDAAiD;AACjD,OAAO,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,uBAAuB;AACvB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4B,MAAM,yBAAyB,CAAC;AAElF,aAAa;AACb,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,0CAA0C;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAE1D,uCAAuC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAE/C,2BAA2B;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAK1C,uBAAuB;AACvB,eAAe,aAAa,CAAC"}
@@ -0,0 +1,311 @@
1
+ import { BaseWebSocketClient } from './base-ws-client';
2
+ import { WebSocketNamespace } from '../constants/websocket-namespaces.constants';
3
+ import { WebSocketEvents } from '../constants/websocket-events.constants';
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ /**
6
+ * Клиент WebSocket для работы с файловой системой
7
+ */
8
+ export class FileSystemWsClient extends BaseWebSocketClient {
9
+ /**
10
+ * Создает новый клиент для работы с файловой системой
11
+ * @param baseURL Базовый URL API
12
+ * @param options Опции клиента
13
+ */
14
+ constructor(baseURL, options = {}) {
15
+ super(WebSocketNamespace.FILESYSTEM, baseURL, {
16
+ enableAutoPing: true,
17
+ pingInterval: 25000,
18
+ reconnectStrategy: 'exponential',
19
+ retryDelay: 1000,
20
+ maxRetryDelay: 30000
21
+ });
22
+ this.sessionId = null;
23
+ this.projectId = null;
24
+ this.pingInterval = 25000; // 25 секунд по умолчанию
25
+ this.pingTimer = null;
26
+ this.SDK_VERSION = '1.0.0';
27
+ // Устанавливаем обработчики
28
+ this.onReadFile = options.onReadFile || (() => Promise.reject('Чтение файлов не реализовано'));
29
+ this.onListFiles = options.onListFiles || (() => Promise.reject('Получение списка файлов не реализовано'));
30
+ this.onWatchStart = options.onWatchStart || (() => Promise.reject('Отслеживание файлов не реализовано'));
31
+ }
32
+ /**
33
+ * Подключение к серверу и инициализация сессии
34
+ * @param params Параметры подключения (может содержать projectId или другие параметры)
35
+ * @returns Promise<boolean> Успешность подключения
36
+ */
37
+ async connect(params = {}) {
38
+ // Если передан projectId, сохраняем его
39
+ if (params.projectId) {
40
+ this.projectId = params.projectId;
41
+ }
42
+ // Проверяем, есть ли у нас projectId
43
+ if (!this.projectId) {
44
+ this.logger.error('Не указан projectId для подключения');
45
+ return false;
46
+ }
47
+ // Подключаемся с базовыми параметрами
48
+ const connected = await super.connect(params);
49
+ if (!connected) {
50
+ return false;
51
+ }
52
+ try {
53
+ // Инициализируем сессию
54
+ const response = await this.emitWithAck(WebSocketEvents.INIT, {
55
+ projectId: this.projectId,
56
+ clientVersion: this.SDK_VERSION,
57
+ capabilities: ['text', 'watch']
58
+ });
59
+ if (response && response.payload) {
60
+ this.sessionId = response.payload.sessionId;
61
+ this.pingInterval = response.payload.pingInterval || 25000;
62
+ // Настраиваем обработчики событий
63
+ this.setupHandlers();
64
+ return true;
65
+ }
66
+ else {
67
+ this.logger.error('Ошибка инициализации сессии: Пустой ответ');
68
+ return false;
69
+ }
70
+ }
71
+ catch (error) {
72
+ this.logger.error(`Ошибка инициализации сессии: ${error instanceof Error ? error.message : String(error)}`);
73
+ return false;
74
+ }
75
+ }
76
+ /**
77
+ * Подключение к проекту - удобный метод для использования в приложении
78
+ * @param projectId ID проекта
79
+ * @returns Promise<boolean> Успешность подключения
80
+ */
81
+ async connectToProject(projectId) {
82
+ this.projectId = projectId;
83
+ return this.connect({ projectId });
84
+ }
85
+ /**
86
+ * Настройка обработчиков событий
87
+ */
88
+ setupHandlers() {
89
+ // Обработчик запроса на чтение файла
90
+ this.on(WebSocketEvents.READ_FILE, async (request) => {
91
+ try {
92
+ const content = await this.onReadFile(request.payload.path);
93
+ this.send(WebSocketEvents.READ_FILE_RESPONSE, {
94
+ requestId: request.requestId,
95
+ projectId: request.projectId,
96
+ payload: { content }
97
+ });
98
+ }
99
+ catch (error) {
100
+ this.send(WebSocketEvents.ERROR, {
101
+ requestId: request.requestId,
102
+ error: {
103
+ code: 'FILE_READ_ERROR',
104
+ message: error instanceof Error ? error.message : String(error)
105
+ }
106
+ });
107
+ }
108
+ });
109
+ // Обработчик запроса на получение списка файлов
110
+ this.on(WebSocketEvents.LIST_FILES, async (request) => {
111
+ try {
112
+ const files = await this.onListFiles(request.payload.directory, request.payload.options);
113
+ this.send(WebSocketEvents.LIST_FILES_RESPONSE, {
114
+ requestId: request.requestId,
115
+ projectId: request.projectId,
116
+ payload: {
117
+ files,
118
+ directory: request.payload.directory
119
+ }
120
+ });
121
+ }
122
+ catch (error) {
123
+ this.send(WebSocketEvents.ERROR, {
124
+ requestId: request.requestId,
125
+ error: {
126
+ code: 'LIST_FILES_ERROR',
127
+ message: error instanceof Error ? error.message : String(error)
128
+ }
129
+ });
130
+ }
131
+ });
132
+ // Обработчик запроса на отслеживание файлов
133
+ this.on(WebSocketEvents.WATCH_START, async (request) => {
134
+ try {
135
+ const success = await this.onWatchStart(request.payload.patterns);
136
+ this.send(WebSocketEvents.WATCH_CONFIRM, {
137
+ requestId: request.requestId,
138
+ projectId: request.projectId,
139
+ payload: {
140
+ success,
141
+ patterns: request.payload.patterns
142
+ }
143
+ });
144
+ }
145
+ catch (error) {
146
+ this.send(WebSocketEvents.ERROR, {
147
+ requestId: request.requestId,
148
+ error: {
149
+ code: 'WATCH_ERROR',
150
+ message: error instanceof Error ? error.message : String(error)
151
+ }
152
+ });
153
+ }
154
+ });
155
+ // Обработчик ping
156
+ this.on(WebSocketEvents.PING, (data) => {
157
+ this.send(WebSocketEvents.PONG, {
158
+ requestId: data.requestId || uuidv4(),
159
+ timestamp: Date.now()
160
+ });
161
+ });
162
+ }
163
+ /**
164
+ * Уведомляет сервер об изменении файла
165
+ * @param path Путь к файлу
166
+ * @param changeType Тип изменения
167
+ */
168
+ notifyFileChanged(path, changeType = 'modified') {
169
+ if (!this.isConnected() || !this.projectId) {
170
+ return false;
171
+ }
172
+ return this.send(WebSocketEvents.FILE_CHANGED, {
173
+ requestId: uuidv4(),
174
+ projectId: this.projectId,
175
+ payload: {
176
+ path,
177
+ changeType,
178
+ timestamp: Date.now()
179
+ }
180
+ });
181
+ }
182
+ }
183
+ /**
184
+ * Пример использования клиента файловой системы в VS Code расширении:
185
+ *
186
+ * ```typescript
187
+ * import * as vscode from 'vscode';
188
+ * import { FileSystemWsClient } from 'solver-sdk';
189
+ *
190
+ * export function activate(context: vscode.ExtensionContext) {
191
+ * // Создание клиента файловой системы
192
+ * const fsClient = new FileSystemWsClient('wss://your-backend-url.com', {
193
+ * // Обработчик чтения файла
194
+ * onReadFile: async (path) => {
195
+ * try {
196
+ * const uri = vscode.Uri.file(path);
197
+ * const content = await vscode.workspace.fs.readFile(uri);
198
+ * return new TextDecoder().decode(content);
199
+ * } catch (error) {
200
+ * throw new Error(`Ошибка чтения файла: ${error.message}`);
201
+ * }
202
+ * },
203
+ *
204
+ * // Обработчик получения списка файлов
205
+ * onListFiles: async (directory, options) => {
206
+ * try {
207
+ * // Получаем корневую директорию рабочего пространства
208
+ * const rootPath = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
209
+ * if (!rootPath) throw new Error('Не найдено рабочее пространство');
210
+ *
211
+ * // Формируем паттерн для поиска файлов
212
+ * const pattern = new vscode.RelativePattern(
213
+ * rootPath,
214
+ * options?.includePatterns?.[0] || '**'
215
+ * );
216
+ *
217
+ * // Находим файлы по паттерну
218
+ * const files = await vscode.workspace.findFiles(pattern,
219
+ * options?.excludePatterns?.join('|')
220
+ * );
221
+ *
222
+ * // Преобразуем результаты в нужный формат
223
+ * return files.map(uri => {
224
+ * const relativePath = vscode.workspace.asRelativePath(uri);
225
+ * const stats = fs.statSync(uri.fsPath);
226
+ *
227
+ * return {
228
+ * path: uri.fsPath,
229
+ * relativePath,
230
+ * extension: uri.fsPath.split('.').pop() || '',
231
+ * size: stats.size,
232
+ * isDirectory: stats.isDirectory()
233
+ * };
234
+ * });
235
+ * } catch (error) {
236
+ * throw new Error(`Ошибка получения списка файлов: ${error.message}`);
237
+ * }
238
+ * },
239
+ *
240
+ * // Обработчик отслеживания файлов
241
+ * onWatchStart: async (patterns) => {
242
+ * try {
243
+ * // Создаем наблюдателей за файлами
244
+ * const watchers = patterns.map(pattern => {
245
+ * const watcher = vscode.workspace.createFileSystemWatcher(
246
+ * new vscode.RelativePattern(
247
+ * vscode.workspace.workspaceFolders?.[0]?.uri.fsPath || '',
248
+ * pattern
249
+ * )
250
+ * );
251
+ *
252
+ * // Обработчик изменения файла
253
+ * watcher.onDidChange(uri => {
254
+ * const relativePath = vscode.workspace.asRelativePath(uri);
255
+ * fsClient.notifyFileChanged(relativePath, 'modified');
256
+ * });
257
+ *
258
+ * // Обработчик создания файла
259
+ * watcher.onDidCreate(uri => {
260
+ * const relativePath = vscode.workspace.asRelativePath(uri);
261
+ * fsClient.notifyFileChanged(relativePath, 'created');
262
+ * });
263
+ *
264
+ * // Обработчик удаления файла
265
+ * watcher.onDidDelete(uri => {
266
+ * const relativePath = vscode.workspace.asRelativePath(uri);
267
+ * fsClient.notifyFileChanged(relativePath, 'deleted');
268
+ * });
269
+ *
270
+ * return watcher;
271
+ * });
272
+ *
273
+ * // Добавляем наблюдателей в контекст расширения для правильной очистки
274
+ * watchers.forEach(watcher => {
275
+ * context.subscriptions.push(watcher);
276
+ * });
277
+ *
278
+ * return true;
279
+ * } catch (error) {
280
+ * console.error('Ошибка при настройке отслеживания файлов:', error);
281
+ * return false;
282
+ * }
283
+ * }
284
+ * });
285
+ *
286
+ * // Подключаемся к проекту
287
+ * vscode.commands.registerCommand('extension.connectToProject', async () => {
288
+ * // Запрашиваем ID проекта у пользователя
289
+ * const projectId = await vscode.window.showInputBox({
290
+ * prompt: 'Введите ID проекта для подключения'
291
+ * });
292
+ *
293
+ * if (!projectId) return;
294
+ *
295
+ * try {
296
+ * // Устанавливаем соединение
297
+ * const connected = await fsClient.connectToProject(projectId);
298
+ *
299
+ * if (connected) {
300
+ * vscode.window.showInformationMessage(`Успешное подключение к проекту ${projectId}`);
301
+ * } else {
302
+ * vscode.window.showErrorMessage('Ошибка подключения к проекту');
303
+ * }
304
+ * } catch (error) {
305
+ * vscode.window.showErrorMessage(`Ошибка: ${error.message}`);
306
+ * }
307
+ * });
308
+ * }
309
+ * ```
310
+ */
311
+ //# sourceMappingURL=filesystem-ws-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-ws-client.js","sourceRoot":"","sources":["../../../src/ws/filesystem-ws-client.ts"],"names":[],"mappings":"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"}