solver-sdk 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +248 -0
- package/dist/cjs/api/agents-api.js +94 -0
- package/dist/cjs/api/agents-api.js.map +1 -0
- package/dist/cjs/api/code-modification-api.js +60 -0
- package/dist/cjs/api/code-modification-api.js.map +1 -0
- package/dist/cjs/api/context-api.js +58 -0
- package/dist/cjs/api/context-api.js.map +1 -0
- package/dist/cjs/api/projects-api.js +82 -0
- package/dist/cjs/api/projects-api.js.map +1 -0
- package/dist/cjs/api/reasoning-api.js +73 -0
- package/dist/cjs/api/reasoning-api.js.map +1 -0
- package/dist/cjs/api/search-api.js +54 -0
- package/dist/cjs/api/search-api.js.map +1 -0
- package/dist/cjs/code-solver-sdk.js +327 -0
- package/dist/cjs/code-solver-sdk.js.map +1 -0
- package/dist/cjs/index.js +118 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces/http-client.js +3 -0
- package/dist/cjs/interfaces/http-client.js.map +1 -0
- package/dist/cjs/interfaces/sdk-options.js +3 -0
- package/dist/cjs/interfaces/sdk-options.js.map +1 -0
- package/dist/cjs/models/types.js +17 -0
- package/dist/cjs/models/types.js.map +1 -0
- package/dist/cjs/utils/code-solver-websocket-client.js +267 -0
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -0
- package/dist/cjs/utils/http-client.js +234 -0
- package/dist/cjs/utils/http-client.js.map +1 -0
- package/dist/cjs/utils/indexing-websocket-client.js +107 -0
- package/dist/cjs/utils/indexing-websocket-client.js.map +1 -0
- package/dist/cjs/utils/sse-client.js +233 -0
- package/dist/cjs/utils/sse-client.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +268 -0
- package/dist/cjs/utils/websocket-client.js.map +1 -0
- package/dist/esm/api/agents-api.js +90 -0
- package/dist/esm/api/agents-api.js.map +1 -0
- package/dist/esm/api/code-modification-api.js +56 -0
- package/dist/esm/api/code-modification-api.js.map +1 -0
- package/dist/esm/api/context-api.js +54 -0
- package/dist/esm/api/context-api.js.map +1 -0
- package/dist/esm/api/projects-api.js +78 -0
- package/dist/esm/api/projects-api.js.map +1 -0
- package/dist/esm/api/reasoning-api.js +69 -0
- package/dist/esm/api/reasoning-api.js.map +1 -0
- package/dist/esm/api/search-api.js +50 -0
- package/dist/esm/api/search-api.js.map +1 -0
- package/dist/esm/code-solver-sdk.js +323 -0
- package/dist/esm/code-solver-sdk.js.map +1 -0
- package/dist/esm/index.js +1882 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/http-client.js +2 -0
- package/dist/esm/interfaces/http-client.js.map +1 -0
- package/dist/esm/interfaces/sdk-options.js +2 -0
- package/dist/esm/interfaces/sdk-options.js.map +1 -0
- package/dist/esm/models/types.js +14 -0
- package/dist/esm/models/types.js.map +1 -0
- package/dist/esm/types/api/agents-api.d.ts +141 -0
- package/dist/esm/types/api/agents-api.d.ts.map +1 -0
- package/dist/esm/types/api/code-modification-api.d.ts +104 -0
- package/dist/esm/types/api/code-modification-api.d.ts.map +1 -0
- package/dist/esm/types/api/context-api.d.ts +86 -0
- package/dist/esm/types/api/context-api.d.ts.map +1 -0
- package/dist/esm/types/api/projects-api.d.ts +89 -0
- package/dist/esm/types/api/projects-api.d.ts.map +1 -0
- package/dist/esm/types/api/reasoning-api.d.ts +130 -0
- package/dist/esm/types/api/reasoning-api.d.ts.map +1 -0
- package/dist/esm/types/api/search-api.d.ts +92 -0
- package/dist/esm/types/api/search-api.d.ts.map +1 -0
- package/dist/esm/types/code-solver-sdk.d.ts +145 -0
- package/dist/esm/types/code-solver-sdk.d.ts.map +1 -0
- package/dist/esm/types/index.d.ts +81 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/interfaces/http-client.d.ts +110 -0
- package/dist/esm/types/interfaces/http-client.d.ts.map +1 -0
- package/dist/esm/types/interfaces/sdk-options.d.ts +34 -0
- package/dist/esm/types/interfaces/sdk-options.d.ts.map +1 -0
- package/dist/esm/types/models/types.d.ts +139 -0
- package/dist/esm/types/models/types.d.ts.map +1 -0
- package/dist/esm/types/utils/code-solver-websocket-client.d.ts +138 -0
- package/dist/esm/types/utils/code-solver-websocket-client.d.ts.map +1 -0
- package/dist/esm/types/utils/http-client.d.ts +85 -0
- package/dist/esm/types/utils/http-client.d.ts.map +1 -0
- package/dist/esm/types/utils/indexing-websocket-client.d.ts +123 -0
- package/dist/esm/types/utils/indexing-websocket-client.d.ts.map +1 -0
- package/dist/esm/types/utils/sse-client.d.ts +92 -0
- package/dist/esm/types/utils/sse-client.d.ts.map +1 -0
- package/dist/esm/types/utils/websocket-client.d.ts +118 -0
- package/dist/esm/types/utils/websocket-client.d.ts.map +1 -0
- package/dist/esm/utils/code-solver-websocket-client.js +263 -0
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -0
- package/dist/esm/utils/http-client.js +227 -0
- package/dist/esm/utils/http-client.js.map +1 -0
- package/dist/esm/utils/indexing-websocket-client.js +103 -0
- package/dist/esm/utils/indexing-websocket-client.js.map +1 -0
- package/dist/esm/utils/sse-client.js +229 -0
- package/dist/esm/utils/sse-client.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +264 -0
- package/dist/esm/utils/websocket-client.js.map +1 -0
- package/dist/index.d.ts +1599 -0
- package/dist/types/api/agents-api.d.ts +141 -0
- package/dist/types/api/agents-api.d.ts.map +1 -0
- package/dist/types/api/code-modification-api.d.ts +104 -0
- package/dist/types/api/code-modification-api.d.ts.map +1 -0
- package/dist/types/api/context-api.d.ts +86 -0
- package/dist/types/api/context-api.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +89 -0
- package/dist/types/api/projects-api.d.ts.map +1 -0
- package/dist/types/api/reasoning-api.d.ts +130 -0
- package/dist/types/api/reasoning-api.d.ts.map +1 -0
- package/dist/types/api/search-api.d.ts +92 -0
- package/dist/types/api/search-api.d.ts.map +1 -0
- package/dist/types/code-solver-sdk.d.ts +145 -0
- package/dist/types/code-solver-sdk.d.ts.map +1 -0
- package/dist/types/index.d.ts +81 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/interfaces/http-client.d.ts +110 -0
- package/dist/types/interfaces/http-client.d.ts.map +1 -0
- package/dist/types/interfaces/sdk-options.d.ts +34 -0
- package/dist/types/interfaces/sdk-options.d.ts.map +1 -0
- package/dist/types/models/types.d.ts +139 -0
- package/dist/types/models/types.d.ts.map +1 -0
- package/dist/types/utils/code-solver-websocket-client.d.ts +138 -0
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -0
- package/dist/types/utils/http-client.d.ts +85 -0
- package/dist/types/utils/http-client.d.ts.map +1 -0
- package/dist/types/utils/indexing-websocket-client.d.ts +123 -0
- package/dist/types/utils/indexing-websocket-client.d.ts.map +1 -0
- package/dist/types/utils/sse-client.d.ts +92 -0
- package/dist/types/utils/sse-client.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +118 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -0
- package/dist/umd/code-solver-sdk.js +1902 -0
- package/dist/umd/code-solver-sdk.js.map +1 -0
- package/dist/umd/code-solver-sdk.min.js +2 -0
- package/dist/umd/code-solver-sdk.min.js.map +1 -0
- package/dist/umd/types/api/agents-api.d.ts +141 -0
- package/dist/umd/types/api/agents-api.d.ts.map +1 -0
- package/dist/umd/types/api/code-modification-api.d.ts +104 -0
- package/dist/umd/types/api/code-modification-api.d.ts.map +1 -0
- package/dist/umd/types/api/context-api.d.ts +86 -0
- package/dist/umd/types/api/context-api.d.ts.map +1 -0
- package/dist/umd/types/api/projects-api.d.ts +89 -0
- package/dist/umd/types/api/projects-api.d.ts.map +1 -0
- package/dist/umd/types/api/reasoning-api.d.ts +130 -0
- package/dist/umd/types/api/reasoning-api.d.ts.map +1 -0
- package/dist/umd/types/api/search-api.d.ts +92 -0
- package/dist/umd/types/api/search-api.d.ts.map +1 -0
- package/dist/umd/types/code-solver-sdk.d.ts +145 -0
- package/dist/umd/types/code-solver-sdk.d.ts.map +1 -0
- package/dist/umd/types/index.d.ts +81 -0
- package/dist/umd/types/index.d.ts.map +1 -0
- package/dist/umd/types/interfaces/http-client.d.ts +110 -0
- package/dist/umd/types/interfaces/http-client.d.ts.map +1 -0
- package/dist/umd/types/interfaces/sdk-options.d.ts +34 -0
- package/dist/umd/types/interfaces/sdk-options.d.ts.map +1 -0
- package/dist/umd/types/models/types.d.ts +139 -0
- package/dist/umd/types/models/types.d.ts.map +1 -0
- package/dist/umd/types/utils/code-solver-websocket-client.d.ts +138 -0
- package/dist/umd/types/utils/code-solver-websocket-client.d.ts.map +1 -0
- package/dist/umd/types/utils/http-client.d.ts +85 -0
- package/dist/umd/types/utils/http-client.d.ts.map +1 -0
- package/dist/umd/types/utils/indexing-websocket-client.d.ts +123 -0
- package/dist/umd/types/utils/indexing-websocket-client.d.ts.map +1 -0
- package/dist/umd/types/utils/sse-client.d.ts +92 -0
- package/dist/umd/types/utils/sse-client.d.ts.map +1 -0
- package/dist/umd/types/utils/websocket-client.d.ts +118 -0
- package/dist/umd/types/utils/websocket-client.d.ts.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SseClient = void 0;
|
|
4
|
+
const event_source_polyfill_1 = require("event-source-polyfill");
|
|
5
|
+
// В браузере будем использовать нативный EventSource или полифилл
|
|
6
|
+
const BrowserEventSource = typeof EventSource !== 'undefined' ? EventSource : event_source_polyfill_1.EventSourcePolyfill;
|
|
7
|
+
// Проверяем, находимся ли мы в браузере
|
|
8
|
+
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
9
|
+
/**
|
|
10
|
+
* Клиент для работы с Server-Sent Events (SSE)
|
|
11
|
+
* Поддерживает работу как в браузере, так и в Node.js
|
|
12
|
+
*/
|
|
13
|
+
class SseClient {
|
|
14
|
+
/**
|
|
15
|
+
* Создает новый SSE клиент
|
|
16
|
+
* @param {string} url URL для подключения
|
|
17
|
+
* @param {SseClientOptions} [options] Опции клиента
|
|
18
|
+
*/
|
|
19
|
+
constructor(url, options = {}) {
|
|
20
|
+
/** Экземпляр EventSource */
|
|
21
|
+
this.eventSource = null;
|
|
22
|
+
/** Счетчик попыток переподключения */
|
|
23
|
+
this.retryCount = 0;
|
|
24
|
+
/** Флаг, указывающий, что соединение было закрыто намеренно */
|
|
25
|
+
this.intentionallyClosed = false;
|
|
26
|
+
/** Таймер переподключения */
|
|
27
|
+
this.reconnectTimer = null;
|
|
28
|
+
/** Таймер таймаута соединения */
|
|
29
|
+
this.connectionTimeoutTimer = null;
|
|
30
|
+
/** Обработчики событий */
|
|
31
|
+
this.eventHandlers = {};
|
|
32
|
+
this.url = url;
|
|
33
|
+
this.options = {
|
|
34
|
+
headers: options.headers || {},
|
|
35
|
+
connectionTimeout: options.connectionTimeout || 30000,
|
|
36
|
+
maxRetries: options.maxRetries || 5,
|
|
37
|
+
retryDelay: options.retryDelay || 1000,
|
|
38
|
+
maxRetryDelay: options.maxRetryDelay || 30000
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Подключается к SSE эндпоинту
|
|
43
|
+
* @returns {Promise<void>}
|
|
44
|
+
*/
|
|
45
|
+
connect() {
|
|
46
|
+
// Если соединение уже установлено, возвращаем Promise.resolve
|
|
47
|
+
if (this.eventSource && this.eventSource.readyState === 1) {
|
|
48
|
+
return Promise.resolve();
|
|
49
|
+
}
|
|
50
|
+
// Сбрасываем флаг намеренного закрытия
|
|
51
|
+
this.intentionallyClosed = false;
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
try {
|
|
54
|
+
// Создаем новый экземпляр EventSource
|
|
55
|
+
const EventSourceImpl = isBrowser ? BrowserEventSource : require('eventsource');
|
|
56
|
+
this.eventSource = new EventSourceImpl(this.url, {
|
|
57
|
+
headers: this.options.headers,
|
|
58
|
+
withCredentials: true
|
|
59
|
+
});
|
|
60
|
+
// Устанавливаем таймаут соединения
|
|
61
|
+
this.connectionTimeoutTimer = setTimeout(() => {
|
|
62
|
+
if (this.eventSource && this.eventSource.readyState !== 1) {
|
|
63
|
+
reject(new Error('Таймаут подключения SSE'));
|
|
64
|
+
this.close();
|
|
65
|
+
}
|
|
66
|
+
}, this.options.connectionTimeout);
|
|
67
|
+
// Проверяем, что this.eventSource не null
|
|
68
|
+
if (!this.eventSource) {
|
|
69
|
+
reject(new Error('Не удалось создать EventSource'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Обработчик открытия соединения
|
|
73
|
+
this.eventSource.onopen = () => {
|
|
74
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
75
|
+
this.retryCount = 0;
|
|
76
|
+
resolve();
|
|
77
|
+
this.dispatchEvent('open', {});
|
|
78
|
+
};
|
|
79
|
+
// Обработчик сообщений
|
|
80
|
+
this.eventSource.onmessage = (event) => {
|
|
81
|
+
try {
|
|
82
|
+
const data = JSON.parse(event.data);
|
|
83
|
+
this.dispatchEvent('message', data);
|
|
84
|
+
// Также вызываем специальный обработчик для конкретного типа события,
|
|
85
|
+
// если такой тип указан в данных
|
|
86
|
+
if (data && data.type) {
|
|
87
|
+
this.dispatchEvent(data.type, data);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.dispatchEvent('error', { error, message: 'Ошибка при обработке сообщения SSE' });
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
// Обработчик ошибок
|
|
95
|
+
this.eventSource.onerror = (error) => {
|
|
96
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
97
|
+
if (this.intentionallyClosed) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Если соединение уже установлено и произошла ошибка, просто сообщаем об ошибке
|
|
101
|
+
if (this.eventSource && this.eventSource.readyState === 1) {
|
|
102
|
+
this.dispatchEvent('error', { error, message: 'Ошибка SSE соединения' });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Если это первая попытка подключения, отклоняем Promise
|
|
106
|
+
if (this.retryCount === 0) {
|
|
107
|
+
reject(new Error('Ошибка подключения SSE'));
|
|
108
|
+
}
|
|
109
|
+
// Запускаем процесс переподключения
|
|
110
|
+
this.reconnect();
|
|
111
|
+
};
|
|
112
|
+
// Настраиваем обработчики для всех добавленных событий
|
|
113
|
+
for (const eventType in this.eventHandlers) {
|
|
114
|
+
if (eventType !== 'message' && eventType !== 'open' && eventType !== 'error') {
|
|
115
|
+
this.eventSource.addEventListener(eventType, (event) => {
|
|
116
|
+
try {
|
|
117
|
+
const data = JSON.parse(event.data);
|
|
118
|
+
this.dispatchEvent(eventType, data);
|
|
119
|
+
}
|
|
120
|
+
catch (e) {
|
|
121
|
+
this.dispatchEvent(eventType, event.data);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
reject(error);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Закрывает SSE соединение
|
|
134
|
+
*/
|
|
135
|
+
close() {
|
|
136
|
+
this.intentionallyClosed = true;
|
|
137
|
+
// Очищаем таймеры
|
|
138
|
+
clearTimeout(this.reconnectTimer);
|
|
139
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
140
|
+
// Закрываем соединение
|
|
141
|
+
if (this.eventSource) {
|
|
142
|
+
this.eventSource.close();
|
|
143
|
+
this.eventSource = null;
|
|
144
|
+
}
|
|
145
|
+
this.dispatchEvent('close', {});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Добавляет обработчик события
|
|
149
|
+
* @param {string} eventType Тип события
|
|
150
|
+
* @param {SseEventHandler} handler Обработчик события
|
|
151
|
+
*/
|
|
152
|
+
on(eventType, handler) {
|
|
153
|
+
if (!this.eventHandlers[eventType]) {
|
|
154
|
+
this.eventHandlers[eventType] = [];
|
|
155
|
+
// Если соединение уже установлено, добавляем обработчик события
|
|
156
|
+
if (this.eventSource && this.eventSource.readyState === 1 &&
|
|
157
|
+
eventType !== 'message' && eventType !== 'open' && eventType !== 'error') {
|
|
158
|
+
this.eventSource.addEventListener(eventType, (event) => {
|
|
159
|
+
try {
|
|
160
|
+
const data = JSON.parse(event.data);
|
|
161
|
+
this.dispatchEvent(eventType, data);
|
|
162
|
+
}
|
|
163
|
+
catch (e) {
|
|
164
|
+
this.dispatchEvent(eventType, event.data);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
this.eventHandlers[eventType].push(handler);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Удаляет обработчик события
|
|
173
|
+
* @param {string} eventType Тип события
|
|
174
|
+
* @param {SseEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики)
|
|
175
|
+
*/
|
|
176
|
+
off(eventType, handler) {
|
|
177
|
+
if (!this.eventHandlers[eventType]) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (!handler) {
|
|
181
|
+
// Если обработчик не указан, удаляем все обработчики для данного события
|
|
182
|
+
delete this.eventHandlers[eventType];
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// Если обработчик указан, удаляем только его
|
|
186
|
+
this.eventHandlers[eventType] = this.eventHandlers[eventType].filter(h => h !== handler);
|
|
187
|
+
// Если обработчиков больше нет, удаляем массив
|
|
188
|
+
if (this.eventHandlers[eventType].length === 0) {
|
|
189
|
+
delete this.eventHandlers[eventType];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Вызывает обработчики для указанного события
|
|
195
|
+
* @param {string} eventType Тип события
|
|
196
|
+
* @param {any} data Данные события
|
|
197
|
+
*/
|
|
198
|
+
dispatchEvent(eventType, data) {
|
|
199
|
+
if (!this.eventHandlers[eventType]) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
for (const handler of this.eventHandlers[eventType]) {
|
|
203
|
+
try {
|
|
204
|
+
handler(data);
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
console.error(`Ошибка в обработчике события ${eventType}:`, e);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Переподключается к SSE эндпоинту с экспоненциальной задержкой
|
|
213
|
+
* @private
|
|
214
|
+
*/
|
|
215
|
+
reconnect() {
|
|
216
|
+
// Увеличиваем счетчик попыток
|
|
217
|
+
this.retryCount++;
|
|
218
|
+
// Если превышено максимальное количество попыток, прекращаем
|
|
219
|
+
if (this.retryCount > (this.options.maxRetries || 5)) {
|
|
220
|
+
this.dispatchEvent('maxRetries', { retries: this.retryCount });
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
// Вычисляем задержку перед переподключением с экспоненциальным ростом
|
|
224
|
+
const delay = Math.min((this.options.retryDelay || 1000) * Math.pow(2, this.retryCount - 1), this.options.maxRetryDelay || 30000);
|
|
225
|
+
// Пытаемся переподключиться после задержки
|
|
226
|
+
this.reconnectTimer = setTimeout(() => {
|
|
227
|
+
this.dispatchEvent('reconnect', { attempt: this.retryCount });
|
|
228
|
+
this.connect().catch(() => { });
|
|
229
|
+
}, delay);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.SseClient = SseClient;
|
|
233
|
+
//# sourceMappingURL=sse-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-client.js","sourceRoot":"","sources":["../../../src/utils/sse-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketClient = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Базовый класс для WebSocket клиентов
|
|
6
|
+
*/
|
|
7
|
+
class WebSocketClient {
|
|
8
|
+
/**
|
|
9
|
+
* Создает новый WebSocket клиент
|
|
10
|
+
* @param {string} url URL для подключения
|
|
11
|
+
* @param {WebSocketClientOptions} [options] Опции клиента
|
|
12
|
+
*/
|
|
13
|
+
constructor(url, options = {}) {
|
|
14
|
+
/** Экземпляр WebSocket */
|
|
15
|
+
this.webSocket = null;
|
|
16
|
+
/** Счетчик попыток переподключения */
|
|
17
|
+
this.retryCount = 0;
|
|
18
|
+
/** Флаг, указывающий, что соединение было закрыто намеренно */
|
|
19
|
+
this.intentionallyClosed = false;
|
|
20
|
+
/** Таймер переподключения */
|
|
21
|
+
this.reconnectTimer = null;
|
|
22
|
+
/** Таймер таймаута соединения */
|
|
23
|
+
this.connectionTimeoutTimer = null;
|
|
24
|
+
/** Обработчики событий */
|
|
25
|
+
this.eventHandlers = {};
|
|
26
|
+
/** Очередь сообщений для отправки после подключения */
|
|
27
|
+
this.messageQueue = [];
|
|
28
|
+
/** Состояние соединения */
|
|
29
|
+
this.connected = false;
|
|
30
|
+
this.url = url;
|
|
31
|
+
this.options = {
|
|
32
|
+
headers: options.headers || {},
|
|
33
|
+
connectionTimeout: options.connectionTimeout || 30000,
|
|
34
|
+
protocols: options.protocols || [],
|
|
35
|
+
maxRetries: options.maxRetries || 5,
|
|
36
|
+
retryDelay: options.retryDelay || 1000,
|
|
37
|
+
maxRetryDelay: options.maxRetryDelay || 30000,
|
|
38
|
+
autoReconnect: options.autoReconnect !== undefined ? options.autoReconnect : true
|
|
39
|
+
};
|
|
40
|
+
// Определяем среду выполнения
|
|
41
|
+
this.isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Подключается к WebSocket серверу
|
|
45
|
+
* @returns {Promise<void>}
|
|
46
|
+
*/
|
|
47
|
+
connect() {
|
|
48
|
+
// Если соединение уже установлено, возвращаем Promise.resolve
|
|
49
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
50
|
+
return Promise.resolve();
|
|
51
|
+
}
|
|
52
|
+
// Сбрасываем флаг намеренного закрытия
|
|
53
|
+
this.intentionallyClosed = false;
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
try {
|
|
56
|
+
// Создаем новый экземпляр WebSocket
|
|
57
|
+
if (this.isBrowser) {
|
|
58
|
+
// Браузерное окружение
|
|
59
|
+
this.webSocket = new WebSocket(this.url, this.options.protocols);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Node.js окружение
|
|
63
|
+
try {
|
|
64
|
+
// Динамически импортируем ws модуль в Node.js
|
|
65
|
+
const WebSocketImpl = require('ws');
|
|
66
|
+
this.webSocket = new WebSocketImpl(this.url, {
|
|
67
|
+
headers: this.options.headers,
|
|
68
|
+
protocol: this.options.protocols
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
reject(new Error('Не удалось загрузить модуль ws в Node.js: ' + error.message));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Устанавливаем таймаут соединения
|
|
77
|
+
this.connectionTimeoutTimer = setTimeout(() => {
|
|
78
|
+
if (this.webSocket && this.webSocket.readyState !== WebSocket.OPEN) {
|
|
79
|
+
reject(new Error('Таймаут подключения WebSocket'));
|
|
80
|
+
this.close();
|
|
81
|
+
}
|
|
82
|
+
}, this.options.connectionTimeout);
|
|
83
|
+
// Обработчик открытия соединения
|
|
84
|
+
this.webSocket.onopen = () => {
|
|
85
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
86
|
+
this.retryCount = 0;
|
|
87
|
+
this.connected = true;
|
|
88
|
+
// Отправляем сообщения из очереди
|
|
89
|
+
while (this.messageQueue.length > 0) {
|
|
90
|
+
const message = this.messageQueue.shift();
|
|
91
|
+
if (message && this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
92
|
+
this.webSocket.send(message);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
resolve();
|
|
96
|
+
this.dispatchEvent('open', {});
|
|
97
|
+
};
|
|
98
|
+
// Обработчик сообщений
|
|
99
|
+
this.webSocket.onmessage = (event) => {
|
|
100
|
+
try {
|
|
101
|
+
// Пытаемся распарсить сообщение как JSON
|
|
102
|
+
let data = event.data;
|
|
103
|
+
if (typeof data === 'string') {
|
|
104
|
+
try {
|
|
105
|
+
data = JSON.parse(data);
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
// Если не удалось распарсить, оставляем как есть
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
this.dispatchEvent('message', data);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
console.error('Ошибка при обработке сообщения WebSocket:', e);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
// Обработчик закрытия соединения
|
|
118
|
+
this.webSocket.onclose = (event) => {
|
|
119
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
120
|
+
this.connected = false;
|
|
121
|
+
this.dispatchEvent('close', { code: event.code, reason: event.reason });
|
|
122
|
+
// Если соединение было закрыто намеренно, не пытаемся переподключиться
|
|
123
|
+
if (this.intentionallyClosed) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Если включено автоматическое переподключение, пытаемся переподключиться
|
|
127
|
+
if (this.options.autoReconnect) {
|
|
128
|
+
this.reconnect();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
// Обработчик ошибок
|
|
132
|
+
this.webSocket.onerror = (error) => {
|
|
133
|
+
this.dispatchEvent('error', error);
|
|
134
|
+
// Если соединение не установлено и это первая попытка, отклоняем Promise
|
|
135
|
+
if (!this.connected && this.retryCount === 0) {
|
|
136
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
137
|
+
reject(new Error('Ошибка подключения WebSocket'));
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
reject(error);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Переподключается к WebSocket серверу
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
reconnect() {
|
|
151
|
+
// Увеличиваем счетчик попыток
|
|
152
|
+
this.retryCount++;
|
|
153
|
+
// Если превышено максимальное количество попыток, не пытаемся переподключиться
|
|
154
|
+
if (this.retryCount > (this.options.maxRetries || 5)) {
|
|
155
|
+
this.dispatchEvent('maxRetries', { retries: this.retryCount });
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Вычисляем задержку перед переподключением с экспоненциальным ростом
|
|
159
|
+
const delay = Math.min((this.options.retryDelay || 1000) * Math.pow(2, this.retryCount - 1), this.options.maxRetryDelay || 30000);
|
|
160
|
+
// Пытаемся переподключиться после задержки
|
|
161
|
+
this.reconnectTimer = setTimeout(() => {
|
|
162
|
+
this.dispatchEvent('reconnect', { attempt: this.retryCount });
|
|
163
|
+
this.connect().catch(() => { });
|
|
164
|
+
}, delay);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Закрывает WebSocket соединение
|
|
168
|
+
* @param {number} [code=1000] Код закрытия
|
|
169
|
+
* @param {string} [reason] Причина закрытия
|
|
170
|
+
*/
|
|
171
|
+
close(code = 1000, reason) {
|
|
172
|
+
this.intentionallyClosed = true;
|
|
173
|
+
// Очищаем таймеры
|
|
174
|
+
clearTimeout(this.reconnectTimer);
|
|
175
|
+
clearTimeout(this.connectionTimeoutTimer);
|
|
176
|
+
// Очищаем очередь сообщений
|
|
177
|
+
this.messageQueue = [];
|
|
178
|
+
// Закрываем соединение
|
|
179
|
+
if (this.webSocket) {
|
|
180
|
+
if (this.webSocket.readyState === WebSocket.OPEN) {
|
|
181
|
+
this.webSocket.close(code, reason);
|
|
182
|
+
}
|
|
183
|
+
this.webSocket = null;
|
|
184
|
+
}
|
|
185
|
+
this.connected = false;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Отправляет сообщение через WebSocket
|
|
189
|
+
* @param {string | object} message Сообщение для отправки
|
|
190
|
+
* @returns {boolean} Успешно ли отправлено сообщение
|
|
191
|
+
*/
|
|
192
|
+
send(message) {
|
|
193
|
+
const data = typeof message === 'string' ? message : JSON.stringify(message);
|
|
194
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
195
|
+
this.webSocket.send(data);
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Если соединение не установлено, добавляем сообщение в очередь
|
|
200
|
+
this.messageQueue.push(data);
|
|
201
|
+
// Если соединение не установлено и не закрыто намеренно, пытаемся подключиться
|
|
202
|
+
if ((!this.webSocket || this.webSocket.readyState === WebSocket.CLOSED) && !this.intentionallyClosed) {
|
|
203
|
+
this.connect().catch(() => { });
|
|
204
|
+
}
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Проверяет, установлено ли соединение
|
|
210
|
+
* @returns {boolean} Установлено ли соединение
|
|
211
|
+
*/
|
|
212
|
+
isConnected() {
|
|
213
|
+
return this.webSocket !== null && this.webSocket.readyState === WebSocket.OPEN;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Добавляет обработчик события
|
|
217
|
+
* @param {string} eventType Тип события
|
|
218
|
+
* @param {WebSocketEventHandler} handler Обработчик события
|
|
219
|
+
*/
|
|
220
|
+
on(eventType, handler) {
|
|
221
|
+
if (!this.eventHandlers[eventType]) {
|
|
222
|
+
this.eventHandlers[eventType] = [];
|
|
223
|
+
}
|
|
224
|
+
this.eventHandlers[eventType].push(handler);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Удаляет обработчик события
|
|
228
|
+
* @param {string} eventType Тип события
|
|
229
|
+
* @param {WebSocketEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики)
|
|
230
|
+
*/
|
|
231
|
+
off(eventType, handler) {
|
|
232
|
+
if (!this.eventHandlers[eventType]) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
if (!handler) {
|
|
236
|
+
// Если обработчик не указан, удаляем все обработчики для данного события
|
|
237
|
+
delete this.eventHandlers[eventType];
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// Если обработчик указан, удаляем только его
|
|
241
|
+
this.eventHandlers[eventType] = this.eventHandlers[eventType].filter(h => h !== handler);
|
|
242
|
+
// Если обработчиков больше нет, удаляем массив
|
|
243
|
+
if (this.eventHandlers[eventType].length === 0) {
|
|
244
|
+
delete this.eventHandlers[eventType];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Вызывает обработчики для указанного события
|
|
250
|
+
* @param {string} eventType Тип события
|
|
251
|
+
* @param {any} data Данные события
|
|
252
|
+
*/
|
|
253
|
+
dispatchEvent(eventType, data) {
|
|
254
|
+
if (!this.eventHandlers[eventType]) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
for (const handler of this.eventHandlers[eventType]) {
|
|
258
|
+
try {
|
|
259
|
+
handler(data);
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
console.error(`Ошибка в обработчике события ${eventType}:`, e);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
exports.WebSocketClient = WebSocketClient;
|
|
268
|
+
//# sourceMappingURL=websocket-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../../src/utils/websocket-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API для работы с агентами
|
|
3
|
+
*/
|
|
4
|
+
export class AgentsApi {
|
|
5
|
+
/**
|
|
6
|
+
* Создает новый экземпляр API для работы с агентами
|
|
7
|
+
* @param {HttpClient} httpClient HTTP клиент
|
|
8
|
+
*/
|
|
9
|
+
constructor(httpClient) {
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Получает список всех агентов проекта
|
|
14
|
+
* @param {string} projectId Идентификатор проекта
|
|
15
|
+
* @returns {Promise<Agent[]>} Список агентов
|
|
16
|
+
*/
|
|
17
|
+
async getAgents(projectId) {
|
|
18
|
+
return this.httpClient.get(`/api/projects/${projectId}/agents`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Получает агента по идентификатору
|
|
22
|
+
* @param {string} agentId Идентификатор агента
|
|
23
|
+
* @returns {Promise<Agent>} Агент
|
|
24
|
+
*/
|
|
25
|
+
async getAgent(agentId) {
|
|
26
|
+
return this.httpClient.get(`/api/agents/${agentId}`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Создает нового агента
|
|
30
|
+
* @param {CreateAgentParams} params Параметры создания агента
|
|
31
|
+
* @returns {Promise<Agent>} Созданный агент
|
|
32
|
+
*/
|
|
33
|
+
async createAgent(params) {
|
|
34
|
+
return this.httpClient.post('/api/agents', params);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Обновляет агента
|
|
38
|
+
* @param {string} agentId Идентификатор агента
|
|
39
|
+
* @param {Partial<Pick<Agent, 'name' | 'description' | 'settings'>>} data Данные для обновления
|
|
40
|
+
* @returns {Promise<Agent>} Обновленный агент
|
|
41
|
+
*/
|
|
42
|
+
async updateAgent(agentId, data) {
|
|
43
|
+
return this.httpClient.put(`/api/agents/${agentId}`, data);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Удаляет агента
|
|
47
|
+
* @param {string} agentId Идентификатор агента
|
|
48
|
+
* @returns {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
async deleteAgent(agentId) {
|
|
51
|
+
return this.httpClient.delete(`/api/agents/${agentId}`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Запускает агента
|
|
55
|
+
* @param {string} agentId Идентификатор агента
|
|
56
|
+
* @param {object} [params] Параметры запуска
|
|
57
|
+
* @returns {Promise<Agent>} Обновленный агент
|
|
58
|
+
*/
|
|
59
|
+
async startAgent(agentId, params) {
|
|
60
|
+
return this.httpClient.post(`/api/agents/${agentId}/start`, params);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Останавливает агента
|
|
64
|
+
* @param {string} agentId Идентификатор агента
|
|
65
|
+
* @returns {Promise<Agent>} Обновленный агент
|
|
66
|
+
*/
|
|
67
|
+
async stopAgent(agentId) {
|
|
68
|
+
return this.httpClient.post(`/api/agents/${agentId}/stop`);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Получает задачи агента
|
|
72
|
+
* @param {string} agentId Идентификатор агента
|
|
73
|
+
* @returns {Promise<AgentTask[]>} Список задач
|
|
74
|
+
*/
|
|
75
|
+
async getAgentTasks(agentId) {
|
|
76
|
+
return this.httpClient.get(`/api/agents/${agentId}/tasks`);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Создает новую задачу для агента
|
|
80
|
+
* @param {string} agentId Идентификатор агента
|
|
81
|
+
* @param {object} params Параметры задачи
|
|
82
|
+
* @param {string} params.description Описание задачи
|
|
83
|
+
* @param {object} [params.context] Контекст задачи
|
|
84
|
+
* @returns {Promise<AgentTask>} Созданная задача
|
|
85
|
+
*/
|
|
86
|
+
async createAgentTask(agentId, params) {
|
|
87
|
+
return this.httpClient.post(`/api/agents/${agentId}/tasks`, params);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=agents-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-api.js","sourceRoot":"","sources":["../../../src/api/agents-api.ts"],"names":[],"mappings":"AA0FA;;GAEG;AACH,MAAM,OAAO,SAAS;IAIpB;;;OAGG;IACH,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS,CAAC,SAAiB;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,SAAS,SAAS,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ,CAAC,OAAe;QACnC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CAAC,MAAyB;QAChD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CACtB,OAAe,EACf,IAA+D;QAE/D,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CAAC,OAAe;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,MAAe;QACtD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,OAAO,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,OAAO,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,OAAe;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,OAAO,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,eAAe,CAC1B,OAAe,EACf,MAAiD;QAEjD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,OAAO,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;CACF"}
|