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

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 (211) 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.d.ts +1 -0
  91. package/es/chat-engine/components/index.js +47 -1
  92. package/es/chat-engine/components/index.js.map +1 -1
  93. package/es/chat-engine/components/provider/agent-state.js +6 -3
  94. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  95. package/es/chat-engine/components/toolcall/index.js +4 -1
  96. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  97. package/es/chat-engine/components/toolcall/registry.js +4 -4
  98. package/es/chat-engine/components/toolcall/registry.js.map +1 -1
  99. package/es/chat-engine/components/toolcall/render.js +14 -11
  100. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  101. package/es/chat-engine/components/toolcall/types.js +1 -1
  102. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  103. package/es/chat-engine/core/a2ui/index.js +24 -0
  104. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  105. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  106. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  107. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  108. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  109. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  110. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  111. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  112. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  113. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  114. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  115. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  116. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  117. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  118. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  119. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  120. package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
  121. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  122. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  123. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  124. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  125. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  126. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  127. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  128. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  129. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  130. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  131. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  132. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
  133. package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
  134. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  135. package/es/chat-engine/core/adapters/agui/events.js +1 -1
  136. package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
  137. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  138. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  139. package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
  140. package/es/chat-engine/core/adapters/agui/types.js +1 -1
  141. package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
  142. package/es/chat-engine/core/adapters/agui/utils.js +6 -2
  143. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
  144. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  145. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  146. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  147. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  148. package/es/chat-engine/core/event-bus/index.js +13 -0
  149. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  150. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  151. package/es/chat-engine/core/event-bus/types.js +32 -0
  152. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  153. package/es/chat-engine/core/index.d.ts +8 -1
  154. package/es/chat-engine/core/index.js +128 -10
  155. package/es/chat-engine/core/index.js.map +1 -1
  156. package/es/chat-engine/core/processor/index.js +1 -1
  157. package/es/chat-engine/core/server/batch-client.js +1 -1
  158. package/es/chat-engine/core/server/connection-manager.js +1 -1
  159. package/es/chat-engine/core/server/errors.js +1 -1
  160. package/es/chat-engine/core/server/index.js +1 -1
  161. package/es/chat-engine/core/server/llm-service.js +17 -15
  162. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  163. package/es/chat-engine/core/server/sse-client.js +1 -1
  164. package/es/chat-engine/core/server/sse-parser.js +1 -1
  165. package/es/chat-engine/core/server/types.js +1 -1
  166. package/es/chat-engine/core/store/message.js +1 -1
  167. package/es/chat-engine/core/store/model.js +1 -1
  168. package/es/chat-engine/core/store/reactiveState.js +1 -1
  169. package/es/chat-engine/core/type.d.ts +18 -2
  170. package/es/chat-engine/core/type.js +1 -1
  171. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  172. package/es/chat-engine/core/utils/index.js +1 -1
  173. package/es/chat-engine/core/utils/logger.js +1 -1
  174. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  175. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  176. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  177. package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
  178. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  179. package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
  180. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  181. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  182. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  183. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  184. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  185. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  186. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  187. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  188. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  189. package/es/chat-engine/hooks/index.d.ts +1 -0
  190. package/es/chat-engine/hooks/index.js +12 -1
  191. package/es/chat-engine/hooks/index.js.map +1 -1
  192. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  193. package/es/chat-engine/hooks/useAgentState.js +4 -1
  194. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  195. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  196. package/es/chat-engine/hooks/useChat.js +4 -1
  197. package/es/chat-engine/hooks/useChat.js.map +1 -1
  198. package/es/chat-engine/index.js +47 -1
  199. package/es/chat-engine/index.js.map +1 -1
  200. package/es/chat-filecard/index.js +1 -1
  201. package/es/chat-loading/index.js +1 -1
  202. package/es/chat-markdown/index.js +1 -1
  203. package/es/chat-message/index.js +1 -1
  204. package/es/chat-sender/index.js +1 -1
  205. package/es/chat-thinking/index.js +1 -1
  206. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  207. package/es/chatbot/index.js +1 -1
  208. package/es/index.js +47 -1
  209. package/es/index.js.map +1 -1
  210. package/es/style/index.js +1 -1
  211. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.10
2
+ * tdesign v1.0.2-alpha.11
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -13,7 +13,7 @@ import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstruct
13
13
  import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
14
14
  import _inherits from '@babel/runtime/helpers/inherits';
