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.
Files changed (181) hide show
  1. package/README.md +176 -468
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
  3. package/dist/cjs/api/chat-api/index.js.map +1 -0
  4. package/dist/cjs/api/chat-api/interfaces.js +3 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
  6. package/dist/cjs/api/chat-api/models.js +6 -0
  7. package/dist/cjs/api/chat-api/models.js.map +1 -0
  8. package/dist/cjs/api/chat-api/stream-utils.js +192 -0
  9. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
  10. package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
  11. package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
  12. package/dist/cjs/api/projects-api.js +275 -3
  13. package/dist/cjs/api/projects-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +21 -23
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/constants/websocket-events.constants.js +90 -52
  17. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  18. package/dist/cjs/constants/websocket-namespaces.constants.js +18 -0
  19. package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -0
  20. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +3 -0
  21. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  22. package/dist/cjs/interfaces/websocket/client-options.interfaces.js +3 -0
  23. package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +1 -0
  24. package/dist/cjs/interfaces/websocket/events.interfaces.js +3 -0
  25. package/dist/cjs/interfaces/websocket/events.interfaces.js.map +1 -0
  26. package/dist/cjs/interfaces/websocket/stats.interfaces.js +3 -0
  27. package/dist/cjs/interfaces/websocket/stats.interfaces.js.map +1 -0
  28. package/dist/cjs/utils/code-solver-websocket-client.js +383 -1473
  29. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  30. package/dist/cjs/utils/connection-state-manager.js +133 -0
  31. package/dist/cjs/utils/connection-state-manager.js.map +1 -0
  32. package/dist/cjs/utils/http-client.js +7 -0
  33. package/dist/cjs/utils/http-client.js.map +1 -1
  34. package/dist/cjs/utils/logger.js +106 -0
  35. package/dist/cjs/utils/logger.js.map +1 -0
  36. package/dist/cjs/utils/ping-pong-manager.js +306 -0
  37. package/dist/cjs/utils/ping-pong-manager.js.map +1 -0
  38. package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
  39. package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
  40. package/dist/cjs/utils/session-manager.js +114 -0
  41. package/dist/cjs/utils/session-manager.js.map +1 -0
  42. package/dist/cjs/utils/websocket-client.js +37 -10
  43. package/dist/cjs/utils/websocket-client.js.map +1 -1
  44. package/dist/cjs/ws/base-ws-client.js +286 -0
  45. package/dist/cjs/ws/base-ws-client.js.map +1 -0
  46. package/dist/cjs/ws/dependencies-ws-client.js +11 -0
  47. package/dist/cjs/ws/dependencies-ws-client.js.map +1 -0
  48. package/dist/cjs/ws/diagnostics-service.js +170 -0
  49. package/dist/cjs/ws/diagnostics-service.js.map +1 -0
  50. package/dist/cjs/ws/indexing-ws-client.js +223 -0
  51. package/dist/cjs/ws/indexing-ws-client.js.map +1 -0
  52. package/dist/cjs/ws/notifications-ws-client.js +12 -0
  53. package/dist/cjs/ws/notifications-ws-client.js.map +1 -0
  54. package/dist/cjs/ws/reasoning-ws-client.js +330 -0
  55. package/dist/cjs/ws/reasoning-ws-client.js.map +1 -0
  56. package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
  57. package/dist/esm/api/chat-api/index.js.map +1 -0
  58. package/dist/esm/api/chat-api/interfaces.js +2 -0
  59. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  60. package/dist/esm/api/chat-api/models.js +5 -0
  61. package/dist/esm/api/chat-api/models.js.map +1 -0
  62. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  63. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  64. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  65. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  66. package/dist/esm/api/projects-api.js +275 -3
  67. package/dist/esm/api/projects-api.js.map +1 -1
  68. package/dist/esm/code-solver-sdk.js +13 -15
  69. package/dist/esm/code-solver-sdk.js.map +1 -1
  70. package/dist/esm/constants/websocket-events.constants.js +89 -51
  71. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  72. package/dist/esm/constants/websocket-namespaces.constants.js +15 -0
  73. package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -0
  74. package/dist/esm/interfaces/websocket/callbacks.interfaces.js +2 -0
  75. package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  76. package/dist/esm/interfaces/websocket/client-options.interfaces.js +2 -0
  77. package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +1 -0
  78. package/dist/esm/interfaces/websocket/events.interfaces.js +2 -0
  79. package/dist/esm/interfaces/websocket/events.interfaces.js.map +1 -0
  80. package/dist/esm/interfaces/websocket/stats.interfaces.js +2 -0
  81. package/dist/esm/interfaces/websocket/stats.interfaces.js.map +1 -0
  82. package/dist/esm/utils/code-solver-websocket-client.js +382 -1473
  83. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  84. package/dist/esm/utils/connection-state-manager.js +129 -0
  85. package/dist/esm/utils/connection-state-manager.js.map +1 -0
  86. package/dist/esm/utils/http-client.js +7 -0
  87. package/dist/esm/utils/http-client.js.map +1 -1
  88. package/dist/esm/utils/logger.js +101 -0
  89. package/dist/esm/utils/logger.js.map +1 -0
  90. package/dist/esm/utils/ping-pong-manager.js +302 -0
  91. package/dist/esm/utils/ping-pong-manager.js.map +1 -0
  92. package/dist/esm/utils/reasoning-auth-helper.js +54 -0
  93. package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
  94. package/dist/esm/utils/session-manager.js +109 -0
  95. package/dist/esm/utils/session-manager.js.map +1 -0
  96. package/dist/esm/utils/websocket-client.js +37 -10
  97. package/dist/esm/utils/websocket-client.js.map +1 -1
  98. package/dist/esm/ws/base-ws-client.js +282 -0
  99. package/dist/esm/ws/base-ws-client.js.map +1 -0
  100. package/dist/esm/ws/dependencies-ws-client.js +7 -0
  101. package/dist/esm/ws/dependencies-ws-client.js.map +1 -0
  102. package/dist/esm/ws/diagnostics-service.js +166 -0
  103. package/dist/esm/ws/diagnostics-service.js.map +1 -0
  104. package/dist/esm/ws/indexing-ws-client.js +219 -0
  105. package/dist/esm/ws/indexing-ws-client.js.map +1 -0
  106. package/dist/esm/ws/notifications-ws-client.js +8 -0
  107. package/dist/esm/ws/notifications-ws-client.js.map +1 -0
  108. package/dist/esm/ws/reasoning-ws-client.js +326 -0
  109. package/dist/esm/ws/reasoning-ws-client.js.map +1 -0
  110. package/dist/types/api/chat-api/index.d.ts +81 -0
  111. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  112. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  113. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  114. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
  115. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  116. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  117. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  118. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  119. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  120. package/dist/types/api/projects-api.d.ts +114 -1
  121. package/dist/types/api/projects-api.d.ts.map +1 -1
  122. package/dist/types/code-solver-sdk.d.ts +3 -2
  123. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  124. package/dist/types/constants/websocket-events.constants.d.ts +77 -36
  125. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  126. package/dist/types/constants/websocket-namespaces.constants.d.ts +14 -0
  127. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -0
  128. package/dist/types/interfaces/http-client.d.ts +1 -1
  129. package/dist/types/interfaces/http-client.d.ts.map +1 -1
  130. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +30 -0
  131. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +1 -0
  132. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +51 -0
  133. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +1 -0
  134. package/dist/types/interfaces/websocket/events.interfaces.d.ts +165 -0
  135. package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +1 -0
  136. package/dist/types/interfaces/websocket/stats.interfaces.d.ts +72 -0
  137. package/dist/types/interfaces/websocket/stats.interfaces.d.ts.map +1 -0
  138. package/dist/types/types/index.d.ts +8 -0
  139. package/dist/types/types/index.d.ts.map +1 -1
  140. package/dist/types/utils/code-solver-websocket-client.d.ts +67 -612
  141. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  142. package/dist/types/utils/connection-state-manager.d.ts +94 -0
  143. package/dist/types/utils/connection-state-manager.d.ts.map +1 -0
  144. package/dist/types/utils/http-client.d.ts +5 -0
  145. package/dist/types/utils/http-client.d.ts.map +1 -1
  146. package/dist/types/utils/logger.d.ts +62 -0
  147. package/dist/types/utils/logger.d.ts.map +1 -0
  148. package/dist/types/utils/ping-pong-manager.d.ts +118 -0
  149. package/dist/types/utils/ping-pong-manager.d.ts.map +1 -0
  150. package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
  151. package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
  152. package/dist/types/utils/session-manager.d.ts +98 -0
  153. package/dist/types/utils/session-manager.d.ts.map +1 -0
  154. package/dist/types/utils/websocket-client.d.ts +6 -0
  155. package/dist/types/utils/websocket-client.d.ts.map +1 -1
  156. package/dist/types/ws/base-ws-client.d.ts +119 -0
  157. package/dist/types/ws/base-ws-client.d.ts.map +1 -0
  158. package/dist/types/ws/dependencies-ws-client.d.ts +6 -0
  159. package/dist/types/ws/dependencies-ws-client.d.ts.map +1 -0
  160. package/dist/types/ws/diagnostics-service.d.ts +93 -0
  161. package/dist/types/ws/diagnostics-service.d.ts.map +1 -0
  162. package/dist/types/ws/indexing-ws-client.d.ts +78 -0
  163. package/dist/types/ws/indexing-ws-client.d.ts.map +1 -0
  164. package/dist/types/ws/notifications-ws-client.d.ts +5 -0
  165. package/dist/types/ws/notifications-ws-client.d.ts.map +1 -0
  166. package/dist/types/ws/reasoning-ws-client.d.ts +87 -0
  167. package/dist/types/ws/reasoning-ws-client.d.ts.map +1 -0
  168. package/docs/API_REFERENCE.md +432 -0
  169. package/docs/AUTHENTICATION.md +83 -0
  170. package/docs/ERROR_HANDLING.md +240 -0
  171. package/docs/INTEGRATION_EXAMPLES.md +342 -0
  172. package/docs/PING_PONG.md +212 -0
  173. package/docs/README.md +102 -0
  174. package/docs/WEBSOCKET.md +139 -0
  175. package/docs/advanced/PING_PONG.md +212 -0
  176. package/docs/features/THINKING.md +158 -0
  177. package/docs/indexing/INDEXING.md +231 -0
  178. package/package.json +4 -3
  179. package/dist/cjs/api/chat-api.js.map +0 -1
  180. package/dist/esm/api/chat-api.js.map +0 -1
  181. package/dist/types/api/chat-api.d.ts.map +0 -1
