solver-sdk 1.7.4 → 1.7.6

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 (71) hide show
  1. package/README.md +25 -49
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +32 -192
  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 +211 -0
  13. package/dist/cjs/api/projects-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +10 -15
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/constants/websocket-events.constants.js +77 -52
  17. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  18. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  19. package/dist/esm/api/{chat-api.js → chat-api/index.js} +29 -192
  20. package/dist/esm/api/chat-api/index.js.map +1 -0
  21. package/dist/esm/api/chat-api/interfaces.js +2 -0
  22. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  23. package/dist/esm/api/chat-api/models.js +5 -0
  24. package/dist/esm/api/chat-api/models.js.map +1 -0
  25. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  26. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  27. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  28. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  29. package/dist/esm/api/projects-api.js +211 -0
  30. package/dist/esm/api/projects-api.js.map +1 -1
  31. package/dist/esm/code-solver-sdk.js +8 -13
  32. package/dist/esm/code-solver-sdk.js.map +1 -1
  33. package/dist/esm/constants/websocket-events.constants.js +76 -51
  34. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  35. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  36. package/dist/types/api/chat-api/index.d.ts +81 -0
  37. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  38. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  39. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  40. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +8 -79
  41. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  42. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  43. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  44. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  45. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  46. package/dist/types/api/projects-api.d.ts +76 -0
  47. package/dist/types/api/projects-api.d.ts.map +1 -1
  48. package/dist/types/code-solver-sdk.d.ts +1 -1
  49. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  50. package/dist/types/constants/websocket-events.constants.d.ts +65 -36
  51. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  52. package/dist/types/types/index.d.ts +8 -0
  53. package/dist/types/types/index.d.ts.map +1 -1
  54. package/dist/types/utils/code-solver-websocket-client.d.ts +28 -34
  55. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  56. package/docs/API_REFERENCE.md +432 -0
  57. package/docs/INTEGRATION_EXAMPLES.md +342 -0
  58. package/docs/README.md +78 -53
  59. package/docs/WEBSOCKET.md +191 -400
  60. package/docs/advanced/PING_PONG.md +212 -0
  61. package/docs/features/THINKING.md +158 -0
  62. package/docs/indexing/INDEXING.md +434 -210
  63. package/package.json +2 -2
  64. package/dist/cjs/api/chat-api.js.map +0 -1
  65. package/dist/esm/api/chat-api.js.map +0 -1
  66. package/dist/types/api/chat-api.d.ts.map +0 -1
  67. package/docs/REGIONS.md +0 -140
  68. package/docs/WEBSOCKET_EVENTS.md +0 -183
  69. package/docs/thinking/THINKING_ARCHITECTURE.md +0 -221
  70. package/docs/thinking/streaming-thinking-guide.md +0 -164
  71. package/docs/thinking/thinking-mode.md +0 -366
@@ -1,10 +1,15 @@
1
+ import { generateId, setupSocketEventHandlers } from './websocket-helpers';
2
+ import { handleStreamError, processStreamChunk } from './stream-utils';
3
+ // Экспортируем все типы и интерфейсы для внешнего использования
4
+ export * from './models';
5
+ export * from './interfaces';
1
6
  /**
2
7
  * API для работы с чатом
3
8
  */
