solver-sdk 1.8.0 → 1.9.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/README.md +176 -468
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
- package/dist/cjs/api/chat-api/index.js.map +1 -0
- package/dist/cjs/api/chat-api/interfaces.js +3 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
- package/dist/cjs/api/chat-api/models.js +6 -0
- package/dist/cjs/api/chat-api/models.js.map +1 -0
- package/dist/cjs/api/chat-api/stream-utils.js +192 -0
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/cjs/api/projects-api.js +275 -3
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +21 -23
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +90 -52
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/constants/websocket-namespaces.constants.js +18 -0
- package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -0
- package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +3 -0
- package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +1 -0
- package/dist/cjs/interfaces/websocket/client-options.interfaces.js +3 -0
- package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +1 -0
- package/dist/cjs/interfaces/websocket/events.interfaces.js +3 -0
- package/dist/cjs/interfaces/websocket/events.interfaces.js.map +1 -0
- package/dist/cjs/interfaces/websocket/stats.interfaces.js +3 -0
- package/dist/cjs/interfaces/websocket/stats.interfaces.js.map +1 -0
- package/dist/cjs/utils/code-solver-websocket-client.js +383 -1473
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/connection-state-manager.js +133 -0
- package/dist/cjs/utils/connection-state-manager.js.map +1 -0
- package/dist/cjs/utils/http-client.js +7 -0
- package/dist/cjs/utils/http-client.js.map +1 -1
- package/dist/cjs/utils/logger.js +106 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/ping-pong-manager.js +306 -0
- package/dist/cjs/utils/ping-pong-manager.js.map +1 -0
- package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
- package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/cjs/utils/session-manager.js +114 -0
- package/dist/cjs/utils/session-manager.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/cjs/ws/base-ws-client.js +286 -0
- package/dist/cjs/ws/base-ws-client.js.map +1 -0
- package/dist/cjs/ws/dependencies-ws-client.js +11 -0
- package/dist/cjs/ws/dependencies-ws-client.js.map +1 -0
- package/dist/cjs/ws/diagnostics-service.js +170 -0
- package/dist/cjs/ws/diagnostics-service.js.map +1 -0
- package/dist/cjs/ws/indexing-ws-client.js +223 -0
- package/dist/cjs/ws/indexing-ws-client.js.map +1 -0
- package/dist/cjs/ws/notifications-ws-client.js +12 -0
- package/dist/cjs/ws/notifications-ws-client.js.map +1 -0
- package/dist/cjs/ws/reasoning-ws-client.js +330 -0
- package/dist/cjs/ws/reasoning-ws-client.js.map +1 -0
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
- package/dist/esm/api/chat-api/index.js.map +1 -0
- package/dist/esm/api/chat-api/interfaces.js +2 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -0
- package/dist/esm/api/chat-api/models.js +5 -0
- package/dist/esm/api/chat-api/models.js.map +1 -0
- package/dist/esm/api/chat-api/stream-utils.js +188 -0
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
- package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
- package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/esm/api/projects-api.js +275 -3
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +13 -15
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +89 -51
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/constants/websocket-namespaces.constants.js +15 -0
- package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -0
- package/dist/esm/interfaces/websocket/callbacks.interfaces.js +2 -0
- package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +1 -0
- package/dist/esm/interfaces/websocket/client-options.interfaces.js +2 -0
- package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +1 -0
- package/dist/esm/interfaces/websocket/events.interfaces.js +2 -0
- package/dist/esm/interfaces/websocket/events.interfaces.js.map +1 -0
- package/dist/esm/interfaces/websocket/stats.interfaces.js +2 -0
- package/dist/esm/interfaces/websocket/stats.interfaces.js.map +1 -0
- package/dist/esm/utils/code-solver-websocket-client.js +382 -1473
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/connection-state-manager.js +129 -0
- package/dist/esm/utils/connection-state-manager.js.map +1 -0
- package/dist/esm/utils/http-client.js +7 -0
- package/dist/esm/utils/http-client.js.map +1 -1
- package/dist/esm/utils/logger.js +101 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/ping-pong-manager.js +302 -0
- package/dist/esm/utils/ping-pong-manager.js.map +1 -0
- package/dist/esm/utils/reasoning-auth-helper.js +54 -0
- package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/esm/utils/session-manager.js +109 -0
- package/dist/esm/utils/session-manager.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/esm/ws/base-ws-client.js +282 -0
- package/dist/esm/ws/base-ws-client.js.map +1 -0
- package/dist/esm/ws/dependencies-ws-client.js +7 -0
- package/dist/esm/ws/dependencies-ws-client.js.map +1 -0
- package/dist/esm/ws/diagnostics-service.js +166 -0
- package/dist/esm/ws/diagnostics-service.js.map +1 -0
- package/dist/esm/ws/indexing-ws-client.js +219 -0
- package/dist/esm/ws/indexing-ws-client.js.map +1 -0
- package/dist/esm/ws/notifications-ws-client.js +8 -0
- package/dist/esm/ws/notifications-ws-client.js.map +1 -0
- package/dist/esm/ws/reasoning-ws-client.js +326 -0
- package/dist/esm/ws/reasoning-ws-client.js.map +1 -0
- package/dist/types/api/chat-api/index.d.ts +81 -0
- package/dist/types/api/chat-api/index.d.ts.map +1 -0
- package/dist/types/api/chat-api/interfaces.d.ts +47 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
- package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
- package/dist/types/api/chat-api/models.d.ts.map +1 -0
- package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +114 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +3 -2
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +77 -36
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/constants/websocket-namespaces.constants.d.ts +14 -0
- package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -0
- package/dist/types/interfaces/http-client.d.ts +1 -1
- package/dist/types/interfaces/http-client.d.ts.map +1 -1
- package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +30 -0
- package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +1 -0
- package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +51 -0
- package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +1 -0
- package/dist/types/interfaces/websocket/events.interfaces.d.ts +165 -0
- package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +1 -0
- package/dist/types/interfaces/websocket/stats.interfaces.d.ts +72 -0
- package/dist/types/interfaces/websocket/stats.interfaces.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +67 -612
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/connection-state-manager.d.ts +94 -0
- package/dist/types/utils/connection-state-manager.d.ts.map +1 -0
- package/dist/types/utils/http-client.d.ts +5 -0
- package/dist/types/utils/http-client.d.ts.map +1 -1
- package/dist/types/utils/logger.d.ts +62 -0
- package/dist/types/utils/logger.d.ts.map +1 -0
- package/dist/types/utils/ping-pong-manager.d.ts +118 -0
- package/dist/types/utils/ping-pong-manager.d.ts.map +1 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
- package/dist/types/utils/session-manager.d.ts +98 -0
- package/dist/types/utils/session-manager.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/dist/types/ws/base-ws-client.d.ts +119 -0
- package/dist/types/ws/base-ws-client.d.ts.map +1 -0
- package/dist/types/ws/dependencies-ws-client.d.ts +6 -0
- package/dist/types/ws/dependencies-ws-client.d.ts.map +1 -0
- package/dist/types/ws/diagnostics-service.d.ts +93 -0
- package/dist/types/ws/diagnostics-service.d.ts.map +1 -0
- package/dist/types/ws/indexing-ws-client.d.ts +78 -0
- package/dist/types/ws/indexing-ws-client.d.ts.map +1 -0
- package/dist/types/ws/notifications-ws-client.d.ts +5 -0
- package/dist/types/ws/notifications-ws-client.d.ts.map +1 -0
- package/dist/types/ws/reasoning-ws-client.d.ts +87 -0
- package/dist/types/ws/reasoning-ws-client.d.ts.map +1 -0
- package/docs/API_REFERENCE.md +432 -0
- package/docs/AUTHENTICATION.md +83 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/PING_PONG.md +212 -0
- package/docs/README.md +102 -0
- package/docs/WEBSOCKET.md +139 -0
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +231 -0
- package/package.json +4 -3
- package/dist/cjs/api/chat-api.js.map +0 -1
- package/dist/esm/api/chat-api.js.map +0 -1
- package/dist/types/api/chat-api.d.ts.map +0 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
|
|
2
|
+
import { WebSocketEvents as WsEvents } from '../constants/websocket-events.constants.js';
|
|
3
|
+
import { BaseWebSocketClient } from './base-ws-client.js';
|
|
4
|
+
import { createIndexingConnectionParams } from '../utils/reasoning-auth-helper.js';
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket клиент для пространства имен индексации
|
|
7
|
+
*/
|
|
8
|
+
export class IndexingWebSocketClient extends BaseWebSocketClient {
|
|
9
|
+
/**
|
|
10
|
+
* Создает новый WebSocket клиент для индексации
|
|
11
|
+
* @param {string} baseURL Базовый URL API
|
|
12
|
+
* @param {IndexingWebSocketClientOptions} options Опции клиента
|
|
13
|
+
*/
|
|
14
|
+
constructor(baseURL, options = {}) {
|
|
15
|
+
super(WebSocketNamespace.INDEXING, baseURL, options);
|
|
16
|
+
/** ID активного проекта */
|
|
17
|
+
this.activeProjectId = null;
|
|
18
|
+
// Инициализируем ID проекта, если указан
|
|
19
|
+
this.activeProjectId = options.projectId || null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Подключается к серверу WebSocket
|
|
23
|
+
* @param {boolean} autoJoin Автоматически присоединиться к проекту
|
|
24
|
+
* @returns {Promise<boolean>} Успешность подключения
|
|
25
|
+
*/
|
|
26
|
+
async connectToIndexing(autoJoin = true) {
|
|
27
|
+
try {
|
|
28
|
+
this.logger.info('Подключение к пространству имен индексации', { projectId: this.activeProjectId });
|
|
29
|
+
// Получаем параметры для подключения с авторизацией
|
|
30
|
+
const authParams = createIndexingConnectionParams(this.options.apiKey, this.activeProjectId, this.sessionManager.getSessionToken(this.namespace));
|
|
31
|
+
// Подключаемся к пространству имен индексации с передачей authToken
|
|
32
|
+
const connected = await this.connect(authParams);
|
|
33
|
+
if (!connected) {
|
|
34
|
+
this.logger.error('Не удалось подключиться к пространству имен индексации');
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
// Аутентифицируемся с увеличенным таймаутом
|
|
38
|
+
try {
|
|
39
|
+
const authResult = await this.emitWithAck(WsEvents.AUTHENTICATE, {
|
|
40
|
+
token: this.options.apiKey,
|
|
41
|
+
projectId: this.activeProjectId
|
|
42
|
+
}, 10000);
|
|
43
|
+
this.logger.debug('Результат аутентификации в namespace индексации', authResult);
|
|
44
|
+
// Если сервер вернул токен сессии, сохраняем его
|
|
45
|
+
if (authResult.sessionToken) {
|
|
46
|
+
this.sessionManager.saveSessionToken(this.namespace, authResult.sessionToken);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.logger.error('Ошибка аутентификации в namespace индексации', error);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// Если у нас есть ID проекта и включено автоматическое присоединение
|
|
54
|
+
if (this.activeProjectId && autoJoin) {
|
|
55
|
+
return this.joinProject(this.activeProjectId);
|
|
56
|
+
}
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
this.logger.error('Ошибка подключения к пространству имен индексации', error);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Присоединяется к проекту
|
|
66
|
+
* @param {string} projectId ID проекта
|
|
67
|
+
* @returns {Promise<boolean>} Успешность операции
|
|
68
|
+
*/
|
|
69
|
+
async joinProject(projectId) {
|
|
70
|
+
if (!projectId) {
|
|
71
|
+
this.logger.error('Попытка присоединиться к пустому projectId');
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// Сохраняем ID проекта
|
|
75
|
+
this.activeProjectId = projectId;
|
|
76
|
+
try {
|
|
77
|
+
// Отправляем запрос на присоединение к проекту
|
|
78
|
+
const joinResult = await this.emitWithAck(WsEvents.JOIN_PROJECT, {
|
|
79
|
+
projectId,
|
|
80
|
+
token: this.options.apiKey
|
|
81
|
+
}, 10000);
|
|
82
|
+
this.logger.debug(`Результат присоединения к проекту ${projectId}`, joinResult);
|
|
83
|
+
if (joinResult.success !== true) {
|
|
84
|
+
this.logger.error(`Ошибка при присоединении к проекту: ${joinResult.error || 'Неизвестная ошибка'}`);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
this.logger.error(`Ошибка при присоединении к проекту ${projectId}`, error);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Запускает процесс индексации проекта
|
|
96
|
+
* @param {string} [projectId] ID проекта (если не указан, используется текущий проект)
|
|
97
|
+
* @returns {Promise<boolean>} Успешность операции
|
|
98
|
+
*/
|
|
99
|
+
async startIndexing(projectId) {
|
|
100
|
+
const targetId = projectId || this.activeProjectId;
|
|
101
|
+
if (!targetId) {
|
|
102
|
+
this.logger.error('Попытка запустить индексацию без указания ID проекта');
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
// Отправляем запрос на запуск индексации
|
|
107
|
+
const startResult = await this.emitWithAck(WsEvents.START_INDEXING, {
|
|
108
|
+
projectId: targetId,
|
|
109
|
+
token: this.options.apiKey
|
|
110
|
+
}, 10000);
|
|
111
|
+
this.logger.debug(`Результат запуска индексации проекта ${targetId}`, startResult);
|
|
112
|
+
if (startResult.success !== true) {
|
|
113
|
+
this.logger.error(`Ошибка при запуске индексации: ${startResult.error || 'Неизвестная ошибка'}`);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
this.logger.error(`Ошибка при запуске индексации проекта ${targetId}`, error);
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Останавливает процесс индексации проекта
|
|
125
|
+
* @param {string} [projectId] ID проекта (если не указан, используется текущий проект)
|
|
126
|
+
* @returns {Promise<boolean>} Успешность операции
|
|
127
|
+
*/
|
|
128
|
+
async stopIndexing(projectId) {
|
|
129
|
+
const targetId = projectId || this.activeProjectId;
|
|
130
|
+
if (!targetId) {
|
|
131
|
+
this.logger.error('Попытка остановить индексацию без указания ID проекта');
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
// Отправляем запрос на остановку индексации
|
|
136
|
+
const stopResult = await this.emitWithAck(WsEvents.STOP_INDEXING, {
|
|
137
|
+
projectId: targetId,
|
|
138
|
+
token: this.options.apiKey
|
|
139
|
+
}, 10000);
|
|
140
|
+
this.logger.debug(`Результат остановки индексации проекта ${targetId}`, stopResult);
|
|
141
|
+
if (stopResult.success !== true) {
|
|
142
|
+
this.logger.error(`Ошибка при остановке индексации: ${stopResult.error || 'Неизвестная ошибка'}`);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
this.logger.error(`Ошибка при остановке индексации проекта ${targetId}`, error);
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Получает статус индексации проекта
|
|
154
|
+
* @param {string} [projectId] ID проекта (если не указан, используется текущий проект)
|
|
155
|
+
* @returns {Promise<any>} Статус индексации проекта
|
|
156
|
+
*/
|
|
157
|
+
async getIndexingStatus(projectId) {
|
|
158
|
+
const targetId = projectId || this.activeProjectId;
|
|
159
|
+
if (!targetId) {
|
|
160
|
+
throw new Error('Не указан ID проекта для получения статуса индексации');
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
// Отправляем запрос на получение статуса индексации
|
|
164
|
+
const statusResult = await this.emitWithAck(WsEvents.GET_INDEXING_STATUS, {
|
|
165
|
+
projectId: targetId,
|
|
166
|
+
token: this.options.apiKey
|
|
167
|
+
}, 10000);
|
|
168
|
+
this.logger.debug(`Получен статус индексации проекта ${targetId}`, statusResult);
|
|
169
|
+
return statusResult;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
this.logger.error(`Ошибка при получении статуса индексации проекта ${targetId}`, error);
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Устанавливает обработчик для события завершения индексации
|
|
178
|
+
* @param {Function} handler Обработчик события
|
|
179
|
+
*/
|
|
180
|
+
onIndexingComplete(handler) {
|
|
181
|
+
this.on('indexing_complete', handler);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Устанавливает обработчик для события индексации файла
|
|
185
|
+
* @param {Function} handler Обработчик события
|
|
186
|
+
*/
|
|
187
|
+
onFileIndexed(handler) {
|
|
188
|
+
this.on('file_indexed', handler);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Устанавливает обработчик для события ошибки индексации
|
|
192
|
+
* @param {Function} handler Обработчик события
|
|
193
|
+
*/
|
|
194
|
+
onIndexingError(handler) {
|
|
195
|
+
this.on('indexing_error', handler);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Получает текущий ID активного проекта
|
|
199
|
+
* @returns {string | null} ID активного проекта или null
|
|
200
|
+
*/
|
|
201
|
+
getActiveProjectId() {
|
|
202
|
+
return this.activeProjectId;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Устанавливает ID активного проекта
|
|
206
|
+
* @param {string} projectId ID проекта
|
|
207
|
+
* @returns {boolean} Успешность установки
|
|
208
|
+
*/
|
|
209
|
+
setActiveProjectId(projectId) {
|
|
210
|
+
if (!projectId) {
|
|
211
|
+
this.logger.error('Попытка установить пустой projectId');
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
this.activeProjectId = projectId;
|
|
215
|
+
this.logger.debug(`Установлен активный projectId: ${projectId}`);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=indexing-ws-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexing-ws-client.js","sourceRoot":"","sources":["../../../src/ws/indexing-ws-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseWebSocketClient } from './base-ws-client';
|
|
2
|
+
import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
|
|
3
|
+
export class NotificationsWsClient extends BaseWebSocketClient {
|
|
4
|
+
constructor(baseURL, options = {}) {
|
|
5
|
+
super(WebSocketNamespace.DEFAULT, baseURL, options);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=notifications-ws-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications-ws-client.js","sourceRoot":"","sources":["../../../src/ws/notifications-ws-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAEpF,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IAC5D,YAAY,OAAe,EAAE,OAAO,GAAG,EAAE;QACvC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CAEF"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
|
|
2
|
+
import { WebSocketEvents as WsEvents } from '../constants/websocket-events.constants.js';
|
|
3
|
+
import { BaseWebSocketClient } from './base-ws-client.js';
|
|
4
|
+
import { createReasoningConnectionParams } from '../utils/reasoning-auth-helper.js';
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket клиент для пространства имен рассуждений
|
|
7
|
+
*/
|
|
8
|
+
export class ReasoningWebSocketClient extends BaseWebSocketClient {
|
|
9
|
+
/**
|
|
10
|
+
* Создает новый WebSocket клиент для рассуждений
|
|
11
|
+
* @param {string} baseURL Базовый URL API
|
|
12
|
+
* @param {ReasoningWebSocketClientOptions} options Опции клиента
|
|
13
|
+
*/
|
|
14
|
+
constructor(baseURL, options = {}) {
|
|
15
|
+
super(WebSocketNamespace.REASONING, baseURL, options);
|
|
16
|
+
/** ID активного рассуждения */
|
|
17
|
+
this.activeReasoningId = null;
|
|
18
|
+
/** Обработчики событий мышления */
|
|
19
|
+
this.thinkingEventHandlers = new Map();
|
|
20
|
+
// Инициализируем ID рассуждения, если указан
|
|
21
|
+
this.activeReasoningId = options.reasoningId || null;
|
|
22
|
+
// Инициализируем обработчики событий
|
|
23
|
+
this.callbacks = options.callbacks || {};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Подключается к серверу WebSocket
|
|
27
|
+
* @param {boolean} autoJoin Автоматически присоединиться к рассуждению
|
|
28
|
+
* @returns {Promise<boolean>} Успешность подключения
|
|
29
|
+
*/
|
|
30
|
+
async connectToReasoning(autoJoin = true) {
|
|
31
|
+
try {
|
|
32
|
+
// Получаем параметры авторизации для пространства имен рассуждений
|
|
33
|
+
const authParams = createReasoningConnectionParams(this.options.apiKey, this.activeReasoningId, this.sessionManager.getSessionToken(this.namespace));
|
|
34
|
+
// Подключаемся к серверу
|
|
35
|
+
const connected = await this.connect(authParams);
|
|
36
|
+
if (!connected) {
|
|
37
|
+
this.logger.error('Не удалось подключиться к серверу рассуждений');
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Аутентифицируемся с увеличенным таймаутом
|
|
41
|
+
try {
|
|
42
|
+
const authResult = await this.emitWithAck(WsEvents.AUTHENTICATE, {
|
|
43
|
+
token: this.options.apiKey,
|
|
44
|
+
reasoningId: this.activeReasoningId
|
|
45
|
+
}, 10000);
|
|
46
|
+
this.logger.debug('Результат аутентификации в namespace рассуждений', authResult);
|
|
47
|
+
// Если сервер вернул токен сессии, сохраняем его
|
|
48
|
+
if (authResult.sessionToken) {
|
|
49
|
+
this.sessionManager.saveSessionToken(this.namespace, authResult.sessionToken);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
this.logger.error('Ошибка аутентификации в namespace рассуждений', error);
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Если у нас есть ID рассуждения и включено автоматическое присоединение
|
|
57
|
+
if (this.activeReasoningId && autoJoin) {
|
|
58
|
+
return this.joinReasoning(this.activeReasoningId);
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
this.logger.error('Ошибка подключения к пространству имен рассуждений', error);
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Присоединяется к сессии рассуждения
|
|
69
|
+
* @param {string} reasoningId ID сессии рассуждения
|
|
70
|
+
* @returns {Promise<boolean>} Успешность операции
|
|
71
|
+
*/
|
|
72
|
+
async joinReasoning(reasoningId) {
|
|
73
|
+
if (!reasoningId) {
|
|
74
|
+
this.logger.error('Попытка присоединиться к пустому reasoningId');
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
// Сохраняем ID рассуждения
|
|
78
|
+
this.activeReasoningId = reasoningId;
|
|
79
|
+
try {
|
|
80
|
+
// Отправляем запрос на присоединение к сессии рассуждения
|
|
81
|
+
const joinResult = await this.emitWithAck(WsEvents.JOIN_REASONING, {
|
|
82
|
+
reasoningId,
|
|
83
|
+
token: this.options.apiKey
|
|
84
|
+
}, 10000);
|
|
85
|
+
this.logger.debug(`Результат присоединения к рассуждению ${reasoningId}`, joinResult);
|
|
86
|
+
if (joinResult.success !== true) {
|
|
87
|
+
this.logger.error(`Ошибка при присоединении к рассуждению: ${joinResult.error || 'Неизвестная ошибка'}`);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.logger.error(`Ошибка при присоединении к рассуждению ${reasoningId}`, error);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Запускает рассуждение
|
|
99
|
+
* @param {string} reasoningId ID сессии рассуждения
|
|
100
|
+
* @returns {Promise<boolean>} Успешность операции
|
|
101
|
+
*/
|
|
102
|
+
async startReasoning(reasoningId) {
|
|
103
|
+
const targetId = reasoningId || this.activeReasoningId;
|
|
104
|
+
if (!targetId) {
|
|
105
|
+
this.logger.error('Попытка запустить рассуждение без указания ID');
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
// Отправляем запрос на запуск рассуждения
|
|
110
|
+
const startResult = await this.emitWithAck(WsEvents.START_REASONING, {
|
|
111
|
+
reasoningId: targetId,
|
|
112
|
+
token: this.options.apiKey
|
|
113
|
+
}, 10000);
|
|
114
|
+
this.logger.debug(`Результат запуска рассуждения ${targetId}`, startResult);
|
|
115
|
+
if (startResult.success !== true) {
|
|
116
|
+
this.logger.error(`Ошибка при запуске рассуждения: ${startResult.error || 'Неизвестная ошибка'}`);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
this.logger.error(`Ошибка при запуске рассуждения ${targetId}`, error);
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Создает новое рассуждение на сервере
|
|
128
|
+
* @returns {Promise<string>} ID нового рассуждения
|
|
129
|
+
*/
|
|
130
|
+
async createNewReasoning() {
|
|
131
|
+
if (!this.isConnected()) {
|
|
132
|
+
this.logger.debug('Подключение к пространству имен рассуждений для создания нового рассуждения');
|
|
133
|
+
const connected = await this.connectToReasoning(false);
|
|
134
|
+
if (!connected) {
|
|
135
|
+
throw new Error('Не удалось подключиться к пространству имен рассуждений');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.logger.debug('Отправка запроса на создание нового рассуждения');
|
|
139
|
+
const result = await this.emitWithAck(WsEvents.CREATE_REASONING, {
|
|
140
|
+
token: this.options.apiKey
|
|
141
|
+
}, 10000);
|
|
142
|
+
if (!result.reasoningId) {
|
|
143
|
+
throw new Error(`Сервер не вернул ID рассуждения: ${JSON.stringify(result)}`);
|
|
144
|
+
}
|
|
145
|
+
// Сохраняем ID нового рассуждения
|
|
146
|
+
this.activeReasoningId = result.reasoningId;
|
|
147
|
+
return result.reasoningId;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Подключается к сессии thinking с расширенными возможностями
|
|
151
|
+
* @param {string} [reasoningId="system"] Идентификатор рассуждения
|
|
152
|
+
* @param {(data: any) => void} [thinkingHandler] Обработчик событий мышления
|
|
153
|
+
* @returns {Promise<string>} Идентификатор сессии рассуждения
|
|
154
|
+
*/
|
|
155
|
+
async connectToThinkingSession(reasoningId = "system", thinkingHandler) {
|
|
156
|
+
try {
|
|
157
|
+
// Подключаемся к пространству имен
|
|
158
|
+
const connected = await this.connectToReasoning(false);
|
|
159
|
+
if (!connected) {
|
|
160
|
+
throw new Error('Не удалось подключиться к пространству имен рассуждений');
|
|
161
|
+
}
|
|
162
|
+
// Если reasoningId == "system", сервер заменит его на новый
|
|
163
|
+
// с префиксом "system-". Для получения нового ID нужно подписаться
|
|
164
|
+
// на событие создания рассуждения.
|
|
165
|
+
if (reasoningId === "system") {
|
|
166
|
+
// Будем ждать ответа о создании рассуждения
|
|
167
|
+
const newReasoningId = await this.createNewReasoning();
|
|
168
|
+
this.activeReasoningId = newReasoningId;
|
|
169
|
+
// Отправляем запрос на присоединение к сессии рассуждения
|
|
170
|
+
const joinSuccess = await this.joinReasoning(newReasoningId);
|
|
171
|
+
if (!joinSuccess) {
|
|
172
|
+
throw new Error(`Ошибка при присоединении к сессии рассуждения: ${newReasoningId}`);
|
|
173
|
+
}
|
|
174
|
+
// Отправляем запрос на запуск рассуждения
|
|
175
|
+
const startSuccess = await this.startReasoning(newReasoningId);
|
|
176
|
+
if (!startSuccess) {
|
|
177
|
+
throw new Error(`Ошибка при запуске рассуждения: ${newReasoningId}`);
|
|
178
|
+
}
|
|
179
|
+
// Если передан обработчик событий мышления, подписываемся
|
|
180
|
+
if (thinkingHandler) {
|
|
181
|
+
this.subscribeToThinking(newReasoningId, thinkingHandler);
|
|
182
|
+
}
|
|
183
|
+
return newReasoningId;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this.activeReasoningId = reasoningId;
|
|
187
|
+
// Отправляем запрос на присоединение к сессии рассуждения
|
|
188
|
+
const joinSuccess = await this.joinReasoning(reasoningId);
|
|
189
|
+
if (!joinSuccess) {
|
|
190
|
+
throw new Error(`Ошибка при присоединении к сессии рассуждения: ${reasoningId}`);
|
|
191
|
+
}
|
|
192
|
+
// Отправляем запрос на запуск рассуждения
|
|
193
|
+
const startSuccess = await this.startReasoning(reasoningId);
|
|
194
|
+
if (!startSuccess) {
|
|
195
|
+
throw new Error(`Ошибка при запуске рассуждения: ${reasoningId}`);
|
|
196
|
+
}
|
|
197
|
+
// Если передан обработчик событий мышления, подписываемся
|
|
198
|
+
if (thinkingHandler) {
|
|
199
|
+
this.subscribeToThinking(reasoningId, thinkingHandler);
|
|
200
|
+
}
|
|
201
|
+
return reasoningId;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
throw new Error(`Ошибка при подключении к сессии thinking: ${error instanceof Error ? error.message : String(error)}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Настраивает обработчики событий для стрима от Anthropic
|
|
210
|
+
*/
|
|
211
|
+
setupAnthropicStreamHandlers() {
|
|
212
|
+
if (!this.isConnected() || !this.client) {
|
|
213
|
+
this.logger.warn('Попытка настроить обработчики событий Anthropic Stream, но клиент не подключен');
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// Устанавливаем обработчики для различных событий
|
|
217
|
+
// Обработчик для события начала сообщения
|
|
218
|
+
if (this.callbacks.onMessageStart) {
|
|
219
|
+
this.client.on('message_start', this.callbacks.onMessageStart);
|
|
220
|
+
}
|
|
221
|
+
// Обработчик для события начала блока контента
|
|
222
|
+
this.client.on('content_block_start', (data) => {
|
|
223
|
+
if (data.content_type === 'thinking' && this.callbacks.onThinkingStart) {
|
|
224
|
+
this.callbacks.onThinkingStart(data);
|
|
225
|
+
}
|
|
226
|
+
else if (this.callbacks.onContentStart) {
|
|
227
|
+
this.callbacks.onContentStart(data);
|
|
228
|
+
}
|
|
229
|
+
// Для отладки
|
|
230
|
+
if (this.callbacks.onAny) {
|
|
231
|
+
this.callbacks.onAny('content_block_start', data);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
// Обработчик для события дельты блока контента
|
|
235
|
+
this.client.on('content_block_delta', (data) => {
|
|
236
|
+
if (data.delta.type === 'thinking_delta' && this.callbacks.onThinkingDelta && data.delta.thinking) {
|
|
237
|
+
this.callbacks.onThinkingDelta({
|
|
238
|
+
index: data.index,
|
|
239
|
+
delta: data.delta.thinking
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else if (this.callbacks.onContentDelta) {
|
|
243
|
+
this.callbacks.onContentDelta(data);
|
|
244
|
+
}
|
|
245
|
+
// Для отладки
|
|
246
|
+
if (this.callbacks.onAny) {
|
|
247
|
+
this.callbacks.onAny('content_block_delta', data);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
// Обработчик для события остановки блока контента
|
|
251
|
+
this.client.on('content_block_stop', (data) => {
|
|
252
|
+
if (data.content_type === 'thinking' && this.callbacks.onThinkingStop) {
|
|
253
|
+
this.callbacks.onThinkingStop(data);
|
|
254
|
+
}
|
|
255
|
+
else if (this.callbacks.onContentStop) {
|
|
256
|
+
this.callbacks.onContentStop(data);
|
|
257
|
+
}
|
|
258
|
+
// Для отладки
|
|
259
|
+
if (this.callbacks.onAny) {
|
|
260
|
+
this.callbacks.onAny('content_block_stop', data);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
// Обработчик для события окончания сообщения
|
|
264
|
+
if (this.callbacks.onMessageStop) {
|
|
265
|
+
this.client.on('message_stop', this.callbacks.onMessageStop);
|
|
266
|
+
}
|
|
267
|
+
// Обработчик для события ошибки
|
|
268
|
+
if (this.callbacks.onError) {
|
|
269
|
+
this.client.on('error', this.callbacks.onError);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Подписывается на события мышления
|
|
274
|
+
* @param {string} reasoningId Идентификатор рассуждения
|
|
275
|
+
* @param {Function} handler Обработчик событий мышления
|
|
276
|
+
* @returns {void}
|
|
277
|
+
*/
|
|
278
|
+
subscribeToThinking(reasoningId, handler) {
|
|
279
|
+
// Сохраняем обработчик
|
|
280
|
+
this.thinkingEventHandlers.set(reasoningId, handler);
|
|
281
|
+
// Подписываемся на события мышления
|
|
282
|
+
this.on(`thinking:${reasoningId}`, handler);
|
|
283
|
+
// Дублируем подписку для полной совместимости
|
|
284
|
+
this.on(`reasoning:thinking:${reasoningId}`, handler);
|
|
285
|
+
this.logger.debug(`Подписан на события мышления для ${reasoningId}`);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Отписывается от событий мышления
|
|
289
|
+
* @param {string} reasoningId Идентификатор рассуждения
|
|
290
|
+
* @returns {void}
|
|
291
|
+
*/
|
|
292
|
+
unsubscribeFromThinking(reasoningId) {
|
|
293
|
+
// Получаем обработчик
|
|
294
|
+
const handler = this.thinkingEventHandlers.get(reasoningId);
|
|
295
|
+
if (handler) {
|
|
296
|
+
// Отписываемся от событий
|
|
297
|
+
this.off(`thinking:${reasoningId}`, handler);
|
|
298
|
+
this.off(`reasoning:thinking:${reasoningId}`, handler);
|
|
299
|
+
// Удаляем обработчик
|
|
300
|
+
this.thinkingEventHandlers.delete(reasoningId);
|
|
301
|
+
this.logger.debug(`Отписан от событий мышления для ${reasoningId}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Получает текущий ID активного рассуждения
|
|
306
|
+
* @returns {string | null} ID активного рассуждения или null
|
|
307
|
+
*/
|
|
308
|
+
getActiveReasoningId() {
|
|
309
|
+
return this.activeReasoningId;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Устанавливает ID активного рассуждения
|
|
313
|
+
* @param {string} reasoningId ID рассуждения
|
|
314
|
+
* @returns {boolean} Успешность установки
|
|
315
|
+
*/
|
|
316
|
+
setActiveReasoningId(reasoningId) {
|
|
317
|
+
if (!reasoningId) {
|
|
318
|
+
this.logger.error('Попытка установить пустой reasoningId');
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
this.activeReasoningId = reasoningId;
|
|
322
|
+
this.logger.debug(`Установлен активный reasoningId: ${reasoningId}`);
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=reasoning-ws-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reasoning-ws-client.js","sourceRoot":"","sources":["../../../src/ws/reasoning-ws-client.ts"],"names":[],"mappings":"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"}
|