@tdesign-react/chat 1.0.2-alpha.2 → 1.0.2-alpha.3

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 (105) hide show
  1. package/es/_util/reactify.js +3 -4
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +1 -1
  4. package/es/_util/useDynamicStyle.js.map +1 -1
  5. package/es/attachments/index.d.ts +5 -0
  6. package/es/attachments/index.js +26 -0
  7. package/es/attachments/index.js.map +1 -0
  8. package/es/chat-actionbar/index.js +1 -1
  9. package/es/chat-attachments/index.js +1 -1
  10. package/es/chat-engine/components/provider/agent-state.js +1 -1
  11. package/es/chat-engine/components/toolcall/index.js +1 -1
  12. package/es/chat-engine/components/toolcall/registry.js +1 -1
  13. package/es/chat-engine/components/toolcall/render.js +1 -1
  14. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  15. package/es/chat-engine/components/toolcall/types.js +1 -1
  16. package/es/chat-engine/hooks/useAgentState.js +1 -1
  17. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  18. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  19. package/es/chat-engine/hooks/useAgentToolcall.js.map +1 -1
  20. package/es/chat-engine/hooks/useChat.d.ts +1 -2
  21. package/es/chat-engine/hooks/useChat.js +1 -1
  22. package/es/chat-engine/hooks/useChat.js.map +1 -1
  23. package/es/chat-engine/index.js +1 -1
  24. package/es/chat-filecard/index.js +1 -1
  25. package/es/chat-loading/index.js +1 -1
  26. package/es/chat-markdown/index.js +1 -1
  27. package/es/chat-message/index.js +1 -1
  28. package/es/chat-sender/index.js +1 -1
  29. package/es/chat-thinking/index.d.ts +0 -1
  30. package/es/chat-thinking/index.js +1 -1
  31. package/es/chatbot/_example-js/agui-toolcall.d.ts +11 -0
  32. package/es/chatbot/index.js +1 -1
  33. package/es/index.d.ts +1 -1
  34. package/es/index.js +2 -2
  35. package/es/style/index.js +1 -1
  36. package/package.json +2 -2
  37. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +0 -104
  38. package/es/chat-engine/core/adapters/agui/event-mapper.js +0 -341
  39. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +0 -1
  40. package/es/chat-engine/core/adapters/agui/events.d.ts +0 -1394
  41. package/es/chat-engine/core/adapters/agui/events.js +0 -181
  42. package/es/chat-engine/core/adapters/agui/events.js.map +0 -1
  43. package/es/chat-engine/core/adapters/agui/index.d.ts +0 -75
  44. package/es/chat-engine/core/adapters/agui/index.js +0 -165
  45. package/es/chat-engine/core/adapters/agui/index.js.map +0 -1
  46. package/es/chat-engine/core/adapters/agui/state-manager.d.ts +0 -99
  47. package/es/chat-engine/core/adapters/agui/state-manager.js +0 -168
  48. package/es/chat-engine/core/adapters/agui/state-manager.js.map +0 -1
  49. package/es/chat-engine/core/adapters/agui/types.d.ts +0 -760
  50. package/es/chat-engine/core/adapters/agui/types.js +0 -89
  51. package/es/chat-engine/core/adapters/agui/types.js.map +0 -1
  52. package/es/chat-engine/core/adapters/agui/utils.d.ts +0 -180
  53. package/es/chat-engine/core/adapters/agui/utils.js +0 -302
  54. package/es/chat-engine/core/adapters/agui/utils.js.map +0 -1
  55. package/es/chat-engine/core/index.d.ts +0 -132
  56. package/es/chat-engine/core/index.js +0 -597
  57. package/es/chat-engine/core/index.js.map +0 -1
  58. package/es/chat-engine/core/processor/index.d.ts +0 -20
  59. package/es/chat-engine/core/processor/index.js +0 -146
  60. package/es/chat-engine/core/processor/index.js.map +0 -1
  61. package/es/chat-engine/core/server/batch-client.d.ts +0 -20
  62. package/es/chat-engine/core/server/batch-client.js +0 -114
  63. package/es/chat-engine/core/server/batch-client.js.map +0 -1
  64. package/es/chat-engine/core/server/connection-manager.d.ts +0 -39
  65. package/es/chat-engine/core/server/connection-manager.js +0 -84
  66. package/es/chat-engine/core/server/connection-manager.js.map +0 -1
  67. package/es/chat-engine/core/server/errors.d.ts +0 -22
  68. package/es/chat-engine/core/server/errors.js +0 -80
  69. package/es/chat-engine/core/server/errors.js.map +0 -1
  70. package/es/chat-engine/core/server/index.d.ts +0 -11
  71. package/es/chat-engine/core/server/index.js +0 -26
  72. package/es/chat-engine/core/server/index.js.map +0 -1
  73. package/es/chat-engine/core/server/llm-service.d.ts +0 -44
  74. package/es/chat-engine/core/server/llm-service.js +0 -198
  75. package/es/chat-engine/core/server/llm-service.js.map +0 -1
  76. package/es/chat-engine/core/server/sse-client.d.ts +0 -77
  77. package/es/chat-engine/core/server/sse-client.js +0 -362
  78. package/es/chat-engine/core/server/sse-client.js.map +0 -1
  79. package/es/chat-engine/core/server/sse-parser.d.ts +0 -49
  80. package/es/chat-engine/core/server/sse-parser.js +0 -116
  81. package/es/chat-engine/core/server/sse-parser.js.map +0 -1
  82. package/es/chat-engine/core/server/types.d.ts +0 -54
  83. package/es/chat-engine/core/server/types.js +0 -28
  84. package/es/chat-engine/core/server/types.js.map +0 -1
  85. package/es/chat-engine/core/store/message.d.ts +0 -27
  86. package/es/chat-engine/core/store/message.js +0 -263
  87. package/es/chat-engine/core/store/message.js.map +0 -1
  88. package/es/chat-engine/core/store/model.d.ts +0 -8
  89. package/es/chat-engine/core/store/model.js +0 -65
  90. package/es/chat-engine/core/store/model.js.map +0 -1
  91. package/es/chat-engine/core/store/reactiveState.d.ts +0 -52
  92. package/es/chat-engine/core/store/reactiveState.js +0 -1359
  93. package/es/chat-engine/core/store/reactiveState.js.map +0 -1
  94. package/es/chat-engine/core/type.d.ts +0 -248
  95. package/es/chat-engine/core/type.js +0 -7
  96. package/es/chat-engine/core/type.js.map +0 -1
  97. package/es/chat-engine/core/utils/eventEmitter.d.ts +0 -10
  98. package/es/chat-engine/core/utils/eventEmitter.js +0 -67
  99. package/es/chat-engine/core/utils/eventEmitter.js.map +0 -1
  100. package/es/chat-engine/core/utils/index.d.ts +0 -32
  101. package/es/chat-engine/core/utils/index.js +0 -996
  102. package/es/chat-engine/core/utils/index.js.map +0 -1
  103. package/es/chat-engine/core/utils/logger.d.ts +0 -30
  104. package/es/chat-engine/core/utils/logger.js +0 -87
  105. package/es/chat-engine/core/utils/logger.js.map +0 -1