4
9
  export class ChatApi {
5
10
  /**
6
11
  * Создает новый экземпляр API для работы с чатом
7
- * @param {HttpClient} httpClient HTTP клиент
12
+ * @param {IHttpClient} httpClient HTTP клиент
8
13
  */
9
14
  constructor(httpClient) {
10
15
  this.httpClient = httpClient;
@@ -198,78 +203,21 @@ export class ChatApi {
198
203
  for (const line of lines) {
199
204
  if (!line.startsWith('data:'))
200
205
  continue;
201
- const data = line.slice(5).trim();
202
- if (data === '[DONE]') {
206
+ const result = processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, options?.onToken);
207
+ isInThinkingBlock = result.isInThinkingBlock;
208
+ thinkingContent = result.thinkingContent;
209
+ textContent = result.textContent;
210
+ thinkingSignature = result.thinkingSignature;
211
+ if (result.chunk) {
212
+ yield result.chunk;
213
+ }
214
+ if (result.isDone) {
203
215
  // Поток завершен
204
216
  if (options?.onComplete) {
205
217
  options.onComplete(textContent);
206
218
  }
207
- yield {
208
- text: '',
209
- isComplete: true,
210
- thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
211
- thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
212
- };
213
219
  return;
214
220
  }
215
- try {
216
- const parsedData = JSON.parse(data);
217
- // Обрабатываем различные типы событий
218
- if (parsedData.type === 'thinking_start' || parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
219
- isInThinkingBlock = true;
220
- // Отправляем начало блока thinking
221
- if (options?.onToken) {
222
- options.onToken('[THINKING_START]');
223
- }
224
- yield {
225
- text: '[THINKING_START]',
226
- isComplete: false,
227
- isThinking: true
228
- };
229
- }
230
- else if (parsedData.type === 'thinking_end' || parsedData.type === 'content_block_stop' && isInThinkingBlock) {
231
- isInThinkingBlock = false;
232
- // Отправляем конец блока thinking
233
- if (options?.onToken) {
234
- options.onToken('[THINKING_END]');
235
- }
236
- yield {
237
- text: '[THINKING_END]',
238
- isComplete: false,
239
- isThinking: true
240
- };
241
- }
242
- else if (parsedData.type === 'content_block_delta' || parsedData.type === 'thinking_delta') {
243
- const text = parsedData.delta?.text || '';
244
- if (isInThinkingBlock || parsedData.type === 'thinking_delta') {
245
- // Добавляем текст к блоку размышлений
246
- thinkingContent += text;
247
- if (options?.onToken) {
248
- options.onToken(text);
249
- }
250
- yield {
251
- text,
252
- isComplete: false,
253
- isThinking: true
254
- };
255
- }
256
- else {
257
- // Добавляем текст к основному содержимому
258
- textContent += text;
259
- if (options?.onToken) {
260
- options.onToken(text);
261
- }
262
- yield {
263
- text,
264
- isComplete: false,
265
- isThinking: false
266
- };
267
- }
268
- }
269
- }
270
- catch (e) {
271
- console.error('Ошибка при парсинге данных:', e);
272
- }
273
221
  }
274
222
  }
275
223
  // Финальный чанк, если поток завершился без [DONE]
@@ -284,22 +232,7 @@ export class ChatApi {
284
232
  };
285
233
  }
286
234
  catch (error) {
287
- // Проверяем наличие ошибки географических ограничений
288
- const errorObj = error;
289
- const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
290
- errorObj.message &&
291
- (errorObj.message.includes('ограничен в вашем регионе') ||
292
- errorObj.message.includes('Request not allowed') ||
293
- errorObj.message.includes('forbidden'));
294
- if (isGeoRestriction) {
295
- console.error('\n==============================================');
296
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
297
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
298
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
299
- console.error('==============================================');
300
- // Обогащаем объект ошибки информацией о географических ограничениях
301
- errorObj.type = 'geo_restriction';
302
- }
235
+ const errorObj = handleStreamError(error);
303
236
  if (options?.onError) {
304
237
  options.onError(errorObj);
305
238
  }
@@ -329,7 +262,7 @@ export class ChatApi {
329
262
  * Отправляет сообщение в чат в потоковом режиме с поддержкой thinking через WebSocket
330
263
  * @param {ChatMessage[]} messages Массив сообщений для отправки
331
264
  * @param {ChatStreamOptions} [options] Дополнительные параметры
332
- * @param {(eventType: string, data: any) => void} [onEvent] Обработчик событий WebSocket
265
+ * @param {EventHandler} [onEvent] Обработчик событий WebSocket
333
266
  * @returns {Promise<ThinkingStreamResponse>} Информация о потоковом запросе
334
267
  */
335
268
  async streamChatWithThinking(messages, options = {}, onEvent) {
@@ -338,7 +271,9 @@ export class ChatApi {
338
271
  }
339
272
  try {
340
273
  // 1. Создаем параметры для запроса
341
- const socketId = `socket_${Date.now()}_${this.generateId(10)}`;
274
+ const socketId = `socket_${Date.now()}_${generateId(10)}`;
275
+ // Создаем sessionId для отслеживания контекста между запросами
276
+ const sessionId = options.sessionId || `thinking-${Date.now()}`;
342
277
  let socket = null;
343
278
  // 2. Подключаемся к WebSocket и ждем успешного подключения
344
279
  if (onEvent) {
@@ -363,84 +298,12 @@ export class ChatApi {
363
298
  return;
364
299
  }
365
300
  // Создаем соединение с сервером WebSocket
366
- const serverUrl = this.httpClient.getBaseURL() || 'http://localhost:3000';
301
+ const serverUrl = this.httpClient.getBaseURL?.() || 'http://localhost:3000';
367
302
  socket = io(`${serverUrl}/reasoning`, socketOptions);
368
303
  // Устанавливаем обработчики событий
369
- socket.on('connect', () => {
370
- console.log(`[SDK] WebSocket подключен: ${socket.id}, задано socketId: ${socketId}`);
371
- // При подключении отправляем событие аутентификации
372
- socket.emit('authenticate', {
373
- socketId: socketId,
374
- token: options.authToken || 'test-token'
375
- });
376
- // Отправляем событие присоединения к комнате с ID
377
- socket.emit('join_room', { roomId: socketId });
378
- // Вызываем обработчик события connect
379
- if (onEvent) {
380
- onEvent('connect', { socketId });
381
- }
382
- // Разрешаем промис, продолжаем выполнение
383
- resolve();
384
- });
385
- // Обработчик сообщений от сервера
386
- socket.on('message', (data) => {
387
- if (onEvent && data && data.type) {
388
- onEvent(data.type, data.data || data);
389
- }
390
- });
391
- // Обработчик ошибок
392
- socket.on('error', (error) => {
393
- console.error('[SDK] WebSocket error:', error);
394
- // Проверяем наличие ошибки географических ограничений
395
- const isGeoRestriction = (error.type === 'geo_restriction' || error.code === 403) &&
396
- error.message &&
397
- (error.message.includes('ограничен в вашем регионе') ||
398
- error.message.includes('Request not allowed'));
399
- if (isGeoRestriction) {
400
- console.error('\n==============================================');
401
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
402
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
403
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
404
- console.error('==============================================');
405
- }
406
- if (onEvent) {
407
- onEvent('error', {
408
- message: error.message || 'Unknown WebSocket error',
409
- code: error.code,
410
- type: isGeoRestriction ? 'geo_restriction' : (error.type || 'websocket_error')
411
- });
412
- }
413
- });
414
- // Обработчик отключения
415
- socket.on('disconnect', (reason) => {
416
- console.log(`[SDK] WebSocket отключен: ${reason}`);
417
- if (onEvent) {
418
- onEvent('disconnect', { reason });
419
- }
420
- });
421
- // Обработчики для событий аутентификации
422
- socket.on('authenticated', (data) => {
423
- console.log('[SDK] Аутентификация успешна', data);
424
- if (onEvent) {
425
- onEvent('authenticated', data);
426
- }
427
- });
428
- socket.on('authentication_error', (data) => {
429
- console.error('[SDK] Ошибка аутентификации:', data);
430
- if (onEvent) {
431
- onEvent('error', { message: 'Ошибка аутентификации: ' + (data.message || 'Unknown error'), code: 'AUTH_ERROR' });
432
- }
433
- reject(new Error('Ошибка аутентификации: ' + (data.message || 'Unknown error')));
434
- });
435
- // Регистрируем обработчики для всех событий потока мышления
436
- ['message_start', 'content_block_start', 'thinking_start', 'thinking_delta',
437
- 'text_delta', 'content_block_stop', 'message_stop', 'done'].forEach(eventType => {
438
- socket.on(eventType, (data) => {
439
- if (onEvent) {
440
- onEvent(eventType, data);
441
- }
442
- });
443
- });
304
+ setupSocketEventHandlers(socket, socketId, sessionId, onEvent);
305
+ // Разрешаем промис, продолжаем выполнение
306
+ resolve();
444
307
  // Обработчик таймаута соединения
445
308
  setTimeout(() => {
446
309
  if (socket && !socket.connected) {
@@ -465,47 +328,21 @@ export class ChatApi {
465
328
  temperature: options.temperature,
466
329
  maxTokens: options.maxTokens,
467
330
  socketId: socketId,
331
+ sessionId: sessionId, // Добавляем sessionId для кэширования блоков мышления
468
332
  thinking: true,
469
333
  region: options.region
470
334
  }, {
471
- 'X-Socket-ID': socketId
335
+ 'X-Socket-ID': socketId,
336
+ 'X-Session-ID': sessionId // Добавляем ID сессии в заголовки
472
337
  });
473
338
  }
474
339
  catch (error) {
475
- // Проверяем наличие ошибки географических ограничений
476
- const errorObj = error;
477
- const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
478
- errorObj.message &&
479
- (errorObj.message.includes('ограничен в вашем регионе') ||
480
- errorObj.message.includes('Request not allowed') ||
481
- errorObj.message.includes('forbidden'));
482
- if (isGeoRestriction) {
483
- console.error('\n==============================================');
484
- console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
485
- console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
486
- console.error('⚠️ Anthropic API доступен только из определенных регионов');
487
- console.error('==============================================');
488
- // Обогащаем объект ошибки информацией о географических ограничениях
489
- errorObj.type = 'geo_restriction';
490
- }
340
+ const errorObj = handleStreamError(error);
491
341
  if (options.onError) {
492
342
  options.onError(errorObj);
493
343
  }
494
344
  throw errorObj;
495
345
  }
496
346
  }
497
- /**
498
- * Генерирует случайный ID указанной длины
499
- * @param {number} length Длина ID
500
- * @returns {string} Сгенерированный ID
501
- */
502
- generateId(length) {
503
- const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
504
- let result = '';
505
- for (let i = 0; i < length; i++) {
506
- result += chars.charAt(Math.floor(Math.random() * chars.length));
507
- }
508
- return result;
509
- }
510
347
  }
511
- //# sourceMappingURL=chat-api.js.map
348
+ //# 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,2 @@
1
+ export {};
2
+ //# 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,5 @@
1
+ /**
2
+ * Модели данных для чат-API
3
+ */
4
+ export {};
5
+ //# 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,188 @@
1
+ /**
2
+ * Обрабатывает чанк данных из потока SSE
3
+ */
4
+ export function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
5
+ // Проверяем формат строки
6
+ if (!line.startsWith('data:')) {
7
+ return {
8
+ isInThinkingBlock,
9
+ thinkingContent,
10
+ textContent,
11
+ thinkingSignature,
12
+ isDone: false
13
+ };
14
+ }
15
+ const data = line.slice(5).trim();
16
+ // Проверяем завершение потока
17
+ if (data === '[DONE]') {
18
+ if (onToken) {
19
+ onToken('');
20
+ }
21
+ return {
22
+ isInThinkingBlock,
23
+ thinkingContent,
24
+ textContent,
25
+ thinkingSignature,
26
+ chunk: {
27
+ text: '',
28
+ isComplete: true,
29
+ thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
30
+ thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
31
+ },
32
+ isDone: true
33
+ };
34
+ }
35
+ try {
36
+ const parsedData = JSON.parse(data);
37
+ // Обрабатываем типы событий по актуальному API Anthropic
38
+ if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
39
+ const newIsInThinkingBlock = true;
40
+ if (onToken) {
41
+ onToken('[THINKING_START]');
42
+ }
43
+ return {
44
+ isInThinkingBlock: newIsInThinkingBlock,
45
+ thinkingContent,
46
+ textContent,
47
+ thinkingSignature,
48
+ chunk: {
49
+ text: '[THINKING_START]',
50
+ isComplete: false,
51
+ isThinking: true
52
+ },
53
+ isDone: false
54
+ };
55
+ }
56
+ else if (parsedData.type === 'content_block_stop' && isInThinkingBlock) {
57
+ const newIsInThinkingBlock = false;
58
+ if (onToken) {
59
+ onToken('[THINKING_END]');
60
+ }
61
+ return {
62
+ isInThinkingBlock: newIsInThinkingBlock,
63
+ thinkingContent,
64
+ textContent,
65
+ thinkingSignature,
66
+ chunk: {
67
+ text: '[THINKING_END]',
68
+ isComplete: false,
69
+ isThinking: true
70
+ },
71
+ isDone: false
72
+ };
73
+ }
74
+ else if (parsedData.type === 'content_block_delta') {
75
+ // Получаем тип дельты из данных события
76
+ const deltaType = parsedData.delta?.type;
77
+ // Обрабатываем дельту в зависимости от типа
78
+ if (deltaType === 'text_delta') {
79
+ const text = parsedData.delta?.text || '';
80
+ const newTextContent = textContent + text;
81
+ if (onToken) {
82
+ onToken(text);
83
+ }
84
+ return {
85
+ isInThinkingBlock,
86
+ thinkingContent,
87
+ textContent: newTextContent,
88
+ thinkingSignature,
89
+ chunk: {
90
+ text,
91
+ isComplete: false,
92
+ isThinking: false
93
+ },
94
+ isDone: false
95
+ };
96
+ }
97
+ else if (deltaType === 'thinking_delta') {
98
+ const thinking = parsedData.delta?.thinking || '';
99
+ const newThinkingContent = thinkingContent + thinking;
100
+ if (onToken) {
101
+ onToken(thinking);
102
+ }
103
+ return {
104
+ isInThinkingBlock: true,
105
+ thinkingContent: newThinkingContent,
106
+ textContent,
107
+ thinkingSignature,
108
+ chunk: {
109
+ text: thinking,
110
+ isComplete: false,
111
+ isThinking: true
112
+ },
113
+ isDone: false
114
+ };
115
+ }
116
+ else if (deltaType === 'signature_delta') {
117
+ const signature = parsedData.delta?.signature || '';
118
+ return {
119
+ isInThinkingBlock,
120
+ thinkingContent,
121
+ textContent,
122
+ thinkingSignature: signature,
123
+ isDone: false
124
+ };
125
+ }
126
+ else if (deltaType === 'input_json_delta') {
127
+ const jsonData = parsedData.delta?.input_json || '';
128
+ if (onToken) {
129
+ onToken(jsonData);
130
+ }
131
+ // Убираем свойство isToolUse, добавляем метаданные
132
+ return {
133
+ isInThinkingBlock,
134
+ thinkingContent,
135
+ textContent,
136
+ thinkingSignature,
137
+ chunk: {
138
+ text: jsonData,
139
+ isComplete: false,
140
+ isThinking: false
141
+ },
142
+ isDone: false
143
+ };
144
+ }
145
+ }
146
+ // Возвращаем без изменений, если тип события не обрабатывается
147
+ return {
148
+ isInThinkingBlock,
149
+ thinkingContent,
150
+ textContent,
151
+ thinkingSignature,
152
+ isDone: false
153
+ };
154
+ }
155
+ catch (e) {
156
+ console.error('Ошибка при парсинге данных:', e);
157
+ return {
158
+ isInThinkingBlock,
159
+ thinkingContent,
160
+ textContent,
161
+ thinkingSignature,
162
+ isDone: false
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Обрабатывает ошибку из потока
168
+ */
169
+ export function handleStreamError(error) {
170
+ // Проверяем наличие ошибки географических ограничений
171
+ const errorObj = error;
172
+ const isGeoRestriction = (errorObj.status === 403 || errorObj.code === 403) &&
173
+ errorObj.message &&
174
+ (errorObj.message.includes('ограничен в вашем регионе') ||
175
+ errorObj.message.includes('Request not allowed') ||
176
+ errorObj.message.includes('forbidden'));
177
+ if (isGeoRestriction) {
178
+ console.error('\n==============================================');
179
+ console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
180
+ console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
181
+ console.error('⚠️ Anthropic API доступен только из определенных регионов');
182
+ console.error('==============================================');
183
+ // Обогащаем объект ошибки информацией о географических ограничениях
184
+ errorObj.type = 'geo_restriction';
185
+ }
186
+ return errorObj;
187
+ }
188
+ //# 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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"}