15
15
  import _regeneratorRuntime from '@babel/runtime/regenerator';
16
- import React, { Component, useState, useMemo, useCallback, useEffect } from 'react';
16
+ import React__default, { Component, useState, useMemo, useCallback, useEffect } from 'react';
17
17
  import { isNonInteractiveConfig } from './types.js';
18
18
  import { agentToolcallRegistry } from './registry.js';
19
19
  import { useAgentStateDataByKey, AgentStateContext } from '../../hooks/useAgentState.js';
@@ -30,6 +30,9 @@ import '../../core/adapters/agui/utils.js';
30
30
  import 'zod';
31
31
  import '../../core/adapters/agui/types.js';
32
32
  import '@babel/runtime/helpers/wrapNativeSuper';
33
+ import '../../core/event-bus/index.js';
34
+ import '../../core/event-bus/ChatEventBus.js';
35
+ import '../../core/event-bus/types.js';
33
36
  import '../../core/store/message.js';
34
37
  import '@babel/runtime/helpers/get';
35
38
  import '../../core/store/reactiveState.js';
@@ -84,7 +87,7 @@ var ToolCallErrorBoundary = /*#__PURE__*/function (_Component) {
84
87
  }
85
88
  }]);
86
89
  }(Component);
87
- var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
90
+ var ToolCallRenderer = /*#__PURE__*/React__default.memo(function (_ref) {
88
91
  var toolCall = _ref.toolCall,
89
92
  onRespond = _ref.onRespond;
90
93
  var _useState = useState({
@@ -239,26 +242,26 @@ var ToolCallRenderer = /*#__PURE__*/React.memo(function (_ref) {
239
242
  if (!MemoizedComponent) {
240
243
  return null;
241
244
  }
242
- return /* @__PURE__ */React.createElement(ToolCallErrorBoundary, {
245
+ return /* @__PURE__ */React__default.createElement(ToolCallErrorBoundary, {
243
246
  toolCallName: toolCall.toolCallName
244
- }, /* @__PURE__ */React.createElement(MemoizedComponent, _objectSpread({}, componentProps)));
247
+ }, /* @__PURE__ */React__default.createElement(MemoizedComponent, _objectSpread({}, componentProps)));
245
248
  }, function (prevProps, nextProps) {
246
249
  return prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId && prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName && prevProps.toolCall.args === nextProps.toolCall.args && prevProps.toolCall.result === nextProps.toolCall.result && prevProps.toolCall.eventType === nextProps.toolCall.eventType && prevProps.onRespond === nextProps.onRespond;
247
250
  });
248
251
  var withAgentStateToolcall1 = function withAgentStateToolcall1(Component2) {
249
252
  var WrappedComponent = function WrappedComponent(props) {
250
- return /* @__PURE__ */React.createElement(AgentStateContext.Consumer, null, function (context) {
253
+ return /* @__PURE__ */React__default.createElement(AgentStateContext.Consumer, null, function (context) {
251
254
  if (!context) {
252
255
  console.warn("AgentStateContext not found, component will render without state");
253
- return /* @__PURE__ */React.createElement(Component2, _objectSpread({}, props));
256
+ return /* @__PURE__ */React__default.createElement(Component2, _objectSpread({}, props));
254
257
  }
255
- return /* @__PURE__ */React.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
258
+ return /* @__PURE__ */React__default.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
256
259
  agentState: context.stateMap
257
260
  }));
258
261
  });
259
262
  };
260
263
  WrappedComponent.displayName = "withAgentState(".concat(Component2.displayName || Component2.name || "Component", ")");
261
- return /*#__PURE__*/React.memo(WrappedComponent);
264
+ return /*#__PURE__*/React__default.memo(WrappedComponent);
262
265
  };
263
266
  var withAgentStateToolcall = function withAgentStateToolcall(Component2, subscribeKeyExtractor) {
264
267
  var WrappedComponent = function WrappedComponent(props) {
@@ -266,12 +269,12 @@ var withAgentStateToolcall = function withAgentStateToolcall(Component2, subscri
266
269
  return subscribeKeyExtractor ? subscribeKeyExtractor(props) : void 0;
267
270
  }, [props]);
268
271
  var agentState = useAgentStateDataByKey(targetStateKey);
269
- return /* @__PURE__ */React.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
272
+ return /* @__PURE__ */React__default.createElement(Component2, _objectSpread(_objectSpread({}, props), {}, {
270
273
  agentState: agentState
271
274
  }));
272
275
  };
273
276
  WrappedComponent.displayName = "withAgentState(".concat(Component2.displayName || Component2.name || "Component", ")");
274
- return /*#__PURE__*/React.memo(WrappedComponent);
277
+ return /*#__PURE__*/React__default.memo(WrappedComponent);
275
278
  };
276
279
 
277
280
  export { ToolCallRenderer, withAgentStateToolcall, withAgentStateToolcall1 };
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, Component, ErrorInfo } from 'react';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\nimport { AGUIEventType, ToolCall } from '../../core';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ToolCall 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n */\nclass ToolCallErrorBoundary extends Component<\n { children: React.ReactNode; toolCallName: string },\n ErrorBoundaryState\n> {\n constructor(props: { children: React.ReactNode; toolCallName: string }) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(`[ToolCallRenderer] Error in tool \"${this.props.toolCallName}\":`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // 空白兜底,仅在控制台输出错误\n return null;\n }\n\n return this.props.children;\n }\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else if (toolCall.eventType === AGUIEventType.TOOL_CALL_END || toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT) {\n // 工具调用已结束(无 result 的情况,如 show_progress)\n setActionState({ status: 'complete' });\n } else {\n // 等待用户交互或工具执行中\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result, toolCall.eventType]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return (\n <ToolCallErrorBoundary toolCallName={toolCall.toolCallName}>\n <MemoizedComponent {...componentProps} />\n </ToolCallErrorBoundary>\n );\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.toolCall.eventType === nextProps.toolCall.eventType &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallErrorBoundary","props","_this","_classCallCheck","_callSuper","state","hasError","error","_inherits","_Component","_createClass","key","value","componentDidCatch","errorInfo","console","toolCallName","render","children","getDerivedStateFromError","Component","ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","handler","sent","stop","eventType","AGUIEventType","TOOL_CALL_END","TOOL_CALL_RESULT","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","WrappedComponent","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sources":["../../../../../pro-components/chat/chat-engine/components/toolcall/render.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, Component, ErrorInfo } from 'react';\nimport { isNonInteractiveConfig, type ToolcallComponentProps } from './types';\nimport { agentToolcallRegistry } from './registry';\nimport { AgentStateContext, useAgentStateDataByKey } from '../../hooks/useAgentState';\nimport { AGUIEventType, ToolCall } from '../../core';\n\ninterface ToolCallRendererProps {\n toolCall: ToolCall;\n onRespond?: (toolCall: ToolCall, response: any) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ToolCall 错误边界组件\n * 捕获子组件渲染错误,防止整个对话列表崩溃\n */\nclass ToolCallErrorBoundary extends Component<\n { children: React.ReactNode; toolCallName: string },\n ErrorBoundaryState\n> {\n constructor(props: { children: React.ReactNode; toolCallName: string }) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error(`[ToolCallRenderer] Error in tool \"${this.props.toolCallName}\":`, error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) {\n // 空白兜底,仅在控制台输出错误\n return null;\n }\n\n return this.props.children;\n }\n}\n\nexport const ToolCallRenderer = React.memo<ToolCallRendererProps>(\n ({ toolCall, onRespond }) => {\n const [actionState, setActionState] = useState<{\n status: ToolcallComponentProps['status'];\n result?: any;\n error?: Error;\n }>({\n status: 'idle',\n });\n\n // 缓存配置获取\n const config = useMemo(() => {\n const cfg = agentToolcallRegistry.get(toolCall.toolCallName);\n return cfg;\n }, [toolCall.toolCallName]);\n\n // 添加注册状态监听\n const [isRegistered, setIsRegistered] = useState(\n () => !!agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n );\n\n // 缓存参数解析\n const args = useMemo(() => {\n try {\n return toolCall.args ? JSON.parse(toolCall.args) : {};\n } catch (error) {\n console.error('解析工具调用参数失败:', error);\n return {};\n }\n }, [toolCall.args]);\n\n const handleRespond = useCallback(\n (response: any) => {\n if (onRespond) {\n onRespond(toolCall, response);\n setActionState((prev) => ({\n ...prev,\n status: 'complete',\n result: response,\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallId, onRespond],\n );\n\n // 执行 handler(如果存在)- 必须在条件判断之前调用\n useEffect(() => {\n if (!config) return;\n\n if (isNonInteractiveConfig(config)) {\n // 非交互式:执行 handler\n const executeHandler = async () => {\n try {\n setActionState({ status: 'executing' });\n\n // 解析后端返回的结果作为 handler 的第二个参数\n let backendResult;\n if (toolCall.result) {\n try {\n backendResult = JSON.parse(toolCall.result);\n } catch (error) {\n console.warn('解析后端结果失败,使用原始字符串:', error);\n backendResult = toolCall.result;\n }\n }\n\n // 调用 handler,传入 args 和 backendResult\n const result = await config.handler(args, backendResult);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n };\n\n executeHandler();\n } else if (toolCall.result) {\n // 交互式:已有结果,显示完成状态\n try {\n const result = JSON.parse(toolCall.result);\n setActionState({\n status: 'complete',\n result,\n });\n } catch (error) {\n setActionState({\n status: 'error',\n error: error as Error,\n });\n }\n } else if (toolCall.eventType === AGUIEventType.TOOL_CALL_END || toolCall.eventType === AGUIEventType.TOOL_CALL_RESULT) {\n // 工具调用已结束(无 result 的情况,如 show_progress)\n setActionState({ status: 'complete' });\n } else {\n // 等待用户交互或工具执行中\n setActionState({ status: 'executing' });\n }\n }, [config, args, toolCall.result, toolCall.eventType]);\n\n // 从配置中获取 subscribeKey 提取函数\n const subscribeKeyExtractor = useMemo(() => config?.subscribeKey, [config]);\n\n // 使用配置的提取函数来获取 targetStateKey\n const targetStateKey = useMemo(() => {\n if (!subscribeKeyExtractor) return undefined;\n\n // 构造完整的 props 对象传给提取函数\n const fullProps = {\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n };\n\n return subscribeKeyExtractor(fullProps);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribeKeyExtractor, args, actionState]);\n\n // 监听组件注册事件, 无论何时注册,都能正确触发重新渲染\n useEffect(() => {\n if (!isRegistered) {\n const handleRegistered = (event: CustomEvent) => {\n if (event.detail?.name === toolCall.toolCallName) {\n setIsRegistered(true);\n }\n };\n\n // 添加事件监听\n window.addEventListener('toolcall-registered', handleRegistered as EventListener);\n\n return () => {\n window.removeEventListener('toolcall-registered', handleRegistered as EventListener);\n };\n }\n }, [toolCall.toolCallName, isRegistered]);\n\n // 使用精确订阅\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n // 缓存组件 props\n const componentProps = useMemo<ToolcallComponentProps>(\n () => ({\n status: actionState.status,\n args,\n result: actionState.result,\n error: actionState.error,\n respond: handleRespond,\n agentState,\n }),\n [actionState.status, args, actionState.result, actionState.error, handleRespond, agentState],\n );\n\n // 使用registry的缓存渲染函数\n const MemoizedComponent = useMemo(\n () => agentToolcallRegistry.getRenderFunction(toolCall.toolCallName),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [toolCall.toolCallName, isRegistered],\n );\n\n if (!MemoizedComponent) {\n return null;\n }\n\n return (\n <ToolCallErrorBoundary toolCallName={toolCall.toolCallName}>\n <MemoizedComponent {...componentProps} />\n </ToolCallErrorBoundary>\n );\n },\n (prevProps, nextProps) =>\n prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId &&\n prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName &&\n prevProps.toolCall.args === nextProps.toolCall.args &&\n prevProps.toolCall.result === nextProps.toolCall.result &&\n prevProps.toolCall.eventType === nextProps.toolCall.eventType &&\n prevProps.onRespond === nextProps.onRespond,\n);\n// 用于调试,可以在控制台查看每次渲染的参数\n// (prevProps, nextProps) => {\n// const toolCallIdSame = prevProps.toolCall.toolCallId === nextProps.toolCall.toolCallId;\n// const toolCallNameSame = prevProps.toolCall.toolCallName === nextProps.toolCall.toolCallName;\n// const argsSame = prevProps.toolCall.args === nextProps.toolCall.args;\n// const resultSame = prevProps.toolCall.result === nextProps.toolCall.result;\n// const onRespondSame = prevProps.onRespond === nextProps.onRespond;\n\n// console.log(`ToolCallRenderer memo 详细检查 [${prevProps.toolCall.toolCallName}]:`, {\n// toolCallIdSame,\n// toolCallNameSame,\n// argsSame,\n// resultSame,\n// onRespondSame,\n// prevToolCallId: prevProps.toolCall.toolCallId,\n// nextToolCallId: nextProps.toolCall.toolCallId,\n// prevOnRespond: prevProps.onRespond,\n// nextOnRespond: nextProps.onRespond,\n// });\n\n// const shouldSkip = toolCallIdSame && toolCallNameSame && argsSame && resultSame && onRespondSame;\n\n// console.log(`ToolCallRenderer memo 检查 [${prevProps.toolCall.toolCallName}]:`, shouldSkip ? '跳过渲染' : '需要重新渲染');\n// return shouldSkip\n// },\n// );\n\n// 定义增强后的 Props 类型\ntype WithAgentStateProps<P> = P & { agentState?: Record<string, any> };\n\nexport const withAgentStateToolcall1 = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => (\n <AgentStateContext.Consumer>\n {(context) => {\n if (!context) {\n console.warn('AgentStateContext not found, component will render without state');\n return <Component {...props} />;\n }\n\n return <Component {...props} agentState={context.stateMap} />;\n }}\n </AgentStateContext.Consumer>\n );\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n\nexport const withAgentStateToolcall = <P extends object>(\n Component: React.ComponentType<WithAgentStateProps<P>>,\n subscribeKeyExtractor?: (props: P) => string | undefined,\n): React.ComponentType<P> => {\n const WrappedComponent: React.FC<P> = (props: P) => {\n // 计算需要订阅的 stateKey\n const targetStateKey = useMemo(() => (subscribeKeyExtractor ? subscribeKeyExtractor(props) : undefined), [props]);\n\n const agentState = useAgentStateDataByKey(targetStateKey);\n\n return <Component {...props} agentState={agentState} />;\n };\n\n WrappedComponent.displayName = `withAgentState(${Component.displayName || Component.name || 'Component'})`;\n return React.memo(WrappedComponent);\n};\n"],"names":["ToolCallErrorBoundary","props","_this","_classCallCheck","_callSuper","state","hasError","error","_inherits","_Component","_createClass","key","value","componentDidCatch","errorInfo","console","toolCallName","render","children","getDerivedStateFromError","Component","ToolCallRenderer","React","memo","_ref","toolCall","onRespond","_useState","useState","status","_useState2","_slicedToArray","actionState","setActionState","config","useMemo","cfg","agentToolcallRegistry","get","_useState3","getRenderFunction","_useState4","isRegistered","setIsRegistered","args","JSON","parse","handleRespond","useCallback","response","prev","_objectSpread","result","toolCallId","useEffect","isNonInteractiveConfig","executeHandler","_callee","backendResult","_t","_regeneratorRuntime","wrap","_context","next","warn","handler","sent","stop","eventType","AGUIEventType","TOOL_CALL_END","TOOL_CALL_RESULT","subscribeKeyExtractor","subscribeKey","targetStateKey","fullProps","respond","handleRegistered","event","_event$detail","detail","name","window","addEventListener","removeEventListener","agentState","useAgentStateDataByKey","componentProps","MemoizedComponent","createElement","prevProps","nextProps","withAgentStateToolcall1","WrappedComponent","AgentStateContext","Consumer","context","stateMap","displayName","concat","withAgentStateToolcall"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.10
2
+ * tdesign v1.0.2-alpha.11
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A2UI 核心层导出
3
+ * 框架无关,可跨 React/Vue 复用
4
+ */
5
+ export * from './types';
6
+ export * from './utils';
7
+ export { A2uiMessageProcessor, createA2uiProcessor, type A2uiMessageProcessorOptions, type SurfaceSnapshot, type SurfaceListener, } from './processor/A2uiMessageProcessor';
8
+ export { DataStore, createDataStore } from './processor/DataStore';
9
+ export { ComponentTree } from './processor/ComponentTree';
10
+ export { PathResolver, pathResolver } from './processor/PathResolver';
@@ -0,0 +1,24 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.11
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import './types/index.js';
8
+ import './utils/index.js';
9
+ export { A2uiMessageProcessor, createA2uiProcessor } from './processor/A2uiMessageProcessor.js';
10
+ export { DataStore, createDataStore } from './processor/DataStore.js';
11
+ export { ComponentTree } from './processor/ComponentTree.js';
12
+ export { PathResolver, pathResolver } from './processor/PathResolver.js';
13
+ export { A2UIActionSchema, A2UIComponentBaseSchema, A2UIComponentType, A2UISurfaceSchema, ExprBindingSchema, PathBindingSchema, booleanOrPathSchema, childrenPropertySchema, componentCommonSchema, createSurfaceMessageSchema, deleteSurfaceMessageSchema, numberOrPathSchema, serverMessageSchema, stringArrayOrPathSchema, stringOrPathSchema, updateComponentsMessageSchema, updateDataModelMessageSchema } from './types/types.js';
14
+ export { evaluateExpression, formatValue, isExprBinding, isPathBinding, resolveBinding, resolveExprBinding, resolvePathBinding } from './utils/binding.js';
15
+ export { formatValidationErrors, safeParseJSON, validateAction, validateBindingPath, validateComponent, validateOperation, validateOperations } from './utils/validation.js';
16
+ import '@babel/runtime/helpers/typeof';
17
+ import '@babel/runtime/helpers/classCallCheck';
18
+ import '@babel/runtime/helpers/createClass';
19
+ import '@babel/runtime/helpers/defineProperty';
20
+ import '@babel/runtime/helpers/slicedToArray';
21
+ import '@babel/runtime/helpers/toArray';
22
+ import 'zod';
23
+ import '@babel/runtime/helpers/toConsumableArray';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * A2UI 消息处理器 v2
3
+ * 完全按照 A2UI v0.9 协议实现
4
+ *
5
+ * 支持四种消息类型:
6
+ * - createSurface: 创建 Surface
7
+ * - updateComponents: 更新组件
8
+ * - updateDataModel: 更新数据模型
9
+ * - deleteSurface: 删除 Surface
10
+ *
11
+ * 实现 External Store 模式,支持 useSyncExternalStore
12
+ */
13
+ import type { A2UISurface, A2UIComponentBase, A2UIServerMessage, A2UIAction, ActionHandler, SkeletonHint, ResolvedComponent, UserActionMessage } from '../types';
14
+ export type SurfaceSnapshot = Map<string, A2UISurface>;
15
+ export type SurfaceListener = () => void;
16
+ /**
17
+ * A2UI 消息处理器配置
18
+ */
19
+ export interface A2uiMessageProcessorOptions {
20
+ /** Action 处理回调 */
21
+ onAction?: ActionHandler;
22
+ /** 用户行为消息发送回调 */
23
+ onSendMessage?: (message: UserActionMessage) => void;
24
+ /** 数据变更回调 */
25
+ onDataChange?: (surfaceId: string, path: string, value: unknown) => void;
26
+ /** 验证错误回调 */
27
+ onValidationError?: (errors: Array<{
28
+ type: string;
29
+ message: string;
30
+ path?: string;
31
+ }>) => void;
32
+ }
33
+ /**
34
+ * A2UI 消息处理器
35
+ *
36
+ * 核心功能:
37
+ * 1. 处理 A2UI v0.9 协议消息
38
+ * 2. 管理 Surface 生命周期
39
+ * 3. 维护组件注册表和数据模型
40
+ * 4. 构建组件树
41
+ * 5. 支持 useSyncExternalStore 订阅
42
+ */
43
+ export declare class A2uiMessageProcessor {
44
+ private surfaces;
45
+ private listeners;
46
+ private pathResolver;
47
+ private options;
48
+ private cachedSnapshot;
49
+ private snapshotVersion;
50
+ constructor(options?: A2uiMessageProcessorOptions);
51
+ /**
52
+ * 订阅状态变化(供 useSyncExternalStore 使用)
53
+ */
54
+ subscribe(listener: SurfaceListener): () => void;
55
+ /**
56
+ * 获取当前快照(供 useSyncExternalStore 使用)
57
+ * 返回缓存的快照,确保引用稳定
58
+ */
59
+ getSnapshot(): SurfaceSnapshot;
60
+ /**
61
+ * 获取服务端快照(SSR 场景)
62
+ */
63
+ getServerSnapshot(): SurfaceSnapshot;
64
+ /**
65
+ * 更新缓存的快照
66
+ * 只在数据变更时调用
67
+ */
68
+ private updateCachedSnapshot;
69
+ /**
70
+ * 处理单条 A2UI v0.9 消息
71
+ */
72
+ processMessage(message: A2UIServerMessage): void;
73
+ /**
74
+ * 批量处理消息
75
+ */
76
+ processMessages(messages: A2UIServerMessage[]): void;
77
+ /**
78
+ * 增量处理消息(性能优化)
79
+ * 当已知消息是新增的时候使用,避免重复处理
80
+ */
81
+ processMessagesIncremental(messages: A2UIServerMessage[]): void;
82
+ /**
83
+ * 内部消息处理(不触发 emitChange)
84
+ */
85
+ private processMessageInternal;
86
+ /**
87
+ * 处理 createSurface 消息
88
+ */
89
+ private handleCreateSurface;
90
+ /**
91
+ * 处理 updateComponents 消息
92
+ */
93
+ private handleUpdateComponents;
94
+ /**
95
+ * 处理 updateDataModel 消息
96
+ */
97
+ private handleUpdateDataModel;
98
+ /**
99
+ * 检查是否需要重建组件树
100
+ * 优化:只有当路径可能影响 template 渲染时才需要重建
101
+ */
102
+ private needsTreeRebuild;
103
+ /**
104
+ * 只更新数据模型,不重建组件树(性能优化)
105
+ * 适用于不影响组件结构的数据更新(如表单输入)
106
+ */
107
+ updateDataOnly(surfaceId: string, path: string, value: unknown): void;
108
+ /**
109
+ * 处理 deleteSurface 消息
110
+ */
111
+ private handleDeleteSurface;
112
+ /**
113
+ * 重建组件树
114
+ */
115
+ private rebuildComponentTree;
116
+ /**
117
+ * 获取数据
118
+ * @param surfaceId Surface ID
119
+ * @param path 数据路径
120
+ * @param dataContextPath 当前组件的数据上下文
121
+ */
122
+ getData(surfaceId: string, path: string, dataContextPath?: string): unknown;
123
+ /**
124
+ * 设置数据(双向绑定)
125
+ */
126
+ setData(surfaceId: string, path: string, dataContextPath: string, value: unknown): void;
127
+ /**
128
+ * 更新数据值(简化接口,不需要 dataContextPath)
129
+ */
130
+ updateDataValue(surfaceId: string, path: string, value: unknown): void;
131
+ /**
132
+ * 分发 Action
133
+ */
134
+ dispatchAction(action: A2UIAction, surfaceId?: string, componentId?: string): void;
135
+ /**
136
+ * 创建 Pending 状态的 Surface(用于显示骨架屏)
137
+ */
138
+ createPendingSurface(surfaceId: string, skeletonHint?: SkeletonHint): void;
139
+ /**
140
+ * 激活 Surface
141
+ */
142
+ activateSurface(surfaceId: string): void;
143
+ /**
144
+ * 关闭 Surface
145
+ */
146
+ closeSurface(surfaceId: string): void;
147
+ /**
148
+ * 直接设置整个数据模型
149
+ */
150
+ setSurfaceData(surfaceId: string, data: Record<string, unknown>): void;
151
+ /**
152
+ * 合并数据(保留用户输入)
153
+ */
154
+ mergeSurfaceData(surfaceId: string, data: Record<string, unknown>): void;
155
+ /**
156
+ * 获取单个 Surface
157
+ */
158
+ getSurface(surfaceId: string): A2UISurface | undefined;
159
+ /**
160
+ * 获取所有 Surface ID
161
+ */
162
+ getSurfaceIds(): string[];
163
+ /**
164
+ * 获取所有 Surface
165
+ */
166
+ getAllSurfaces(): A2UISurface[];
167
+ /**
168
+ * 获取组件树
169
+ */
170
+ getComponentTree(surfaceId: string): ResolvedComponent | null;
171
+ /**
172
+ * 查找组件
173
+ */
174
+ findComponent(surfaceId: string, componentId: string): A2UIComponentBase | undefined;
175
+ /**
176
+ * 清空所有 Surface
177
+ */
178
+ clear(): void;
179
+ /**
180
+ * 清空所有 Surface(别名)
181
+ */
182
+ clearAllSurfaces(): void;
183
+ /**
184
+ * 销毁处理器
185
+ */
186
+ destroy(): void;
187
+ /**
188
+ * 通知所有订阅者
189
+ * 先更新缓存快照,再通知订阅者
190
+ */
191
+ private emitChange;
192
+ }
193
+ /**
194
+ * 创建 A2UI 消息处理器实例
195
+ */
196
+ export declare function createA2uiProcessor(options?: A2uiMessageProcessorOptions): A2uiMessageProcessor;
197
+ export default A2uiMessageProcessor;