@@ -1,4 +1,3 @@
1
- import { TdChatThinkContentProps } from 'tdesign-web-components';
2
1
  import 'tdesign-web-components/lib/chat-message/content/thinking-content';
3
2
  export declare const ChatThinking: import("react").ForwardRefExoticComponent<Omit<TdChatThinkContentProps, "ref"> & import("react").RefAttributes<HTMLElement>>;
4
3
  export default ChatThinking;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.1
2
+ * tdesign v1.0.2-alpha.3
3
3
  * (c) 2025 tdesign
4
4
  * @license MIT
5
5
  */
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AG-UI 协议基础示例(使用 ChatBot 组件)
3
+ *
4
+ * 学习目标:
5
+ * - 使用 ChatBot 组件替代 ChatList + ChatSender 的组合方式
6
+ * - 开启 AG-UI 协议支持(protocol: 'agui')
7
+ * - 理解 AG-UI 协议的自动解析机制
8
+ * - 处理文本消息事件(TEXT_MESSAGE_*)
9
+ * - 通过 slot 渲染自定义 ToolCall 组件
10
+ */
11
+ export default function AguiBasicExample(): import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.1
2
+ * tdesign v1.0.2-alpha.3
3
3
  * (c) 2025 tdesign
4
4
  * @license MIT
5
5
  */
package/es/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './chatbot';
2
2
  export * from './chat-engine';
3
3
  export * from './chat-actionbar';
4
- export * from './chat-attachments';
4
+ export * from './attachments';
5
5
  export * from './chat-filecard';
6
6
  export * from './chat-loading';
7
7
  export * from './chat-markdown';
package/es/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.1
2
+ * tdesign v1.0.2-alpha.3
3
3
  * (c) 2025 tdesign
4
4
  * @license MIT
5
5
  */
@@ -7,7 +7,7 @@
7
7
  export { ChatBot, ChatList, ChatSearchContent, ChatSuggestionContent } from './chatbot/index.js';
8
8
  import './chat-engine/index.js';
9
9
  export { ChatActionBar } from './chat-actionbar/index.js';
10
- export { Attachments } from './chat-attachments/index.js';
10
+ export { Attachments } from './attachments/index.js';
11
11
  export { Filecard } from './chat-filecard/index.js';
12
12
  export { ChatLoading } from './chat-loading/index.js';
13
13
  export { ChatMarkdown, MarkdownEngine } from './chat-markdown/index.js';
package/es/style/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.1
2
+ * tdesign v1.0.2-alpha.3
3
3
  * (c) 2025 tdesign
4
4
  * @license MIT
5
5
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tdesign-react/chat",
3
- "version": "1.0.2-alpha.2",
3
+ "version": "1.0.2-alpha.3",
4
4
  "title": "@tdesign-react/chat",
5
5
  "description": "TDesign Pro Component for AIGC",
6
6
  "module": "es/index.js",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@babel/runtime": "~7.26.7",
53
- "tdesign-web-components": "1.2.8",
53
+ "tdesign-web-components": "1.2.10-alpha.1",
54
54
  "classnames": "~2.5.1",
55
55
  "lodash-es": "^4.17.21",
56
56
  "zod": "^3.24.2",
