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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/es/_util/reactify.js +4 -4
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +1 -1
  4. package/es/attachments/index.js +1 -1
  5. package/es/chat-actionbar/index.js +1 -1
  6. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +91 -0
  7. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +236 -0
  8. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
  9. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
  10. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
  11. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
  12. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
  13. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
  14. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
  15. package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
  16. package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
  17. package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
  18. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
  19. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
  20. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
  21. package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
  22. package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
  23. package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
  24. package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
  25. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
  26. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
  27. package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
  28. package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
  29. package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
  30. package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
  31. package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
  32. package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
  33. package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
  34. package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
  35. package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
  36. package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
  37. package/es/chat-engine/components/a2ui/containers/index.js +30 -0
  38. package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
  39. package/es/chat-engine/components/a2ui/index.d.ts +11 -0
  40. package/es/chat-engine/components/a2ui/index.js +60 -0
  41. package/es/chat-engine/components/a2ui/index.js.map +1 -0
  42. package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +31 -0
  43. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +76 -0
  44. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
  45. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
  46. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
  47. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
  48. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
  49. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
  50. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
  51. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
  52. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
  53. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
  54. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
  55. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
  56. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
  57. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
  58. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
  59. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
  60. package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
  61. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
  62. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
  63. package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
  64. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
  65. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
  66. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
  67. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
  68. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
  69. package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
  70. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
  71. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
  72. package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
  73. package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
  74. package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
  75. package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
  76. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
  77. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
  78. package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
  79. package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
  80. package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
  81. package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
  82. package/es/chat-engine/components/a2ui/registry.js +74 -0
  83. package/es/chat-engine/components/a2ui/registry.js.map +1 -0
  84. package/es/chat-engine/components/activity/index.js +1 -1
  85. package/es/chat-engine/components/activity/registry.js +4 -4
  86. package/es/chat-engine/components/activity/registry.js.map +1 -1
  87. package/es/chat-engine/components/activity/render.js +6 -6
  88. package/es/chat-engine/components/activity/render.js.map +1 -1
  89. package/es/chat-engine/components/activity/types.js +1 -1
  90. package/es/chat-engine/components/index.js +4 -1
  91. package/es/chat-engine/components/index.js.map +1 -1
  92. package/es/chat-engine/components/provider/agent-state.js +6 -3
  93. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  94. package/es/chat-engine/components/toolcall/index.js +4 -1
  95. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  96. package/es/chat-engine/components/toolcall/registry.js +4 -4
  97. package/es/chat-engine/components/toolcall/registry.js.map +1 -1
  98. package/es/chat-engine/components/toolcall/render.js +14 -11
  99. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  100. package/es/chat-engine/components/toolcall/types.js +1 -1
  101. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  102. package/es/chat-engine/core/a2ui/index.js +24 -0
  103. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  104. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  105. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  106. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  107. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  108. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  109. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  110. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  111. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  112. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  113. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  114. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  115. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  116. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  117. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  118. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  119. package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
  120. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  121. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  122. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  123. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  124. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  125. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  126. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  127. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  128. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  129. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  130. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  131. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
  132. package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
  133. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  134. package/es/chat-engine/core/adapters/agui/events.js +1 -1
  135. package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
  136. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  137. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  138. package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
  139. package/es/chat-engine/core/adapters/agui/types.js +1 -1
  140. package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
  141. package/es/chat-engine/core/adapters/agui/utils.js +6 -2
  142. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
  143. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  144. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  145. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  146. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  147. package/es/chat-engine/core/event-bus/index.js +13 -0
  148. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  149. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  150. package/es/chat-engine/core/event-bus/types.js +32 -0
  151. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  152. package/es/chat-engine/core/index.d.ts +8 -1
  153. package/es/chat-engine/core/index.js +128 -10
  154. package/es/chat-engine/core/index.js.map +1 -1
  155. package/es/chat-engine/core/processor/index.js +1 -1
  156. package/es/chat-engine/core/server/batch-client.js +1 -1
  157. package/es/chat-engine/core/server/connection-manager.js +1 -1
  158. package/es/chat-engine/core/server/errors.js +1 -1
  159. package/es/chat-engine/core/server/index.js +1 -1
  160. package/es/chat-engine/core/server/llm-service.js +17 -15
  161. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  162. package/es/chat-engine/core/server/sse-client.js +1 -1
  163. package/es/chat-engine/core/server/sse-parser.js +1 -1
  164. package/es/chat-engine/core/server/types.js +1 -1
  165. package/es/chat-engine/core/store/message.js +1 -1
  166. package/es/chat-engine/core/store/model.js +1 -1
  167. package/es/chat-engine/core/store/reactiveState.js +1 -1
  168. package/es/chat-engine/core/type.d.ts +18 -2
  169. package/es/chat-engine/core/type.js +1 -1
  170. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  171. package/es/chat-engine/core/utils/index.js +1 -1
  172. package/es/chat-engine/core/utils/logger.js +1 -1
  173. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  174. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  175. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  176. package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
  177. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  178. package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
  179. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  180. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  181. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  182. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  183. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  184. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  185. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  186. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  187. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  188. package/es/chat-engine/hooks/index.js +4 -1
  189. package/es/chat-engine/hooks/index.js.map +1 -1
  190. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  191. package/es/chat-engine/hooks/useAgentState.js +4 -1
  192. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  193. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  194. package/es/chat-engine/hooks/useChat.js +4 -1
  195. package/es/chat-engine/hooks/useChat.js.map +1 -1
  196. package/es/chat-engine/index.js +4 -1
  197. package/es/chat-engine/index.js.map +1 -1
  198. package/es/chat-filecard/index.js +1 -1
  199. package/es/chat-loading/index.js +1 -1
  200. package/es/chat-markdown/index.js +1 -1
  201. package/es/chat-message/index.js +1 -1
  202. package/es/chat-sender/index.js +1 -1
  203. package/es/chat-thinking/index.js +1 -1
  204. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  205. package/es/chatbot/index.js +1 -1
  206. package/es/index.js +4 -1
  207. package/es/index.js.map +1 -1
  208. package/es/style/index.js +1 -1
  209. package/package.json +2 -2
