@tdesign-react/chat 1.0.2-alpha.8 → 1.1.0-alpha.1

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 (446) hide show
  1. package/es/_chunks/dep-f2051ebd.js +839 -0
  2. package/es/_chunks/dep-f2051ebd.js.map +1 -0
  3. package/es/_util/reactify.d.ts +1 -2
  4. package/es/_util/reactify.js +81 -231
  5. package/es/_util/reactify.js.map +1 -1
  6. package/es/_util/useDynamicStyle.js +1 -1
  7. package/es/attachments/index.js +4 -6
  8. package/es/attachments/index.js.map +1 -1
  9. package/es/chat-actionbar/_example-js/base.d.ts +2 -0
  10. package/es/chat-actionbar/_example-js/custom.d.ts +2 -0
  11. package/es/chat-actionbar/_example-js/style.d.ts +2 -0
  12. package/es/chat-actionbar/index.js +4 -6
  13. package/es/chat-actionbar/index.js.map +1 -1
  14. package/es/chat-attachments/_example-js/base.d.ts +2 -0
  15. package/es/chat-attachments/_example-js/scroll-x.d.ts +2 -0
  16. package/es/chat-attachments/_example-js/scroll-y.d.ts +2 -0
  17. package/es/chat-attachments/index.js +3 -1
  18. package/es/chat-attachments/index.js.map +1 -1
  19. package/es/chat-engine/_example-js/agui-basic.d.ts +10 -0
  20. package/es/chat-engine/_example-js/agui-comprehensive.d.ts +2 -0
  21. package/es/chat-engine/_example-js/agui-test.d.ts +11 -0
  22. package/es/chat-engine/_example-js/agui-toolcall.d.ts +5 -0
  23. package/es/chat-engine/_example-js/agui-videoclip.d.ts +8 -0
  24. package/es/chat-engine/_example-js/agui.d.ts +1 -0
  25. package/es/chat-engine/_example-js/basic.d.ts +9 -0
  26. package/es/chat-engine/_example-js/components/HotelCard.d.ts +3 -0
  27. package/es/chat-engine/_example-js/components/HumanInputForm.d.ts +6 -0
  28. package/es/chat-engine/_example-js/components/HumanInputResult.d.ts +3 -0
  29. package/es/chat-engine/_example-js/components/ItineraryCard.d.ts +3 -0
  30. package/es/chat-engine/_example-js/components/PlanningStatePanel.d.ts +4 -0
  31. package/es/chat-engine/_example-js/components/Toolcall.d.ts +4 -0
  32. package/es/chat-engine/_example-js/components/WeatherCard.d.ts +3 -0
  33. package/es/chat-engine/_example-js/components/login.d.ts +1 -0
  34. package/es/chat-engine/_example-js/comprehensive.d.ts +12 -0
  35. package/es/chat-engine/_example-js/custom-content.d.ts +1 -0
  36. package/es/chat-engine/_example-js/hookComponent.d.ts +1 -0
  37. package/es/chat-engine/_example-js/initial-messages.d.ts +9 -0
  38. package/es/chat-engine/_example-js/instance-methods.d.ts +13 -0
  39. package/es/chat-engine/_example-js/travel-actions.d.ts +91 -0
  40. package/es/chat-engine/_example-js/travelToolcall.d.ts +1 -0
  41. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +196 -0
  42. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +301 -0
  43. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
  44. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
  45. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
  46. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
  47. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
  48. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
  49. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
  50. package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
  51. package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
  52. package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
  53. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
  54. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
  55. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
  56. package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
  57. package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
  58. package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
  59. package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
  60. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
  61. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
  62. package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
  63. package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
  64. package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
  65. package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
  66. package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
  67. package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
  68. package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
  69. package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
  70. package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
  71. package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
  72. package/es/chat-engine/components/a2ui/containers/index.js +30 -0
  73. package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
  74. package/es/chat-engine/components/a2ui/index.d.ts +11 -0
  75. package/es/chat-engine/components/a2ui/index.js +62 -0
  76. package/es/chat-engine/components/a2ui/index.js.map +1 -0
  77. package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +33 -0
  78. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +80 -0
  79. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
  80. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
  81. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
  82. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
  83. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
  84. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
  85. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
  86. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
  87. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
  88. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
  89. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
  90. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
  91. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
  92. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
  93. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
  94. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
  95. package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
  96. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
  97. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
  98. package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
  99. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
  100. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
  101. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
  102. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
  103. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
  104. package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
  105. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
  106. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
  107. package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
  108. package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
  109. package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
  110. package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
  111. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
  112. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
  113. package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
  114. package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
  115. package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
  116. package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
  117. package/es/chat-engine/components/a2ui/registry.js +74 -0
  118. package/es/chat-engine/components/a2ui/registry.js.map +1 -0
  119. package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.d.ts +1 -0
  120. package/es/chat-engine/components/activity/index.js +18 -0
  121. package/es/chat-engine/components/activity/index.js.map +1 -0
  122. package/es/chat-engine/components/activity/registry.d.ts +44 -0
  123. package/es/{chatbot/components/toolcall → chat-engine/components/activity}/registry.js +32 -22
  124. package/es/chat-engine/components/activity/registry.js.map +1 -0
  125. package/es/chat-engine/components/activity/render.d.ts +11 -0
  126. package/es/chat-engine/components/activity/render.js +107 -0
  127. package/es/chat-engine/components/activity/render.js.map +1 -0
  128. package/es/chat-engine/components/activity/types.d.ts +32 -0
  129. package/es/chat-engine/components/activity/types.js +7 -0
  130. package/es/chat-engine/components/activity/types.js.map +1 -0
  131. package/es/chat-engine/components/index.d.ts +4 -0
  132. package/es/chat-engine/components/index.js +76 -0
  133. package/es/chat-engine/components/index.js.map +1 -0
  134. package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.d.ts +36 -0
  135. package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js +36 -0
  136. package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js.map +1 -0
  137. package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.d.ts +46 -0
  138. package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js +36 -0
  139. package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js.map +1 -0
  140. package/es/chat-engine/components/json-render/SurfaceStateManager.d.ts +113 -0
  141. package/es/chat-engine/components/json-render/SurfaceStateManager.js +195 -0
  142. package/es/chat-engine/components/json-render/SurfaceStateManager.js.map +1 -0
  143. package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.d.ts +49 -0
  144. package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js +307 -0
  145. package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js.map +1 -0
  146. package/es/chat-engine/components/json-render/adapters/a2ui-types.d.ts +96 -0
  147. package/es/chat-engine/components/json-render/adapters/a2ui-types.js +7 -0
  148. package/es/chat-engine/components/json-render/adapters/a2ui-types.js.map +1 -0
  149. package/es/chat-engine/components/json-render/adapters/index.d.ts +7 -0
  150. package/es/chat-engine/components/json-render/adapters/index.js +11 -0
  151. package/es/chat-engine/components/json-render/adapters/index.js.map +1 -0
  152. package/es/chat-engine/components/json-render/catalog/a2ui-binding.d.ts +64 -0
  153. package/es/chat-engine/components/json-render/catalog/a2ui-binding.js +36 -0
  154. package/es/chat-engine/components/json-render/catalog/a2ui-binding.js.map +1 -0
  155. package/es/chat-engine/components/json-render/catalog/a2ui-registry.d.ts +78 -0
  156. package/es/chat-engine/components/json-render/catalog/a2ui-registry.js +36 -0
  157. package/es/chat-engine/components/json-render/catalog/a2ui-registry.js.map +1 -0
  158. package/es/chat-engine/components/json-render/catalog/button.d.ts +14 -0
  159. package/es/chat-engine/components/json-render/catalog/button.js +71 -0
  160. package/es/chat-engine/components/json-render/catalog/button.js.map +1 -0
  161. package/es/chat-engine/components/json-render/catalog/card.d.ts +11 -0
  162. package/es/chat-engine/components/json-render/catalog/card.js +57 -0
  163. package/es/chat-engine/components/json-render/catalog/card.js.map +1 -0
  164. package/es/chat-engine/components/json-render/catalog/index.d.ts +127 -0
  165. package/es/chat-engine/components/json-render/catalog/index.js +36 -0
  166. package/es/chat-engine/components/json-render/catalog/index.js.map +1 -0
  167. package/es/chat-engine/components/json-render/catalog/input.d.ts +20 -0
  168. package/es/chat-engine/components/json-render/catalog/input.js +36 -0
  169. package/es/chat-engine/components/json-render/catalog/input.js.map +1 -0
  170. package/es/chat-engine/components/json-render/catalog/layout.d.ts +44 -0
  171. package/es/chat-engine/components/json-render/catalog/layout.js +129 -0
  172. package/es/chat-engine/components/json-render/catalog/layout.js.map +1 -0
  173. package/es/chat-engine/components/json-render/catalog/text.d.ts +11 -0
  174. package/es/chat-engine/components/json-render/catalog/text.js +31 -0
  175. package/es/chat-engine/components/json-render/catalog/text.js.map +1 -0
  176. package/es/chat-engine/components/json-render/catalog.d.ts +549 -0
  177. package/es/chat-engine/components/json-render/catalog.js +147 -0
  178. package/es/chat-engine/components/json-render/catalog.js.map +1 -0
  179. package/es/chat-engine/components/json-render/config.d.ts +154 -0
  180. package/es/chat-engine/components/json-render/config.js +36 -0
  181. package/es/chat-engine/components/json-render/config.js.map +1 -0
  182. package/es/chat-engine/components/json-render/contexts/actions.d.ts +74 -0
  183. package/es/chat-engine/components/json-render/contexts/actions.js +290 -0
  184. package/es/chat-engine/components/json-render/contexts/actions.js.map +1 -0
  185. package/es/chat-engine/components/json-render/contexts/data.d.ts +45 -0
  186. package/es/chat-engine/components/json-render/contexts/data.js +104 -0
  187. package/es/chat-engine/components/json-render/contexts/data.js.map +1 -0
  188. package/es/chat-engine/components/json-render/contexts/validation.d.ts +59 -0
  189. package/es/chat-engine/components/json-render/contexts/validation.js +151 -0
  190. package/es/chat-engine/components/json-render/contexts/validation.js.map +1 -0
  191. package/es/chat-engine/components/json-render/contexts/visibility.d.ts +29 -0
  192. package/es/chat-engine/components/json-render/contexts/visibility.js +56 -0
  193. package/es/chat-engine/components/json-render/contexts/visibility.js.map +1 -0
  194. package/es/chat-engine/components/json-render/engine.d.ts +58 -0
  195. package/es/chat-engine/components/json-render/engine.js +88 -0
  196. package/es/chat-engine/components/json-render/engine.js.map +1 -0
  197. package/es/chat-engine/components/json-render/index.d.ts +34 -0
  198. package/es/chat-engine/components/json-render/index.js +36 -0
  199. package/es/chat-engine/components/json-render/index.js.map +1 -0
  200. package/es/chat-engine/components/json-render/performance.d.ts +91 -0
  201. package/es/chat-engine/components/json-render/performance.js +135 -0
  202. package/es/chat-engine/components/json-render/performance.js.map +1 -0
  203. package/es/chat-engine/components/json-render/renderer.d.ts +71 -0
  204. package/es/chat-engine/components/json-render/renderer.js +124 -0
  205. package/es/chat-engine/components/json-render/renderer.js.map +1 -0
  206. package/es/chat-engine/components/json-render/types.d.ts +69 -0
  207. package/es/chat-engine/components/json-render/types.js +7 -0
  208. package/es/chat-engine/components/json-render/types.js.map +1 -0
  209. package/es/chat-engine/components/provider/agent-state.js +39 -2
  210. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  211. package/es/chat-engine/components/toolcall/index.js +35 -2
  212. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  213. package/es/chat-engine/components/toolcall/registry.js +1 -1
  214. package/es/chat-engine/components/toolcall/render.d.ts +1 -1
  215. package/es/chat-engine/components/toolcall/render.js +102 -26
  216. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  217. package/es/chat-engine/components/toolcall/types.js +1 -1
  218. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  219. package/es/chat-engine/core/a2ui/index.js +24 -0
  220. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  221. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  222. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  223. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  224. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  225. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  226. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  227. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  228. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  229. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  230. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  231. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  232. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  233. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  234. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  235. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  236. package/es/chat-engine/core/a2ui/types/types.d.ts +770 -0
  237. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  238. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  239. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  240. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  241. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  242. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  243. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  244. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  245. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  246. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  247. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  248. package/es/chat-engine/core/adapters/agui/activity-manager.d.ts +102 -0
  249. package/es/chat-engine/core/adapters/agui/activity-manager.js +144 -0
  250. package/es/chat-engine/core/adapters/agui/activity-manager.js.map +1 -0
  251. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +149 -0
  252. package/es/chat-engine/core/adapters/agui/event-mapper.js +415 -0
  253. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -0
  254. package/es/chat-engine/core/adapters/agui/events.d.ts +1550 -0
  255. package/es/chat-engine/core/adapters/agui/events.js +199 -0
  256. package/es/chat-engine/core/adapters/agui/events.js.map +1 -0
  257. package/es/chat-engine/core/adapters/agui/index.d.ts +95 -0
  258. package/es/chat-engine/core/adapters/agui/index.js +195 -0
  259. package/es/chat-engine/core/adapters/agui/index.js.map +1 -0
  260. package/es/chat-engine/core/adapters/agui/state-manager.d.ts +99 -0
  261. package/es/chat-engine/core/adapters/agui/state-manager.js +168 -0
  262. package/es/chat-engine/core/adapters/agui/state-manager.js.map +1 -0
  263. package/es/chat-engine/core/adapters/agui/types.d.ts +818 -0
  264. package/es/chat-engine/core/adapters/agui/types.js +95 -0
  265. package/es/chat-engine/core/adapters/agui/types.js.map +1 -0
  266. package/es/chat-engine/core/adapters/agui/utils.d.ts +203 -0
  267. package/es/chat-engine/core/adapters/agui/utils.js +330 -0
  268. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -0
  269. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  270. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  271. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  272. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  273. package/es/chat-engine/core/event-bus/index.js +13 -0
  274. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  275. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  276. package/es/chat-engine/core/event-bus/types.js +32 -0
  277. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  278. package/es/chat-engine/core/index.d.ts +147 -0
  279. package/es/chat-engine/core/index.js +754 -0
  280. package/es/chat-engine/core/index.js.map +1 -0
  281. package/es/chat-engine/core/processor/index.d.ts +20 -0
  282. package/es/chat-engine/core/processor/index.js +146 -0
  283. package/es/chat-engine/core/processor/index.js.map +1 -0
  284. package/es/chat-engine/core/server/batch-client.d.ts +20 -0
  285. package/es/chat-engine/core/server/batch-client.js +114 -0
  286. package/es/chat-engine/core/server/batch-client.js.map +1 -0
  287. package/es/chat-engine/core/server/connection-manager.d.ts +39 -0
  288. package/es/chat-engine/core/server/connection-manager.js +84 -0
  289. package/es/chat-engine/core/server/connection-manager.js.map +1 -0
  290. package/es/chat-engine/core/server/errors.d.ts +22 -0
  291. package/es/chat-engine/core/server/errors.js +80 -0
  292. package/es/chat-engine/core/server/errors.js.map +1 -0
  293. package/es/chat-engine/core/server/index.d.ts +11 -0
  294. package/es/chat-engine/core/server/index.js +26 -0
  295. package/es/chat-engine/core/server/index.js.map +1 -0
  296. package/es/chat-engine/core/server/llm-service.d.ts +44 -0
  297. package/es/chat-engine/core/server/llm-service.js +200 -0
  298. package/es/chat-engine/core/server/llm-service.js.map +1 -0
  299. package/es/chat-engine/core/server/sse-client.d.ts +77 -0
  300. package/es/chat-engine/core/server/sse-client.js +362 -0
  301. package/es/chat-engine/core/server/sse-client.js.map +1 -0
  302. package/es/chat-engine/core/server/sse-parser.d.ts +49 -0
  303. package/es/chat-engine/core/server/sse-parser.js +116 -0
  304. package/es/chat-engine/core/server/sse-parser.js.map +1 -0
  305. package/es/chat-engine/core/server/types.d.ts +54 -0
  306. package/es/chat-engine/core/server/types.js +28 -0
  307. package/es/chat-engine/core/server/types.js.map +1 -0
  308. package/es/chat-engine/core/store/message.d.ts +27 -0
  309. package/es/chat-engine/core/store/message.js +263 -0
  310. package/es/chat-engine/core/store/message.js.map +1 -0
  311. package/es/chat-engine/core/store/model.d.ts +8 -0
  312. package/es/chat-engine/core/store/model.js +65 -0
  313. package/es/chat-engine/core/store/model.js.map +1 -0
  314. package/es/chat-engine/core/store/reactiveState.d.ts +52 -0
  315. package/es/chat-engine/core/store/reactiveState.js +1359 -0
  316. package/es/chat-engine/core/store/reactiveState.js.map +1 -0
  317. package/es/chat-engine/core/type.d.ts +271 -0
  318. package/es/chat-engine/core/type.js +7 -0
  319. package/es/chat-engine/core/type.js.map +1 -0
  320. package/es/chat-engine/core/utils/eventEmitter.d.ts +10 -0
  321. package/es/chat-engine/core/utils/eventEmitter.js +67 -0
  322. package/es/chat-engine/core/utils/eventEmitter.js.map +1 -0
  323. package/es/chat-engine/core/utils/index.d.ts +33 -0
  324. package/es/chat-engine/core/utils/index.js +999 -0
  325. package/es/chat-engine/core/utils/index.js.map +1 -0
  326. package/es/chat-engine/core/utils/logger.d.ts +30 -0
  327. package/es/chat-engine/core/utils/logger.js +87 -0
  328. package/es/chat-engine/core/utils/logger.js.map +1 -0
  329. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  330. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  331. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  332. package/es/chat-engine/hooks/a2ui/index.d.ts +12 -0
  333. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  334. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  335. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  336. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  337. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  338. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  339. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  340. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  341. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  342. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  343. package/es/chat-engine/hooks/index.d.ts +4 -0
  344. package/es/chat-engine/hooks/index.js +54 -0
  345. package/es/chat-engine/hooks/index.js.map +1 -0
  346. package/es/chat-engine/hooks/useAgentActivity.d.ts +15 -0
  347. package/es/chat-engine/hooks/useAgentActivity.js +73 -0
  348. package/es/chat-engine/hooks/useAgentActivity.js.map +1 -0
  349. package/es/chat-engine/hooks/useAgentState.js +39 -2
  350. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  351. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  352. package/es/chat-engine/hooks/useChat.d.ts +3 -3
  353. package/es/chat-engine/hooks/useChat.js +41 -3
  354. package/es/chat-engine/hooks/useChat.js.map +1 -1
  355. package/es/chat-engine/hooks/useJsonRenderActivity.d.ts +56 -0
  356. package/es/chat-engine/hooks/useJsonRenderActivity.js +63 -0
  357. package/es/chat-engine/hooks/useJsonRenderActivity.js.map +1 -0
  358. package/es/chat-engine/index.d.ts +3 -3
  359. package/es/chat-engine/index.js +61 -5
  360. package/es/chat-engine/index.js.map +1 -1
  361. package/es/chat-filecard/_example-js/base.d.ts +1 -0
  362. package/es/chat-filecard/index.js +4 -6
  363. package/es/chat-filecard/index.js.map +1 -1
  364. package/es/chat-loading/_example-js/base.d.ts +2 -0
  365. package/es/chat-loading/_example-js/text.d.ts +2 -0
  366. package/es/chat-loading/index.js +4 -6
  367. package/es/chat-loading/index.js.map +1 -1
  368. package/es/chat-markdown/_example-js/base.d.ts +1 -0
  369. package/es/chat-markdown/_example-js/custom.d.ts +2 -0
  370. package/es/chat-markdown/_example-js/event.d.ts +1 -0
  371. package/es/chat-markdown/_example-js/footnote.d.ts +2 -0
  372. package/es/chat-markdown/_example-js/plugin.d.ts +2 -0
  373. package/es/chat-markdown/_example-js/theme.d.ts +2 -0
  374. package/es/chat-markdown/index.js +4 -6
  375. package/es/chat-markdown/index.js.map +1 -1
  376. package/es/chat-message/_example-js/action.d.ts +1 -0
  377. package/es/chat-message/_example-js/base.d.ts +1 -0
  378. package/es/chat-message/_example-js/configure.d.ts +1 -0
  379. package/es/chat-message/_example-js/content.d.ts +1 -0
  380. package/es/chat-message/_example-js/custom.d.ts +1 -0
  381. package/es/chat-message/_example-js/handle-actions.d.ts +7 -0
  382. package/es/chat-message/_example-js/status.d.ts +1 -0
  383. package/es/chat-message/_example-js/think.d.ts +1 -0
  384. package/es/chat-message/index.js +4 -6
  385. package/es/chat-message/index.js.map +1 -1
  386. package/es/chat-sender/_example-js/attachment.d.ts +2 -0
  387. package/es/chat-sender/_example-js/base.d.ts +2 -0
  388. package/es/chat-sender/_example-js/custom.d.ts +2 -0
  389. package/es/chat-sender/index.js +4 -6
  390. package/es/chat-sender/index.js.map +1 -1
  391. package/es/chat-thinking/_example-js/base.d.ts +1 -0
  392. package/es/chat-thinking/_example-js/style.d.ts +1 -0
  393. package/es/chat-thinking/index.js +4 -6
  394. package/es/chat-thinking/index.js.map +1 -1
  395. package/es/chatbot/_example-js/agent.d.ts +1 -0
  396. package/es/chatbot/_example-js/agui.d.ts +13 -0
  397. package/es/chatbot/_example-js/backup/travel.d.ts +1 -0
  398. package/es/chatbot/_example-js/basic.d.ts +1 -0
  399. package/es/chatbot/_example-js/code.d.ts +1 -0
  400. package/es/chatbot/_example-js/components/ItineraryCard.d.ts +3 -0
  401. package/es/chatbot/_example-js/components/login.d.ts +1 -0
  402. package/es/chatbot/_example-js/comprehensive.d.ts +1 -0
  403. package/es/chatbot/_example-js/custom-content.d.ts +1 -0
  404. package/es/chatbot/_example-js/custom-merge.d.ts +1 -0
  405. package/es/chatbot/_example-js/custom.d.ts +1 -0
  406. package/es/chatbot/_example-js/docs.d.ts +1 -0
  407. package/es/chatbot/_example-js/image.d.ts +1 -0
  408. package/es/chatbot/_example-js/initial-messages.d.ts +9 -0
  409. package/es/chatbot/_example-js/instance-methods.d.ts +14 -0
  410. package/es/chatbot/_example-js/nostream.d.ts +1 -0
  411. package/es/chatbot/_example-js/quick-start.d.ts +9 -0
  412. package/es/chatbot/_example-js/research.d.ts +1 -0
  413. package/es/chatbot/_example-js/role-message-config.d.ts +22 -0
  414. package/es/chatbot/_example-js/sender-config.d.ts +20 -0
  415. package/es/chatbot/_example-js/service-config.d.ts +17 -0
  416. package/es/chatbot/_example-js/simple.d.ts +1 -0
  417. package/es/chatbot/_example-js/utils/messageRenderer.d.ts +5 -0
  418. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  419. package/es/chatbot/index.js +4 -6
  420. package/es/chatbot/index.js.map +1 -1
  421. package/es/index.js +59 -9
  422. package/es/index.js.map +1 -1
  423. package/es/style/index.js +1 -1
  424. package/package.json +6 -3
  425. package/es/chatbot/components/provider/agent-state.d.ts +0 -5
  426. package/es/chatbot/components/provider/agent-state.js +0 -28
  427. package/es/chatbot/components/provider/agent-state.js.map +0 -1
  428. package/es/chatbot/components/toolcall/index.js +0 -19
  429. package/es/chatbot/components/toolcall/registry.d.ts +0 -35
  430. package/es/chatbot/components/toolcall/registry.js.map +0 -1
  431. package/es/chatbot/components/toolcall/render.d.ts +0 -13
  432. package/es/chatbot/components/toolcall/render.js +0 -207
  433. package/es/chatbot/components/toolcall/render.js.map +0 -1
  434. package/es/chatbot/components/toolcall/types.d.ts +0 -57
  435. package/es/chatbot/components/toolcall/types.js +0 -15
  436. package/es/chatbot/components/toolcall/types.js.map +0 -1
  437. package/es/chatbot/hooks/useAgentState.d.ts +0 -40
  438. package/es/chatbot/hooks/useAgentState.js +0 -76
  439. package/es/chatbot/hooks/useAgentState.js.map +0 -1
  440. package/es/chatbot/hooks/useAgentToolcall.d.ts +0 -28
  441. package/es/chatbot/hooks/useAgentToolcall.js +0 -78
  442. package/es/chatbot/hooks/useAgentToolcall.js.map +0 -1
  443. package/es/chatbot/hooks/useChat.d.ts +0 -11
  444. package/es/chatbot/hooks/useChat.js +0 -66
  445. package/es/chatbot/hooks/useChat.js.map +0 -1
  446. /package/es/{chatbot/components/toolcall → chat-engine/hooks/a2ui}/index.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"A2uiMessageProcessor.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/A2uiMessageProcessor.ts"],"sourcesContent":["/**\n * A2UI 消息处理器 v2\n * 完全按照 A2UI v0.9 协议实现\n * \n * 支持四种消息类型:\n * - createSurface: 创建 Surface\n * - updateComponents: 更新组件\n * - updateDataModel: 更新数据模型\n * - deleteSurface: 删除 Surface\n * \n * 实现 External Store 模式,支持 useSyncExternalStore\n */\n\nimport type {\n A2UISurface,\n A2UIComponentBase,\n A2UIServerMessage,\n A2UIAction,\n ActionHandler,\n SkeletonHint,\n ResolvedComponent,\n UserActionMessage,\n} from '../types';\nimport { DataStore } from './DataStore';\nimport { ComponentTree } from './ComponentTree';\nimport { PathResolver } from './PathResolver';\n\nexport type SurfaceSnapshot = Map<string, A2UISurface>;\nexport type SurfaceListener = () => void;\n\n/**\n * A2UI 消息处理器配置\n */\nexport interface A2uiMessageProcessorOptions {\n /** Action 处理回调 */\n onAction?: ActionHandler;\n /** 用户行为消息发送回调 */\n onSendMessage?: (message: UserActionMessage) => void;\n /** 数据变更回调 */\n onDataChange?: (surfaceId: string, path: string, value: unknown) => void;\n /** 验证错误回调 */\n onValidationError?: (errors: Array<{ type: string; message: string; path?: string }>) => void;\n}\n\n/**\n * 内部 Surface 数据结构\n */\ninterface InternalSurface {\n id: string;\n catalogId: string;\n state: 'active' | 'closed' | 'pending';\n components: Map<string, A2UIComponentBase>;\n dataStore: DataStore;\n componentTree: ComponentTree | null;\n skeletonHint?: SkeletonHint;\n updatedAt: number;\n}\n\n/**\n * A2UI 消息处理器\n * \n * 核心功能:\n * 1. 处理 A2UI v0.9 协议消息\n * 2. 管理 Surface 生命周期\n * 3. 维护组件注册表和数据模型\n * 4. 构建组件树\n * 5. 支持 useSyncExternalStore 订阅\n */\nexport class A2uiMessageProcessor {\n private surfaces = new Map<string, InternalSurface>();\n private listeners = new Set<SurfaceListener>();\n private pathResolver = new PathResolver();\n private options: A2uiMessageProcessorOptions;\n \n // 缓存的快照,避免 useSyncExternalStore 无限循环\n private cachedSnapshot: SurfaceSnapshot = new Map();\n private snapshotVersion = 0;\n\n constructor(options: A2uiMessageProcessorOptions = {}) {\n this.options = options;\n // 绑定方法以确保 this 指向正确\n this.subscribe = this.subscribe.bind(this);\n this.getSnapshot = this.getSnapshot.bind(this);\n this.getServerSnapshot = this.getServerSnapshot.bind(this);\n }\n\n // ============= External Store 接口 =============\n\n /**\n * 订阅状态变化(供 useSyncExternalStore 使用)\n */\n subscribe(listener: SurfaceListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * 获取当前快照(供 useSyncExternalStore 使用)\n * 返回缓存的快照,确保引用稳定\n */\n getSnapshot(): SurfaceSnapshot {\n return this.cachedSnapshot;\n }\n\n /**\n * 获取服务端快照(SSR 场景)\n */\n getServerSnapshot(): SurfaceSnapshot {\n return this.cachedSnapshot;\n }\n\n /**\n * 更新缓存的快照\n * 只在数据变更时调用\n */\n private updateCachedSnapshot(): void {\n const snapshot = new Map<string, A2UISurface>();\n \n this.surfaces.forEach((internal, id) => {\n snapshot.set(id, {\n id: internal.id,\n catalogId: internal.catalogId,\n state: internal.state,\n components: internal.components,\n root: internal.componentTree?.root || null,\n data: internal.dataStore.getSnapshot(),\n skeletonHint: internal.skeletonHint,\n updatedAt: internal.updatedAt,\n });\n });\n \n this.cachedSnapshot = snapshot;\n this.snapshotVersion++;\n }\n\n // ============= A2UI v0.9 消息处理 =============\n\n /**\n * 处理单条 A2UI v0.9 消息\n */\n processMessage(message: A2UIServerMessage): void {\n this.processMessageInternal(message);\n this.emitChange();\n }\n\n /**\n * 批量处理消息\n */\n processMessages(messages: A2UIServerMessage[]): void {\n for (const message of messages) {\n this.processMessageInternal(message);\n }\n\n // 所有消息处理完后统一通知\n this.emitChange();\n }\n\n /**\n * 增量处理消息(性能优化)\n * 当已知消息是新增的时候使用,避免重复处理\n */\n processMessagesIncremental(messages: A2UIServerMessage[]): void {\n if (messages.length === 0) return;\n\n for (const message of messages) {\n this.processMessageInternal(message);\n }\n\n this.emitChange();\n }\n\n /**\n * 内部消息处理(不触发 emitChange)\n */\n private processMessageInternal(message: A2UIServerMessage): void {\n if ('createSurface' in message) {\n this.handleCreateSurface(message.createSurface);\n } else if ('updateComponents' in message) {\n this.handleUpdateComponents(message.updateComponents);\n } else if ('updateDataModel' in message) {\n this.handleUpdateDataModel(message.updateDataModel);\n } else if ('deleteSurface' in message) {\n this.handleDeleteSurface(message.deleteSurface);\n }\n }\n\n // ============= 消息处理器 =============\n\n /**\n * 处理 createSurface 消息\n */\n private handleCreateSurface(payload: { surfaceId: string; catalogId: string }): void {\n const surface: InternalSurface = {\n id: payload.surfaceId,\n catalogId: payload.catalogId,\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n updatedAt: Date.now(),\n };\n\n this.surfaces.set(payload.surfaceId, surface);\n }\n\n /**\n * 处理 updateComponents 消息\n */\n private handleUpdateComponents(payload: { surfaceId: string; components: A2UIComponentBase[] }): void {\n let surface = this.surfaces.get(payload.surfaceId);\n \n // 如果 Surface 不存在,自动创建(容错处理)\n if (!surface) {\n console.warn(`[A2UI] Surface ${payload.surfaceId} not found, auto-creating`);\n surface = {\n id: payload.surfaceId,\n catalogId: 'default',\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n updatedAt: Date.now(),\n };\n this.surfaces.set(payload.surfaceId, surface);\n }\n\n // 添加/更新组件到平铺注册表\n for (const component of payload.components) {\n surface.components.set(component.id, component);\n }\n\n // 重建组件树\n this.rebuildComponentTree(surface);\n\n // 如果有 root 组件,激活 Surface\n if (surface.components.has('root') && surface.state === 'pending') {\n surface.state = 'active';\n }\n\n surface.updatedAt = Date.now();\n }\n\n /**\n * 处理 updateDataModel 消息\n */\n private handleUpdateDataModel(payload: {\n surfaceId: string;\n path?: string;\n op?: 'add' | 'replace' | 'remove';\n value?: unknown;\n }): void {\n const surface = this.surfaces.get(payload.surfaceId);\n if (!surface) {\n console.warn(`[A2UI] Surface ${payload.surfaceId} not found`);\n return;\n }\n\n const path = payload.path || '/';\n const op = payload.op || 'replace';\n\n if (op === 'remove') {\n surface.dataStore.remove(path);\n } else {\n // add 和 replace 都使用 set\n surface.dataStore.set(path, payload.value);\n }\n\n // 只有当数据变化可能影响 template 渲染时才重建组件树\n // 优化:检查是否有组件使用了 template children\n if (this.needsTreeRebuild(surface, path)) {\n this.rebuildComponentTree(surface);\n }\n surface.updatedAt = Date.now();\n }\n\n /**\n * 检查是否需要重建组件树\n * 优化:只有当路径可能影响 template 渲染时才需要重建\n */\n private needsTreeRebuild(surface: InternalSurface, path: string): boolean {\n // 如果是根路径替换,需要重建\n if (path === '/' || path === '') {\n return true;\n }\n\n // 检查是否有组件的 children 使用了这个路径作为 template\n for (const component of surface.components.values()) {\n const children = (component as any).children;\n if (children && typeof children === 'object' && !Array.isArray(children)) {\n // A2UI v0.9 格式: { componentId, path }\n const templatePath = (children as any).path;\n if (templatePath && (path.startsWith(templatePath) || templatePath.startsWith(path))) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * 只更新数据模型,不重建组件树(性能优化)\n * 适用于不影响组件结构的数据更新(如表单输入)\n */\n updateDataOnly(surfaceId: string, path: string, value: unknown): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.set(path, value);\n surface.updatedAt = Date.now();\n \n // 只更新快照,不重建组件树\n this.updateCachedSnapshot();\n this.listeners.forEach((listener) => listener());\n \n // 触发回调\n this.options.onDataChange?.(surfaceId, path, value);\n }\n\n /**\n * 处理 deleteSurface 消息\n */\n private handleDeleteSurface(payload: { surfaceId: string }): void {\n this.surfaces.delete(payload.surfaceId);\n }\n\n // ============= 组件树构建 =============\n\n /**\n * 重建组件树\n */\n private rebuildComponentTree(surface: InternalSurface): void {\n // 只有存在 root 组件时才构建树\n if (!surface.components.has('root')) {\n surface.componentTree = null;\n return;\n }\n\n surface.componentTree = new ComponentTree(\n surface.components,\n surface.dataStore,\n this.pathResolver\n );\n }\n\n // ============= 数据访问(供 React 组件使用)=============\n\n /**\n * 获取数据\n * @param surfaceId Surface ID\n * @param path 数据路径\n * @param dataContextPath 当前组件的数据上下文\n */\n getData(surfaceId: string, path: string, dataContextPath: string = ''): unknown {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return undefined;\n\n const resolvedPath = this.pathResolver.resolve(path, dataContextPath);\n return surface.dataStore.get(resolvedPath);\n }\n\n /**\n * 设置数据(双向绑定)\n */\n setData(surfaceId: string, path: string, dataContextPath: string, value: unknown): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n const resolvedPath = this.pathResolver.resolve(path, dataContextPath);\n surface.dataStore.set(resolvedPath, value);\n\n // 重建组件树并通知\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n\n // 触发回调\n this.options.onDataChange?.(surfaceId, resolvedPath, value);\n }\n\n /**\n * 更新数据值(简化接口,不需要 dataContextPath)\n */\n updateDataValue(surfaceId: string, path: string, value: unknown): void {\n this.setData(surfaceId, path, '', value);\n }\n\n // ============= Action 处理 =============\n\n /**\n * 分发 Action\n */\n dispatchAction(action: A2UIAction, surfaceId?: string, componentId?: string): void {\n // 调用外部回调\n if (this.options.onAction) {\n const context = surfaceId ? {\n surfaceId,\n componentId,\n updateData: (path: string, value: unknown) => {\n this.updateDataValue(surfaceId, path, value);\n },\n getData: (path?: string) => {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return undefined;\n return path ? surface.dataStore.get(path) : surface.dataStore.getSnapshot();\n },\n } : undefined;\n\n this.options.onAction(action, context);\n }\n\n // 发送用户行为消息\n if (this.options.onSendMessage && surfaceId && componentId) {\n this.options.onSendMessage({\n userAction: {\n name: action.name,\n surfaceId,\n sourceComponentId: componentId,\n timestamp: new Date().toISOString(),\n context: action.context || {},\n },\n });\n }\n }\n\n // ============= Surface 管理(扩展方法)=============\n\n /**\n * 创建 Pending 状态的 Surface(用于显示骨架屏)\n */\n createPendingSurface(surfaceId: string, skeletonHint?: SkeletonHint): void {\n if (this.surfaces.has(surfaceId)) return;\n\n const surface: InternalSurface = {\n id: surfaceId,\n catalogId: 'default',\n state: 'pending',\n components: new Map(),\n dataStore: new DataStore(),\n componentTree: null,\n skeletonHint,\n updatedAt: Date.now(),\n };\n\n this.surfaces.set(surfaceId, surface);\n this.emitChange();\n }\n\n /**\n * 激活 Surface\n */\n activateSurface(surfaceId: string): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.state = 'active';\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 关闭 Surface\n */\n closeSurface(surfaceId: string): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.state = 'closed';\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 直接设置整个数据模型\n */\n setSurfaceData(surfaceId: string, data: Record<string, unknown>): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.set('/', data);\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n /**\n * 合并数据(保留用户输入)\n */\n mergeSurfaceData(surfaceId: string, data: Record<string, unknown>): void {\n const surface = this.surfaces.get(surfaceId);\n if (!surface) return;\n\n surface.dataStore.merge('/', data);\n this.rebuildComponentTree(surface);\n surface.updatedAt = Date.now();\n this.emitChange();\n }\n\n // ============= 工具方法 =============\n\n /**\n * 获取单个 Surface\n */\n getSurface(surfaceId: string): A2UISurface | undefined {\n const internal = this.surfaces.get(surfaceId);\n if (!internal) return undefined;\n\n return {\n id: internal.id,\n catalogId: internal.catalogId,\n state: internal.state,\n components: internal.components,\n root: internal.componentTree?.root || null,\n data: internal.dataStore.getSnapshot(),\n skeletonHint: internal.skeletonHint,\n updatedAt: internal.updatedAt,\n };\n }\n\n /**\n * 获取所有 Surface ID\n */\n getSurfaceIds(): string[] {\n return Array.from(this.surfaces.keys());\n }\n\n /**\n * 获取所有 Surface\n */\n getAllSurfaces(): A2UISurface[] {\n return this.getSurfaceIds().map((id) => this.getSurface(id)!);\n }\n\n /**\n * 获取组件树\n */\n getComponentTree(surfaceId: string): ResolvedComponent | null {\n const surface = this.surfaces.get(surfaceId);\n return surface?.componentTree?.root || null;\n }\n\n /**\n * 查找组件\n */\n findComponent(surfaceId: string, componentId: string): A2UIComponentBase | undefined {\n const surface = this.surfaces.get(surfaceId);\n return surface?.components.get(componentId);\n }\n\n /**\n * 清空所有 Surface\n */\n clear(): void {\n this.surfaces.clear();\n this.emitChange();\n }\n\n /**\n * 清空所有 Surface(别名)\n */\n clearAllSurfaces(): void {\n this.clear();\n }\n\n /**\n * 销毁处理器\n */\n destroy(): void {\n this.clear();\n this.listeners.clear();\n }\n\n // ============= 内部方法 =============\n\n /**\n * 通知所有订阅者\n * 先更新缓存快照,再通知订阅者\n */\n private emitChange(): void {\n // 先更新缓存快照\n this.updateCachedSnapshot();\n // 再通知订阅者\n this.listeners.forEach((listener) => {\n listener();\n });\n }\n}\n\n/**\n * 创建 A2UI 消息处理器实例\n */\nexport function createA2uiProcessor(options?: A2uiMessageProcessorOptions): A2uiMessageProcessor {\n return new A2uiMessageProcessor(options);\n}\n\nexport default A2uiMessageProcessor;\n"],"names":["A2uiMessageProcessor","options","arguments","length","undefined","_classCallCheck","_defineProperty","Map","Set","PathResolver","subscribe","bind","getSnapshot","getServerSnapshot","_createClass","key","value","listener","_this","listeners","add","cachedSnapshot","updateCachedSnapshot","snapshot","surfaces","forEach","internal","id","_internal$componentTr","set","catalogId","state","components","root","componentTree","data","dataStore","skeletonHint","updatedAt","snapshotVersion","processMessage","message","processMessageInternal","emitChange","processMessages","messages","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","e","f","processMessagesIncremental","_iterator2","_step2","handleCreateSurface","createSurface","handleUpdateComponents","updateComponents","handleUpdateDataModel","updateDataModel","handleDeleteSurface","deleteSurface","payload","surface","surfaceId","DataStore","Date","now","get","console","warn","concat","_iterator3","_step3","component","rebuildComponentTree","has","path","op","remove","needsTreeRebuild","_iterator4","values","_step4","children","_typeof","Array","isArray","templatePath","startsWith","updateDataOnly","_this$options$onDataC","_this$options","onDataChange","call","ComponentTree","pathResolver","getData","dataContextPath","resolvedPath","resolve","setData","_this$options$onDataC2","_this$options2","updateDataValue","dispatchAction","action","componentId","_this2","onAction","context","updateData","onSendMessage","userAction","name","sourceComponentId","timestamp","toISOString","createPendingSurface","activateSurface","closeSurface","setSurfaceData","mergeSurfaceData","merge","getSurface","_internal$componentTr2","getSurfaceIds","from","keys","getAllSurfaces","_this3","map","getComponentTree","_surface$componentTre","findComponent","clear","clearAllSurfaces","destroy","createA2uiProcessor"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * A2UI ComponentTree
3
+ * 将平铺的组件列表转换为嵌套的组件树
4
+ * 参考 @a2ui/core ComponentTree 实现
5
+ *
6
+ * 支持两种 children 模式 (A2UI v0.9 规范):
7
+ * 1. 直接引用: children: ["comp1", "comp2"]
8
+ * 2. Template 模式: children: { componentId: "comp1", path: "/items" }
9
+ */
10
+ import type { A2UIComponentBase, ResolvedComponent } from '../types';
11
+ import type { DataStore } from './DataStore';
12
+ import type { PathResolver } from './PathResolver';
13
+ /**
14
+ * 组件树构建器
15
+ */
16
+ export declare class ComponentTree {
17
+ private components;
18
+ private dataStore;
19
+ private pathResolver;
20
+ /** 解析后的根组件 */
21
+ readonly root: ResolvedComponent | null;
22
+ constructor(components: Map<string, A2UIComponentBase>, dataStore: DataStore, pathResolver: PathResolver);
23
+ /**
24
+ * 递归构建组件树
25
+ * @param componentId 组件 ID
26
+ * @param dataContextPath 当前数据上下文路径
27
+ */
28
+ private buildTree;
29
+ /**
30
+ * 解析 children 属性
31
+ */
32
+ private resolveChildren;
33
+ /**
34
+ * 解析 Template 模式的 children
35
+ * Template 会根据 dataPath 指向的数组长度,创建多个子组件实例
36
+ */
37
+ private resolveTemplate;
38
+ /**
39
+ * 查找组件
40
+ */
41
+ findComponent(componentId: string): ResolvedComponent | null;
42
+ private findInTree;
43
+ /**
44
+ * 遍历组件树
45
+ */
46
+ traverse(callback: (component: ResolvedComponent) => void): void;
47
+ private traverseNode;
48
+ /**
49
+ * 获取所有组件 ID
50
+ */
51
+ getAllIds(): string[];
52
+ }
53
+ export default ComponentTree;
@@ -0,0 +1,158 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.14
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _typeof from '@babel/runtime/helpers/typeof';
8
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
9
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
10
+ import _createClass from '@babel/runtime/helpers/createClass';
11
+
12
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
13
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
14
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
15
+ 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; }
16
+ 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; }
17
+ var ComponentTree = /*#__PURE__*/function () {
18
+ function ComponentTree(components, dataStore, pathResolver) {
19
+ _classCallCheck(this, ComponentTree);
20
+ this.components = components;
21
+ this.dataStore = dataStore;
22
+ this.pathResolver = pathResolver;
23
+ this.root = this.buildTree("root", "/");
24
+ }
25
+ return _createClass(ComponentTree, [{
26
+ key: "buildTree",
27
+ value: function buildTree(componentId, dataContextPath) {
28
+ var _this = this;
29
+ var component = this.components.get(componentId);
30
+ if (!component) {
31
+ return null;
32
+ }
33
+ var resolved = _objectSpread(_objectSpread({}, component), {}, {
34
+ dataContextPath: dataContextPath
35
+ });
36
+ var children = component.children;
37
+ if (children) {
38
+ resolved.resolvedChildren = this.resolveChildren(children, dataContextPath);
39
+ }
40
+ var child = component.child;
41
+ if (child && typeof child === "string") {
42
+ var resolvedChild = this.buildTree(child, dataContextPath);
43
+ if (resolvedChild) {
44
+ resolved.resolvedChildren = [resolvedChild];
45
+ }
46
+ }
47
+ var tabItems = component.tabItems;
48
+ if (tabItems && Array.isArray(tabItems)) {
49
+ resolved.resolvedChildren = tabItems.map(function (item) {
50
+ return _this.buildTree(item.child, dataContextPath);
51
+ }).filter(function (c) {
52
+ return c !== null;
53
+ });
54
+ }
55
+ return resolved;
56
+ }
57
+ }, {
58
+ key: "resolveChildren",
59
+ value: function resolveChildren(children, dataContextPath) {
60
+ var _this2 = this;
61
+ if (Array.isArray(children)) {
62
+ return children.map(function (id) {
63
+ return _this2.buildTree(id, dataContextPath);
64
+ }).filter(function (c) {
65
+ return c !== null;
66
+ });
67
+ }
68
+ if (children && _typeof(children) === "object" && "componentId" in children) {
69
+ return this.resolveTemplate(children.componentId, children.path, dataContextPath);
70
+ }
71
+ if (children && _typeof(children) === "object" && "template" in children) {
72
+ var legacyChildren = children;
73
+ return this.resolveTemplate(legacyChildren.template, legacyChildren.dataPath, dataContextPath);
74
+ }
75
+ return [];
76
+ }
77
+ }, {
78
+ key: "resolveTemplate",
79
+ value: function resolveTemplate(templateId, dataPath, parentContextPath) {
80
+ var _this3 = this;
81
+ var resolvedDataPath = this.pathResolver.resolve(dataPath, parentContextPath);
82
+ var data = this.dataStore.get(resolvedDataPath);
83
+ if (!Array.isArray(data)) {
84
+ return [];
85
+ }
86
+ return data.map(function (_, index) {
87
+ var itemContextPath = "".concat(resolvedDataPath, "/").concat(index);
88
+ return _this3.buildTree(templateId, itemContextPath);
89
+ }).filter(function (c) {
90
+ return c !== null;
91
+ });
92
+ }
93
+ }, {
94
+ key: "findComponent",
95
+ value: function findComponent(componentId) {
96
+ return this.findInTree(this.root, componentId);
97
+ }
98
+ }, {
99
+ key: "findInTree",
100
+ value: function findInTree(node, targetId) {
101
+ if (!node) return null;
102
+ if (node.id === targetId) return node;
103
+ if (node.resolvedChildren) {
104
+ var _iterator = _createForOfIteratorHelper(node.resolvedChildren),
105
+ _step;
106
+ try {
107
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
108
+ var child = _step.value;
109
+ var found = this.findInTree(child, targetId);
110
+ if (found) return found;
111
+ }
112
+ } catch (err) {
113
+ _iterator.e(err);
114
+ } finally {
115
+ _iterator.f();
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ }, {
121
+ key: "traverse",
122
+ value: function traverse(callback) {
123
+ this.traverseNode(this.root, callback);
124
+ }
125
+ }, {
126
+ key: "traverseNode",
127
+ value: function traverseNode(node, callback) {
128
+ if (!node) return;
129
+ callback(node);
130
+ if (node.resolvedChildren) {
131
+ var _iterator2 = _createForOfIteratorHelper(node.resolvedChildren),
132
+ _step2;
133
+ try {
134
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
135
+ var child = _step2.value;
136
+ this.traverseNode(child, callback);
137
+ }
138
+ } catch (err) {
139
+ _iterator2.e(err);
140
+ } finally {
141
+ _iterator2.f();
142
+ }
143
+ }
144
+ }
145
+ }, {
146
+ key: "getAllIds",
147
+ value: function getAllIds() {
148
+ var ids = [];
149
+ this.traverse(function (component) {
150
+ ids.push(component.id);
151
+ });
152
+ return ids;
153
+ }
154
+ }]);
155
+ }();
156
+
157
+ export { ComponentTree, ComponentTree as default };
158
+ //# sourceMappingURL=ComponentTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComponentTree.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/ComponentTree.ts"],"sourcesContent":["/**\n * A2UI ComponentTree\n * 将平铺的组件列表转换为嵌套的组件树\n * 参考 @a2ui/core ComponentTree 实现\n * \n * 支持两种 children 模式 (A2UI v0.9 规范):\n * 1. 直接引用: children: [\"comp1\", \"comp2\"]\n * 2. Template 模式: children: { componentId: \"comp1\", path: \"/items\" }\n */\n\nimport type { A2UIComponentBase, ChildrenProperty, ResolvedComponent } from '../types';\nimport type { DataStore } from './DataStore';\nimport type { PathResolver } from './PathResolver';\n\n/**\n * 组件树构建器\n */\nexport class ComponentTree {\n /** 解析后的根组件 */\n readonly root: ResolvedComponent | null;\n\n constructor(\n private components: Map<string, A2UIComponentBase>,\n private dataStore: DataStore,\n private pathResolver: PathResolver\n ) {\n this.root = this.buildTree('root', '/');\n }\n\n /**\n * 递归构建组件树\n * @param componentId 组件 ID\n * @param dataContextPath 当前数据上下文路径\n */\n private buildTree(componentId: string, dataContextPath: string): ResolvedComponent | null {\n const component = this.components.get(componentId);\n if (!component) {\n return null;\n }\n\n // 创建解析后的组件(浅拷贝)\n const resolved: ResolvedComponent = {\n ...component,\n dataContextPath,\n };\n\n // 处理 children\n const children = (component as any).children as ChildrenProperty | undefined;\n if (children) {\n resolved.resolvedChildren = this.resolveChildren(children, dataContextPath);\n }\n\n // 处理 child (Card, Button 等单子组件)\n const child = (component as any).child as string | undefined;\n if (child && typeof child === 'string') {\n const resolvedChild = this.buildTree(child, dataContextPath);\n if (resolvedChild) {\n resolved.resolvedChildren = [resolvedChild];\n }\n }\n\n // 处理 tabItems\n const tabItems = (component as any).tabItems as Array<{ title: any; child: string }> | undefined;\n if (tabItems && Array.isArray(tabItems)) {\n resolved.resolvedChildren = tabItems\n .map((item) => this.buildTree(item.child, dataContextPath))\n .filter((c): c is ResolvedComponent => c !== null);\n }\n\n return resolved;\n }\n\n /**\n * 解析 children 属性\n */\n private resolveChildren(\n children: ChildrenProperty,\n dataContextPath: string\n ): ResolvedComponent[] {\n // 模式1: 直接引用数组\n if (Array.isArray(children)) {\n return children\n .map((id) => this.buildTree(id, dataContextPath))\n .filter((c): c is ResolvedComponent => c !== null);\n }\n\n // 模式2: Template 模式 (A2UI v0.9: componentId + path)\n if (children && typeof children === 'object' && 'componentId' in children) {\n return this.resolveTemplate(children.componentId, children.path, dataContextPath);\n }\n\n // 兼容旧格式 (template + dataPath)\n if (children && typeof children === 'object' && 'template' in children) {\n const legacyChildren = children as { template: string; dataPath: string };\n return this.resolveTemplate(legacyChildren.template, legacyChildren.dataPath, dataContextPath);\n }\n\n return [];\n }\n\n /**\n * 解析 Template 模式的 children\n * Template 会根据 dataPath 指向的数组长度,创建多个子组件实例\n */\n private resolveTemplate(\n templateId: string,\n dataPath: string,\n parentContextPath: string\n ): ResolvedComponent[] {\n // 解析数据路径\n const resolvedDataPath = this.pathResolver.resolve(dataPath, parentContextPath);\n const data = this.dataStore.get(resolvedDataPath);\n\n // 如果数据不是数组,返回空\n if (!Array.isArray(data)) {\n return [];\n }\n\n // 为数组中的每个元素创建一个组件实例\n return data.map((_, index) => {\n const itemContextPath = `${resolvedDataPath}/${index}`;\n return this.buildTree(templateId, itemContextPath);\n }).filter((c): c is ResolvedComponent => c !== null);\n }\n\n /**\n * 查找组件\n */\n findComponent(componentId: string): ResolvedComponent | null {\n return this.findInTree(this.root, componentId);\n }\n\n private findInTree(node: ResolvedComponent | null, targetId: string): ResolvedComponent | null {\n if (!node) return null;\n if (node.id === targetId) return node;\n\n if (node.resolvedChildren) {\n for (const child of node.resolvedChildren) {\n const found = this.findInTree(child, targetId);\n if (found) return found;\n }\n }\n\n return null;\n }\n\n /**\n * 遍历组件树\n */\n traverse(callback: (component: ResolvedComponent) => void): void {\n this.traverseNode(this.root, callback);\n }\n\n private traverseNode(\n node: ResolvedComponent | null,\n callback: (component: ResolvedComponent) => void\n ): void {\n if (!node) return;\n callback(node);\n \n if (node.resolvedChildren) {\n for (const child of node.resolvedChildren) {\n this.traverseNode(child, callback);\n }\n }\n }\n\n /**\n * 获取所有组件 ID\n */\n getAllIds(): string[] {\n const ids: string[] = [];\n this.traverse((component) => {\n ids.push(component.id);\n });\n return ids;\n }\n}\n\nexport default ComponentTree;\n"],"names":["ComponentTree","components","dataStore","pathResolver","_classCallCheck","root","buildTree","_createClass","key","value","componentId","dataContextPath","_this","component","get","resolved","_objectSpread","children","resolvedChildren","resolveChildren","child","resolvedChild","tabItems","Array","isArray","map","item","filter","c","_this2","id","_typeof","resolveTemplate","path","legacyChildren","template","dataPath","templateId","parentContextPath","_this3","resolvedDataPath","resolve","data","_","index","itemContextPath","concat","findComponent","findInTree","node","targetId","_iterator","_createForOfIteratorHelper","_step","s","n","done","found","err","e","f","traverse","callback","traverseNode","_iterator2","_step2","getAllIds","ids","push"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * A2UI DataStore
3
+ * 管理 Surface 的数据模型,支持 JSON Pointer 路径访问
4
+ * 参考 @a2ui/core DataStore 实现
5
+ */
6
+ /**
7
+ * A2UI 数据存储
8
+ * 支持 JSON Pointer 风格的路径访问
9
+ */
10
+ export declare class DataStore {
11
+ private data;
12
+ /**
13
+ * 获取指定路径的值
14
+ * @param path JSON Pointer 路径 (如 "/user/name")
15
+ */
16
+ get(path: string): unknown;
17
+ /**
18
+ * 设置指定路径的值
19
+ * @param path JSON Pointer 路径
20
+ * @param value 要设置的值
21
+ */
22
+ set(path: string, value: unknown): void;
23
+ /**
24
+ * 深度设置值(不可变方式)
25
+ */
26
+ private setDeep;
27
+ /**
28
+ * 删除指定路径的值
29
+ * @param path JSON Pointer 路径
30
+ */
31
+ remove(path: string): void;
32
+ /**
33
+ * 深度删除值(不可变方式)
34
+ */
35
+ private removeDeep;
36
+ /**
37
+ * 合并数据(增量更新,保留用户已修改的字段)
38
+ * @param path 路径
39
+ * @param value 要合并的值
40
+ */
41
+ merge(path: string, value: unknown): void;
42
+ /**
43
+ * 深度合并对象
44
+ */
45
+ private deepMerge;
46
+ /**
47
+ * 获取完整数据快照
48
+ */
49
+ getSnapshot(): Record<string, unknown>;
50
+ /**
51
+ * 清空数据
52
+ */
53
+ clear(): void;
54
+ /**
55
+ * 检查路径是否存在
56
+ */
57
+ has(path: string): boolean;
58
+ }
59
+ /**
60
+ * 创建 DataStore 实例
61
+ */
62
+ export declare function createDataStore(initialData?: Record<string, unknown>): DataStore;
63
+ export default DataStore;
@@ -0,0 +1,172 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.14
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
8
+ import _toArray from '@babel/runtime/helpers/toArray';
9
+ import _typeof from '@babel/runtime/helpers/typeof';
10
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
11
+ import _createClass from '@babel/runtime/helpers/createClass';
12
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
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
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
17
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
18
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
19
+ function parsePath(path) {
20
+ if (!path || path === "/") return [];
21
+ var normalized = path.startsWith("/") ? path.slice(1) : path;
22
+ return normalized.split("/").filter(Boolean);
23
+ }
24
+ var DataStore = /*#__PURE__*/function () {
25
+ function DataStore() {
26
+ _classCallCheck(this, DataStore);
27
+ _defineProperty(this, "data", {});
28
+ }
29
+ return _createClass(DataStore, [{
30
+ key: "get",
31
+ value: function get(path) {
32
+ var segments = parsePath(path);
33
+ if (segments.length === 0) {
34
+ return this.data;
35
+ }
36
+ var current = this.data;
37
+ var _iterator = _createForOfIteratorHelper(segments),
38
+ _step;
39
+ try {
40
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
41
+ var segment = _step.value;
42
+ if (current === null || current === void 0) {
43
+ return void 0;
44
+ }
45
+ if (_typeof(current) !== "object") {
46
+ return void 0;
47
+ }
48
+ current = current[segment];
49
+ }
50
+ } catch (err) {
51
+ _iterator.e(err);
52
+ } finally {
53
+ _iterator.f();
54
+ }
55
+ return current;
56
+ }
57
+ }, {
58
+ key: "set",
59
+ value: function set(path, value) {
60
+ var segments = parsePath(path);
61
+ if (segments.length === 0) {
62
+ if (_typeof(value) === "object" && value !== null) {
63
+ this.data = _objectSpread({}, value);
64
+ }
65
+ return;
66
+ }
67
+ this.data = this.setDeep(this.data, segments, value);
68
+ }
69
+ }, {
70
+ key: "setDeep",
71
+ value: function setDeep(obj, segments, value) {
72
+ if (segments.length === 0) {
73
+ return obj;
74
+ }
75
+ var _segments = _toArray(segments),
76
+ head = _segments[0],
77
+ tail = _segments.slice(1);
78
+ var newObj = _objectSpread({}, obj);
79
+ if (tail.length === 0) {
80
+ newObj[head] = value;
81
+ } else {
82
+ var existing = obj[head];
83
+ var nested = _typeof(existing) === "object" && existing !== null ? _objectSpread({}, existing) : {};
84
+ newObj[head] = this.setDeep(nested, tail, value);
85
+ }
86
+ return newObj;
87
+ }
88
+ }, {
89
+ key: "remove",
90
+ value: function remove(path) {
91
+ var segments = parsePath(path);
92
+ if (segments.length === 0) {
93
+ this.data = {};
94
+ return;
95
+ }
96
+ this.data = this.removeDeep(this.data, segments);
97
+ }
98
+ }, {
99
+ key: "removeDeep",
100
+ value: function removeDeep(obj, segments) {
101
+ if (segments.length === 0) {
102
+ return obj;
103
+ }
104
+ var _segments2 = _toArray(segments),
105
+ head = _segments2[0],
106
+ tail = _segments2.slice(1);
107
+ var newObj = _objectSpread({}, obj);
108
+ if (tail.length === 0) {
109
+ delete newObj[head];
110
+ } else {
111
+ var existing = obj[head];
112
+ if (_typeof(existing) === "object" && existing !== null) {
113
+ newObj[head] = this.removeDeep(existing, tail);
114
+ }
115
+ }
116
+ return newObj;
117
+ }
118
+ }, {
119
+ key: "merge",
120
+ value: function merge(path, value) {
121
+ var existing = this.get(path);
122
+ if (_typeof(existing) === "object" && existing !== null && _typeof(value) === "object" && value !== null && !Array.isArray(existing) && !Array.isArray(value)) {
123
+ var merged = this.deepMerge(existing, value);
124
+ this.set(path, merged);
125
+ } else if (existing === void 0) {
126
+ this.set(path, value);
127
+ }
128
+ }
129
+ }, {
130
+ key: "deepMerge",
131
+ value: function deepMerge(target, source) {
132
+ var result = _objectSpread({}, target);
133
+ for (var _i = 0, _Object$entries = Object.entries(source); _i < _Object$entries.length; _i++) {
134
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
135
+ key = _Object$entries$_i[0],
136
+ value = _Object$entries$_i[1];
137
+ var existing = target[key];
138
+ if (existing === void 0) {
139
+ result[key] = value;
140
+ } else if (_typeof(existing) === "object" && existing !== null && _typeof(value) === "object" && value !== null && !Array.isArray(existing) && !Array.isArray(value)) {
141
+ result[key] = this.deepMerge(existing, value);
142
+ }
143
+ }
144
+ return result;
145
+ }
146
+ }, {
147
+ key: "getSnapshot",
148
+ value: function getSnapshot() {
149
+ return this.data;
150
+ }
151
+ }, {
152
+ key: "clear",
153
+ value: function clear() {
154
+ this.data = {};
155
+ }
156
+ }, {
157
+ key: "has",
158
+ value: function has(path) {
159
+ return this.get(path) !== void 0;
160
+ }
161
+ }]);
162
+ }();
163
+ function createDataStore(initialData) {
164
+ var store = new DataStore();
165
+ if (initialData) {
166
+ store.set("/", initialData);
167
+ }
168
+ return store;
169
+ }
170
+
171
+ export { DataStore, createDataStore, DataStore as default };
172
+ //# sourceMappingURL=DataStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataStore.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/processor/DataStore.ts"],"sourcesContent":["/**\n * A2UI DataStore\n * 管理 Surface 的数据模型,支持 JSON Pointer 路径访问\n * 参考 @a2ui/core DataStore 实现\n */\n\n/**\n * 解析 JSON Pointer 路径为段数组\n * @example \"/user/name\" -> [\"user\", \"name\"]\n */\nfunction parsePath(path: string): string[] {\n if (!path || path === '/') return [];\n // 移除开头的 /,然后按 / 分割\n const normalized = path.startsWith('/') ? path.slice(1) : path;\n return normalized.split('/').filter(Boolean);\n}\n\n/**\n * A2UI 数据存储\n * 支持 JSON Pointer 风格的路径访问\n */\nexport class DataStore {\n private data: Record<string, unknown> = {};\n\n /**\n * 获取指定路径的值\n * @param path JSON Pointer 路径 (如 \"/user/name\")\n */\n get(path: string): unknown {\n const segments = parsePath(path);\n \n if (segments.length === 0) {\n return this.data;\n }\n\n let current: unknown = this.data;\n for (const segment of segments) {\n if (current === null || current === undefined) {\n return undefined;\n }\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n }\n\n /**\n * 设置指定路径的值\n * @param path JSON Pointer 路径\n * @param value 要设置的值\n */\n set(path: string, value: unknown): void {\n const segments = parsePath(path);\n\n if (segments.length === 0) {\n // 设置整个数据对象\n if (typeof value === 'object' && value !== null) {\n this.data = { ...value as Record<string, unknown> };\n }\n return;\n }\n\n // 创建新的数据对象(不可变更新)\n this.data = this.setDeep(this.data, segments, value);\n }\n\n /**\n * 深度设置值(不可变方式)\n */\n private setDeep(\n obj: Record<string, unknown>,\n segments: string[],\n value: unknown\n ): Record<string, unknown> {\n if (segments.length === 0) {\n return obj;\n }\n\n const [head, ...tail] = segments;\n const newObj = { ...obj };\n\n if (tail.length === 0) {\n // 最后一段,直接设置\n newObj[head] = value;\n } else {\n // 递归设置\n const existing = obj[head];\n const nested = typeof existing === 'object' && existing !== null\n ? { ...existing as Record<string, unknown> }\n : {};\n newObj[head] = this.setDeep(nested, tail, value);\n }\n\n return newObj;\n }\n\n /**\n * 删除指定路径的值\n * @param path JSON Pointer 路径\n */\n remove(path: string): void {\n const segments = parsePath(path);\n\n if (segments.length === 0) {\n this.data = {};\n return;\n }\n\n this.data = this.removeDeep(this.data, segments);\n }\n\n /**\n * 深度删除值(不可变方式)\n */\n private removeDeep(\n obj: Record<string, unknown>,\n segments: string[]\n ): Record<string, unknown> {\n if (segments.length === 0) {\n return obj;\n }\n\n const [head, ...tail] = segments;\n const newObj = { ...obj };\n\n if (tail.length === 0) {\n // 最后一段,删除该键\n delete newObj[head];\n } else {\n // 递归删除\n const existing = obj[head];\n if (typeof existing === 'object' && existing !== null) {\n newObj[head] = this.removeDeep(existing as Record<string, unknown>, tail);\n }\n }\n\n return newObj;\n }\n\n /**\n * 合并数据(增量更新,保留用户已修改的字段)\n * @param path 路径\n * @param value 要合并的值\n */\n merge(path: string, value: unknown): void {\n const existing = this.get(path);\n \n if (\n typeof existing === 'object' && existing !== null &&\n typeof value === 'object' && value !== null &&\n !Array.isArray(existing) && !Array.isArray(value)\n ) {\n // 两者都是对象,进行深度合并\n const merged = this.deepMerge(\n existing as Record<string, unknown>,\n value as Record<string, unknown>\n );\n this.set(path, merged);\n } else if (existing === undefined) {\n // 不存在则直接设置\n this.set(path, value);\n }\n // 如果已存在且不是对象,保留原值\n }\n\n /**\n * 深度合并对象\n */\n private deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n ): Record<string, unknown> {\n const result = { ...target };\n\n for (const [key, value] of Object.entries(source)) {\n const existing = target[key];\n\n if (existing === undefined) {\n // 新字段,直接设置\n result[key] = value;\n } else if (\n typeof existing === 'object' && existing !== null &&\n typeof value === 'object' && value !== null &&\n !Array.isArray(existing) && !Array.isArray(value)\n ) {\n // 递归合并对象\n result[key] = this.deepMerge(\n existing as Record<string, unknown>,\n value as Record<string, unknown>\n );\n }\n // 已存在且不是对象,保留原值\n }\n\n return result;\n }\n\n /**\n * 获取完整数据快照\n */\n getSnapshot(): Record<string, unknown> {\n return this.data;\n }\n\n /**\n * 清空数据\n */\n clear(): void {\n this.data = {};\n }\n\n /**\n * 检查路径是否存在\n */\n has(path: string): boolean {\n return this.get(path) !== undefined;\n }\n}\n\n/**\n * 创建 DataStore 实例\n */\nexport function createDataStore(initialData?: Record<string, unknown>): DataStore {\n const store = new DataStore();\n if (initialData) {\n store.set('/', initialData);\n }\n return store;\n}\n\nexport default DataStore;\n"],"names":["parsePath","path","normalized","startsWith","slice","split","filter","Boolean","DataStore","_classCallCheck","_defineProperty","_createClass","key","value","get","segments","length","data","current","_iterator","_createForOfIteratorHelper","_step","s","n","done","segment","_typeof","err","e","f","set","_objectSpread","setDeep","obj","_segments","_toArray","head","tail","newObj","existing","nested","remove","removeDeep","_segments2","merge","Array","isArray","merged","deepMerge","target","source","result","_i","_Object$entries","Object","entries","_Object$entries$_i","_slicedToArray","getSnapshot","clear","has","createDataStore","initialData","store"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * A2UI PathResolver
3
+ * 处理相对路径和绝对路径的解析
4
+ * 参考 @a2ui/core PathResolver 实现
5
+ */
6
+ /**
7
+ * 路径解析器
8
+ * 处理 A2UI 中的相对路径和绝对路径
9
+ */
10
+ export declare class PathResolver {
11
+ /**
12
+ * 解析路径
13
+ * @param path 要解析的路径(可以是相对或绝对)
14
+ * @param contextPath 当前数据上下文路径
15
+ * @returns 解析后的绝对路径
16
+ */
17
+ resolve(path: string, contextPath?: string): string;
18
+ /**
19
+ * 规范化路径
20
+ * - 处理多余的斜杠
21
+ * - 处理 . 和 ..
22
+ */
23
+ normalize(path: string): string;
24
+ /**
25
+ * 获取父路径
26
+ * @example "/user/profile/name" -> "/user/profile"
27
+ */
28
+ getParent(path: string): string;
29
+ /**
30
+ * 获取路径的最后一段
31
+ * @example "/user/profile/name" -> "name"
32
+ */
33
+ getBasename(path: string): string;
34
+ /**
35
+ * 连接路径
36
+ */
37
+ join(...paths: string[]): string;
38
+ /**
39
+ * 检查路径是否为另一个路径的子路径
40
+ */
41
+ isChildOf(childPath: string, parentPath: string): boolean;
42
+ }
43
+ /**
44
+ * 默认路径解析器实例
45
+ */
46
+ export declare const pathResolver: PathResolver;
47
+ export default PathResolver;