@tdesign-react/chat 1.0.2-alpha.11 → 1.0.2-alpha.13

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 (209) hide show
  1. package/es/_util/reactify.js +4 -4
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +1 -1
  4. package/es/attachments/index.js +1 -1
  5. package/es/chat-actionbar/index.js +1 -1
  6. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +91 -0
  7. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +236 -0
  8. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
  9. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
  10. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
  11. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
  12. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
  13. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
  14. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
  15. package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
  16. package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
  17. package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
  18. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
  19. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
  20. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
  21. package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
  22. package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
  23. package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
  24. package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
  25. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
  26. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
  27. package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
  28. package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
  29. package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
  30. package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
  31. package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
  32. package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
  33. package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
  34. package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
  35. package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
  36. package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
  37. package/es/chat-engine/components/a2ui/containers/index.js +30 -0
  38. package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
  39. package/es/chat-engine/components/a2ui/index.d.ts +11 -0
  40. package/es/chat-engine/components/a2ui/index.js +60 -0
  41. package/es/chat-engine/components/a2ui/index.js.map +1 -0
  42. package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +31 -0
  43. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +76 -0
  44. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
  45. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
  46. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
  47. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
  48. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
  49. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
  50. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
  51. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
  52. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
  53. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
  54. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
  55. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
  56. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
  57. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
  58. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
  59. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
  60. package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
  61. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
  62. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
  63. package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
  64. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
  65. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
  66. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
  67. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
  68. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
  69. package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
  70. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
  71. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
  72. package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
  73. package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
  74. package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
  75. package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
  76. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
  77. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
  78. package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
  79. package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
  80. package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
  81. package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
  82. package/es/chat-engine/components/a2ui/registry.js +74 -0
  83. package/es/chat-engine/components/a2ui/registry.js.map +1 -0
  84. package/es/chat-engine/components/activity/index.js +1 -1
  85. package/es/chat-engine/components/activity/registry.js +4 -4
  86. package/es/chat-engine/components/activity/registry.js.map +1 -1
  87. package/es/chat-engine/components/activity/render.js +6 -6
  88. package/es/chat-engine/components/activity/render.js.map +1 -1
  89. package/es/chat-engine/components/activity/types.js +1 -1
  90. package/es/chat-engine/components/index.js +4 -1
  91. package/es/chat-engine/components/index.js.map +1 -1
  92. package/es/chat-engine/components/provider/agent-state.js +6 -3
  93. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  94. package/es/chat-engine/components/toolcall/index.js +4 -1
  95. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  96. package/es/chat-engine/components/toolcall/registry.js +4 -4
  97. package/es/chat-engine/components/toolcall/registry.js.map +1 -1
  98. package/es/chat-engine/components/toolcall/render.js +14 -11
  99. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  100. package/es/chat-engine/components/toolcall/types.js +1 -1
  101. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  102. package/es/chat-engine/core/a2ui/index.js +24 -0
  103. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  104. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  105. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  106. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  107. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  108. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  109. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  110. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  111. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  112. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  113. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  114. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  115. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  116. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  117. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  118. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  119. package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
  120. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  121. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  122. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  123. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  124. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  125. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  126. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  127. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  128. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  129. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  130. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  131. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
  132. package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
  133. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  134. package/es/chat-engine/core/adapters/agui/events.js +1 -1
  135. package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
  136. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  137. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  138. package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
  139. package/es/chat-engine/core/adapters/agui/types.js +1 -1
  140. package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
  141. package/es/chat-engine/core/adapters/agui/utils.js +6 -2
  142. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
  143. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  144. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  145. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  146. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  147. package/es/chat-engine/core/event-bus/index.js +13 -0
  148. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  149. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  150. package/es/chat-engine/core/event-bus/types.js +32 -0
  151. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  152. package/es/chat-engine/core/index.d.ts +8 -1
  153. package/es/chat-engine/core/index.js +128 -10
  154. package/es/chat-engine/core/index.js.map +1 -1
  155. package/es/chat-engine/core/processor/index.js +1 -1
  156. package/es/chat-engine/core/server/batch-client.js +1 -1
  157. package/es/chat-engine/core/server/connection-manager.js +1 -1
  158. package/es/chat-engine/core/server/errors.js +1 -1
  159. package/es/chat-engine/core/server/index.js +1 -1
  160. package/es/chat-engine/core/server/llm-service.js +17 -15
  161. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  162. package/es/chat-engine/core/server/sse-client.js +1 -1
  163. package/es/chat-engine/core/server/sse-parser.js +1 -1
  164. package/es/chat-engine/core/server/types.js +1 -1
  165. package/es/chat-engine/core/store/message.js +1 -1
  166. package/es/chat-engine/core/store/model.js +1 -1
  167. package/es/chat-engine/core/store/reactiveState.js +1 -1
  168. package/es/chat-engine/core/type.d.ts +18 -2
  169. package/es/chat-engine/core/type.js +1 -1
  170. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  171. package/es/chat-engine/core/utils/index.js +1 -1
  172. package/es/chat-engine/core/utils/logger.js +1 -1
  173. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  174. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  175. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  176. package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
  177. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  178. package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
  179. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  180. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  181. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  182. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  183. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  184. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  185. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  186. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  187. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  188. package/es/chat-engine/hooks/index.js +4 -1
  189. package/es/chat-engine/hooks/index.js.map +1 -1
  190. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  191. package/es/chat-engine/hooks/useAgentState.js +4 -1
  192. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  193. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  194. package/es/chat-engine/hooks/useChat.js +4 -1
  195. package/es/chat-engine/hooks/useChat.js.map +1 -1
  196. package/es/chat-engine/index.js +4 -1
  197. package/es/chat-engine/index.js.map +1 -1
  198. package/es/chat-filecard/index.js +1 -1
  199. package/es/chat-loading/index.js +1 -1
  200. package/es/chat-markdown/index.js +1 -1
  201. package/es/chat-message/index.js +1 -1
  202. package/es/chat-sender/index.js +1 -1
  203. package/es/chat-thinking/index.js +1 -1
  204. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  205. package/es/chatbot/index.js +1 -1
  206. package/es/index.js +4 -1
  207. package/es/index.js.map +1 -1
  208. package/es/style/index.js +1 -1
  209. package/package.json +2 -2