@@ -0,0 +1,333 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.12
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
8
+ import _typeof from '@babel/runtime/helpers/typeof';
9
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
10
+
11
+ 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; }
12
+ 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; }
13
+ var DEFAULT_OPTIONS = {
14
+ strict: false,
15
+ logWarnings: true,
16
+ knownComponentTypes: ["Text", "Button", "Input", "Card", "Row", "Column", "RadioGroup", "CheckboxGroup"]
17
+ };
18
+ function validateComponent(component) {
19
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
20
+ var opts = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);
21
+ var errors = [];
22
+ var repaired = false;
23
+ if (!component || _typeof(component) !== "object") {
24
+ return {
25
+ success: false,
26
+ errors: [{
27
+ type: "INVALID_COMPONENT",
28
+ message: "Component must be an object",
29
+ value: component,
30
+ recoverable: false
31
+ }],
32
+ repaired: false
33
+ };
34
+ }
35
+ var comp = component;
36
+ if (!comp.component || typeof comp.component !== "string") {
37
+ if (opts.strict) {
38
+ return {
39
+ success: false,
40
+ errors: [{
41
+ type: "MISSING_REQUIRED_FIELD",
42
+ message: 'Component must have a "component" field',
43
+ path: "component",
44
+ value: comp.component,
45
+ recoverable: false
46
+ }],
47
+ repaired: false
48
+ };
49
+ }
50
+ if (comp.text !== void 0) {
51
+ comp.component = "Text";
52
+ repaired = true;
53
+ } else if (comp.label !== void 0 && comp.action !== void 0) {
54
+ comp.component = "Button";
55
+ repaired = true;
56
+ } else {
57
+ comp.component = "Text";
58
+ repaired = true;
59
+ errors.push({
60
+ type: "MISSING_REQUIRED_FIELD",
61
+ message: 'Component type missing, defaulting to "Text"',
62
+ path: "component",
63
+ recoverable: true
64
+ });
65
+ }
66
+ }
67
+ if (opts.knownComponentTypes && !opts.knownComponentTypes.includes(comp.component)) {
68
+ errors.push({
69
+ type: "UNKNOWN_COMPONENT_TYPE",
70
+ message: "Unknown component type: ".concat(comp.component),
71
+ path: "component",
72
+ value: comp.component,
73
+ recoverable: true
74
+ });
75
+ }
76
+ if (!comp.id) {
77
+ comp.id = "auto_".concat(comp.component, "_").concat(Date.now(), "_").concat(Math.random().toString(36).substr(2, 5));
78
+ repaired = true;
79
+ }
80
+ if (Array.isArray(comp.children)) {
81
+ var validatedChildren = [];
82
+ var _loop = function _loop(i) {
83
+ var childResult = validateComponent(comp.children[i], opts);
84
+ if (childResult.success && childResult.data) {
85
+ validatedChildren.push(childResult.data);
86
+ } else {
87
+ errors.push.apply(errors, _toConsumableArray(childResult.errors.map(function (e) {
88
+ return _objectSpread(_objectSpread({}, e), {}, {
89
+ path: "children[".concat(i, "]").concat(e.path ? "." + e.path : "")
90
+ });
91
+ })));
92
+ if (!opts.strict && childResult.data) {
93
+ validatedChildren.push(childResult.data);
94
+ repaired = true;
95
+ }
96
+ }
97
+ if (childResult.repaired) repaired = true;
98
+ };
99
+ for (var i = 0; i < comp.children.length; i++) {
100
+ _loop(i);
101
+ }
102
+ comp.children = validatedChildren;
103
+ }
104
+ if (opts.logWarnings && errors.length > 0) {
105
+ console.warn("[A2UI] Component validation warnings:", errors);
106
+ }
107
+ return {
108
+ success: errors.filter(function (e) {
109
+ return !e.recoverable;
110
+ }).length === 0,
111
+ data: comp,
112
+ errors: errors,
113
+ repaired: repaired
114
+ };
115
+ }
116
+ function validateOperation(operation) {
117
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
118
+ var opts = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);
119
+ var errors = [];
120
+ var repaired = false;
121
+ if (!operation || _typeof(operation) !== "object") {
122
+ return {
123
+ success: false,
124
+ errors: [{
125
+ type: "INVALID_OPERATION",
126
+ message: "Operation must be an object",
127
+ value: operation,
128
+ recoverable: false
129
+ }],
130
+ repaired: false
131
+ };
132
+ }
133
+ var op = operation;
134
+ var validTypes = ["create", "update", "patch", "delete", "action"];
135
+ if (!op.type || !validTypes.includes(op.type)) {
136
+ if (opts.strict) {
137
+ return {
138
+ success: false,
139
+ errors: [{
140
+ type: "INVALID_OPERATION",
141
+ message: "Invalid operation type: ".concat(op.type, ". Must be one of: ").concat(validTypes.join(", ")),
142
+ path: "type",
143
+ value: op.type,
144
+ recoverable: false
145
+ }],
146
+ repaired: false
147
+ };
148
+ }
149
+ if (op.payload && _typeof(op.payload) === "object") {
150
+ op.type = "update";
151
+ repaired = true;
152
+ errors.push({
153
+ type: "MISSING_REQUIRED_FIELD",
154
+ message: 'Operation type missing, defaulting to "update"',
155
+ path: "type",
156
+ recoverable: true
157
+ });
158
+ }
159
+ }
160
+ if (!op.surfaceId || typeof op.surfaceId !== "string") {
161
+ errors.push({
162
+ type: "MISSING_REQUIRED_FIELD",
163
+ message: "Operation must have a surfaceId",
164
+ path: "surfaceId",
165
+ value: op.surfaceId,
166
+ recoverable: false
167
+ });
168
+ return {
169
+ success: false,
170
+ errors: errors,
171
+ repaired: repaired
172
+ };
173
+ }
174
+ if (op.type === "patch" && !op.componentId) {
175
+ errors.push({
176
+ type: "MISSING_REQUIRED_FIELD",
177
+ message: "Patch operation requires componentId",
178
+ path: "componentId",
179
+ recoverable: false
180
+ });
181
+ if (opts.strict) {
182
+ return {
183
+ success: false,
184
+ errors: errors,
185
+ repaired: repaired
186
+ };
187
+ }
188
+ }
189
+ if (op.payload && ["create", "update"].includes(op.type)) {
190
+ var payloadResult = validateComponent(op.payload, opts);
191
+ if (payloadResult.data) {
192
+ op.payload = payloadResult.data;
193
+ }
194
+ errors.push.apply(errors, _toConsumableArray(payloadResult.errors.map(function (e) {
195
+ return _objectSpread(_objectSpread({}, e), {}, {
196
+ path: "payload".concat(e.path ? "." + e.path : "")
197
+ });
198
+ })));
199
+ if (payloadResult.repaired) repaired = true;
200
+ }
201
+ if (opts.logWarnings && errors.length > 0) {
202
+ console.warn("[A2UI] Operation validation warnings:", errors);
203
+ }
204
+ return {
205
+ success: errors.filter(function (e) {
206
+ return !e.recoverable;
207
+ }).length === 0,
208
+ data: op,
209
+ errors: errors,
210
+ repaired: repaired
211
+ };
212
+ }
213
+ function validateAction(action) {
214
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
215
+ var opts = _objectSpread(_objectSpread({}, DEFAULT_OPTIONS), options);
216
+ var errors = [];
217
+ if (!action || _typeof(action) !== "object") {
218
+ return {
219
+ success: false,
220
+ errors: [{
221
+ type: "INVALID_ACTION",
222
+ message: "Action must be an object",
223
+ value: action,
224
+ recoverable: false
225
+ }],
226
+ repaired: false
227
+ };
228
+ }
229
+ var act = action;
230
+ if (!act.type || typeof act.type !== "string") {
231
+ errors.push({
232
+ type: "MISSING_REQUIRED_FIELD",
233
+ message: "Action must have a type",
234
+ path: "type",
235
+ value: act.type,
236
+ recoverable: false
237
+ });
238
+ return {
239
+ success: false,
240
+ errors: errors,
241
+ repaired: false
242
+ };
243
+ }
244
+ if (act.payload !== void 0 && _typeof(act.payload) !== "object") {
245
+ errors.push({
246
+ type: "TYPE_MISMATCH",
247
+ message: "Action payload should be an object",
248
+ path: "payload",
249
+ value: act.payload,
250
+ recoverable: true
251
+ });
252
+ }
253
+ if (opts.logWarnings && errors.length > 0) {
254
+ console.warn("[A2UI] Action validation warnings:", errors);
255
+ }
256
+ return {
257
+ success: errors.filter(function (e) {
258
+ return !e.recoverable;
259
+ }).length === 0,
260
+ data: act,
261
+ errors: errors,
262
+ repaired: false
263
+ };
264
+ }
265
+ function validateBindingPath(path) {
266
+ if (typeof path !== "string") {
267
+ return {
268
+ valid: false,
269
+ error: "Binding path must be a string"
270
+ };
271
+ }
272
+ if (!path.startsWith("/")) {
273
+ return {
274
+ valid: true,
275
+ path: "/" + path
276
+ };
277
+ }
278
+ var pathRegex = /^\/[a-zA-Z0-9_\-./]*$/;
279
+ if (!pathRegex.test(path)) {
280
+ return {
281
+ valid: false,
282
+ error: "Invalid binding path format: ".concat(path)
283
+ };
284
+ }
285
+ return {
286
+ valid: true,
287
+ path: path
288
+ };
289
+ }
290
+ function safeParseJSON(json, fallback) {
291
+ try {
292
+ var data = JSON.parse(json);
293
+ return {
294
+ success: true,
295
+ data: data
296
+ };
297
+ } catch (error) {
298
+ console.warn("[A2UI] JSON parse error:", error);
299
+ return {
300
+ success: false,
301
+ data: fallback,
302
+ error: error
303
+ };
304
+ }
305
+ }
306
+ function validateOperations(operations) {
307
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
308
+ var valid = [];
309
+ var invalid = [];
310
+ for (var i = 0; i < operations.length; i++) {
311
+ var result = validateOperation(operations[i], options);
312
+ if (result.success && result.data) {
313
+ valid.push(result.data);
314
+ } else {
315
+ invalid.push({
316
+ index: i,
317
+ errors: result.errors
318
+ });
319
+ }
320
+ }
321
+ return {
322
+ valid: valid,
323
+ invalid: invalid
324
+ };
325
+ }
326
+ function formatValidationErrors(errors) {
327
+ return errors.map(function (e) {
328
+ return "[".concat(e.type, "]").concat(e.path ? " at ".concat(e.path) : "", ": ").concat(e.message);
329
+ }).join("\n");
330
+ }
331
+
332
+ export { formatValidationErrors, safeParseJSON, validateAction, validateBindingPath, validateComponent, validateOperation, validateOperations };
333
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sources":["../../../../../../pro-components/chat/chat-engine/core/a2ui/utils/validation.ts"],"sourcesContent":["/**\n * A2UI 协议解析容错工具\n * 提供数据验证、默认值填充、错误恢复等能力\n */\n\nimport type { A2UIComponent, A2UIOperation, A2UIAction } from '../types';\n\n// ============= 错误类型 =============\n\nexport type A2UIValidationErrorType =\n | 'INVALID_COMPONENT'\n | 'INVALID_OPERATION'\n | 'INVALID_SURFACE'\n | 'INVALID_ACTION'\n | 'MISSING_REQUIRED_FIELD'\n | 'TYPE_MISMATCH'\n | 'UNKNOWN_COMPONENT_TYPE';\n\nexport interface A2UIValidationError {\n type: A2UIValidationErrorType;\n message: string;\n path?: string;\n value?: unknown;\n recoverable: boolean;\n}\n\nexport interface A2UIValidationResult<T> {\n success: boolean;\n data?: T;\n errors: A2UIValidationError[];\n /** 是否进行了自动修复 */\n repaired: boolean;\n}\n\n// ============= 配置 =============\n\nexport interface A2UIValidationOptions {\n /** 是否严格模式(默认 false,宽松模式会尝试修复) */\n strict?: boolean;\n /** 是否输出警告日志(默认 true) */\n logWarnings?: boolean;\n /** 已知的组件类型列表(用于校验) */\n knownComponentTypes?: string[];\n}\n\nconst DEFAULT_OPTIONS: A2UIValidationOptions = {\n strict: false,\n logWarnings: true,\n knownComponentTypes: ['Text', 'Button', 'Input', 'Card', 'Row', 'Column', 'RadioGroup', 'CheckboxGroup'],\n};\n\n// ============= 组件验证 =============\n\n/**\n * 验证并修复组件数据\n */\nexport function validateComponent(\n component: unknown,\n options: A2UIValidationOptions = {}\n): A2UIValidationResult<A2UIComponent> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const errors: A2UIValidationError[] = [];\n let repaired = false;\n\n // 基础类型检查\n if (!component || typeof component !== 'object') {\n return {\n success: false,\n errors: [{\n type: 'INVALID_COMPONENT',\n message: 'Component must be an object',\n value: component,\n recoverable: false,\n }],\n repaired: false,\n };\n }\n\n const comp = component as Record<string, unknown>;\n\n // 必须有 component 字段\n if (!comp.component || typeof comp.component !== 'string') {\n if (opts.strict) {\n return {\n success: false,\n errors: [{\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Component must have a \"component\" field',\n path: 'component',\n value: comp.component,\n recoverable: false,\n }],\n repaired: false,\n };\n }\n\n // 宽松模式:尝试推断组件类型\n if (comp.text !== undefined) {\n comp.component = 'Text';\n repaired = true;\n } else if (comp.label !== undefined && comp.action !== undefined) {\n comp.component = 'Button';\n repaired = true;\n } else {\n // 无法推断,使用 Text 作为默认\n comp.component = 'Text';\n repaired = true;\n errors.push({\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Component type missing, defaulting to \"Text\"',\n path: 'component',\n recoverable: true,\n });\n }\n }\n\n // 检查组件类型是否已知\n if (opts.knownComponentTypes && !opts.knownComponentTypes.includes(comp.component as string)) {\n errors.push({\n type: 'UNKNOWN_COMPONENT_TYPE',\n message: `Unknown component type: ${comp.component}`,\n path: 'component',\n value: comp.component,\n recoverable: true,\n });\n }\n\n // 确保有 id(如果没有,生成一个)\n if (!comp.id) {\n comp.id = `auto_${comp.component}_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`;\n repaired = true;\n }\n\n // 递归验证子组件\n if (Array.isArray(comp.children)) {\n const validatedChildren: A2UIComponent[] = [];\n for (let i = 0; i < comp.children.length; i++) {\n const childResult = validateComponent(comp.children[i], opts);\n if (childResult.success && childResult.data) {\n validatedChildren.push(childResult.data);\n } else {\n errors.push(...childResult.errors.map(e => ({\n ...e,\n path: `children[${i}]${e.path ? '.' + e.path : ''}`,\n })));\n // 宽松模式下跳过无效子组件\n if (!opts.strict && childResult.data) {\n validatedChildren.push(childResult.data);\n repaired = true;\n }\n }\n if (childResult.repaired) repaired = true;\n }\n comp.children = validatedChildren;\n }\n\n // 输出警告\n if (opts.logWarnings && errors.length > 0) {\n console.warn('[A2UI] Component validation warnings:', errors);\n }\n\n return {\n success: errors.filter(e => !e.recoverable).length === 0,\n data: comp as A2UIComponent,\n errors,\n repaired,\n };\n}\n\n// ============= 操作验证 =============\n\n/**\n * 验证并修复操作数据\n */\nexport function validateOperation(\n operation: unknown,\n options: A2UIValidationOptions = {}\n): A2UIValidationResult<A2UIOperation> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const errors: A2UIValidationError[] = [];\n let repaired = false;\n\n if (!operation || typeof operation !== 'object') {\n return {\n success: false,\n errors: [{\n type: 'INVALID_OPERATION',\n message: 'Operation must be an object',\n value: operation,\n recoverable: false,\n }],\n repaired: false,\n };\n }\n\n const op = operation as Record<string, unknown>;\n\n // 验证 type\n const validTypes = ['create', 'update', 'patch', 'delete', 'action'];\n if (!op.type || !validTypes.includes(op.type as string)) {\n if (opts.strict) {\n return {\n success: false,\n errors: [{\n type: 'INVALID_OPERATION',\n message: `Invalid operation type: ${op.type}. Must be one of: ${validTypes.join(', ')}`,\n path: 'type',\n value: op.type,\n recoverable: false,\n }],\n repaired: false,\n };\n }\n\n // 宽松模式:根据 payload 推断类型\n if (op.payload && typeof op.payload === 'object') {\n op.type = 'update';\n repaired = true;\n errors.push({\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Operation type missing, defaulting to \"update\"',\n path: 'type',\n recoverable: true,\n });\n }\n }\n\n // 验证 surfaceId\n if (!op.surfaceId || typeof op.surfaceId !== 'string') {\n errors.push({\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Operation must have a surfaceId',\n path: 'surfaceId',\n value: op.surfaceId,\n recoverable: false,\n });\n return { success: false, errors, repaired };\n }\n\n // patch 操作需要 componentId\n if (op.type === 'patch' && !op.componentId) {\n errors.push({\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Patch operation requires componentId',\n path: 'componentId',\n recoverable: false,\n });\n if (opts.strict) {\n return { success: false, errors, repaired };\n }\n }\n\n // 验证 payload(如果有)\n if (op.payload && ['create', 'update'].includes(op.type as string)) {\n const payloadResult = validateComponent(op.payload, opts);\n if (payloadResult.data) {\n op.payload = payloadResult.data;\n }\n errors.push(...payloadResult.errors.map(e => ({\n ...e,\n path: `payload${e.path ? '.' + e.path : ''}`,\n })));\n if (payloadResult.repaired) repaired = true;\n }\n\n if (opts.logWarnings && errors.length > 0) {\n console.warn('[A2UI] Operation validation warnings:', errors);\n }\n\n return {\n success: errors.filter(e => !e.recoverable).length === 0,\n data: op as unknown as A2UIOperation,\n errors,\n repaired,\n };\n}\n\n// ============= Action 验证 =============\n\n/**\n * 验证 Action 数据\n */\nexport function validateAction(\n action: unknown,\n options: A2UIValidationOptions = {}\n): A2UIValidationResult<A2UIAction> {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const errors: A2UIValidationError[] = [];\n\n if (!action || typeof action !== 'object') {\n return {\n success: false,\n errors: [{\n type: 'INVALID_ACTION',\n message: 'Action must be an object',\n value: action,\n recoverable: false,\n }],\n repaired: false,\n };\n }\n\n const act = action as Record<string, unknown>;\n\n // 验证 type\n if (!act.type || typeof act.type !== 'string') {\n errors.push({\n type: 'MISSING_REQUIRED_FIELD',\n message: 'Action must have a type',\n path: 'type',\n value: act.type,\n recoverable: false,\n });\n return { success: false, errors, repaired: false };\n }\n\n // payload 应该是对象(如果存在)\n if (act.payload !== undefined && typeof act.payload !== 'object') {\n errors.push({\n type: 'TYPE_MISMATCH',\n message: 'Action payload should be an object',\n path: 'payload',\n value: act.payload,\n recoverable: true,\n });\n }\n\n if (opts.logWarnings && errors.length > 0) {\n console.warn('[A2UI] Action validation warnings:', errors);\n }\n\n return {\n success: errors.filter(e => !e.recoverable).length === 0,\n data: act as A2UIAction,\n errors,\n repaired: false,\n };\n}\n\n// ============= 数据绑定验证 =============\n\n/**\n * 验证数据绑定路径\n */\nexport function validateBindingPath(path: unknown): { valid: boolean; path?: string; error?: string } {\n if (typeof path !== 'string') {\n return { valid: false, error: 'Binding path must be a string' };\n }\n\n // 路径应该以 / 开头\n if (!path.startsWith('/')) {\n // 自动补全\n return { valid: true, path: '/' + path };\n }\n\n // 验证路径格式\n const pathRegex = /^\\/[a-zA-Z0-9_\\-./]*$/;\n if (!pathRegex.test(path)) {\n return { valid: false, error: `Invalid binding path format: ${path}` };\n }\n\n return { valid: true, path };\n}\n\n/**\n * 安全解析 JSON\n */\nexport function safeParseJSON<T = unknown>(\n json: string,\n fallback: T\n): { success: boolean; data: T; error?: Error } {\n try {\n const data = JSON.parse(json);\n return { success: true, data };\n } catch (error) {\n console.warn('[A2UI] JSON parse error:', error);\n return { success: false, data: fallback, error: error as Error };\n }\n}\n\n// ============= 批量验证 =============\n\n/**\n * 批量验证操作列表\n */\nexport function validateOperations(\n operations: unknown[],\n options: A2UIValidationOptions = {}\n): { valid: A2UIOperation[]; invalid: Array<{ index: number; errors: A2UIValidationError[] }> } {\n const valid: A2UIOperation[] = [];\n const invalid: Array<{ index: number; errors: A2UIValidationError[] }> = [];\n\n for (let i = 0; i < operations.length; i++) {\n const result = validateOperation(operations[i], options);\n if (result.success && result.data) {\n valid.push(result.data);\n } else {\n invalid.push({ index: i, errors: result.errors });\n }\n }\n\n return { valid, invalid };\n}\n\n// ============= 错误报告 =============\n\n/**\n * 格式化验证错误为可读字符串\n */\nexport function formatValidationErrors(errors: A2UIValidationError[]): string {\n return errors\n .map(e => `[${e.type}]${e.path ? ` at ${e.path}` : ''}: ${e.message}`)\n .join('\\n');\n}\n"],"names":["DEFAULT_OPTIONS","strict","logWarnings","knownComponentTypes","validateComponent","component","options","arguments","length","undefined","opts","_objectSpread","errors","repaired","_typeof","success","type","message","value","recoverable","comp","path","text","label","action","push","includes","concat","id","Date","now","Math","random","toString","substr","Array","isArray","children","validatedChildren","_loop","i","childResult","data","apply","_toConsumableArray","map","e","console","warn","filter","validateOperation","operation","op","validTypes","join","payload","surfaceId","componentId","payloadResult","validateAction","act","validateBindingPath","valid","error","startsWith","pathRegex","test","safeParseJSON","json","fallback","JSON","parse","validateOperations","operations","invalid","result","index","formatValidationErrors"],"mappings":"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"}
@@ -47,8 +47,24 @@ export declare class AGUIEventMapper {
47
47
  private handleToolCallEvent;
48
48
  /**
49
49
  * 处理活动事件
50
+ * 支持增量处理:对于包含 operations/messages 数组的 content,
51
+ * 在 delta 更新时标记新增的 operations 范围,供下游组件增量处理
52
+ *
53
+ * 支持两种模式:
54
+ * 1. 标准模式:先收到 ACTIVITY_SNAPSHOT,后续 ACTIVITY_DELTA 基于 snapshot 增量更新
55
+ * 2. 纯增量模式:没有 ACTIVITY_SNAPSHOT,直接收到 ACTIVITY_DELTA,自动初始化空内容
50
56
  */
51
57
  private handleActivityEvent;
58
+ /**
59
+ * 根据 JSON Patch 路径推断初始内容结构
60
+ * 用于纯增量模式下自动初始化
61
+ */
62
+ private inferInitialContent;
63
+ /**
64
+ * 获取 content 中的 operations/messages 数量
65
+ * 用于增量标记
66
+ */
67
+ private getOperationsCount;
52
68
  /**
53
69
  * 处理状态事件
54
70
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.10
2
+ * tdesign v1.0.2-alpha.12
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -23,6 +23,9 @@ import '@babel/runtime/helpers/typeof';
23
23
 
24
24
  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; }
25
25
  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; }
26
+ 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; } } }; }
27
+ 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; } }
28
+ 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; }
26
29
  var AGUIEventMapper = /*#__PURE__*/function () {
27
30
  function AGUIEventMapper() {
28
31
  _classCallCheck(this, AGUIEventMapper);
@@ -147,19 +150,70 @@ var AGUIEventMapper = /*#__PURE__*/function () {
147
150
  };
148
151
  return createActivityContent(this.currentActivity.activityType, this.currentActivity.content, "streaming", "append");
149
152
  case AGUIEventType.ACTIVITY_DELTA:
150
- if (this.currentActivity) {
151
- var newContent = this.currentActivity.content;
153
+ {
154
+ var isFirstDelta = !this.currentActivity;
155
+ if (isFirstDelta) {
156
+ this.currentActivity = {
157
+ activityType: event.activityType || "unknown",
158
+ content: this.inferInitialContent(event.patch)
159
+ };
160
+ }
161
+ var oldContent = this.currentActivity.content;
162
+ var oldOpsCount = this.getOperationsCount(oldContent);
163
+ var newContent = oldContent;
152
164
  if (event.patch && Array.isArray(event.patch)) {
153
- newContent = applyJsonPatch(this.currentActivity.content, event.patch);
165
+ newContent = applyJsonPatch(oldContent, event.patch);
154
166
  }
155
167
  this.currentActivity.content = newContent;
156
- return createActivityContent(this.currentActivity.activityType, this.currentActivity.content, "streaming", "merge");
168
+ var newOpsCount = this.getOperationsCount(newContent);
169
+ var deltaInfo = newOpsCount > oldOpsCount ? {
170
+ fromIndex: oldOpsCount,
171
+ toIndex: newOpsCount
172
+ } : void 0;
173
+ return createActivityContent(this.currentActivity.activityType, this.currentActivity.content, "streaming", isFirstDelta ? "append" : "merge", deltaInfo);
157
174
  }
158
- return null;
159
175
  default:
160
176
  return null;
161
177
  }
162
178
  }
179
+ }, {
180
+ key: "inferInitialContent",
181
+ value: function inferInitialContent(patch) {
182
+ if (!patch || !Array.isArray(patch) || patch.length === 0) {
183
+ return {};
184
+ }
185
+ var initialContent = {};
186
+ var _iterator = _createForOfIteratorHelper(patch),
187
+ _step;
188
+ try {
189
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
190
+ var op = _step.value;
191
+ if (op.path) {
192
+ var pathParts = op.path.split("/").filter(Boolean);
193
+ if (pathParts.length > 0) {
194
+ var rootKey = pathParts[0];
195
+ if (pathParts.length > 1 && (pathParts[1] === "-" || /^\d+$/.test(pathParts[1]))) {
196
+ if (!initialContent[rootKey]) {
197
+ initialContent[rootKey] = [];
198
+ }
199
+ }
200
+ }
201
+ }
202
+ }
203
+ } catch (err) {
204
+ _iterator.e(err);
205
+ } finally {
206
+ _iterator.f();
207
+ }
208
+ return initialContent;
209
+ }
210
+ }, {
211
+ key: "getOperationsCount",
212
+ value: function getOperationsCount(content) {
213
+ if (!content) return 0;
214
+ var ops = content.operations || content.messages;
215
+ return Array.isArray(ops) ? ops.length : 0;
216
+ }
163
217
  }, {
164
218
  key: "handleStateEvent",
165
219
  value: function handleStateEvent(event) {