@@ -15,6 +15,9 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
18
21
  var __importStar = (this && this.__importStar) || (function () {
19
22
  var ownKeys = function(o) {
20
23
  ownKeys = Object.getOwnPropertyNames || function (o) {
@@ -34,13 +37,18 @@ var __importStar = (this && this.__importStar) || (function () {
34
37
  })();
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.ChatApi = void 0;
40
+ const websocket_helpers_1 = require("./websocket-helpers");
41
+ const stream_utils_1 = require("./stream-utils");
42
+ // Экспортируем все типы и интерфейсы для внешнего использования
43
+ __exportStar(require("./models"), exports);
44
+ __exportStar(require("./interfaces"), exports);
37
45
  /**
38
46
  * API для работы с чатом
39
47
  */
40
48
  class ChatApi {
41
49
  /**
42
50
  * Создает новый экземпляр API для работы с чатом
43
- * @param {HttpClient} httpClient HTTP клиент
51
+ * @param {IHttpClient} httpClient HTTP клиент
44
52
  */
45
53
  constructor(httpClient) {
46
54
  this.httpClient = httpClient;
@@ -88,8 +96,11 @@ class ChatApi {
88
96
  */
89
97
  async checkAvailability() {
90
98
  try {
91
- // Используем обычный GET запрос с минимальными данными
92
- await this.httpClient.get('/api/v1/chat');
99
+ // Используем HEAD запрос вместо GET, так как эндпоинт поддерживает только HEAD/POST
100
+ await this.httpClient.request({
101
+ method: 'HEAD',
102
+ url: '/api/v1/chat'
103
+ });
93
104
  return true;
94
105
  }
95
106
  catch (error) {
@@ -231,78 +242,21 @@ class ChatApi {
231
242
  for (const line of lines) {
232
243
  if (!line.startsWith('data:'))
233
244
  continue;
234
- const data = line.slice(5).trim();
235
- if (data === '[DONE]') {
245
+ const result = (0, stream_utils_1.processStreamChunk)(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, options?.onToken);
246
+ isInThinkingBlock = result.isInThinkingBlock;
247
+ thinkingContent = result.thinkingContent;
248
+ textContent = result.textContent;
249
+ thinkingSignature = result.thinkingSignature;
250
+ if (result.chunk) {
251
+ yield result.chunk;
252
+ }
253
+ if (result.isDone) {
236
254
  // Поток завершен
237
255
  if (options?.onComplete) {
238
256
  options.onComplete(textContent);
239
257
  }
240
- yield {
241
- text: '',
242
- isComplete: true,
243
- thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
244
- thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
245
- };
246
258
  return;
247
259
  }
248
- try {
249
- const parsedData = JSON.parse(data);
250
- // Обрабатываем различные типы событий
251
- if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
252
- isInThinkingBlock = true;
253
- // Отправляем начало блока thinking
254
- if (options?.onToken) {
255
- options.onToken('[THINKING_START]');
256
- }
257
- yield {
258
- text: '[THINKING_START]',
259
- isComplete: false,
260
- isThinking: true
261
- };
262
- }
263
- else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
264
- isInThinkingBlock = false;
265
- // Отправляем конец блока thinking
266
- if (options?.onToken) {
267
- options.onToken('[THINKING_END]');
268
- }
269
- yield {
270
- text: '[THINKING_END]',
271
- isComplete: false,
272
- isThinking: true
273
- };
274
- }
275
- else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
276
- const text = parsedData.delta?.text || '';
277
- if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
278
- // Добавляем текст к блоку размышлений
279
- thinkingContent += text;
280
- if (options?.onToken) {
281
- options.onToken(text);
282
- }
283
- yield {
284
- text,
285
- isComplete: false,
286
- isThinking: true
287
- };
288
- }
289
- else {
290
- // Добавляем текст к основному содержимому
291
- textContent += text;
292
- if (options?.onToken) {
293
- options.onToken(text);
294
- }
295
- yield {
296
- text,
297
- isComplete: false,
298
- isThinking: false
299
- };
300
- }
301
- }
302
- }
303
- catch (e) {
304
- console.error('Ошибка при парсинге данных:', e);
305
- }
306
260
  }
307
261
  }
308
262
  // Финальный чанк, если поток завершился без [DONE]
@@ -317,10 +271,11 @@ class ChatApi {
317
271
  };
318
272
  }
319
273
  catch (error) {
274
+ const errorObj = (0, stream_utils_1.handleStreamError)(error);
320
275
  if (options?.onError) {
321
- options.onError(error);
276
+ options.onError(errorObj);
322
277
  }
323
- throw error;
278
+ throw errorObj;
324
279
  }
325
280
  }
326
281
  /**
@@ -346,7 +301,7 @@ class ChatApi {
346
301
  * Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
347
302
  * @param {ChatMessage[]} messages Массив сообщений для отправки
348
303
  * @param {ChatStreamOptions} [options] Дополнительные параметры
349
- * @param {(eventType: string, data: any) => void} [onEvent] Обработчик событий WebSocket
304
+ * @param {EventHandler} [onEvent] Обработчик событий WebSocket
350
305
  * @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
351
306
  */
352
307
  async streamChatWithThinking(messages, options = {}, onEvent) {
@@ -354,83 +309,80 @@ class ChatApi {
354
309
  throw new Error('Необходимо предоставить хотя бы одно сообщение');
355
310
  }
356
311
  try {
357
- // 1. Создаем WebSocket соединение, если не указан socketId
358
- const socketIdFromOptions = options.socketId;
359
- let socketId;
360
- if (socketIdFromOptions) {
361
- socketId = socketIdFromOptions;
362
- }
363
- else {
364
- // Создаем новое WebSocket соединение
365
- const connectResponse = await this.connectWebSocket();
366
- socketId = connectResponse.socketId;
367
- // Если есть обработчик событий, подключаемся к WebSocket и настраиваем форвардинг событий
368
- if (onEvent && typeof window !== 'undefined') {
312
+ // 1. Создаем параметры для запроса
313
+ const socketId = `socket_${Date.now()}_${(0, websocket_helpers_1.generateId)(10)}`;
314
+ // Создаем sessionId для отслеживания контекста между запросами
315
+ const sessionId = options.sessionId || `thinking-${Date.now()}`;
316
+ let socket = null;
317
+ // 2. Подключаемся к WebSocket и ждем успешного подключения
318
+ if (onEvent) {
319
+ await new Promise((resolve, reject) => {
369
320
  try {
370
- // Подключаемся к WebSocket серверу, если мы в браузере
371
- // Используем динамический импорт для совместимости с Node.js
372
- const { io } = await Promise.resolve().then(() => __importStar(require('socket.io-client')));
373
- const socket = io(`${connectResponse.protocol}://${new URL(connectResponse.url).host}${connectResponse.namespace}`, {
374
- transports: ['websocket', 'polling'],
321
+ const socketOptions = {
322
+ transports: ['websocket'],
375
323
  reconnection: true,
376
- reconnectionAttempts: 5,
324
+ reconnectionAttempts: 3,
377
325
  reconnectionDelay: 1000,
326
+ timeout: 10000,
378
327
  query: {
379
- socketId
328
+ socketId: socketId,
329
+ token: options.authToken || 'test-token'
380
330
  }
331
+ };
332
+ // Динамически импортируем socket.io-client
333
+ Promise.resolve().then(() => __importStar(require('socket.io-client'))).then((socketIoModule) => {
334
+ const io = socketIoModule.default || socketIoModule.io;
335
+ if (!io) {
336
+ reject(new Error('Не удалось импортировать socket.io-client'));
337
+ return;
338
+ }
339
+ // Создаем соединение с сервером WebSocket
340
+ const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
341
+ socket = io(`${serverUrl}/reasoning`, socketOptions);
342
+ // Устанавливаем обработчики событий
343
+ (0, websocket_helpers_1.setupSocketEventHandlers)(socket, socketId, sessionId, onEvent);
344
+ // Разрешаем промис, продолжаем выполнение
345
+ resolve();
346
+ // Обработчик таймаута соединения
347
+ setTimeout(() => {
348
+ if (socket && !socket.connected) {
349
+ reject(new Error('WebSocket connection timeout'));
350
+ }
351
+ }, 10000);
352
+ }).catch(error => {
353
+ const errorMessage = error instanceof Error ? error.message : String(error);
354
+ reject(new Error(`Ошибка импорта socket.io-client: ${errorMessage}`));
381
355
  });
382
- // Настраиваем обработчики событий
383
- socket.on('connect', () => {
384
- onEvent('connect', { status: 'connected', socketId });
385
- });
386
- socket.on('disconnect', () => {
387
- onEvent('disconnect', { status: 'disconnected', socketId });
388
- });
389
- socket.on('error', (error) => {
390
- onEvent('error', { error, socketId });
391
- });
392
- // Настраиваем обработчики для всех типов событий из документации Anthropic
393
- const eventTypes = [
394
- 'message_start', 'content_block_start', 'thinking_start',
395
- 'text_delta', 'thinking_delta', 'signature_delta', 'input_json_delta',
396
- 'content_block_stop', 'message_delta', 'message_stop',
397
- 'ping', 'tool_use_start', 'unknown_event', 'retry', 'done'
398
- ];
399
- eventTypes.forEach(eventType => {
400
- socket.on(eventType, (data) => {
401
- onEvent(eventType, data);
402
- });
403
- });
404
- // Сохраняем сокет, чтобы не собирался мусор
405
- this._socket = socket;
406
356
  }
407
- catch (socketError) {
408
- console.error('Ошибка при подключении к WebSocket:', socketError);
409
- // Продолжаем выполнение даже при ошибке подключения WebSocket
410
- // Данные все равно будут получены через HTTP ответ
357
+ catch (error) {
358
+ const errorMessage = error instanceof Error ? error.message : String(error);
359
+ reject(new Error(`Ошибка WebSocket: ${errorMessage}`));
411
360
  }
412
- }
361
+ });
413
362
  }
414
- // 2. Отправляем запрос к API для потокового чата с thinking
363
+ // 3. Отправляем HTTP запрос для инициации потока
415
364
  return this.httpClient.post('/api/v1/chat/stream-chat', {
416
365
  model: options.model || 'claude-3-7-sonnet-20240229',
417
366
  messages,
418
367
  temperature: options.temperature,
419
368
  maxTokens: options.maxTokens,
420
369
  socketId: socketId,
370
+ sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
421
371
  thinking: true,
422
372
  region: options.region
423
373
  }, {
424
- 'X-Socket-ID': socketId
374
+ 'X-Socket-ID': socketId,
375
+ 'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
425
376
  });
426
377
  }
427
378
  catch (error) {
379
+ const errorObj = (0, stream_utils_1.handleStreamError)(error);
428
380
  if (options.onError) {
429
- options.onError(error);
381
+ options.onError(errorObj);
430
382
  }
431
- throw error;
383
+ throw errorObj;
432
384
  }
433
385
  }
434
386
  }
435
387
  exports.ChatApi = ChatApi;
436
- //# sourceMappingURL=chat-api.js.map
388
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/chat-api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/api/chat-api/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Модели данных для чат-API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/api/chat-api/models.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processStreamChunk = processStreamChunk;
4
+ exports.handleStreamError = handleStreamError;
5
+ /**
6
+ * Обрабатывает чанк данных из потока SSE
7
+ */
8
+ function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
9
+ // Проверяем формат строки
10
+ if (!line.startsWith('data:')) {
11
+ return {
12
+ isInThinkingBlock,
13
+ thinkingContent,
14
+ textContent,
15
+ thinkingSignature,
16
+ isDone: false
17
+ };
18
+ }
19
+ const data = line.slice(5).trim();
20
+ // Проверяем завершение потока
21
+ if (data === '[DONE]') {
22
+ if (onToken) {
23
+ onToken('');
24
+ }
25
+ return {
26
+ isInThinkingBlock,
27
+ thinkingContent,
28
+ textContent,
29
+ thinkingSignature,
30
+ chunk: {
31
+ text: '',
32
+ isComplete: true,
33
+ thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
34
+ thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
35
+ },
36
+ isDone: true
37
+ };
38
+ }
39
+ try {
40
+ const parsedData = JSON.parse(data);
41
+ // Обрабатываем типы событий по актуальному API Anthropic
42
+ if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
43
+ const newIsInThinkingBlock = true;
44
+ if (onToken) {
45
+ onToken('[THINKING_START]');
46
+ }
47
+ return {
48
+ isInThinkingBlock: newIsInThinkingBlock,
49
+ thinkingContent,
50
+ textContent,
51
+ thinkingSignature,
52
+ chunk: {
53
+ text: '[THINKING_START]',
54
+ isComplete: false,
55
+ isThinking: true
56
+ },
57
+ isDone: false
58
+ };
59
+ }
60
+ else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) {
61
+ const newIsInThinkingBlock = false;
62
+ if (onToken) {
63
+ onToken('[THINKING_END]');
64
+ }
65
+ return {
66
+ isInThinkingBlock: newIsInThinkingBlock,
67
+ thinkingContent,
68
+ textContent,
69
+ thinkingSignature,
70
+ chunk: {
71
+ text: '[THINKING_END]',
72
+ isComplete: false,
73
+ isThinking: true
74
+ },
75
+ isDone: false
76
+ };
77
+ }
78
+ else if (parsedData.type === 'content_block_delta') {
79
+ // Получаем тип дельты из данных события
80
+ const deltaType = parsedData.delta?.type;
81
+ // Обрабатываем дельту в зависимости от типа
82
+ if (deltaType === 'text_delta') {
83
+ const text = parsedData.delta?.text || '';
84
+ const newTextContent = textContent + text;
85
+ if (onToken) {
86
+ onToken(text);
87
+ }
88
+ return {
89
+ isInThinkingBlock,
90
+ thinkingContent,
91
+ textContent: newTextContent,
92
+ thinkingSignature,
93
+ chunk: {
94
+ text,
95
+ isComplete: false,
96
+ isThinking: false
97
+ },
98
+ isDone: false
99
+ };
100
+ }
101
+ else if (deltaType === 'thinking_delta') {
102
+ const thinking = parsedData.delta?.thinking || '';
103
+ const newThinkingContent = thinkingContent + thinking;
104
+ if (onToken) {
105
+ onToken(thinking);
106
+ }
107
+ return {
108
+ isInThinkingBlock: true,
109
+ thinkingContent: newThinkingContent,
110
+ textContent,
111
+ thinkingSignature,
112
+ chunk: {
113
+ text: thinking,
114
+ isComplete: false,
115
+ isThinking: true
116
+ },
117
+ isDone: false
118
+ };
119
+ }
120
+ else if (deltaType === 'signature_delta') {
121
+ const signature = parsedData.delta?.signature || '';
122
+ return {
123
+ isInThinkingBlock,
124
+ thinkingContent,
125
+ textContent,
126
+ thinkingSignature: signature,
127
+ isDone: false
128
+ };
129
+ }
130
+ else if (deltaType === 'input_json_delta') {
131
+ const jsonData = parsedData.delta?.input_json || '';
132
+ if (onToken) {
133
+ onToken(jsonData);
134
+ }
135
+ // Убираем свойство isToolUse, добавляем метаданные
136
+ return {
137
+ isInThinkingBlock,
138
+ thinkingContent,
139
+ textContent,
140
+ thinkingSignature,
141
+ chunk: {
142
+ text: jsonData,
143
+ isComplete: false,
144
+ isThinking: false
145
+ },
146
+ isDone: false
147
+ };
148
+ }
149
+ }
150
+ // Возвращаем без изменений, если тип события не обрабатывается
151
+ return {
152
+ isInThinkingBlock,
153
+ thinkingContent,
154
+ textContent,
155
+ thinkingSignature,
156
+ isDone: false
157
+ };
158
+ }
159
+ catch (e) {
160
+ console.error('Ошибка при парсинге данных:', e);
161
+ return {
162
+ isInThinkingBlock,
163
+ thinkingContent,
164
+ textContent,
165
+ thinkingSignature,
166
+ isDone: false
167
+ };
168
+ }
169
+ }
170
+ /**
171
+ * Обрабатывает ошибку из потока
172
+ */
173
+ function handleStreamError(error) {
174
+ // Проверяем наличие ошибки географических ограничений
175
+ const errorObj = error;
176
+ const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
177
+ errorObj.message &&
178
+ (errorObj.message.includes('ограничен в вашем регионе') ||
179
+ errorObj.message.includes('Request not allowed') ||
180
+ errorObj.message.includes('forbidden'));
181
+ if (isGeoRestriction) {
182
+ console.error('\n==============================================');
183
+ console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
184
+ console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
185
+ console.error('⚠️ Anthropic API доступен только из определенных регионов');
186
+ console.error('==============================================');
187
+ // Обогащаем объект ошибки информацией о географических ограничениях
188
+ errorObj.type = 'geo_restriction';
189
+ }
190
+ return errorObj;
191
+ }
192
+ //# sourceMappingURL=stream-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../../src/api/chat-api/stream-utils.ts"],"names":[],"mappings":"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"}