@@ -0,0 +1,295 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.12
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
8
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
+ import _createClass from '@babel/runtime/helpers/createClass';
10
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
11
+ import { ChatEngineEventType } from './types.js';
12
+ export { ChatEngineEventType } from './types.js';
13
+
14
+ 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; }
15
+ 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; }
16
+ var ChatEventBus = /*#__PURE__*/function () {
17
+ function ChatEventBus() {
18
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
19
+ _classCallCheck(this, ChatEventBus);
20
+ _defineProperty(this, "listeners", /* @__PURE__ */new Map());
21
+ _defineProperty(this, "onceListeners", /* @__PURE__ */new Map());
22
+ _defineProperty(this, "customListeners", /* @__PURE__ */new Map());
23
+ _defineProperty(this, "history", []);
24
+ _defineProperty(this, "destroyed", false);
25
+ this.options = _objectSpread({
26
+ debug: false,
27
+ maxListeners: 100,
28
+ historySize: 0
29
+ }, options);
30
+ }
31
+ return _createClass(ChatEventBus, [{
32
+ key: "on",
33
+ value: function on(event, callback) {
34
+ var _this = this;
35
+ this.checkDestroyed();
36
+ if (!this.listeners.has(event)) {
37
+ this.listeners.set(event, /* @__PURE__ */new Set());
38
+ }
39
+ var listeners = this.listeners.get(event);
40
+ if (listeners.size >= this.options.maxListeners) {
41
+ console.warn("[ChatEventBus] Maximum listeners (".concat(this.options.maxListeners, ") exceeded for event: ").concat(event, ". Consider increasing maxListeners or removing unused listeners."));
42
+ }
43
+ listeners.add(callback);
44
+ if (this.options.debug) {
45
+ console.log("[ChatEventBus] Subscribed to event: ".concat(event, ", total listeners: ").concat(listeners.size));
46
+ }
47
+ return function () {
48
+ return _this.off(event, callback);
49
+ };
50
+ }
51
+ }, {
52
+ key: "once",
53
+ value: function once(event, callback) {
54
+ var _this2 = this;
55
+ this.checkDestroyed();
56
+ if (!this.onceListeners.has(event)) {
57
+ this.onceListeners.set(event, /* @__PURE__ */new Set());
58
+ }
59
+ this.onceListeners.get(event).add(callback);
60
+ if (this.options.debug) {
61
+ console.log("[ChatEventBus] Once subscribed to event: ".concat(event));
62
+ }
63
+ return function () {
64
+ var _this2$onceListeners$;
65
+ return (_this2$onceListeners$ = _this2.onceListeners.get(event)) === null || _this2$onceListeners$ === void 0 ? void 0 : _this2$onceListeners$["delete"](callback);
66
+ };
67
+ }
68
+ }, {
69
+ key: "off",
70
+ value: function off(event, callback) {
71
+ if (callback) {
72
+ var _this$listeners$get, _this$onceListeners$g;
73
+ (_this$listeners$get = this.listeners.get(event)) === null || _this$listeners$get === void 0 || _this$listeners$get["delete"](callback);
74
+ (_this$onceListeners$g = this.onceListeners.get(event)) === null || _this$onceListeners$g === void 0 || _this$onceListeners$g["delete"](callback);
75
+ if (this.options.debug) {
76
+ console.log("[ChatEventBus] Unsubscribed specific callback from event: ".concat(event));
77
+ }
78
+ } else {
79
+ this.listeners["delete"](event);
80
+ this.onceListeners["delete"](event);
81
+ if (this.options.debug) {
82
+ console.log("[ChatEventBus] Unsubscribed all callbacks from event: ".concat(event));
83
+ }
84
+ }
85
+ }
86
+ }, {
87
+ key: "emit",
88
+ value: function emit(event, payload) {
89
+ var _this$listeners$get2;
90
+ if (this.destroyed) return;
91
+ if (this.options.historySize > 0) {
92
+ this.recordHistory(event, payload);
93
+ }
94
+ if (this.options.debug) {
95
+ console.log("[ChatEventBus] Emitting event: ".concat(event), payload);
96
+ }
97
+ (_this$listeners$get2 = this.listeners.get(event)) === null || _this$listeners$get2 === void 0 || _this$listeners$get2.forEach(function (cb) {
98
+ try {
99
+ cb(payload);
100
+ } catch (error) {
101
+ console.error("[ChatEventBus] Error in event handler for ".concat(event, ":"), error);
102
+ }
103
+ });
104
+ var onceSubs = this.onceListeners.get(event);
105
+ if (onceSubs && onceSubs.size > 0) {
106
+ onceSubs.forEach(function (cb) {
107
+ try {
108
+ cb(payload);
109
+ } catch (error) {
110
+ console.error("[ChatEventBus] Error in once handler for ".concat(event, ":"), error);
111
+ }
112
+ });
113
+ onceSubs.clear();
114
+ }
115
+ }
116
+ }, {
117
+ key: "waitFor",
118
+ value: function waitFor(event) {
119
+ var _this3 = this;
120
+ var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3e4;
121
+ this.checkDestroyed();
122
+ return new Promise(function (resolve, reject) {
123
+ var timer = null;
124
+ var handler = function handler(payload) {
125
+ if (timer) {
126
+ clearTimeout(timer);
127
+ }
128
+ resolve(payload);
129
+ };
130
+ if (timeout > 0) {
131
+ timer = setTimeout(function () {
132
+ var _this3$onceListeners$;
133
+ (_this3$onceListeners$ = _this3.onceListeners.get(event)) === null || _this3$onceListeners$ === void 0 || _this3$onceListeners$["delete"](handler);
134
+ reject(new Error("[ChatEventBus] Timeout waiting for event: ".concat(event, " (").concat(timeout, "ms)")));
135
+ }, timeout);
136
+ }
137
+ _this3.once(event, handler);
138
+ });
139
+ }
140
+ }, {
141
+ key: "waitForMatch",
142
+ value: function waitForMatch(event, filter) {
143
+ var _this4 = this;
144
+ var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3e4;
145
+ this.checkDestroyed();
146
+ return new Promise(function (resolve, reject) {
147
+ var timer = null;
148
+ var unsubscribe = null;
149
+ var handler = function handler(payload) {
150
+ try {
151
+ if (filter(payload)) {
152
+ if (timer) {
153
+ clearTimeout(timer);
154
+ }
155
+ if (unsubscribe) {
156
+ unsubscribe();
157
+ }
158
+ resolve(payload);
159
+ }
160
+ } catch (error) {
161
+ console.error("[ChatEventBus] Error in filter for ".concat(event, ":"), error);
162
+ }
163
+ };
164
+ if (timeout > 0) {
165
+ timer = setTimeout(function () {
166
+ if (unsubscribe) {
167
+ unsubscribe();
168
+ }
169
+ reject(new Error("[ChatEventBus] Timeout waiting for matching event: ".concat(event, " (").concat(timeout, "ms)")));
170
+ }, timeout);
171
+ }
172
+ unsubscribe = _this4.on(event, handler);
173
+ });
174
+ }
175
+ }, {
176
+ key: "onCustom",
177
+ value: function onCustom(eventName, callback) {
178
+ var _this5 = this;
179
+ this.checkDestroyed();
180
+ var key = "custom:".concat(eventName);
181
+ if (!this.customListeners.has(key)) {
182
+ this.customListeners.set(key, /* @__PURE__ */new Set());
183
+ }
184
+ this.customListeners.get(key).add(callback);
185
+ if (this.options.debug) {
186
+ console.log("[ChatEventBus] Subscribed to custom event: ".concat(eventName));
187
+ }
188
+ return function () {
189
+ var _this5$customListener;
190
+ return (_this5$customListener = _this5.customListeners.get(key)) === null || _this5$customListener === void 0 ? void 0 : _this5$customListener["delete"](callback);
191
+ };
192
+ }
193
+ }, {
194
+ key: "emitCustom",
195
+ value: function emitCustom(eventName, data) {
196
+ var _this$customListeners;
197
+ if (this.destroyed) return;
198
+ var key = "custom:".concat(eventName);
199
+ if (this.options.historySize > 0) {
200
+ this.recordHistory(ChatEngineEventType.CUSTOM, {
201
+ eventName: eventName,
202
+ data: data
203
+ });
204
+ }
205
+ if (this.options.debug) {
206
+ console.log("[ChatEventBus] Emitting custom event: ".concat(eventName), data);
207
+ }
208
+ (_this$customListeners = this.customListeners.get(key)) === null || _this$customListeners === void 0 || _this$customListeners.forEach(function (cb) {
209
+ try {
210
+ cb(data);
211
+ } catch (error) {
212
+ console.error("[ChatEventBus] Error in custom event handler for ".concat(eventName, ":"), error);
213
+ }
214
+ });
215
+ }
216
+ }, {
217
+ key: "getHistory",
218
+ value: function getHistory() {
219
+ return _toConsumableArray(this.history);
220
+ }
221
+ }, {
222
+ key: "clear",
223
+ value: function clear() {
224
+ this.listeners.clear();
225
+ this.onceListeners.clear();
226
+ this.customListeners.clear();
227
+ this.history = [];
228
+ if (this.options.debug) {
229
+ console.log("[ChatEventBus] All subscriptions cleared");
230
+ }
231
+ }
232
+ }, {
233
+ key: "destroy",
234
+ value: function destroy() {
235
+ this.clear();
236
+ this.destroyed = true;
237
+ if (this.options.debug) {
238
+ console.log("[ChatEventBus] Event bus destroyed");
239
+ }
240
+ }
241
+ }, {
242
+ key: "listenerCount",
243
+ value: function listenerCount(event) {
244
+ var _this$listeners$get3, _this$onceListeners$g2;
245
+ var regular = ((_this$listeners$get3 = this.listeners.get(event)) === null || _this$listeners$get3 === void 0 ? void 0 : _this$listeners$get3.size) || 0;
246
+ var once = ((_this$onceListeners$g2 = this.onceListeners.get(event)) === null || _this$onceListeners$g2 === void 0 ? void 0 : _this$onceListeners$g2.size) || 0;
247
+ return regular + once;
248
+ }
249
+ }, {
250
+ key: "getTotalListenerCount",
251
+ value: function getTotalListenerCount() {
252
+ var total = 0;
253
+ this.listeners.forEach(function (set) {
254
+ total += set.size;
255
+ });
256
+ this.onceListeners.forEach(function (set) {
257
+ total += set.size;
258
+ });
259
+ this.customListeners.forEach(function (set) {
260
+ total += set.size;
261
+ });
262
+ return total;
263
+ }
264
+ }, {
265
+ key: "hasListeners",
266
+ value: function hasListeners(event) {
267
+ return this.listenerCount(event) > 0;
268
+ }
269
+ }, {
270
+ key: "recordHistory",
271
+ value: function recordHistory(event, payload) {
272
+ this.history.push({
273
+ event: event,
274
+ payload: payload,
275
+ timestamp: Date.now()
276
+ });
277
+ while (this.history.length > this.options.historySize) {
278
+ this.history.shift();
279
+ }
280
+ }
281
+ }, {
282
+ key: "checkDestroyed",
283
+ value: function checkDestroyed() {
284
+ if (this.destroyed) {
285
+ throw new Error("[ChatEventBus] Event bus has been destroyed");
286
+ }
287
+ }
288
+ }]);
289
+ }();
290
+ function createEventBus(options) {
291
+ return new ChatEventBus(options);
292
+ }
293
+
294
+ export { ChatEventBus, createEventBus };
295
+ //# sourceMappingURL=ChatEventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChatEventBus.js","sources":["../../../../../pro-components/chat/chat-engine/core/event-bus/ChatEventBus.ts"],"sourcesContent":["/**\n * ChatEngine 事件总线实现\n */\nimport type {\n ChatEngineEventPayloadMap,\n ChatEventBusOptions,\n EventCallback,\n EventFilter,\n EventHistoryItem,\n IChatEventBus,\n UnsubscribeFn,\n} from './types';\nimport { ChatEngineEventType } from './types';\n\n/**\n * ChatEventBus - 聊天引擎事件总线\n *\n * 提供统一的事件发布/订阅机制,支持:\n * - 类型安全的事件订阅和发布\n * - 一次性订阅 (once)\n * - Promise 方式等待事件 (waitFor)\n * - 带过滤条件的等待 (waitForMatch)\n * - 自定义事件支持\n * - 事件历史记录(调试用)\n */\nexport class ChatEventBus implements IChatEventBus {\n private listeners: Map<string, Set<EventCallback>> = new Map();\n\n private onceListeners: Map<string, Set<EventCallback>> = new Map();\n\n private customListeners: Map<string, Set<EventCallback>> = new Map();\n\n private history: EventHistoryItem[] = [];\n\n private options: Required<ChatEventBusOptions>;\n\n private destroyed = false;\n\n constructor(options: ChatEventBusOptions = {}) {\n this.options = {\n debug: false,\n maxListeners: 100,\n historySize: 0,\n ...options,\n };\n }\n\n /**\n * 订阅事件\n */\n on<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn {\n this.checkDestroyed();\n\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n\n const listeners = this.listeners.get(event)!;\n\n // 检查监听器数量限制\n if (listeners.size >= this.options.maxListeners) {\n console.warn(\n `[ChatEventBus] Maximum listeners (${this.options.maxListeners}) exceeded for event: ${event}. ` +\n 'Consider increasing maxListeners or removing unused listeners.',\n );\n }\n\n listeners.add(callback as EventCallback);\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Subscribed to event: ${event}, total listeners: ${listeners.size}`);\n }\n\n return () => this.off(event, callback);\n }\n\n /**\n * 一次性订阅\n */\n once<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn {\n this.checkDestroyed();\n\n if (!this.onceListeners.has(event)) {\n this.onceListeners.set(event, new Set());\n }\n\n this.onceListeners.get(event)!.add(callback as EventCallback);\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Once subscribed to event: ${event}`);\n }\n\n return () => this.onceListeners.get(event)?.delete(callback as EventCallback);\n }\n\n /**\n * 取消订阅\n */\n off<E extends ChatEngineEventType>(event: E, callback?: EventCallback<ChatEngineEventPayloadMap[E]>): void {\n if (callback) {\n this.listeners.get(event)?.delete(callback as EventCallback);\n this.onceListeners.get(event)?.delete(callback as EventCallback);\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Unsubscribed specific callback from event: ${event}`);\n }\n } else {\n this.listeners.delete(event);\n this.onceListeners.delete(event);\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Unsubscribed all callbacks from event: ${event}`);\n }\n }\n }\n\n /**\n * 发布事件\n */\n emit<E extends ChatEngineEventType>(event: E, payload: ChatEngineEventPayloadMap[E]): void {\n if (this.destroyed) return;\n\n // 记录历史\n if (this.options.historySize > 0) {\n this.recordHistory(event, payload);\n }\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Emitting event: ${event}`, payload);\n }\n\n // 通知常规订阅者\n this.listeners.get(event)?.forEach((cb) => {\n try {\n cb(payload);\n } catch (error) {\n console.error(`[ChatEventBus] Error in event handler for ${event}:`, error);\n }\n });\n\n // 通知一次性订阅者并清理\n const onceSubs = this.onceListeners.get(event);\n if (onceSubs && onceSubs.size > 0) {\n onceSubs.forEach((cb) => {\n try {\n cb(payload);\n } catch (error) {\n console.error(`[ChatEventBus] Error in once handler for ${event}:`, error);\n }\n });\n onceSubs.clear();\n }\n }\n\n /**\n * 等待事件(Promise 方式)\n */\n waitFor<E extends ChatEngineEventType>(event: E, timeout = 30000): Promise<ChatEngineEventPayloadMap[E]> {\n this.checkDestroyed();\n\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const handler = (payload: ChatEngineEventPayloadMap[E]) => {\n if (timer) {\n clearTimeout(timer);\n }\n resolve(payload);\n };\n\n if (timeout > 0) {\n timer = setTimeout(() => {\n this.onceListeners.get(event)?.delete(handler as EventCallback);\n reject(new Error(`[ChatEventBus] Timeout waiting for event: ${event} (${timeout}ms)`));\n }, timeout);\n }\n\n this.once(event, handler);\n });\n }\n\n /**\n * 带过滤条件的等待\n */\n waitForMatch<E extends ChatEngineEventType>(\n event: E,\n filter: EventFilter<ChatEngineEventPayloadMap[E]>,\n timeout = 30000,\n ): Promise<ChatEngineEventPayloadMap[E]> {\n this.checkDestroyed();\n\n return new Promise((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n let unsubscribe: UnsubscribeFn | null = null;\n\n const handler = (payload: ChatEngineEventPayloadMap[E]) => {\n try {\n if (filter(payload)) {\n if (timer) {\n clearTimeout(timer);\n }\n if (unsubscribe) {\n unsubscribe();\n }\n resolve(payload);\n }\n } catch (error) {\n console.error(`[ChatEventBus] Error in filter for ${event}:`, error);\n }\n };\n\n if (timeout > 0) {\n timer = setTimeout(() => {\n if (unsubscribe) {\n unsubscribe();\n }\n reject(new Error(`[ChatEventBus] Timeout waiting for matching event: ${event} (${timeout}ms)`));\n }, timeout);\n }\n\n unsubscribe = this.on(event, handler);\n });\n }\n\n /**\n * 订阅自定义事件\n */\n onCustom<T = unknown>(eventName: string, callback: EventCallback<T>): UnsubscribeFn {\n this.checkDestroyed();\n\n const key = `custom:${eventName}`;\n if (!this.customListeners.has(key)) {\n this.customListeners.set(key, new Set());\n }\n\n this.customListeners.get(key)!.add(callback as EventCallback);\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Subscribed to custom event: ${eventName}`);\n }\n\n return () => this.customListeners.get(key)?.delete(callback as EventCallback);\n }\n\n /**\n * 发布自定义事件\n */\n emitCustom<T = unknown>(eventName: string, data: T): void {\n if (this.destroyed) return;\n\n const key = `custom:${eventName}`;\n\n // 记录历史\n if (this.options.historySize > 0) {\n this.recordHistory(ChatEngineEventType.CUSTOM, { eventName, data });\n }\n\n if (this.options.debug) {\n console.log(`[ChatEventBus] Emitting custom event: ${eventName}`, data);\n }\n\n this.customListeners.get(key)?.forEach((cb) => {\n try {\n cb(data);\n } catch (error) {\n console.error(`[ChatEventBus] Error in custom event handler for ${eventName}:`, error);\n }\n });\n }\n\n /**\n * 获取事件历史记录\n */\n getHistory(): EventHistoryItem[] {\n return [...this.history];\n }\n\n /**\n * 清理所有订阅\n */\n clear(): void {\n this.listeners.clear();\n this.onceListeners.clear();\n this.customListeners.clear();\n this.history = [];\n\n if (this.options.debug) {\n console.log('[ChatEventBus] All subscriptions cleared');\n }\n }\n\n /**\n * 销毁事件总线\n */\n destroy(): void {\n this.clear();\n this.destroyed = true;\n\n if (this.options.debug) {\n console.log('[ChatEventBus] Event bus destroyed');\n }\n }\n\n /**\n * 获取指定事件的监听器数量\n */\n listenerCount(event: ChatEngineEventType): number {\n const regular = this.listeners.get(event)?.size || 0;\n const once = this.onceListeners.get(event)?.size || 0;\n return regular + once;\n }\n\n /**\n * 获取所有事件的监听器数量\n */\n getTotalListenerCount(): number {\n let total = 0;\n this.listeners.forEach((set) => {\n total += set.size;\n });\n this.onceListeners.forEach((set) => {\n total += set.size;\n });\n this.customListeners.forEach((set) => {\n total += set.size;\n });\n return total;\n }\n\n /**\n * 检查是否有指定事件的监听器\n */\n hasListeners(event: ChatEngineEventType): boolean {\n return this.listenerCount(event) > 0;\n }\n\n private recordHistory(event: ChatEngineEventType | string, payload: unknown): void {\n this.history.push({\n event,\n payload,\n timestamp: Date.now(),\n });\n\n // 保持历史记录在限制范围内\n while (this.history.length > this.options.historySize) {\n this.history.shift();\n }\n }\n\n private checkDestroyed(): void {\n if (this.destroyed) {\n throw new Error('[ChatEventBus] Event bus has been destroyed');\n }\n }\n}\n\n/**\n * 创建事件总线实例\n */\nexport function createEventBus(options?: ChatEventBusOptions): IChatEventBus {\n return new ChatEventBus(options);\n}\n\nexport { ChatEngineEventType };\n"],"names":["ChatEventBus","options","arguments","length","undefined","_classCallCheck","_defineProperty","Map","_objectSpread","debug","maxListeners","historySize","_createClass","key","value","on","event","callback","_this","checkDestroyed","listeners","has","set","Set","get","size","console","warn","concat","add","log","off","once","_this2","onceListeners","_this2$onceListeners$","_this$listeners$get","_this$onceListeners$g","emit","payload","_this$listeners$get2","destroyed","recordHistory","forEach","cb","error","onceSubs","clear","waitFor","_this3","timeout","Promise","resolve","reject","timer","handler","clearTimeout","setTimeout","_this3$onceListeners$","Error","waitForMatch","filter","_this4","unsubscribe","onCustom","eventName","_this5","customListeners","_this5$customListener","emitCustom","data","_this$customListeners","ChatEngineEventType","CUSTOM","getHistory","_toConsumableArray","history","destroy","listenerCount","_this$listeners$get3","_this$onceListeners$g2","regular","getTotalListenerCount","total","hasListeners","push","timestamp","Date","now","shift","createEventBus"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 事件总线模块导出
3
+ */
4
+ export { ChatEventBus, createEventBus, ChatEngineEventType } from './ChatEventBus';
5
+ export type { ChatEngineEventPayloadMap, ChatEventBusOptions, EventCallback, EventFilter, EventHistoryItem, IChatEventBus, UnsubscribeFn, } from './types';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.12
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ export { ChatEventBus, createEventBus } from './ChatEventBus.js';
8
+ export { ChatEngineEventType } from './types.js';
9
+ import '@babel/runtime/helpers/toConsumableArray';
10
+ import '@babel/runtime/helpers/classCallCheck';
11
+ import '@babel/runtime/helpers/createClass';
12
+ import '@babel/runtime/helpers/defineProperty';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * ChatEngine 事件总线类型定义
3
+ */
4
+ import type { AIMessageContent, ChatMessagesData, ChatRequestParams, ChatStatus, ToolCall } from '../type';
5
+ /**
6
+ * 事件类型枚举
7
+ */
8
+ export declare enum ChatEngineEventType {
9
+ ENGINE_INIT = "engine:init",
10
+ ENGINE_DESTROY = "engine:destroy",
11
+ MESSAGE_CREATE = "message:create",
12
+ MESSAGE_UPDATE = "message:update",
13
+ MESSAGE_DELETE = "message:delete",
14
+ MESSAGE_CLEAR = "message:clear",
15
+ MESSAGE_STATUS_CHANGE = "message:status",
16
+ MESSAGE_CONTENT_APPEND = "message:content:append",
17
+ REQUEST_START = "request:start",
18
+ REQUEST_STREAM = "request:stream",
19
+ REQUEST_COMPLETE = "request:complete",
20
+ REQUEST_ERROR = "request:error",
21
+ REQUEST_ABORT = "request:abort",
22
+ AGUI_RUN_START = "agui:run:start",
23
+ AGUI_RUN_COMPLETE = "agui:run:complete",
24
+ AGUI_RUN_ERROR = "agui:run:error",
25
+ AGUI_STATE_UPDATE = "agui:state:update",
26
+ AGUI_TOOLCALL = "agui:toolcall",
27
+ AGUI_ACTIVITY = "agui:activity",
28
+ CUSTOM = "custom"
29
+ }
30
+ /**
31
+ * 事件载荷类型映射
32
+ */
33
+ export interface ChatEngineEventPayloadMap {
34
+ [ChatEngineEventType.ENGINE_INIT]: {
35
+ timestamp: number;
36
+ };
37
+ [ChatEngineEventType.ENGINE_DESTROY]: {
38
+ timestamp: number;
39
+ };
40
+ [ChatEngineEventType.MESSAGE_CREATE]: {
41
+ message: ChatMessagesData;
42
+ messages: ChatMessagesData[];
43
+ };
44
+ [ChatEngineEventType.MESSAGE_UPDATE]: {
45
+ messageId: string;
46
+ content: AIMessageContent | AIMessageContent[];
47
+ message: ChatMessagesData;
48
+ };
49
+ [ChatEngineEventType.MESSAGE_DELETE]: {
50
+ messageId: string;
51
+ messages: ChatMessagesData[];
52
+ };
53
+ [ChatEngineEventType.MESSAGE_CLEAR]: {
54
+ timestamp: number;
55
+ };
56
+ [ChatEngineEventType.MESSAGE_STATUS_CHANGE]: {
57
+ messageId: string;
58
+ status: ChatStatus;
59
+ previousStatus?: ChatStatus;
60
+ };
61
+ [ChatEngineEventType.MESSAGE_CONTENT_APPEND]: {
62
+ messageId: string;
63
+ content: AIMessageContent;
64
+ contentIndex: number;
65
+ };
66
+ [ChatEngineEventType.REQUEST_START]: {
67
+ params: ChatRequestParams;
68
+ messageId?: string;
69
+ };
70
+ [ChatEngineEventType.REQUEST_STREAM]: {
71
+ messageId: string;
72
+ chunk: unknown;
73
+ content?: AIMessageContent | AIMessageContent[] | null;
74
+ };
75
+ [ChatEngineEventType.REQUEST_COMPLETE]: {
76
+ messageId: string;
77
+ params: ChatRequestParams;
78
+ message: ChatMessagesData;
79
+ };
80
+ [ChatEngineEventType.REQUEST_ERROR]: {
81
+ messageId: string;
82
+ error: Error | unknown;
83
+ params?: ChatRequestParams;
84
+ };
85
+ [ChatEngineEventType.REQUEST_ABORT]: {
86
+ messageId: string;
87
+ params: ChatRequestParams;
88
+ };
89
+ [ChatEngineEventType.AGUI_RUN_START]: {
90
+ runId: string;
91
+ threadId?: string;
92
+ timestamp: number;
93
+ };
94
+ [ChatEngineEventType.AGUI_RUN_COMPLETE]: {
95
+ runId: string;
96
+ threadId?: string;
97
+ timestamp: number;
98
+ };
99
+ [ChatEngineEventType.AGUI_RUN_ERROR]: {
100
+ error: Error | unknown;
101
+ runId?: string;
102
+ };
103
+ [ChatEngineEventType.AGUI_STATE_UPDATE]: {
104
+ stateKey: string;
105
+ state: unknown;
106
+ previousState?: unknown;
107
+ };
108
+ [ChatEngineEventType.AGUI_TOOLCALL]: {
109
+ toolCall: ToolCall;
110
+ eventType: string;
111
+ };
112
+ [ChatEngineEventType.AGUI_ACTIVITY]: {
113
+ activityType: string;
114
+ messageId?: string;
115
+ content: unknown;
116
+ };
117
+ [ChatEngineEventType.CUSTOM]: {
118
+ eventName: string;
119
+ data: unknown;
120
+ };
121
+ }
122
+ /**
123
+ * 事件回调函数类型
124
+ */
125
+ export type EventCallback<T = unknown> = (payload: T) => void;
126
+ /**
127
+ * 取消订阅函数类型
128
+ */
129
+ export type UnsubscribeFn = () => void;
130
+ /**
131
+ * 事件过滤器类型
132
+ */
133
+ export type EventFilter<T = unknown> = (payload: T) => boolean;
134
+ /**
135
+ * 事件总线配置
136
+ */
137
+ export interface ChatEventBusOptions {
138
+ /**
139
+ * 是否启用调试模式
140
+ * @default false
141
+ */
142
+ debug?: boolean;
143
+ /**
144
+ * 最大监听器数量(每个事件)
145
+ * @default 100
146
+ */
147
+ maxListeners?: number;
148
+ /**
149
+ * 事件历史记录长度(用于调试)
150
+ * @default 0
151
+ */
152
+ historySize?: number;
153
+ }
154
+ /**
155
+ * 事件历史记录
156
+ */
157
+ export interface EventHistoryItem {
158
+ event: ChatEngineEventType | string;
159
+ payload: unknown;
160
+ timestamp: number;
161
+ }
162
+ /**
163
+ * 事件总线接口
164
+ */
165
+ export interface IChatEventBus {
166
+ /**
167
+ * 订阅事件
168
+ * @param event 事件类型
169
+ * @param callback 回调函数
170
+ * @returns 取消订阅函数
171
+ */
172
+ on<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;
173
+ /**
174
+ * 一次性订阅
175
+ * @param event 事件类型
176
+ * @param callback 回调函数
177
+ * @returns 取消订阅函数
178
+ */
179
+ once<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;
180
+ /**
181
+ * 取消订阅
182
+ * @param event 事件类型
183
+ * @param callback 可选的回调函数,不传则取消该事件所有订阅
184
+ */
185
+ off<E extends ChatEngineEventType>(event: E, callback?: EventCallback<ChatEngineEventPayloadMap[E]>): void;
186
+ /**
187
+ * 发布事件
188
+ * @param event 事件类型
189
+ * @param payload 事件载荷
190
+ */
191
+ emit<E extends ChatEngineEventType>(event: E, payload: ChatEngineEventPayloadMap[E]): void;
192
+ /**
193
+ * 等待事件(Promise 方式)
194
+ * @param event 事件类型
195
+ * @param timeout 超时时间(毫秒)
196
+ * @returns Promise
197
+ */
198
+ waitFor<E extends ChatEngineEventType>(event: E, timeout?: number): Promise<ChatEngineEventPayloadMap[E]>;
199
+ /**
200
+ * 带过滤条件的等待
201
+ * @param event 事件类型
202
+ * @param filter 过滤函数
203
+ * @param timeout 超时时间
204
+ */
205
+ waitForMatch<E extends ChatEngineEventType>(event: E, filter: EventFilter<ChatEngineEventPayloadMap[E]>, timeout?: number): Promise<ChatEngineEventPayloadMap[E]>;
206
+ /**
207
+ * 订阅自定义事件
208
+ * @param eventName 自定义事件名
209
+ * @param callback 回调函数
210
+ */
211
+ onCustom<T = unknown>(eventName: string, callback: EventCallback<T>): UnsubscribeFn;
212
+ /**
213
+ * 发布自定义事件
214
+ * @param eventName 自定义事件名
215
+ * @param data 数据
216
+ */
217
+ emitCustom<T = unknown>(eventName: string, data: T): void;
218
+ /**
219
+ * 获取事件历史记录
220
+ */
221
+ getHistory(): EventHistoryItem[];
222
+ /**
223
+ * 清理所有订阅
224
+ */
225
+ clear(): void;
226
+ /**
227
+ * 销毁事件总线
228
+ */
229
+ destroy(): void;
230
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.12
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ var ChatEngineEventType = /* @__PURE__ */function (ChatEngineEventType2) {
8
+ ChatEngineEventType2["ENGINE_INIT"] = "engine:init";
9
+ ChatEngineEventType2["ENGINE_DESTROY"] = "engine:destroy";
10
+ ChatEngineEventType2["MESSAGE_CREATE"] = "message:create";
11
+ ChatEngineEventType2["MESSAGE_UPDATE"] = "message:update";
12
+ ChatEngineEventType2["MESSAGE_DELETE"] = "message:delete";
13
+ ChatEngineEventType2["MESSAGE_CLEAR"] = "message:clear";
14
+ ChatEngineEventType2["MESSAGE_STATUS_CHANGE"] = "message:status";
15
+ ChatEngineEventType2["MESSAGE_CONTENT_APPEND"] = "message:content:append";
16
+ ChatEngineEventType2["REQUEST_START"] = "request:start";
17
+ ChatEngineEventType2["REQUEST_STREAM"] = "request:stream";
18
+ ChatEngineEventType2["REQUEST_COMPLETE"] = "request:complete";
19
+ ChatEngineEventType2["REQUEST_ERROR"] = "request:error";
20
+ ChatEngineEventType2["REQUEST_ABORT"] = "request:abort";
21
+ ChatEngineEventType2["AGUI_RUN_START"] = "agui:run:start";
22
+ ChatEngineEventType2["AGUI_RUN_COMPLETE"] = "agui:run:complete";
23
+ ChatEngineEventType2["AGUI_RUN_ERROR"] = "agui:run:error";
24
+ ChatEngineEventType2["AGUI_STATE_UPDATE"] = "agui:state:update";
25
+ ChatEngineEventType2["AGUI_TOOLCALL"] = "agui:toolcall";
26
+ ChatEngineEventType2["AGUI_ACTIVITY"] = "agui:activity";
27
+ ChatEngineEventType2["CUSTOM"] = "custom";
28
+ return ChatEngineEventType2;
29
+ }(ChatEngineEventType || {});
30
+
31
+ export { ChatEngineEventType };
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../../pro-components/chat/chat-engine/core/event-bus/types.ts"],"sourcesContent":["/**\n * ChatEngine 事件总线类型定义\n */\nimport type { AIMessageContent, ChatMessagesData, ChatRequestParams, ChatStatus, ToolCall } from '../type';\n\n/**\n * 事件类型枚举\n */\nexport enum ChatEngineEventType {\n // 生命周期事件\n ENGINE_INIT = 'engine:init',\n ENGINE_DESTROY = 'engine:destroy',\n\n // 消息事件\n MESSAGE_CREATE = 'message:create',\n MESSAGE_UPDATE = 'message:update',\n MESSAGE_DELETE = 'message:delete',\n MESSAGE_CLEAR = 'message:clear',\n MESSAGE_STATUS_CHANGE = 'message:status',\n MESSAGE_CONTENT_APPEND = 'message:content:append',\n\n // 请求事件\n REQUEST_START = 'request:start',\n REQUEST_STREAM = 'request:stream',\n REQUEST_COMPLETE = 'request:complete',\n REQUEST_ERROR = 'request:error',\n REQUEST_ABORT = 'request:abort',\n\n // AG-UI 协议事件\n AGUI_RUN_START = 'agui:run:start',\n AGUI_RUN_COMPLETE = 'agui:run:complete',\n AGUI_RUN_ERROR = 'agui:run:error',\n AGUI_STATE_UPDATE = 'agui:state:update',\n AGUI_TOOLCALL = 'agui:toolcall',\n AGUI_ACTIVITY = 'agui:activity',\n\n // 自定义事件\n CUSTOM = 'custom',\n}\n\n/**\n * 事件载荷类型映射\n */\nexport interface ChatEngineEventPayloadMap {\n // 生命周期事件\n [ChatEngineEventType.ENGINE_INIT]: {\n timestamp: number;\n };\n [ChatEngineEventType.ENGINE_DESTROY]: {\n timestamp: number;\n };\n\n // 消息事件\n [ChatEngineEventType.MESSAGE_CREATE]: {\n message: ChatMessagesData;\n messages: ChatMessagesData[];\n };\n [ChatEngineEventType.MESSAGE_UPDATE]: {\n messageId: string;\n content: AIMessageContent | AIMessageContent[];\n message: ChatMessagesData;\n };\n [ChatEngineEventType.MESSAGE_DELETE]: {\n messageId: string;\n messages: ChatMessagesData[];\n };\n [ChatEngineEventType.MESSAGE_CLEAR]: {\n timestamp: number;\n };\n [ChatEngineEventType.MESSAGE_STATUS_CHANGE]: {\n messageId: string;\n status: ChatStatus;\n previousStatus?: ChatStatus;\n };\n [ChatEngineEventType.MESSAGE_CONTENT_APPEND]: {\n messageId: string;\n content: AIMessageContent;\n contentIndex: number;\n };\n\n // 请求事件\n [ChatEngineEventType.REQUEST_START]: {\n params: ChatRequestParams;\n messageId?: string;\n };\n [ChatEngineEventType.REQUEST_STREAM]: {\n messageId: string;\n chunk: unknown;\n content?: AIMessageContent | AIMessageContent[] | null;\n };\n [ChatEngineEventType.REQUEST_COMPLETE]: {\n messageId: string;\n params: ChatRequestParams;\n message: ChatMessagesData;\n };\n [ChatEngineEventType.REQUEST_ERROR]: {\n messageId: string;\n error: Error | unknown;\n params?: ChatRequestParams;\n };\n [ChatEngineEventType.REQUEST_ABORT]: {\n messageId: string;\n params: ChatRequestParams;\n };\n\n // AG-UI 协议事件\n [ChatEngineEventType.AGUI_RUN_START]: {\n runId: string;\n threadId?: string;\n timestamp: number;\n };\n [ChatEngineEventType.AGUI_RUN_COMPLETE]: {\n runId: string;\n threadId?: string;\n timestamp: number;\n };\n [ChatEngineEventType.AGUI_RUN_ERROR]: {\n error: Error | unknown;\n runId?: string;\n };\n [ChatEngineEventType.AGUI_STATE_UPDATE]: {\n stateKey: string;\n state: unknown;\n previousState?: unknown;\n };\n [ChatEngineEventType.AGUI_TOOLCALL]: {\n toolCall: ToolCall;\n eventType: string;\n };\n [ChatEngineEventType.AGUI_ACTIVITY]: {\n activityType: string;\n messageId?: string;\n content: unknown;\n };\n\n // 自定义事件\n [ChatEngineEventType.CUSTOM]: {\n eventName: string;\n data: unknown;\n };\n}\n\n/**\n * 事件回调函数类型\n */\nexport type EventCallback<T = unknown> = (payload: T) => void;\n\n/**\n * 取消订阅函数类型\n */\nexport type UnsubscribeFn = () => void;\n\n/**\n * 事件过滤器类型\n */\nexport type EventFilter<T = unknown> = (payload: T) => boolean;\n\n/**\n * 事件总线配置\n */\nexport interface ChatEventBusOptions {\n /**\n * 是否启用调试模式\n * @default false\n */\n debug?: boolean;\n /**\n * 最大监听器数量(每个事件)\n * @default 100\n */\n maxListeners?: number;\n /**\n * 事件历史记录长度(用于调试)\n * @default 0\n */\n historySize?: number;\n}\n\n/**\n * 事件历史记录\n */\nexport interface EventHistoryItem {\n event: ChatEngineEventType | string;\n payload: unknown;\n timestamp: number;\n}\n\n/**\n * 事件总线接口\n */\nexport interface IChatEventBus {\n /**\n * 订阅事件\n * @param event 事件类型\n * @param callback 回调函数\n * @returns 取消订阅函数\n */\n on<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;\n\n /**\n * 一次性订阅\n * @param event 事件类型\n * @param callback 回调函数\n * @returns 取消订阅函数\n */\n once<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;\n\n /**\n * 取消订阅\n * @param event 事件类型\n * @param callback 可选的回调函数,不传则取消该事件所有订阅\n */\n off<E extends ChatEngineEventType>(event: E, callback?: EventCallback<ChatEngineEventPayloadMap[E]>): void;\n\n /**\n * 发布事件\n * @param event 事件类型\n * @param payload 事件载荷\n */\n emit<E extends ChatEngineEventType>(event: E, payload: ChatEngineEventPayloadMap[E]): void;\n\n /**\n * 等待事件(Promise 方式)\n * @param event 事件类型\n * @param timeout 超时时间(毫秒)\n * @returns Promise\n */\n waitFor<E extends ChatEngineEventType>(event: E, timeout?: number): Promise<ChatEngineEventPayloadMap[E]>;\n\n /**\n * 带过滤条件的等待\n * @param event 事件类型\n * @param filter 过滤函数\n * @param timeout 超时时间\n */\n waitForMatch<E extends ChatEngineEventType>(\n event: E,\n filter: EventFilter<ChatEngineEventPayloadMap[E]>,\n timeout?: number,\n ): Promise<ChatEngineEventPayloadMap[E]>;\n\n /**\n * 订阅自定义事件\n * @param eventName 自定义事件名\n * @param callback 回调函数\n */\n onCustom<T = unknown>(eventName: string, callback: EventCallback<T>): UnsubscribeFn;\n\n /**\n * 发布自定义事件\n * @param eventName 自定义事件名\n * @param data 数据\n */\n emitCustom<T = unknown>(eventName: string, data: T): void;\n\n /**\n * 获取事件历史记录\n */\n getHistory(): EventHistoryItem[];\n\n /**\n * 清理所有订阅\n */\n clear(): void;\n\n /**\n * 销毁事件总线\n */\n destroy(): void;\n}\n"],"names":["ChatEngineEventType"],"mappings":";;;;;;IAQYA,mBAAA,4BAAAA,oBAAL,EAAA;AAELA,EAAAA,qBAAA,aAAc,CAAA,GAAA,aAAA,CAAA;AACdA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AAGjBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAChBA,EAAAA,qBAAA,uBAAwB,CAAA,GAAA,gBAAA,CAAA;AACxBA,EAAAA,qBAAA,wBAAyB,CAAA,GAAA,wBAAA,CAAA;AAGzBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAChBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,kBAAmB,CAAA,GAAA,kBAAA,CAAA;AACnBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAChBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAGhBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,mBAAoB,CAAA,GAAA,mBAAA,CAAA;AACpBA,EAAAA,qBAAA,gBAAiB,CAAA,GAAA,gBAAA,CAAA;AACjBA,EAAAA,qBAAA,mBAAoB,CAAA,GAAA,mBAAA,CAAA;AACpBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAChBA,EAAAA,qBAAA,eAAgB,CAAA,GAAA,eAAA,CAAA;AAGhBA,EAAAA,qBAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AA7BCA,EAAAA,OAAAA,oBAAAA,CAAAA;AAAA,CAAA,CAAAA,mBAAA,IAAA,EAAA;;;;"}