@tdesign-react/chat 1.0.2-alpha.6 → 1.0.2-alpha.8

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 (230) hide show
  1. package/es/_util/reactify.d.ts +2 -1
  2. package/es/_util/reactify.js +231 -81
  3. package/es/_util/reactify.js.map +1 -1
  4. package/es/_util/useDynamicStyle.js +1 -1
  5. package/es/attachments/index.js +6 -4
  6. package/es/attachments/index.js.map +1 -1
  7. package/es/chat-actionbar/index.js +6 -4
  8. package/es/chat-actionbar/index.js.map +1 -1
  9. package/es/chat-attachments/index.js +1 -3
  10. package/es/chat-attachments/index.js.map +1 -1
  11. package/es/chat-engine/components/provider/agent-state.js +2 -6
  12. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  13. package/es/chat-engine/components/toolcall/index.js +2 -7
  14. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  15. package/es/chat-engine/components/toolcall/registry.js +1 -1
  16. package/es/chat-engine/components/toolcall/render.d.ts +1 -1
  17. package/es/chat-engine/components/toolcall/render.js +24 -68
  18. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  19. package/es/chat-engine/components/toolcall/types.js +1 -1
  20. package/es/chat-engine/hooks/useAgentState.js +2 -6
  21. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  22. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  23. package/es/chat-engine/hooks/useChat.d.ts +2 -2
  24. package/es/chat-engine/hooks/useChat.js +3 -37
  25. package/es/chat-engine/hooks/useChat.js.map +1 -1
  26. package/es/chat-engine/index.d.ts +1 -3
  27. package/es/chat-engine/index.js +3 -36
  28. package/es/chat-engine/index.js.map +1 -1
  29. package/es/chat-filecard/index.js +6 -4
  30. package/es/chat-filecard/index.js.map +1 -1
  31. package/es/chat-loading/index.js +6 -4
  32. package/es/chat-loading/index.js.map +1 -1
  33. package/es/chat-markdown/index.js +6 -4
  34. package/es/chat-markdown/index.js.map +1 -1
  35. package/es/chat-message/index.js +6 -4
  36. package/es/chat-message/index.js.map +1 -1
  37. package/es/chat-sender/index.js +6 -4
  38. package/es/chat-sender/index.js.map +1 -1
  39. package/es/chat-thinking/index.js +6 -4
  40. package/es/chat-thinking/index.js.map +1 -1
  41. package/es/chatbot/components/provider/agent-state.d.ts +5 -0
  42. package/es/chatbot/components/provider/agent-state.js +28 -0
  43. package/es/chatbot/components/provider/agent-state.js.map +1 -0
  44. package/es/{chat-engine/components/activity → chatbot/components/toolcall}/index.d.ts +0 -1
  45. package/es/chatbot/components/toolcall/index.js +19 -0
  46. package/es/{chat-engine/components/activity → chatbot/components/toolcall}/index.js.map +1 -1
  47. package/es/chatbot/components/toolcall/registry.d.ts +35 -0
  48. package/es/{chat-engine/components/activity → chatbot/components/toolcall}/registry.js +22 -32
  49. package/es/chatbot/components/toolcall/registry.js.map +1 -0
  50. package/es/chatbot/components/toolcall/render.d.ts +13 -0
  51. package/es/chatbot/components/toolcall/render.js +207 -0
  52. package/es/chatbot/components/toolcall/render.js.map +1 -0
  53. package/es/chatbot/components/toolcall/types.d.ts +57 -0
  54. package/es/chatbot/components/toolcall/types.js +15 -0
  55. package/es/chatbot/components/toolcall/types.js.map +1 -0
  56. package/es/chatbot/hooks/useAgentState.d.ts +40 -0
  57. package/es/chatbot/hooks/useAgentState.js +76 -0
  58. package/es/chatbot/hooks/useAgentState.js.map +1 -0
  59. package/es/chatbot/hooks/useAgentToolcall.d.ts +28 -0
  60. package/es/chatbot/hooks/useAgentToolcall.js +78 -0
  61. package/es/chatbot/hooks/useAgentToolcall.js.map +1 -0
  62. package/es/chatbot/hooks/useChat.d.ts +11 -0
  63. package/es/chatbot/hooks/useChat.js +66 -0
  64. package/es/chatbot/hooks/useChat.js.map +1 -0
  65. package/es/chatbot/index.js +6 -4
  66. package/es/chatbot/index.js.map +1 -1
  67. package/es/index.js +9 -36
  68. package/es/index.js.map +1 -1
  69. package/es/style/index.js +1 -1
  70. package/package.json +2 -2
  71. package/es/chat-actionbar/_example-js/base.d.ts +0 -2
  72. package/es/chat-actionbar/_example-js/custom.d.ts +0 -2
  73. package/es/chat-actionbar/_example-js/style.d.ts +0 -2
  74. package/es/chat-attachments/_example-js/base.d.ts +0 -2
  75. package/es/chat-attachments/_example-js/scroll-x.d.ts +0 -2
  76. package/es/chat-attachments/_example-js/scroll-y.d.ts +0 -2
  77. package/es/chat-engine/_example-js/agui-basic.d.ts +0 -10
  78. package/es/chat-engine/_example-js/agui-comprehensive.d.ts +0 -2
  79. package/es/chat-engine/_example-js/agui-test.d.ts +0 -11
  80. package/es/chat-engine/_example-js/agui-toolcall.d.ts +0 -5
  81. package/es/chat-engine/_example-js/agui-videoclip.d.ts +0 -8
  82. package/es/chat-engine/_example-js/agui.d.ts +0 -1
  83. package/es/chat-engine/_example-js/basic.d.ts +0 -9
  84. package/es/chat-engine/_example-js/components/HotelCard.d.ts +0 -3
  85. package/es/chat-engine/_example-js/components/HumanInputForm.d.ts +0 -6
  86. package/es/chat-engine/_example-js/components/HumanInputResult.d.ts +0 -3
  87. package/es/chat-engine/_example-js/components/ItineraryCard.d.ts +0 -3
  88. package/es/chat-engine/_example-js/components/PlanningStatePanel.d.ts +0 -4
  89. package/es/chat-engine/_example-js/components/Toolcall.d.ts +0 -4
  90. package/es/chat-engine/_example-js/components/WeatherCard.d.ts +0 -3
  91. package/es/chat-engine/_example-js/components/login.d.ts +0 -1
  92. package/es/chat-engine/_example-js/comprehensive.d.ts +0 -12
  93. package/es/chat-engine/_example-js/custom-content.d.ts +0 -1
  94. package/es/chat-engine/_example-js/hookComponent.d.ts +0 -1
  95. package/es/chat-engine/_example-js/initial-messages.d.ts +0 -9
  96. package/es/chat-engine/_example-js/instance-methods.d.ts +0 -13
  97. package/es/chat-engine/_example-js/travel-actions.d.ts +0 -91
  98. package/es/chat-engine/_example-js/travelToolcall.d.ts +0 -1
  99. package/es/chat-engine/components/activity/index.js +0 -18
  100. package/es/chat-engine/components/activity/registry.d.ts +0 -44
  101. package/es/chat-engine/components/activity/registry.js.map +0 -1
  102. package/es/chat-engine/components/activity/render.d.ts +0 -11
  103. package/es/chat-engine/components/activity/render.js +0 -107
  104. package/es/chat-engine/components/activity/render.js.map +0 -1
  105. package/es/chat-engine/components/activity/types.d.ts +0 -32
  106. package/es/chat-engine/components/activity/types.js +0 -7
  107. package/es/chat-engine/components/activity/types.js.map +0 -1
  108. package/es/chat-engine/components/index.d.ts +0 -3
  109. package/es/chat-engine/components/index.js +0 -30
  110. package/es/chat-engine/components/index.js.map +0 -1
  111. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +0 -109
  112. package/es/chat-engine/core/adapters/agui/event-mapper.js +0 -370
  113. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +0 -1
  114. package/es/chat-engine/core/adapters/agui/events.d.ts +0 -1550
  115. package/es/chat-engine/core/adapters/agui/events.js +0 -199
  116. package/es/chat-engine/core/adapters/agui/events.js.map +0 -1
  117. package/es/chat-engine/core/adapters/agui/index.d.ts +0 -75
  118. package/es/chat-engine/core/adapters/agui/index.js +0 -175
  119. package/es/chat-engine/core/adapters/agui/index.js.map +0 -1
  120. package/es/chat-engine/core/adapters/agui/state-manager.d.ts +0 -99
  121. package/es/chat-engine/core/adapters/agui/state-manager.js +0 -168
  122. package/es/chat-engine/core/adapters/agui/state-manager.js.map +0 -1
  123. package/es/chat-engine/core/adapters/agui/types.d.ts +0 -817
  124. package/es/chat-engine/core/adapters/agui/types.js +0 -95
  125. package/es/chat-engine/core/adapters/agui/types.js.map +0 -1
  126. package/es/chat-engine/core/adapters/agui/utils.d.ts +0 -197
  127. package/es/chat-engine/core/adapters/agui/utils.js +0 -311
  128. package/es/chat-engine/core/adapters/agui/utils.js.map +0 -1
  129. package/es/chat-engine/core/index.d.ts +0 -132
  130. package/es/chat-engine/core/index.js +0 -597
  131. package/es/chat-engine/core/index.js.map +0 -1
  132. package/es/chat-engine/core/processor/index.d.ts +0 -20
  133. package/es/chat-engine/core/processor/index.js +0 -146
  134. package/es/chat-engine/core/processor/index.js.map +0 -1
  135. package/es/chat-engine/core/server/batch-client.d.ts +0 -20
  136. package/es/chat-engine/core/server/batch-client.js +0 -114
  137. package/es/chat-engine/core/server/batch-client.js.map +0 -1
  138. package/es/chat-engine/core/server/connection-manager.d.ts +0 -39
  139. package/es/chat-engine/core/server/connection-manager.js +0 -84
  140. package/es/chat-engine/core/server/connection-manager.js.map +0 -1
  141. package/es/chat-engine/core/server/errors.d.ts +0 -22
  142. package/es/chat-engine/core/server/errors.js +0 -80
  143. package/es/chat-engine/core/server/errors.js.map +0 -1
  144. package/es/chat-engine/core/server/index.d.ts +0 -11
  145. package/es/chat-engine/core/server/index.js +0 -26
  146. package/es/chat-engine/core/server/index.js.map +0 -1
  147. package/es/chat-engine/core/server/llm-service.d.ts +0 -44
  148. package/es/chat-engine/core/server/llm-service.js +0 -198
  149. package/es/chat-engine/core/server/llm-service.js.map +0 -1
  150. package/es/chat-engine/core/server/sse-client.d.ts +0 -77
  151. package/es/chat-engine/core/server/sse-client.js +0 -362
  152. package/es/chat-engine/core/server/sse-client.js.map +0 -1
  153. package/es/chat-engine/core/server/sse-parser.d.ts +0 -49
  154. package/es/chat-engine/core/server/sse-parser.js +0 -116
  155. package/es/chat-engine/core/server/sse-parser.js.map +0 -1
  156. package/es/chat-engine/core/server/types.d.ts +0 -54
  157. package/es/chat-engine/core/server/types.js +0 -28
  158. package/es/chat-engine/core/server/types.js.map +0 -1
  159. package/es/chat-engine/core/store/message.d.ts +0 -27
  160. package/es/chat-engine/core/store/message.js +0 -263
  161. package/es/chat-engine/core/store/message.js.map +0 -1
  162. package/es/chat-engine/core/store/model.d.ts +0 -8
  163. package/es/chat-engine/core/store/model.js +0 -65
  164. package/es/chat-engine/core/store/model.js.map +0 -1
  165. package/es/chat-engine/core/store/reactiveState.d.ts +0 -52
  166. package/es/chat-engine/core/store/reactiveState.js +0 -1359
  167. package/es/chat-engine/core/store/reactiveState.js.map +0 -1
  168. package/es/chat-engine/core/type.d.ts +0 -255
  169. package/es/chat-engine/core/type.js +0 -7
  170. package/es/chat-engine/core/type.js.map +0 -1
  171. package/es/chat-engine/core/utils/eventEmitter.d.ts +0 -10
  172. package/es/chat-engine/core/utils/eventEmitter.js +0 -67
  173. package/es/chat-engine/core/utils/eventEmitter.js.map +0 -1
  174. package/es/chat-engine/core/utils/index.d.ts +0 -33
  175. package/es/chat-engine/core/utils/index.js +0 -999
  176. package/es/chat-engine/core/utils/index.js.map +0 -1
  177. package/es/chat-engine/core/utils/logger.d.ts +0 -30
  178. package/es/chat-engine/core/utils/logger.js +0 -87
  179. package/es/chat-engine/core/utils/logger.js.map +0 -1
  180. package/es/chat-engine/hooks/index.d.ts +0 -4
  181. package/es/chat-engine/hooks/index.js +0 -50
  182. package/es/chat-engine/hooks/index.js.map +0 -1
  183. package/es/chat-engine/hooks/useAgentActivity.d.ts +0 -16
  184. package/es/chat-engine/hooks/useAgentActivity.js +0 -73
  185. package/es/chat-engine/hooks/useAgentActivity.js.map +0 -1
  186. package/es/chat-filecard/_example-js/base.d.ts +0 -1
  187. package/es/chat-loading/_example-js/base.d.ts +0 -2
  188. package/es/chat-loading/_example-js/text.d.ts +0 -2
  189. package/es/chat-markdown/_example-js/base.d.ts +0 -1
  190. package/es/chat-markdown/_example-js/custom.d.ts +0 -2
  191. package/es/chat-markdown/_example-js/event.d.ts +0 -1
  192. package/es/chat-markdown/_example-js/footnote.d.ts +0 -2
  193. package/es/chat-markdown/_example-js/plugin.d.ts +0 -2
  194. package/es/chat-markdown/_example-js/theme.d.ts +0 -2
  195. package/es/chat-message/_example-js/action.d.ts +0 -1
  196. package/es/chat-message/_example-js/base.d.ts +0 -1
  197. package/es/chat-message/_example-js/configure.d.ts +0 -1
  198. package/es/chat-message/_example-js/content.d.ts +0 -1
  199. package/es/chat-message/_example-js/custom.d.ts +0 -1
  200. package/es/chat-message/_example-js/handle-actions.d.ts +0 -7
  201. package/es/chat-message/_example-js/status.d.ts +0 -1
  202. package/es/chat-message/_example-js/think.d.ts +0 -1
  203. package/es/chat-sender/_example-js/attachment.d.ts +0 -2
  204. package/es/chat-sender/_example-js/base.d.ts +0 -2
  205. package/es/chat-sender/_example-js/custom.d.ts +0 -2
  206. package/es/chat-thinking/_example-js/base.d.ts +0 -1
  207. package/es/chat-thinking/_example-js/style.d.ts +0 -1
  208. package/es/chatbot/_example-js/agent.d.ts +0 -1
  209. package/es/chatbot/_example-js/agui.d.ts +0 -13
  210. package/es/chatbot/_example-js/backup/travel.d.ts +0 -1
  211. package/es/chatbot/_example-js/basic.d.ts +0 -1
  212. package/es/chatbot/_example-js/code.d.ts +0 -1
  213. package/es/chatbot/_example-js/components/ItineraryCard.d.ts +0 -3
  214. package/es/chatbot/_example-js/components/login.d.ts +0 -1
  215. package/es/chatbot/_example-js/comprehensive.d.ts +0 -1
  216. package/es/chatbot/_example-js/custom-content.d.ts +0 -1
  217. package/es/chatbot/_example-js/custom-merge.d.ts +0 -1
  218. package/es/chatbot/_example-js/custom.d.ts +0 -1
  219. package/es/chatbot/_example-js/docs.d.ts +0 -1
  220. package/es/chatbot/_example-js/image.d.ts +0 -1
  221. package/es/chatbot/_example-js/initial-messages.d.ts +0 -9
  222. package/es/chatbot/_example-js/instance-methods.d.ts +0 -14
  223. package/es/chatbot/_example-js/nostream.d.ts +0 -1
  224. package/es/chatbot/_example-js/quick-start.d.ts +0 -9
  225. package/es/chatbot/_example-js/research.d.ts +0 -1
  226. package/es/chatbot/_example-js/role-message-config.d.ts +0 -22
  227. package/es/chatbot/_example-js/sender-config.d.ts +0 -20
  228. package/es/chatbot/_example-js/service-config.d.ts +0 -17
  229. package/es/chatbot/_example-js/simple.d.ts +0 -1
  230. package/es/chatbot/_example-js/utils/messageRenderer.d.ts +0 -5