@@ -1,104 +0,0 @@
1
- import type { AIMessageContent, SSEChunkData, ToolCall } from '../../type';
2
- /**
3
- * AGUIEventMapper
4
- * 将AG-UI协议事件(SSEChunkData)转换为AIContentChunkUpdate
5
- * 支持多轮对话、增量文本、工具调用、思考、状态快照、消息快照等基础事件
6
- * 同时提供状态变更和步骤生命周期事件的分发机制
7
- */
8
- export declare class AGUIEventMapper {
9
- private toolCallMap;
10
- private toolCallEnded;
11
- private reasoningContext;
12
- /**
13
- * 主入口:将SSE事件转换为AIContentChunkUpdate
14
- *
15
- * @param chunk SSE数据块,其中data字段可能是字符串(需要解析)或已解析的对象
16
- */
17
- mapEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null;
18
- /**
19
- * 获取当前所有工具调用
20
- */
21
- getToolCalls(): ToolCall[];
22
- /**
23
- * 清除指定工具调用
24
- */
25
- clearToolCall(toolCallId: string): void;
26
- /**
27
- * 获取指定工具调用
28
- */
29
- getToolCall(toolCallId: string): ToolCall | undefined;
30
- /**
31
- * 检查工具调用是否已结束
32
- */
33
- isToolCallEnded(toolCallId: string): boolean;
34
- reset(): void;
35
- /**
36
- * 处理文本消息事件
37
- */
38
- private handleTextMessageEvent;
39
- /**
40
- * 处理思考事件
41
- */
42
- private handleThinkingEvent;
43
- /**
44
- * 处理工具调用事件
45
- */
46
- private handleToolCallEvent;
47
- /**
48
- * 处理状态事件
49
- */
50
- private handleStateEvent;
51
- /**
52
- * 处理其他事件
53
- */
54
- private handleOtherEvent;
55
- /**
56
- * 处理思考开始事件
57
- */
58
- private handleThinkingStart;
59
- /**
60
- * 处理思考文本开始事件
61
- */
62
- private handleThinkingTextStart;
63
- /**
64
- * 处理思考文本内容事件
65
- */
66
- private handleThinkingTextContent;
67
- /**
68
- * 处理思考文本结束事件
69
- */
70
- private handleThinkingTextEnd;
71
- /**
72
- * 处理思考结束事件
73
- */
74
- private handleThinkingEnd;
75
- /**
76
- * 处理工具调用开始事件
77
- */
78
- private handleToolCallStart;
79
- /**
80
- * 处理工具调用参数事件
81
- */
82
- private handleToolCallArgs;
83
- /**
84
- * 处理工具调用块事件
85
- */
86
- private handleToolCallChunk;
87
- /**
88
- * 处理工具调用结果事件
89
- */
90
- private handleToolCallResult;
91
- /**
92
- * 处理工具调用结束事件
93
- */
94
- private handleToolCallEnd;
95
- /**
96
- * 在上下文中更新工具调用
97
- */
98
- private updateToolCallInContext;
99
- /**
100
- * 重置 reasoning 上下文
101
- */
102
- private resetReasoningContext;
103
- }
104
- export default AGUIEventMapper;
@@ -1,341 +0,0 @@
1
- /**
2
- * tdesign v1.0.1
3
- * (c) 2025 tdesign
4
- * @license MIT
5
- */
6
-
7
- import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
8
- import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
- import _createClass from '@babel/runtime/helpers/createClass';
10
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
11
- import { isTextMessageEvent, isThinkingEvent, isToolCallEvent, isStateEvent, EventType } from './events.js';
12
- import { stateManager } from './state-manager.js';
13
- import { parseSSEData, createMarkdownContent, createTextContent, handleCustomEvent, handleMessagesSnapshot, createReasoningContent, addToReasoningData, createThinkingContent, mergeStringContent, updateReasoningData, createToolCallContent, updateToolCall, handleSuggestionToolCall } from './utils.js';
14
- import 'zod';
15
- import './types.js';
16
- import '@babel/runtime/helpers/possibleConstructorReturn';
17
- import '@babel/runtime/helpers/getPrototypeOf';
18
- import '@babel/runtime/helpers/inherits';
19
- import '@babel/runtime/helpers/wrapNativeSuper';
20
- import '@babel/runtime/helpers/slicedToArray';
21
- import '@babel/runtime/helpers/typeof';
22
- import '../../utils/index.js';
23
-
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
- 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
- var AGUIEventMapper = /*#__PURE__*/function () {
27
- function AGUIEventMapper() {
28
- _classCallCheck(this, AGUIEventMapper);
29
- _defineProperty(this, "toolCallMap", {});
30
- _defineProperty(this, "toolCallEnded", /* @__PURE__ */new Set());
31
- _defineProperty(this, "reasoningContext", {
32
- active: false,
33
- currentData: [],
34
- currentDataIndex: 0
35
- });
36
- }
37
- return _createClass(AGUIEventMapper, [{
38
- key: "mapEvent",
39
- value: function mapEvent(chunk) {
40
- var event = parseSSEData(chunk.data);
41
- if (!(event !== null && event !== void 0 && event.type)) return null;
42
- if (isTextMessageEvent(event.type)) {
43
- return this.handleTextMessageEvent(event);
44
- }
45
- if (isThinkingEvent(event.type)) {
46
- return this.handleThinkingEvent(event);
47
- }
48
- if (isToolCallEvent(event.type)) {
49
- return this.handleToolCallEvent(event);
50
- }
51
- if (isStateEvent(event.type)) {
52
- return this.handleStateEvent(event);
53
- }
54
- return this.handleOtherEvent(event);
55
- }
56
- }, {
57
- key: "getToolCalls",
58
- value: function getToolCalls() {
59
- return Object.values(this.toolCallMap);
60
- }
61
- }, {
62
- key: "clearToolCall",
63
- value: function clearToolCall(toolCallId) {
64
- delete this.toolCallMap[toolCallId];
65
- this.toolCallEnded["delete"](toolCallId);
66
- }
67
- }, {
68
- key: "getToolCall",
69
- value: function getToolCall(toolCallId) {
70
- return this.toolCallMap[toolCallId];
71
- }
72
- }, {
73
- key: "isToolCallEnded",
74
- value: function isToolCallEnded(toolCallId) {
75
- return this.toolCallEnded.has(toolCallId);
76
- }
77
- }, {
78
- key: "reset",
79
- value: function reset() {
80
- this.toolCallMap = {};
81
- this.toolCallEnded.clear();
82
- this.resetReasoningContext();
83
- }
84
- }, {
85
- key: "handleTextMessageEvent",
86
- value: function handleTextMessageEvent(event) {
87
- switch (event.type) {
88
- case EventType.TEXT_MESSAGE_START:
89
- return createMarkdownContent("", "streaming", "append");
90
- case EventType.TEXT_MESSAGE_CHUNK:
91
- case EventType.TEXT_MESSAGE_CONTENT:
92
- case EventType.TEXT_MESSAGE_END:
93
- return createMarkdownContent(event.delta || "", event.type === EventType.TEXT_MESSAGE_END ? "complete" : "streaming", "merge");
94
- default:
95
- return null;
96
- }
97
- }
98
- }, {
99
- key: "handleThinkingEvent",
100
- value: function handleThinkingEvent(event) {
101
- switch (event.type) {
102
- case EventType.THINKING_START:
103
- return this.handleThinkingStart();
104
- case EventType.THINKING_TEXT_MESSAGE_START:
105
- return this.handleThinkingTextStart(event);
106
- case EventType.THINKING_TEXT_MESSAGE_CONTENT:
107
- return this.handleThinkingTextContent(event);
108
- case EventType.THINKING_TEXT_MESSAGE_END:
109
- return this.handleThinkingTextEnd(event);
110
- case EventType.THINKING_END:
111
- return this.handleThinkingEnd();
112
- default:
113
- return null;
114
- }
115
- }
116
- }, {
117
- key: "handleToolCallEvent",
118
- value: function handleToolCallEvent(event) {
119
- switch (event.type) {
120
- case EventType.TOOL_CALL_START:
121
- return this.handleToolCallStart(event);
122
- case EventType.TOOL_CALL_ARGS:
123
- return this.handleToolCallArgs(event);
124
- case EventType.TOOL_CALL_CHUNK:
125
- return this.handleToolCallChunk(event);
126
- case EventType.TOOL_CALL_RESULT:
127
- return this.handleToolCallResult(event);
128
- case EventType.TOOL_CALL_END:
129
- return this.handleToolCallEnd(event);
130
- default:
131
- return null;
132
- }
133
- }
134
- }, {
135
- key: "handleStateEvent",
136
- value: function handleStateEvent(event) {
137
- stateManager.handleStateEvent(event);
138
- return null;
139
- }
140
- }, {
141
- key: "handleOtherEvent",
142
- value: function handleOtherEvent(event) {
143
- switch (event.type) {
144
- case EventType.MESSAGES_SNAPSHOT:
145
- return handleMessagesSnapshot(event.messages);
146
- case EventType.CUSTOM:
147
- return handleCustomEvent(event);
148
- case EventType.RUN_ERROR:
149
- return [createTextContent(event.message || event.error || "\u7CFB\u7EDF\u672A\u77E5\u9519\u8BEF", "error")];
150
- default:
151
- return null;
152
- }
153
- }
154
- }, {
155
- key: "handleThinkingStart",
156
- value: function handleThinkingStart() {
157
- this.reasoningContext.active = true;
158
- this.reasoningContext.currentData = [];
159
- this.reasoningContext.currentDataIndex = 0;
160
- return createReasoningContent([], "streaming", "append", false);
161
- }
162
- }, {
163
- key: "handleThinkingTextStart",
164
- value: function handleThinkingTextStart(event) {
165
- if (this.reasoningContext.active) {
166
- var newTextContent = createTextContent("", "streaming");
167
- var _addToReasoningData = addToReasoningData(this.reasoningContext.currentData, newTextContent),
168
- data = _addToReasoningData.data,
169
- index = _addToReasoningData.index;
170
- this.reasoningContext.currentData = data;
171
- this.reasoningContext.currentDataIndex = index;
172
- return createReasoningContent(data, "streaming", "merge", false);
173
- }
174
- return createThinkingContent({
175
- title: event.title || "\u601D\u8003\u4E2D..."
176
- }, "streaming", "append", false);
177
- }
178
- }, {
179
- key: "handleThinkingTextContent",
180
- value: function handleThinkingTextContent(event) {
181
- if (this.reasoningContext.active) {
182
- var currentIndex = this.reasoningContext.currentDataIndex;
183
- if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
184
- var currentContent = this.reasoningContext.currentData[currentIndex];
185
- if (currentContent.type === "text") {
186
- var currentText = currentContent.data || "";
187
- var newText = mergeStringContent(currentText, event.delta || "");
188
- var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
189
- data: newText,
190
- status: "streaming"
191
- });
192
- this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
193
- return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
194
- }
195
- }
196
- return null;
197
- }
198
- return createThinkingContent({
199
- text: event.delta
200
- }, "streaming", "merge", false);
201
- }
202
- }, {
203
- key: "handleThinkingTextEnd",
204
- value: function handleThinkingTextEnd(event) {
205
- if (this.reasoningContext.active) {
206
- var currentIndex = this.reasoningContext.currentDataIndex;
207
- if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
208
- var currentContent = this.reasoningContext.currentData[currentIndex];
209
- if (currentContent.type === "text") {
210
- var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
211
- status: "complete"
212
- });
213
- this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
214
- return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
215
- }
216
- }
217
- return null;
218
- }
219
- return createThinkingContent({
220
- title: event.title || "\u601D\u8003\u7ED3\u675F"
221
- }, "complete", "merge", true);
222
- }
223
- }, {
224
- key: "handleThinkingEnd",
225
- value: function handleThinkingEnd() {
226
- if (this.reasoningContext.active) {
227
- var finalData = _toConsumableArray(this.reasoningContext.currentData);
228
- this.resetReasoningContext();
229
- return createReasoningContent(finalData, "complete", "merge", true);
230
- }
231
- return null;
232
- }
233
- }, {
234
- key: "handleToolCallStart",
235
- value: function handleToolCallStart(event) {
236
- this.toolCallMap[event.toolCallId] = {
237
- eventType: "TOOL_CALL_START",
238
- toolCallId: event.toolCallId,
239
- toolCallName: event.toolCallName,
240
- parentMessageId: event.parentMessageId || ""
241
- };
242
- var toolCallContent = createToolCallContent(this.toolCallMap[event.toolCallId], "pending", "append");
243
- if (this.reasoningContext.active) {
244
- var _addToReasoningData2 = addToReasoningData(this.reasoningContext.currentData, toolCallContent),
245
- data = _addToReasoningData2.data,
246
- index = _addToReasoningData2.index;
247
- this.reasoningContext.currentData = data;
248
- this.reasoningContext.currentDataIndex = index;
249
- return createReasoningContent(data, "streaming", "merge", false);
250
- }
251
- return toolCallContent;
252
- }
253
- }, {
254
- key: "handleToolCallArgs",
255
- value: function handleToolCallArgs(event) {
256
- if (!this.toolCallMap[event.toolCallId]) return null;
257
- var currentArgs = this.toolCallMap[event.toolCallId].args || "";
258
- var newArgs = mergeStringContent(currentArgs, event.delta || "");
259
- this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
260
- eventType: "TOOL_CALL_ARGS",
261
- args: newArgs
262
- });
263
- return this.updateToolCallInContext(event.toolCallId, "streaming");
264
- }
265
- }, {
266
- key: "handleToolCallChunk",
267
- value: function handleToolCallChunk(event) {
268
- if (!this.toolCallMap[event.toolCallId]) return null;
269
- var currentChunk = this.toolCallMap[event.toolCallId].chunk || "";
270
- var newChunk = mergeStringContent(currentChunk, event.delta || "");
271
- this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
272
- eventType: "TOOL_CALL_CHUNK",
273
- chunk: newChunk
274
- });
275
- return this.updateToolCallInContext(event.toolCallId, "streaming");
276
- }
277
- }, {
278
- key: "handleToolCallResult",
279
- value: function handleToolCallResult(event) {
280
- if (!this.toolCallMap[event.toolCallId]) return null;
281
- var currentResult = this.toolCallMap[event.toolCallId].result || "";
282
- var newResult = mergeStringContent(currentResult, event.content || "");
283
- this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {
284
- eventType: EventType.TOOL_CALL_RESULT,
285
- result: newResult
286
- });
287
- var suggestionContent = handleSuggestionToolCall(this.toolCallMap[event.toolCallId]);
288
- if (suggestionContent) {
289
- if (this.reasoningContext.active) {
290
- var currentIndex = this.reasoningContext.currentDataIndex;
291
- if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
292
- this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, suggestionContent);
293
- return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
294
- }
295
- } else {
296
- return suggestionContent;
297
- }
298
- }
299
- return this.updateToolCallInContext(event.toolCallId, "complete");
300
- }
301
- }, {
302
- key: "handleToolCallEnd",
303
- value: function handleToolCallEnd(event) {
304
- this.toolCallEnded.add(event.toolCallId);
305
- return this.updateToolCallInContext(event.toolCallId, "complete");
306
- }
307
- }, {
308
- key: "updateToolCallInContext",
309
- value: function updateToolCallInContext(toolCallId, status) {
310
- if (this.reasoningContext.active) {
311
- var currentIndex = this.reasoningContext.currentDataIndex;
312
- if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {
313
- var currentContent = this.reasoningContext.currentData[currentIndex];
314
- var currentType = currentContent.type;
315
- if (currentType.startsWith("toolcall")) {
316
- var updatedContent = _objectSpread(_objectSpread({}, currentContent), {}, {
317
- data: this.toolCallMap[toolCallId],
318
- status: status
319
- });
320
- this.reasoningContext.currentData = updateReasoningData(this.reasoningContext.currentData, currentIndex, updatedContent);
321
- return createReasoningContent(this.reasoningContext.currentData, "streaming", "merge", false);
322
- }
323
- }
324
- return null;
325
- }
326
- return createToolCallContent(this.toolCallMap[toolCallId], status, "merge");
327
- }
328
- }, {
329
- key: "resetReasoningContext",
330
- value: function resetReasoningContext() {
331
- this.reasoningContext = {
332
- active: false,
333
- currentData: [],
334
- currentDataIndex: 0
335
- };
336
- }
337
- }]);
338
- }();
339
-
340
- export { AGUIEventMapper, AGUIEventMapper as default };
341
- //# sourceMappingURL=event-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-mapper.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/event-mapper.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { AIMessageContent, SSEChunkData, ToolCall } from '../../type';\nimport { EventType, isStateEvent, isTextMessageEvent, isThinkingEvent, isToolCallEvent } from './events';\nimport { stateManager } from './state-manager';\nimport {\n addToReasoningData,\n createMarkdownContent,\n createReasoningContent,\n createTextContent,\n createThinkingContent,\n createToolCallContent,\n handleCustomEvent,\n handleMessagesSnapshot,\n handleSuggestionToolCall,\n mergeStringContent,\n parseSSEData,\n updateReasoningData,\n updateToolCall,\n} from './utils';\n\n/**\n * AGUIEventMapper\n * 将AG-UI协议事件(SSEChunkData)转换为AIContentChunkUpdate\n * 支持多轮对话、增量文本、工具调用、思考、状态快照、消息快照等基础事件\n * 同时提供状态变更和步骤生命周期事件的分发机制\n */\nexport class AGUIEventMapper {\n private toolCallMap: Record<string, ToolCall> = {};\n\n private toolCallEnded: Set<string> = new Set(); // 记录已经TOOL_CALL_END的工具调用\n\n // Reasoning 上下文状态管理\n private reasoningContext: {\n active: boolean;\n currentData: AIMessageContent[];\n currentDataIndex: number;\n } = {\n active: false,\n currentData: [],\n currentDataIndex: 0,\n };\n\n /**\n * 主入口:将SSE事件转换为AIContentChunkUpdate\n *\n * @param chunk SSE数据块,其中data字段可能是字符串(需要解析)或已解析的对象\n */\n mapEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 处理data字段,可能是字符串或已解析的对象\n const event = parseSSEData(chunk.data);\n\n if (!event?.type) return null;\n\n // 根据事件类型分发到不同的处理函数\n if (isTextMessageEvent(event.type)) {\n return this.handleTextMessageEvent(event);\n }\n\n if (isThinkingEvent(event.type)) {\n return this.handleThinkingEvent(event);\n }\n\n if (isToolCallEvent(event.type)) {\n return this.handleToolCallEvent(event);\n }\n\n if (isStateEvent(event.type)) {\n return this.handleStateEvent(event);\n }\n\n // 处理其他事件类型\n return this.handleOtherEvent(event);\n }\n\n /**\n * 获取当前所有工具调用\n */\n getToolCalls(): ToolCall[] {\n return Object.values(this.toolCallMap);\n }\n\n /**\n * 清除指定工具调用\n */\n clearToolCall(toolCallId: string): void {\n delete this.toolCallMap[toolCallId];\n this.toolCallEnded.delete(toolCallId);\n }\n\n /**\n * 获取指定工具调用\n */\n getToolCall(toolCallId: string): ToolCall | undefined {\n return this.toolCallMap[toolCallId];\n }\n\n /**\n * 检查工具调用是否已结束\n */\n isToolCallEnded(toolCallId: string): boolean {\n return this.toolCallEnded.has(toolCallId);\n }\n\n reset() {\n this.toolCallMap = {};\n this.toolCallEnded.clear();\n this.resetReasoningContext();\n }\n\n /**\n * 处理文本消息事件\n */\n private handleTextMessageEvent(event: any): AIMessageContent | null {\n switch (event.type) {\n case EventType.TEXT_MESSAGE_START:\n return createMarkdownContent('', 'streaming', 'append');\n case EventType.TEXT_MESSAGE_CHUNK:\n case EventType.TEXT_MESSAGE_CONTENT:\n case EventType.TEXT_MESSAGE_END:\n return createMarkdownContent(\n event.delta || '',\n event.type === EventType.TEXT_MESSAGE_END ? 'complete' : 'streaming',\n 'merge',\n );\n default:\n return null;\n }\n }\n\n /**\n * 处理思考事件\n */\n private handleThinkingEvent(event: any): AIMessageContent | null {\n switch (event.type) {\n case EventType.THINKING_START:\n return this.handleThinkingStart();\n case EventType.THINKING_TEXT_MESSAGE_START:\n return this.handleThinkingTextStart(event);\n case EventType.THINKING_TEXT_MESSAGE_CONTENT:\n return this.handleThinkingTextContent(event);\n case EventType.THINKING_TEXT_MESSAGE_END:\n return this.handleThinkingTextEnd(event);\n case EventType.THINKING_END:\n return this.handleThinkingEnd();\n default:\n return null;\n }\n }\n\n /**\n * 处理工具调用事件\n */\n private handleToolCallEvent(event: any): AIMessageContent | null {\n switch (event.type) {\n case EventType.TOOL_CALL_START:\n return this.handleToolCallStart(event);\n case EventType.TOOL_CALL_ARGS:\n return this.handleToolCallArgs(event);\n case EventType.TOOL_CALL_CHUNK:\n return this.handleToolCallChunk(event);\n case EventType.TOOL_CALL_RESULT:\n return this.handleToolCallResult(event);\n case EventType.TOOL_CALL_END:\n return this.handleToolCallEnd(event);\n default:\n return null;\n }\n }\n\n /**\n * 处理状态事件\n */\n private handleStateEvent(event: any): null {\n stateManager.handleStateEvent(event);\n return null; // 让业务层通过useStateSubscription订阅状态变化\n }\n\n /**\n * 处理其他事件\n */\n private handleOtherEvent(event: any): AIMessageContent | AIMessageContent[] | null {\n switch (event.type) {\n case EventType.MESSAGES_SNAPSHOT:\n return handleMessagesSnapshot(event.messages);\n case EventType.CUSTOM:\n return handleCustomEvent(event);\n case EventType.RUN_ERROR:\n return [createTextContent(event.message || event.error || '系统未知错误', 'error')];\n default:\n return null;\n }\n }\n\n /**\n * 处理思考开始事件\n */\n private handleThinkingStart(): AIMessageContent {\n // 激活 reasoning 上下文\n this.reasoningContext.active = true;\n this.reasoningContext.currentData = [];\n this.reasoningContext.currentDataIndex = 0;\n\n return createReasoningContent([], 'streaming', 'append', false);\n }\n\n /**\n * 处理思考文本开始事件\n */\n private handleThinkingTextStart(event: any): AIMessageContent | null {\n if (this.reasoningContext.active) {\n // Reasoning 模式:添加新的 text 内容到 reasoning.data\n const newTextContent = createTextContent('', 'streaming');\n const { data, index } = addToReasoningData(this.reasoningContext.currentData, newTextContent);\n this.reasoningContext.currentData = data;\n this.reasoningContext.currentDataIndex = index;\n\n return createReasoningContent(data, 'streaming', 'merge', false);\n }\n // 独立模式:创建独立的 thinking 内容\n return createThinkingContent({ title: event.title || '思考中...' }, 'streaming', 'append', false);\n }\n\n /**\n * 处理思考文本内容事件\n */\n private handleThinkingTextContent(event: any): AIMessageContent | null {\n if (this.reasoningContext.active) {\n // Reasoning 模式:更新最后一个 text 内容\n const currentIndex = this.reasoningContext.currentDataIndex;\n if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {\n const currentContent = this.reasoningContext.currentData[currentIndex];\n if (currentContent.type === 'text') {\n const currentText = currentContent.data || '';\n const newText = mergeStringContent(currentText, event.delta || '');\n const updatedContent = { ...currentContent, data: newText, status: 'streaming' };\n\n this.reasoningContext.currentData = updateReasoningData(\n this.reasoningContext.currentData,\n currentIndex,\n updatedContent,\n );\n\n return createReasoningContent(this.reasoningContext.currentData, 'streaming', 'merge', false);\n }\n }\n return null;\n }\n // 独立模式:更新独立的 thinking 内容\n return createThinkingContent({ text: event.delta }, 'streaming', 'merge', false);\n }\n\n /**\n * 处理思考文本结束事件\n */\n private handleThinkingTextEnd(event: any): AIMessageContent | null {\n if (this.reasoningContext.active) {\n // Reasoning 模式:标记最后一个 text 内容为完成\n const currentIndex = this.reasoningContext.currentDataIndex;\n if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {\n const currentContent = this.reasoningContext.currentData[currentIndex];\n if (currentContent.type === 'text') {\n const updatedContent = { ...currentContent, status: 'complete' };\n this.reasoningContext.currentData = updateReasoningData(\n this.reasoningContext.currentData,\n currentIndex,\n updatedContent,\n );\n\n return createReasoningContent(this.reasoningContext.currentData, 'streaming', 'merge', false);\n }\n }\n return null;\n }\n // 独立模式:完成独立的 thinking 内容\n return createThinkingContent({ title: event.title || '思考结束' }, 'complete', 'merge', true);\n }\n\n /**\n * 处理思考结束事件\n */\n private handleThinkingEnd(): AIMessageContent | null {\n if (this.reasoningContext.active) {\n // 完成 reasoning 并重置上下文\n const finalData = [...this.reasoningContext.currentData];\n this.resetReasoningContext();\n\n return createReasoningContent(finalData, 'complete', 'merge', true);\n }\n return null;\n }\n\n /**\n * 处理工具调用开始事件\n */\n private handleToolCallStart(event: any): AIMessageContent | null {\n // 初始化工具调用\n this.toolCallMap[event.toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId: event.toolCallId,\n toolCallName: event.toolCallName,\n parentMessageId: event.parentMessageId || '',\n };\n\n // 每个toocallstart都会开始一个新的内容块,使用append(添加新的工具调用,使用不同的渲染组件)\n const toolCallContent = createToolCallContent(this.toolCallMap[event.toolCallId], 'pending', 'append');\n\n if (this.reasoningContext.active) {\n // Reasoning 模式:添加 toolcall 到 reasoning.data\n const { data, index } = addToReasoningData(this.reasoningContext.currentData, toolCallContent);\n this.reasoningContext.currentData = data;\n this.reasoningContext.currentDataIndex = index;\n\n return createReasoningContent(data, 'streaming', 'merge', false);\n }\n // 独立模式:返回独立的工具调用内容块\n // 通过 type (toolcall-${toolCallName}) + strategy 来控制是否合并\n return toolCallContent;\n }\n\n /**\n * 处理工具调用参数事件\n */\n private handleToolCallArgs(event: any): AIMessageContent | null {\n if (!this.toolCallMap[event.toolCallId]) return null;\n\n const currentArgs = this.toolCallMap[event.toolCallId].args || '';\n const newArgs = mergeStringContent(currentArgs, event.delta || '');\n\n // 更新内部ToolCall对象\n this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {\n eventType: 'TOOL_CALL_ARGS',\n args: newArgs,\n });\n\n return this.updateToolCallInContext(event.toolCallId, 'streaming');\n }\n\n /**\n * 处理工具调用块事件\n */\n private handleToolCallChunk(event: any): AIMessageContent | null {\n if (!this.toolCallMap[event.toolCallId]) return null;\n\n const currentChunk = this.toolCallMap[event.toolCallId].chunk || '';\n const newChunk = mergeStringContent(currentChunk, event.delta || '');\n\n // 更新内部ToolCall对象\n this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {\n eventType: 'TOOL_CALL_CHUNK',\n chunk: newChunk,\n });\n\n return this.updateToolCallInContext(event.toolCallId, 'streaming');\n }\n\n /**\n * 处理工具调用结果事件\n */\n private handleToolCallResult(event: any): AIMessageContent | null {\n if (!this.toolCallMap[event.toolCallId]) return null;\n\n const currentResult = this.toolCallMap[event.toolCallId].result || '';\n const newResult = mergeStringContent(currentResult, event.content || '');\n\n // 更新内部ToolCall对象\n this.toolCallMap[event.toolCallId] = updateToolCall(this.toolCallMap[event.toolCallId], {\n eventType: EventType.TOOL_CALL_RESULT,\n result: newResult,\n });\n\n // 处理 suggestion 特殊情况\n const suggestionContent = handleSuggestionToolCall(this.toolCallMap[event.toolCallId]);\n if (suggestionContent) {\n if (this.reasoningContext.active) {\n // Reasoning 模式:替换最后一个 toolcall 为 suggestion\n const currentIndex = this.reasoningContext.currentDataIndex;\n if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {\n this.reasoningContext.currentData = updateReasoningData(\n this.reasoningContext.currentData,\n currentIndex,\n suggestionContent,\n );\n\n return createReasoningContent(this.reasoningContext.currentData, 'streaming', 'merge', false);\n }\n } else {\n // 独立模式:返回 suggestion\n return suggestionContent;\n }\n }\n\n return this.updateToolCallInContext(event.toolCallId, 'complete');\n }\n\n /**\n * 处理工具调用结束事件\n */\n private handleToolCallEnd(event: any) {\n // 标记工具调用结束\n this.toolCallEnded.add(event.toolCallId);\n return this.updateToolCallInContext(event.toolCallId, 'complete');\n }\n\n /**\n * 在上下文中更新工具调用\n */\n private updateToolCallInContext(toolCallId: string, status: 'streaming' | 'complete'): AIMessageContent | null {\n if (this.reasoningContext.active) {\n // Reasoning 模式:更新 reasoning.data 中的 toolcall\n const currentIndex = this.reasoningContext.currentDataIndex;\n if (currentIndex >= 0 && this.reasoningContext.currentData[currentIndex]) {\n const currentContent = this.reasoningContext.currentData[currentIndex];\n const currentType = currentContent.type;\n\n // 检查 type 是否匹配(toolcall-${toolCallName})\n if (currentType.startsWith('toolcall')) {\n const updatedContent = {\n ...currentContent,\n data: this.toolCallMap[toolCallId],\n status,\n };\n\n this.reasoningContext.currentData = updateReasoningData(\n this.reasoningContext.currentData,\n currentIndex,\n updatedContent,\n );\n\n return createReasoningContent(this.reasoningContext.currentData, 'streaming', 'merge', false);\n }\n }\n return null;\n }\n // 独立模式:返回独立的 toolcall 更新\n // 通过相同的 type (toolcall-${toolCallName}) 来实现 merge\n return createToolCallContent(this.toolCallMap[toolCallId], status, 'merge');\n }\n\n /**\n * 重置 reasoning 上下文\n */\n private resetReasoningContext(): void {\n this.reasoningContext = {\n active: false,\n currentData: [],\n currentDataIndex: 0,\n };\n }\n}\n\nexport default AGUIEventMapper;\n"],"names":["AGUIEventMapper","_classCallCheck","_defineProperty","Set","active","currentData","currentDataIndex","_createClass","key","value","mapEvent","chunk","event","parseSSEData","data","type","isTextMessageEvent","handleTextMessageEvent","isThinkingEvent","handleThinkingEvent","isToolCallEvent","handleToolCallEvent","isStateEvent","handleStateEvent","handleOtherEvent","getToolCalls","Object","values","toolCallMap","clearToolCall","toolCallId","toolCallEnded","getToolCall","isToolCallEnded","has","reset","clear","resetReasoningContext","EventType","TEXT_MESSAGE_START","createMarkdownContent","TEXT_MESSAGE_CHUNK","TEXT_MESSAGE_CONTENT","TEXT_MESSAGE_END","delta","THINKING_START","handleThinkingStart","THINKING_TEXT_MESSAGE_START","handleThinkingTextStart","THINKING_TEXT_MESSAGE_CONTENT","handleThinkingTextContent","THINKING_TEXT_MESSAGE_END","handleThinkingTextEnd","THINKING_END","handleThinkingEnd","TOOL_CALL_START","handleToolCallStart","TOOL_CALL_ARGS","handleToolCallArgs","TOOL_CALL_CHUNK","handleToolCallChunk","TOOL_CALL_RESULT","handleToolCallResult","TOOL_CALL_END","handleToolCallEnd","stateManager","MESSAGES_SNAPSHOT","handleMessagesSnapshot","messages","CUSTOM","handleCustomEvent","RUN_ERROR","createTextContent","message","error","reasoningContext","createReasoningContent","newTextContent","_addToReasoningData","addToReasoningData","index","createThinkingContent","title","currentIndex","currentContent","currentText","newText","mergeStringContent","updatedContent","status","updateReasoningData","text","_objectSpread","finalData","_toConsumableArray","eventType","toolCallName","parentMessageId","toolCallContent","createToolCallContent","_addToReasoningData2","currentArgs","args","newArgs","updateToolCall","updateToolCallInContext","currentChunk","newChunk","currentResult","result","newResult","content","suggestionContent","handleSuggestionToolCall","add","currentType","startsWith"],"mappings":"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"}