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.
- package/dist/cjs/{code-solver-sdk.js → code-solver-sdk-v2.js} +219 -273
- package/dist/cjs/code-solver-sdk-v2.js.map +1 -0
- package/dist/cjs/constants/websocket-events.constants.js +24 -1
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/constants/websocket-namespaces.constants.js +2 -0
- package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -1
- package/dist/cjs/index.js +24 -49
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/ws/filesystem-ws-client.js +315 -0
- package/dist/cjs/ws/filesystem-ws-client.js.map +1 -0
- package/dist/esm/{code-solver-sdk.js → code-solver-sdk-v2.js} +219 -273
- package/dist/esm/code-solver-sdk-v2.js.map +1 -0
- package/dist/esm/constants/websocket-events.constants.js +23 -0
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/constants/websocket-namespaces.constants.js +2 -0
- package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -1
- package/dist/esm/index.js +22 -97
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ws/filesystem-ws-client.js +311 -0
- package/dist/esm/ws/filesystem-ws-client.js.map +1 -0
- package/dist/types/{code-solver-sdk.d.ts → code-solver-sdk-v2.d.ts} +81 -85
- package/dist/types/code-solver-sdk-v2.d.ts.map +1 -0
- package/dist/types/constants/websocket-events.constants.d.ts +21 -0
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/constants/websocket-namespaces.constants.d.ts +3 -1
- package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +20 -90
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/ws/filesystem-ws-client.d.ts +203 -0
- package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/cjs/code-solver-sdk.js.map +0 -1
- package/dist/esm/code-solver-sdk.js.map +0 -1
- 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":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,
|
|
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,
|
|
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 = '
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
19
|
-
export
|
|
20
|
-
export
|
|
21
|
-
export
|
|
22
|
-
|
|
23
|
-
export
|
|
24
|
-
export
|
|
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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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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"}
|