@@ -1,362 +0,0 @@
1
- /**
2
- * tdesign v1.0.2-alpha.6
3
- * (c) 2026 tdesign
4
- * @license MIT
5
- */
6
-
7
- import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
8
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
- import _createClass from '@babel/runtime/helpers/createClass';
10
- import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
11
- import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
12
- import _inherits from '@babel/runtime/helpers/inherits';
13
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
14
- import _regeneratorRuntime from '@babel/runtime/regenerator';
15
- import SimpleEventEmitter from '../utils/eventEmitter.js';
16
- import { LoggerManager } from '../utils/logger.js';
17
- import { ConnectionManager } from './connection-manager.js';
18
- import { ConnectionError, TimeoutError } from './errors.js';
19
- import { SSEParser } from './sse-parser.js';
20
- import { SSEConnectionState, DEFAULT_SSE_CONFIG } from './types.js';
21
- import '@babel/runtime/helpers/wrapNativeSuper';
22
-
23
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
- function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
26
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
27
- var SSEClient = /*#__PURE__*/function (_EventEmitter) {
28
- function SSEClient(url) {
29
- var _this;
30
- _classCallCheck(this, SSEClient);
31
- _this = _callSuper(this, SSEClient);
32
- _defineProperty(_this, "state", SSEConnectionState.DISCONNECTED);
33
- _defineProperty(_this, "logger", LoggerManager.getLogger());
34
- _defineProperty(_this, "firstTokenReceived", false);
35
- _this.url = url;
36
- _this.connectionId = _this.generateConnectionId();
37
- _this.logger = LoggerManager.getLogger();
38
- _this.connectionManager = new ConnectionManager(_this.connectionId);
39
- _this.parser = new SSEParser();
40
- _this.parser.onMessage = function (event) {
41
- _this.emit("message", event);
42
- };
43
- _this.connectionInfo = {
44
- id: _this.connectionId,
45
- url: url,
46
- state: _this.state,
47
- createdAt: Date.now(),
48
- retryCount: 0,
49
- lastActivity: Date.now(),
50
- stats: {}
51
- };
52
- _this.setupInternalEventHandlers();
53
- return _this;
54
- }
55
- _inherits(SSEClient, _EventEmitter);
56
- return _createClass(SSEClient, [{
57
- key: "connect",
58
- value: function () {
59
- var _connect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(config) {
60
- var _t;
61
- return _regeneratorRuntime.wrap(function (_context) {
62
- while (1) switch (_context.prev = _context.next) {
63
- case 0:
64
- if (!(this.state === SSEConnectionState.CONNECTED || this.state === SSEConnectionState.CONNECTING)) {
65
- _context.next = 1;
66
- break;
67
- }
68
- return _context.abrupt("return");
69
- case 1:
70
- this.config = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_SSE_CONFIG), config), {}, {
71
- headers: _objectSpread(_objectSpread({}, DEFAULT_SSE_CONFIG.headers), config.headers)
72
- });
73
- this.setState(SSEConnectionState.CONNECTING);
74
- this.connectionManager.startConnection();
75
- _context.prev = 2;
76
- this.startTimeoutMonitor();
77
- _context.next = 3;
78
- return this.establishConnection();
79
- case 3:
80
- this.setState(SSEConnectionState.CONNECTED);
81
- this.connectionManager.onConnectionSuccess();
82
- _context.next = 4;
83
- return this.readStream();
84
- case 4:
85
- _context.next = 6;
86
- break;
87
- case 5:
88
- _context.prev = 5;
89
- _t = _context["catch"](2);
90
- this.handleConnectionError(_t);
91
- case 6:
92
- case "end":
93
- return _context.stop();
94
- }
95
- }, _callee, this, [[2, 5]]);
96
- }));
97
- function connect(_x) {
98
- return _connect.apply(this, arguments);
99
- }
100
- return connect;
101
- }()
102
- }, {
103
- key: "abort",
104
- value: function () {
105
- var _abort = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
106
- var _t2;
107
- return _regeneratorRuntime.wrap(function (_context2) {
108
- while (1) switch (_context2.prev = _context2.next) {
109
- case 0:
110
- if (!(this.state === SSEConnectionState.DISCONNECTED || this.state === SSEConnectionState.CLOSING)) {
111
- _context2.next = 1;
112
- break;
113
- }
114
- return _context2.abrupt("return");
115
- case 1:
116
- this.setState(SSEConnectionState.CLOSING);
117
- _context2.prev = 2;
118
- if (!this.reader) {
119
- _context2.next = 4;
120
- break;
121
- }
122
- _context2.next = 3;
123
- return this.reader.cancel();
124
- case 3:
125
- this.reader = void 0;
126
- case 4:
127
- if (this.controller && !this.controller.signal.aborted) {
128
- this.controller.abort();
129
- }
130
- this.connectionManager.cleanup();
131
- this.resetParser();
132
- this.emit("complete", true);
133
- _context2.next = 6;
134
- break;
135
- case 5:
136
- _context2.prev = 5;
137
- _t2 = _context2["catch"](2);
138
- if (_t2.name !== "AbortError") {
139
- this.logger.error("stream abort failed:", _t2);
140
- this.emit("error", _t2);
141
- }
142
- case 6:
143
- _context2.prev = 6;
144
- this.clearTimeouts();
145
- this.controller = null;
146
- this.setState(SSEConnectionState.CLOSED);
147
- return _context2.finish(6);
148
- case 7:
149
- case "end":
150
- return _context2.stop();
151
- }
152
- }, _callee2, this, [[2, 5, 6, 7]]);
153
- }));
154
- function abort() {
155
- return _abort.apply(this, arguments);
156
- }
157
- return abort;
158
- }()
159
- }, {
160
- key: "getStatus",
161
- value: function getStatus() {
162
- return this.state;
163
- }
164
- }, {
165
- key: "getInfo",
166
- value: function getInfo() {
167
- return _objectSpread(_objectSpread({}, this.connectionInfo), this.connectionManager.getConnectionInfo());
168
- }
169
- }, {
170
- key: "establishConnection",
171
- value: function () {
172
- var _establishConnection = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
173
- var response, _t3;
174
- return _regeneratorRuntime.wrap(function (_context3) {
175
- while (1) switch (_context3.prev = _context3.next) {
176
- case 0:
177
- this.controller = new AbortController();
178
- _context3.prev = 1;
179
- _context3.next = 2;
180
- return fetch(this.url, _objectSpread(_objectSpread({}, this.config), {}, {
181
- signal: this.controller.signal,
182
- headers: _objectSpread(_objectSpread({}, this.config.headers), {}, {
183
- Accept: "text/event-stream",
184
- "Cache-Control": "no-cache"
185
- })
186
- }));
187
- case 2:
188
- response = _context3.sent;
189
- if (!(!response.body || !response.ok)) {
190
- _context3.next = 3;
191
- break;
192
- }
193
- this.emit("error", new ConnectionError("HTTP ".concat(response.status, ": ").concat(response.statusText), response.status, response));
194
- return _context3.abrupt("return");
195
- case 3:
196
- this.reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
197
- _context3.next = 5;
198
- break;
199
- case 4:
200
- _context3.prev = 4;
201
- _t3 = _context3["catch"](1);
202
- if (_t3.name !== "AbortError") {
203
- this.logger.error("sse request failed:", _t3);
204
- this.emit("error", _t3);
205
- }
206
- case 5:
207
- case "end":
208
- return _context3.stop();
209
- }
210
- }, _callee3, this, [[1, 4]]);
211
- }));
212
- function establishConnection() {
213
- return _establishConnection.apply(this, arguments);
214
- }
215
- return establishConnection;
216
- }()
217
- }, {
218
- key: "readStream",
219
- value: function () {
220
- var _readStream = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
221
- var _yield$this$reader$re, done, value, _this$controller, _t4;
222
- return _regeneratorRuntime.wrap(function (_context4) {
223
- while (1) switch (_context4.prev = _context4.next) {
224
- case 0:
225
- _context4.prev = 0;
226
- case 1:
227
- if (!(this.state === SSEConnectionState.CONNECTED && this.reader)) {
228
- _context4.next = 4;
229
- break;
230
- }
231
- _context4.next = 2;
232
- return this.reader.read();
233
- case 2:
234
- _yield$this$reader$re = _context4.sent;
235
- done = _yield$this$reader$re.done;
236
- value = _yield$this$reader$re.value;
237
- if (!done) {
238
- _context4.next = 3;
239
- break;
240
- }
241
- this.logger.info("Connection ".concat(this.connectionId, " stream ended normally"));
242
- this.emit("complete", false);
243
- this.setState(SSEConnectionState.DISCONNECTED);
244
- this.clearTimeouts();
245
- return _context4.abrupt("return");
246
- case 3:
247
- this.connectionInfo.lastActivity = Date.now();
248
- this.parseSSEData(value);
249
- _context4.next = 1;
250
- break;
251
- case 4:
252
- _context4.next = 6;
253
- break;
254
- case 5:
255
- _context4.prev = 5;
256
- _t4 = _context4["catch"](0);
257
- if (!((_this$controller = this.controller) !== null && _this$controller !== void 0 && _this$controller.signal.aborted)) {
258
- this.logger.error("Stream reading error for ".concat(this.connectionId, ":"), _t4);
259
- this.handleConnectionError(_t4);
260
- } else {
261
- this.logger.debug("Stream reading stopped for ".concat(this.connectionId, " (aborted)"));
262
- }
263
- case 6:
264
- case "end":
265
- return _context4.stop();
266
- }
267
- }, _callee4, this, [[0, 5]]);
268
- }));
269
- function readStream() {
270
- return _readStream.apply(this, arguments);
271
- }
272
- return readStream;
273
- }()
274
- }, {
275
- key: "startTimeoutMonitor",
276
- value: function startTimeoutMonitor() {
277
- var _this2 = this;
278
- if (!this.config.timeout || this.config.timeout <= 0) return;
279
- var checkInterval = Math.min(this.config.timeout / 2, 5e3);
280
- this.timeoutTimer = setInterval(function () {
281
- var now = Date.now();
282
- var timeSinceLastActivity = now - _this2.connectionInfo.lastActivity;
283
- if (timeSinceLastActivity >= _this2.config.timeout) {
284
- if (_this2.state === SSEConnectionState.CONNECTING) {
285
- _this2.logger.warn("Connection ".concat(_this2.connectionId, " establishment timeout after ").concat(_this2.config.timeout, "ms"));
286
- _this2.emit("error", new TimeoutError("Connection establishment timed out after ".concat(_this2.config.timeout, "ms")));
287
- } else {
288
- _this2.logger.warn("Connection ".concat(_this2.connectionId, " receive timeout after ").concat(_this2.config.timeout, "ms"));
289
- _this2.emit("error", new TimeoutError("No data received for ".concat(_this2.config.timeout, "ms")));
290
- }
291
- _this2.abort();
292
- }
293
- }, checkInterval);
294
- }
295
- }, {
296
- key: "parseSSEData",
297
- value: function parseSSEData(chunk) {
298
- this.parser.parse(chunk);
299
- if (!this.firstTokenReceived) {
300
- this.firstTokenReceived = true;
301
- this.emit("start", chunk);
302
- }
303
- }
304
- }, {
305
- key: "handleConnectionError",
306
- value: function handleConnectionError(error) {
307
- this.connectionInfo.error = error;
308
- this.connectionManager.handleConnectionError(error);
309
- this.setState(SSEConnectionState.ERROR);
310
- this.emit("error", error);
311
- }
312
- }, {
313
- key: "clearTimeouts",
314
- value: function clearTimeouts() {
315
- if (this.timeoutTimer) {
316
- clearInterval(this.timeoutTimer);
317
- this.timeoutTimer = void 0;
318
- }
319
- }
320
- }, {
321
- key: "setState",
322
- value: function setState(newState) {
323
- var oldState = this.state;
324
- this.state = newState;
325
- this.connectionInfo.state = newState;
326
- var stateChangeEvent = {
327
- connectionId: this.connectionId,
328
- from: oldState,
329
- to: newState,
330
- timestamp: Date.now()
331
- };
332
- this.emit("stateChange", stateChangeEvent);
333
- this.logger.debug("Connection ".concat(this.connectionId, " state: ").concat(oldState, " -> ").concat(newState));
334
- }
335
- }, {
336
- key: "resetParser",
337
- value: function resetParser() {
338
- this.parser.reset();
339
- }
340
- }, {
341
- key: "setupInternalEventHandlers",
342
- value: function setupInternalEventHandlers() {
343
- var _this3 = this;
344
- this.on("error", function (error) {
345
- _this3.logger.error("SSE Client ".concat(_this3.connectionId, " error:"), error);
346
- });
347
- this.on("complete", function (isAborted) {
348
- _this3.logger.info("SSE Client ".concat(_this3.connectionId, " completed, aborted: ").concat(isAborted));
349
- });
350
- }
351
- }, {
352
- key: "generateConnectionId",
353
- value: function generateConnectionId() {
354
- var _this$connectionInfo;
355
- var timestamp = ((_this$connectionInfo = this.connectionInfo) === null || _this$connectionInfo === void 0 ? void 0 : _this$connectionInfo.createdAt) || Date.now();
356
- return "sse_".concat(timestamp, "_").concat(Math.random().toString(36).substr(2, 9));
357
- }
358
- }]);
359
- }(SimpleEventEmitter);
360
-
361
- export { SSEClient };
362
- //# sourceMappingURL=sse-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-client.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/sse-client.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop, max-classes-per-file */\nimport EventEmitter from '../utils/eventEmitter';\nimport { LoggerManager } from '../utils/logger';\nimport { ConnectionManager } from './connection-manager';\nimport { ConnectionError, TimeoutError } from './errors';\nimport { type SSEEvent, SSEParser } from './sse-parser';\nimport {\n type ConnectionInfo,\n DEFAULT_SSE_CONFIG,\n type SSEClientConfig,\n SSEConnectionState,\n type StateChangeEvent,\n} from './types';\n\n/**\n * SSE Client\n * 采用分层设计,分离了连接管理、状态管理、事件解析等职责\n */\nexport class SSEClient extends EventEmitter {\n public readonly connectionId: string;\n\n private state = SSEConnectionState.DISCONNECTED;\n\n private controller?: AbortController | null;\n\n private reader?: ReadableStreamDefaultReader<string>;\n\n private connectionManager: ConnectionManager;\n\n private parser: SSEParser;\n\n private timeoutTimer?: ReturnType<typeof setInterval>; // 统一超时定时器\n\n private config: SSEClientConfig;\n\n private logger = LoggerManager.getLogger();\n\n private url: string;\n\n private connectionInfo: ConnectionInfo;\n\n private firstTokenReceived = false;\n\n constructor(url: string) {\n super();\n this.url = url;\n this.connectionId = this.generateConnectionId();\n this.logger = LoggerManager.getLogger();\n this.connectionManager = new ConnectionManager(this.connectionId);\n\n // 初始化 SSE 解析器\n this.parser = new SSEParser();\n this.parser.onMessage = (event: SSEEvent) => {\n this.emit('message', event);\n };\n\n this.connectionInfo = {\n id: this.connectionId,\n url,\n state: this.state,\n createdAt: Date.now(),\n retryCount: 0,\n lastActivity: Date.now(),\n stats: {},\n };\n\n this.setupInternalEventHandlers();\n }\n\n /**\n * 连接 SSE 服务\n */\n async connect(config: SSEClientConfig): Promise<void> {\n if (this.state === SSEConnectionState.CONNECTED || this.state === SSEConnectionState.CONNECTING) {\n return;\n }\n\n this.config = {\n ...DEFAULT_SSE_CONFIG,\n ...config,\n headers: {\n ...DEFAULT_SSE_CONFIG.headers,\n ...config.headers,\n },\n };\n\n this.setState(SSEConnectionState.CONNECTING);\n this.connectionManager.startConnection();\n\n try {\n // 启动统一超时监控\n this.startTimeoutMonitor();\n\n await this.establishConnection();\n this.setState(SSEConnectionState.CONNECTED);\n this.connectionManager.onConnectionSuccess();\n await this.readStream();\n } catch (error) {\n this.handleConnectionError(error as Error);\n }\n }\n\n /**\n * 关闭连接\n */\n async abort(): Promise<void> {\n if (this.state === SSEConnectionState.DISCONNECTED || this.state === SSEConnectionState.CLOSING) {\n return;\n }\n\n this.setState(SSEConnectionState.CLOSING);\n\n try {\n if (this.reader) {\n await this.reader.cancel();\n this.reader = undefined;\n }\n\n if (this.controller && !this.controller.signal.aborted) {\n this.controller.abort();\n }\n\n this.connectionManager.cleanup();\n this.resetParser();\n this.emit('complete', true);\n } catch (error) {\n if (error.name !== 'AbortError') {\n this.logger.error('stream abort failed:', error);\n this.emit('error', error);\n }\n } finally {\n this.clearTimeouts();\n this.controller = null;\n this.setState(SSEConnectionState.CLOSED);\n }\n }\n\n /**\n * 获取连接状态\n */\n getStatus(): SSEConnectionState {\n return this.state;\n }\n\n /**\n * 获取连接信息\n */\n getInfo(): ConnectionInfo {\n return {\n ...this.connectionInfo,\n ...this.connectionManager.getConnectionInfo(),\n };\n }\n\n /**\n * 建立连接\n */\n private async establishConnection(): Promise<void> {\n this.controller = new AbortController();\n\n try {\n const response = await fetch(this.url, {\n ...this.config,\n signal: this.controller.signal,\n headers: {\n ...this.config.headers,\n Accept: 'text/event-stream',\n 'Cache-Control': 'no-cache',\n },\n });\n\n if (!response.body || !response.ok) {\n this.emit(\n 'error',\n new ConnectionError(`HTTP ${response.status}: ${response.statusText}`, response.status, response),\n );\n return;\n }\n this.reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n } catch (error: any) {\n if (error.name !== 'AbortError') {\n this.logger.error('sse request failed:', error);\n this.emit('error', error);\n }\n }\n }\n\n /**\n * 读取流数据\n */\n private async readStream(): Promise<void> {\n try {\n while (this.state === SSEConnectionState.CONNECTED && this.reader) {\n // eslint-disable no-await-in-loop\n const { done, value } = await this.reader.read();\n\n if (done) {\n this.logger.info(`Connection ${this.connectionId} stream ended normally`);\n this.emit('complete', false); // 发出流结束事件\n this.setState(SSEConnectionState.DISCONNECTED);\n this.clearTimeouts();\n return;\n }\n\n // 更新活动时间\n this.connectionInfo.lastActivity = Date.now();\n\n // 直接解析SSE数据\n this.parseSSEData(value);\n }\n } catch (error) {\n if (!this.controller?.signal.aborted) {\n this.logger.error(`Stream reading error for ${this.connectionId}:`, error);\n this.handleConnectionError(error as Error);\n } else {\n this.logger.debug(`Stream reading stopped for ${this.connectionId} (aborted)`);\n }\n }\n }\n\n /**\n * 启动统一超时监控\n */\n private startTimeoutMonitor(): void {\n if (!this.config.timeout || this.config.timeout <= 0) return;\n\n // 检查间隔为超时时间的一半,但不超过5秒\n const checkInterval = Math.min(this.config.timeout / 2, 5000);\n\n this.timeoutTimer = setInterval(() => {\n const now = Date.now();\n const timeSinceLastActivity = now - this.connectionInfo.lastActivity;\n\n if (timeSinceLastActivity >= this.config.timeout!) {\n // 根据当前状态决定超时类型\n if (this.state === SSEConnectionState.CONNECTING) {\n this.logger.warn(`Connection ${this.connectionId} establishment timeout after ${this.config.timeout}ms`);\n this.emit('error', new TimeoutError(`Connection establishment timed out after ${this.config.timeout}ms`));\n } else {\n this.logger.warn(`Connection ${this.connectionId} receive timeout after ${this.config.timeout}ms`);\n this.emit('error', new TimeoutError(`No data received for ${this.config.timeout}ms`));\n }\n\n this.abort(); // 触发连接中断\n }\n }, checkInterval);\n }\n\n /**\n * 解析SSE数据\n */\n private parseSSEData(chunk: string): void {\n // 使用独立的 SSE 解析器处理数据\n this.parser.parse(chunk);\n if (!this.firstTokenReceived) {\n this.firstTokenReceived = true;\n this.emit('start', chunk); // 派发start事件\n }\n }\n\n /**\n * 简化的错误处理\n */\n private handleConnectionError(error: Error) {\n this.connectionInfo.error = error;\n this.connectionManager.handleConnectionError(error);\n this.setState(SSEConnectionState.ERROR);\n this.emit('error', error);\n }\n\n /**\n * 清理超时定时器\n */\n private clearTimeouts(): void {\n if (this.timeoutTimer) {\n clearInterval(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * 设置连接状态\n */\n private setState(newState: SSEConnectionState) {\n const oldState = this.state;\n this.state = newState;\n this.connectionInfo.state = newState;\n\n const stateChangeEvent: StateChangeEvent = {\n connectionId: this.connectionId,\n from: oldState,\n to: newState,\n timestamp: Date.now(),\n };\n\n this.emit('stateChange', stateChangeEvent);\n this.logger.debug(`Connection ${this.connectionId} state: ${oldState} -> ${newState}`);\n }\n\n /**\n * 重置解析器状态\n */\n private resetParser(): void {\n this.parser.reset();\n }\n\n /**\n * 设置内部事件处理器\n */\n private setupInternalEventHandlers(): void {\n this.on('error', (error) => {\n this.logger.error(`SSE Client ${this.connectionId} error:`, error);\n });\n\n this.on('complete', (isAborted) => {\n this.logger.info(`SSE Client ${this.connectionId} completed, aborted: ${isAborted}`);\n });\n }\n\n /**\n * 生成连接ID\n */\n private generateConnectionId(): string {\n // 使用this来访问实例属性,满足linter要求\n const timestamp = this.connectionInfo?.createdAt || Date.now();\n return `sse_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"names":["SSEClient","url","_this","_classCallCheck","_callSuper","_defineProperty","SSEConnectionState","DISCONNECTED","LoggerManager","getLogger","connectionId","generateConnectionId","logger","connectionManager","ConnectionManager","parser","SSEParser","onMessage","event","emit","connectionInfo","id","state","createdAt","Date","now","retryCount","lastActivity","stats","setupInternalEventHandlers","_inherits","_EventEmitter","_createClass","key","value","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","config","_t","wrap","_context","prev","next","CONNECTED","CONNECTING","abrupt","_objectSpread","DEFAULT_SSE_CONFIG","headers","setState","startConnection","startTimeoutMonitor","establishConnection","onConnectionSuccess","readStream","handleConnectionError","stop","connect","_callee2","_t2","_context2","CLOSING","reader","cancel","controller","signal","aborted","abort","cleanup","resetParser","name","error","clearTimeouts","CLOSED","finish","_abort","apply","arguments","getStatus","getInfo","getConnectionInfo","_establishConnection","_callee3","response","_t3","_context3","AbortController","fetch","Accept","sent","body","ok","ConnectionError","status","statusText","pipeThrough","TextDecoderStream","getReader","_readStream","_callee4","_yield$this$reader$re","done","_this$controller","_t4","_context4","read","info","concat","parseSSEData","debug","_this2","timeout","checkInterval","Math","min","timeoutTimer","setInterval","timeSinceLastActivity","warn","TimeoutError","chunk","parse","firstTokenReceived","ERROR","clearInterval","newState","oldState","stateChangeEvent","from","to","timestamp","reset","_this3","on","isAborted","_this$connectionInfo","random","toString","substr","EventEmitter"],"mappings":"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"}
@@ -1,49 +0,0 @@
1
- /**
2
- * SSE 事件接口
3
- */
4
- export interface SSEEvent {
5
- event?: string;
6
- data?: any;
7
- id?: string;
8
- }
9
- /**
10
- * SSE 事件流解析器
11
- */
12
- export declare class SSEParser {
13
- private eventBuffer;
14
- private currentEvent;
15
- private logger;
16
- onMessage?: (msg: SSEEvent) => void;
17
- /**
18
- * 解析SSE数据块
19
- */
20
- parse(chunk: string): void;
21
- /**
22
- * 处理SSE行数据
23
- */
24
- private processSSELine;
25
- /**
26
- * 发送当前事件
27
- */
28
- private emitCurrentEvent;
29
- /**
30
- * 重置解析器状态
31
- */
32
- reset(): void;
33
- /**
34
- * 获取当前缓冲区大小
35
- */
36
- getBufferSize(): number;
37
- /**
38
- * 获取当前事件状态
39
- */
40
- getCurrentEvent(): {
41
- event?: string;
42
- data?: string;
43
- id?: string;
44
- };
45
- /**
46
- * 检查是否有未完成的事件
47
- */
48
- hasIncompleteEvent(): boolean;
49
- }
@@ -1,116 +0,0 @@
1
- /**
2
- * tdesign v1.0.2-alpha.6
3
- * (c) 2026 tdesign
4
- * @license MIT
5
- */
6
-
7
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
8
- import _createClass from '@babel/runtime/helpers/createClass';
9
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
10
- import { LoggerManager } from '../utils/logger.js';
11
-
12
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
- var SSEParser = /*#__PURE__*/function () {
15
- function SSEParser() {
16
- _classCallCheck(this, SSEParser);
17
- _defineProperty(this, "eventBuffer", "");
18
- _defineProperty(this, "currentEvent", {});
19
- _defineProperty(this, "logger", LoggerManager.getLogger());
20
- }
21
- return _createClass(SSEParser, [{
22
- key: "parse",
23
- value: function parse(chunk) {
24
- this.eventBuffer += chunk;
25
- var newlineIndex;
26
- while ((newlineIndex = this.eventBuffer.indexOf("\n")) !== -1) {
27
- var line = this.eventBuffer.slice(0, newlineIndex).replace(/\r$/, "");
28
- this.eventBuffer = this.eventBuffer.slice(newlineIndex + 1);
29
- this.processSSELine(line);
30
- }
31
- }
32
- }, {
33
- key: "processSSELine",
34
- value: function processSSELine(line) {
35
- if (line === "") {
36
- this.emitCurrentEvent();
37
- return;
38
- }
39
- var colonIndex = line.indexOf(":");
40
- if (colonIndex === 0) {
41
- return;
42
- }
43
- var field;
44
- var value;
45
- if (colonIndex === -1) {
46
- field = line.trim();
47
- value = "";
48
- } else {
49
- field = line.slice(0, colonIndex).trim();
50
- value = line.slice(colonIndex + 1).replace(/^ /, "");
51
- }
52
- switch (field) {
53
- case "event":
54
- this.currentEvent.event = value;
55
- break;
56
- case "data":
57
- if (this.currentEvent.data === void 0) {
58
- this.currentEvent.data = value;
59
- } else {
60
- this.currentEvent.data += "\n".concat(value);
61
- }
62
- break;
63
- case "id":
64
- this.currentEvent.id = value;
65
- break;
66
- default:
67
- break;
68
- }
69
- }
70
- }, {
71
- key: "emitCurrentEvent",
72
- value: function emitCurrentEvent() {
73
- if (this.currentEvent.data !== void 0 && this.onMessage) {
74
- try {
75
- var data;
76
- try {
77
- data = JSON.parse(this.currentEvent.data);
78
- } catch (_unused) {
79
- data = this.currentEvent.data;
80
- }
81
- this.onMessage({
82
- event: this.currentEvent.event || "",
83
- data: data
84
- });
85
- } catch (error) {
86
- this.logger.error("Error emitting event:", error);
87
- }
88
- }
89
- this.currentEvent = {};
90
- }
91
- }, {
92
- key: "reset",
93
- value: function reset() {
94
- this.eventBuffer = "";
95
- this.currentEvent = {};
96
- }
97
- }, {
98
- key: "getBufferSize",
99
- value: function getBufferSize() {
100
- return this.eventBuffer.length;
101
- }
102
- }, {
103
- key: "getCurrentEvent",
104
- value: function getCurrentEvent() {
105
- return _objectSpread({}, this.currentEvent);
106
- }
107
- }, {
108
- key: "hasIncompleteEvent",
109
- value: function hasIncompleteEvent() {
110
- return this.currentEvent.data !== void 0;
111
- }
112
- }]);
113
- }();
114
-
115
- export { SSEParser };
116
- //# sourceMappingURL=sse-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-parser.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/sse-parser.ts"],"sourcesContent":["import { LoggerManager } from '../utils/logger';\n\n/**\n * SSE 事件接口\n */\nexport interface SSEEvent {\n event?: string;\n data?: any;\n id?: string;\n}\n\n/**\n * SSE 事件流解析器\n */\nexport class SSEParser {\n private eventBuffer = '';\n\n private currentEvent: { event?: string; data?: string; id?: string } = {};\n\n private logger = LoggerManager.getLogger();\n\n // 事件回调函数\n onMessage?: (msg: SSEEvent) => void;\n\n /**\n * 解析SSE数据块\n */\n parse(chunk: string): void {\n this.eventBuffer += chunk;\n\n // 循环处理,直到缓冲区中再也找不到完整的行\n let newlineIndex;\n // eslint-disable-next-line no-cond-assign\n while ((newlineIndex = this.eventBuffer.indexOf('\\n')) !== -1) {\n // 提取一行(包含 \\r 如果有的话)\n const line = this.eventBuffer.slice(0, newlineIndex).replace(/\\r$/, '');\n\n // 从缓冲区移除已处理的行和换行符\n this.eventBuffer = this.eventBuffer.slice(newlineIndex + 1);\n\n // 处理这一行\n this.processSSELine(line);\n }\n }\n\n /**\n * 处理SSE行数据\n */\n private processSSELine(line: string): void {\n if (line === '') {\n // 空行表示事件结束\n this.emitCurrentEvent();\n return;\n }\n\n const colonIndex = line.indexOf(':');\n if (colonIndex === 0) {\n // 注释行,忽略\n return;\n }\n\n let field: string;\n let value: string;\n\n if (colonIndex === -1) {\n field = line.trim();\n value = '';\n } else {\n field = line.slice(0, colonIndex).trim();\n value = line.slice(colonIndex + 1).replace(/^ /, ''); // 移除开头空格\n }\n\n // 处理SSE字段\n switch (field) {\n case 'event':\n this.currentEvent.event = value;\n break;\n case 'data':\n if (this.currentEvent.data === undefined) {\n this.currentEvent.data = value;\n } else {\n this.currentEvent.data += `\\n${value}`;\n }\n break;\n case 'id':\n this.currentEvent.id = value;\n break;\n default:\n // 忽略其他字段\n break;\n }\n }\n\n /**\n * 发送当前事件\n */\n private emitCurrentEvent(): void {\n if (this.currentEvent.data !== undefined && this.onMessage) {\n try {\n // 尝试解析JSON,失败则保持原始字符串\n let data: any;\n try {\n data = JSON.parse(this.currentEvent.data);\n } catch {\n data = this.currentEvent.data;\n }\n\n this.onMessage({\n event: this.currentEvent.event || '',\n data,\n });\n } catch (error) {\n this.logger.error('Error emitting event:', error);\n }\n }\n\n // 清理当前事件\n this.currentEvent = {};\n }\n\n /**\n * 重置解析器状态\n */\n reset(): void {\n this.eventBuffer = '';\n this.currentEvent = {};\n }\n\n /**\n * 获取当前缓冲区大小\n */\n getBufferSize(): number {\n return this.eventBuffer.length;\n }\n\n /**\n * 获取当前事件状态\n */\n getCurrentEvent(): { event?: string; data?: string; id?: string } {\n return { ...this.currentEvent };\n }\n\n /**\n * 检查是否有未完成的事件\n */\n hasIncompleteEvent(): boolean {\n return this.currentEvent.data !== undefined;\n }\n}\n"],"names":["SSEParser","_classCallCheck","_defineProperty","LoggerManager","getLogger","_createClass","key","value","parse","chunk","eventBuffer","newlineIndex","indexOf","line","slice","replace","processSSELine","emitCurrentEvent","colonIndex","field","trim","currentEvent","event","data","concat","id","onMessage","JSON","_unused","error","logger","reset","getBufferSize","length","getCurrentEvent","_objectSpread","hasIncompleteEvent"],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Enhanced server types for SSE client and LLM service
3
- */
4
- import { ChatRequestParams } from '../type';
5
- export declare enum SSEConnectionState {
6
- DISCONNECTED = "disconnected",
7
- CONNECTING = "connecting",
8
- CONNECTED = "connected",
9
- RECONNECTING = "reconnecting",
10
- CLOSING = "closing",
11
- CLOSED = "closed",
12
- ERROR = "error"
13
- }
14
- export interface SSEClientConfig extends Omit<RequestInit & ChatRequestParams, 'signal'> {
15
- timeout?: number;
16
- }
17
- export interface SSEEvent {
18
- event?: string;
19
- data?: any;
20
- id?: string;
21
- retry?: number;
22
- timestamp?: number;
23
- }
24
- export interface ConnectionInfo {
25
- id: string;
26
- retryCount: number;
27
- lastActivity: number;
28
- state?: SSEConnectionState;
29
- url?: string;
30
- createdAt?: number;
31
- error?: Error;
32
- stats: ConnectionStats;
33
- }
34
- export interface ConnectionStatus {
35
- id: string;
36
- state: SSEConnectionState;
37
- error?: Error;
38
- lastActivity?: number;
39
- }
40
- export interface ConnectionStats {
41
- lastError?: Error;
42
- connectionTime?: number;
43
- }
44
- export interface StateChangeEvent {
45
- connectionId: string;
46
- from: SSEConnectionState;
47
- to: SSEConnectionState;
48
- timestamp: number;
49
- }
50
- export interface HeartbeatEvent {
51
- connectionId: string;
52
- timestamp: number;
53
- }
54
- export declare const DEFAULT_SSE_CONFIG: SSEClientConfig;