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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/es/_util/reactify.js +4 -4
  2. package/es/_util/reactify.js.map +1 -1
  3. package/es/_util/useDynamicStyle.js +1 -1
  4. package/es/attachments/index.js +1 -1
  5. package/es/chat-actionbar/index.js +1 -1
  6. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +91 -0
  7. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +236 -0
  8. package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
  9. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
  10. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
  11. package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
  12. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
  13. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
  14. package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
  15. package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
  16. package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
  17. package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
  18. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
  19. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
  20. package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
  21. package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
  22. package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
  23. package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
  24. package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
  25. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
  26. package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
  27. package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
  28. package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
  29. package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
  30. package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
  31. package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
  32. package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
  33. package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
  34. package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
  35. package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
  36. package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
  37. package/es/chat-engine/components/a2ui/containers/index.js +30 -0
  38. package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
  39. package/es/chat-engine/components/a2ui/index.d.ts +11 -0
  40. package/es/chat-engine/components/a2ui/index.js +60 -0
  41. package/es/chat-engine/components/a2ui/index.js.map +1 -0
  42. package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +31 -0
  43. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +76 -0
  44. package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
  45. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
  46. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
  47. package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
  48. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
  49. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
  50. package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
  51. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
  52. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
  53. package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
  54. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
  55. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
  56. package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
  57. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
  58. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
  59. package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
  60. package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
  61. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
  62. package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
  63. package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
  64. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
  65. package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
  66. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
  67. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
  68. package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
  69. package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
  70. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
  71. package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
  72. package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
  73. package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
  74. package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
  75. package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
  76. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
  77. package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
  78. package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
  79. package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
  80. package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
  81. package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
  82. package/es/chat-engine/components/a2ui/registry.js +74 -0
  83. package/es/chat-engine/components/a2ui/registry.js.map +1 -0
  84. package/es/chat-engine/components/activity/index.js +1 -1
  85. package/es/chat-engine/components/activity/registry.js +4 -4
  86. package/es/chat-engine/components/activity/registry.js.map +1 -1
  87. package/es/chat-engine/components/activity/render.js +6 -6
  88. package/es/chat-engine/components/activity/render.js.map +1 -1
  89. package/es/chat-engine/components/activity/types.js +1 -1
  90. package/es/chat-engine/components/index.d.ts +1 -0
  91. package/es/chat-engine/components/index.js +53 -8
  92. package/es/chat-engine/components/index.js.map +1 -1
  93. package/es/chat-engine/components/provider/agent-state.js +40 -4
  94. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  95. package/es/chat-engine/components/toolcall/index.js +4 -2
  96. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  97. package/es/chat-engine/components/toolcall/registry.js +4 -4
  98. package/es/chat-engine/components/toolcall/registry.js.map +1 -1
  99. package/es/chat-engine/components/toolcall/render.js +20 -18
  100. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  101. package/es/chat-engine/components/toolcall/types.js +1 -1
  102. package/es/chat-engine/core/a2ui/index.d.ts +10 -0
  103. package/es/chat-engine/core/a2ui/index.js +24 -0
  104. package/es/chat-engine/core/a2ui/index.js.map +1 -0
  105. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
  106. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
  107. package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
  108. package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
  109. package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
  110. package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
  111. package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
  112. package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
  113. package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
  114. package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
  115. package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
  116. package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
  117. package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
  118. package/es/chat-engine/core/a2ui/types/index.js +9 -0
  119. package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
  120. package/es/chat-engine/core/a2ui/types/types.d.ts +769 -0
  121. package/es/chat-engine/core/a2ui/types/types.js +104 -0
  122. package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
  123. package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
  124. package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
  125. package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
  126. package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
  127. package/es/chat-engine/core/a2ui/utils/index.js +13 -0
  128. package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
  129. package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
  130. package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
  131. package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
  132. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +16 -0
  133. package/es/chat-engine/core/adapters/agui/event-mapper.js +60 -6
  134. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
  135. package/es/chat-engine/core/adapters/agui/events.d.ts +58 -58
  136. package/es/chat-engine/core/adapters/agui/events.js +1 -1
  137. package/es/chat-engine/core/adapters/agui/index.d.ts +1 -1
  138. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  139. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  140. package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
  141. package/es/chat-engine/core/adapters/agui/types.d.ts +16 -16
  142. package/es/chat-engine/core/adapters/agui/types.js +1 -1
  143. package/es/chat-engine/core/adapters/agui/utils.d.ts +5 -1
  144. package/es/chat-engine/core/adapters/agui/utils.js +6 -2
  145. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
  146. package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
  147. package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
  148. package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
  149. package/es/chat-engine/core/event-bus/index.d.ts +5 -0
  150. package/es/chat-engine/core/event-bus/index.js +13 -0
  151. package/es/chat-engine/core/event-bus/index.js.map +1 -0
  152. package/es/chat-engine/core/event-bus/types.d.ts +230 -0
  153. package/es/chat-engine/core/event-bus/types.js +32 -0
  154. package/es/chat-engine/core/event-bus/types.js.map +1 -0
  155. package/es/chat-engine/core/index.d.ts +8 -1
  156. package/es/chat-engine/core/index.js +128 -10
  157. package/es/chat-engine/core/index.js.map +1 -1
  158. package/es/chat-engine/core/processor/index.js +1 -1
  159. package/es/chat-engine/core/server/batch-client.js +1 -1
  160. package/es/chat-engine/core/server/connection-manager.js +1 -1
  161. package/es/chat-engine/core/server/errors.js +1 -1
  162. package/es/chat-engine/core/server/index.js +1 -1
  163. package/es/chat-engine/core/server/llm-service.js +17 -15
  164. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  165. package/es/chat-engine/core/server/sse-client.js +1 -1
  166. package/es/chat-engine/core/server/sse-parser.js +1 -1
  167. package/es/chat-engine/core/server/types.js +1 -1
  168. package/es/chat-engine/core/store/message.js +1 -1
  169. package/es/chat-engine/core/store/model.js +1 -1
  170. package/es/chat-engine/core/store/reactiveState.js +1 -1
  171. package/es/chat-engine/core/type.d.ts +18 -2
  172. package/es/chat-engine/core/type.js +1 -1
  173. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  174. package/es/chat-engine/core/utils/index.js +1 -1
  175. package/es/chat-engine/core/utils/logger.js +1 -1
  176. package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
  177. package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
  178. package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
  179. package/es/chat-engine/hooks/a2ui/index.d.ts +7 -0
  180. package/es/chat-engine/hooks/a2ui/index.js +19 -0
  181. package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
  182. package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
  183. package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
  184. package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
  185. package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
  186. package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
  187. package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
  188. package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
  189. package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
  190. package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
  191. package/es/chat-engine/hooks/index.d.ts +1 -0
  192. package/es/chat-engine/hooks/index.js +45 -4
  193. package/es/chat-engine/hooks/index.js.map +1 -1
  194. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  195. package/es/chat-engine/hooks/useAgentState.js +38 -2
  196. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  197. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  198. package/es/chat-engine/hooks/useChat.d.ts +2 -2
  199. package/es/chat-engine/hooks/useChat.js +39 -2
  200. package/es/chat-engine/hooks/useChat.js.map +1 -1
  201. package/es/chat-engine/index.js +47 -2
  202. package/es/chat-engine/index.js.map +1 -1
  203. package/es/chat-filecard/index.js +1 -1
  204. package/es/chat-loading/index.js +1 -1
  205. package/es/chat-markdown/index.js +1 -1
  206. package/es/chat-message/index.js +1 -1
  207. package/es/chat-sender/index.js +1 -1
  208. package/es/chat-thinking/index.js +1 -1
  209. package/es/chatbot/docs/react-best-practice.d.ts +13 -0
  210. package/es/chatbot/index.js +1 -1
  211. package/es/index.js +47 -2
  212. package/es/index.js.map +1 -1
  213. package/es/style/index.js +1 -1
  214. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { AIMessageContent, ChatMessagesData, ChatRequestParams, SSEChunkData, ToolCall } from '../../type';\nimport { AGUIEventMapper } from './event-mapper';\nimport type { BaseEvent, RunErrorEvent, RunFinishedEvent, RunStartedEvent } from './events';\nimport { AGUIEventType } from './events';\nimport type { AGUIAssistantHistoryMessage, AGUIHistoryMessage, AGUIUserHistoryMessage, AGUIActivityMessage } from './types';\nimport { buildToolCallMap, processReasoningContent, processToolCalls } from './utils';\n\n// 重新导出类型,以便其他文件可以使用\nexport type {\n AGUIHistoryMessage,\n AGUIUserHistoryMessage,\n AGUIAssistantHistoryMessage,\n AGUIToolHistoryMessage,\n} from './types';\n\n/**\n * AGUI协议适配器回调接口\n */\nexport interface AGUIAdapterCallbacks {\n onRunStart?: (event: RunStartedEvent) => void;\n onRunComplete?: (isAborted: boolean, params: ChatRequestParams, event?: RunFinishedEvent) => void;\n onRunError?: (error: RunErrorEvent) => void;\n}\n\n/**\n * AGUI协议适配器\n * 1. 处理AGUI协议特定的事件(RUN_STARTED, RUN_FINISHED, RUN_ERROR)\n * 2. 管理工具调用的生命周期\n * 3. 将AGUI事件映射为ChatEngine可理解的消息内容\n * 4. 转换AG-UI历史消息为ChatMessagesData格式\n */\nexport class AGUIAdapter {\n /**\n * 转换AG-UI历史消息为ChatMessagesData格式(静态方法)\n *\n * ## 设计说明\n *\n * ### AG-UI 协议中的消息角色\n * - `user`: 用户消息\n * - `assistant`: AI 回复,可包含 content、reasoningContent、toolCalls\n * - `tool`: 工具调用结果,通过 toolCallId 关联到 assistant 的 toolCalls\n * - `activity`: 独立的活动/事件消息,表示代理运行过程中的中间状态\n *\n * ### Activity 消息的处理策略\n * Activity 在 AG-UI 中是独立的 role,不是 assistant 的附属。\n * 但在 UI 展示层,我们选择将其合并到 AI 响应中,原因:\n * 1. 保持对话气泡的整洁性(一问一答模式)\n * 2. Activity 通常是 AI 处理过程的可视化,属于同一个响应周期\n * 3. 通过 activityType 区分不同类型的 Activity 渲染\n *\n * 转换策略:\n * 1. 以用户消息为边界进行分组\n * 2. 每个用户消息对应一个AI消息,包含该用户输入后的所有AI回复和工具调用结果\n * 3. 按照后端数据的原始顺序构建content数组\n * 4. 避免重复处理同一个工具调用\n * 5. 支持只有assistant消息的情况(如welcome消息)\n *\n * @param historyMessages AG-UI格式的历史消息数组\n * @returns 转换后的ChatMessagesData数组\n */\n static convertHistoryMessages(historyMessages: AGUIHistoryMessage[]): ChatMessagesData[] {\n if (!historyMessages || historyMessages.length === 0) {\n return [];\n }\n const convertedMessages: ChatMessagesData[] = [];\n const toolCallMap = buildToolCallMap(historyMessages);\n\n // 按用户消息分组处理\n let currentUserMessage: AGUIUserHistoryMessage | null = null;\n let currentGroupMessages: AGUIHistoryMessage[] = []; // 存储当前组的所有消息\n\n /**\n * 处理消息组,构建AI消息的content数组\n *\n * 处理顺序(保持原始顺序):\n * 1. assistant 的 reasoningContent(思考过程)\n * 2. assistant 的 content(文本回复)\n * 3. assistant 的 toolCalls(工具调用)\n * 4. activity 消息(活动/状态展示)\n */\n const processMessageGroup = (messages: AGUIHistoryMessage[]): AIMessageContent[] => {\n const allContent: AIMessageContent[] = [];\n\n messages.forEach((msg) => {\n if (msg.role === 'assistant') {\n const assistantMsg = msg as AGUIAssistantHistoryMessage;\n\n // 处理 reasoningContent(支持 reasoning 和 thinking 两种类型)\n if (assistantMsg.reasoningContent) {\n const reasoningContentResult = processReasoningContent(assistantMsg.reasoningContent);\n if (reasoningContentResult) {\n allContent.push(reasoningContentResult);\n }\n }\n\n // 处理普通文本内容\n if (assistantMsg.content) {\n allContent.push({\n type: 'markdown',\n data: assistantMsg.content,\n });\n }\n\n // 处理工具调用内容\n if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {\n const toolCallContents = processToolCalls(assistantMsg.toolCalls, toolCallMap);\n allContent.push(...(toolCallContents as AIMessageContent[]));\n }\n } else if (msg.role === 'activity') {\n const activityMsg = msg as AGUIActivityMessage;\n \n // 检查是否是存储为 Activity 的 CUSTOM 事件\n if (activityMsg.activityType === AGUIEventType.CUSTOM) {\n // 将存储为 Activity 的 CUSTOM 事件转换为标准 custom 格式,业务层自行处理\n const customContent: any = {\n type: 'custom',\n data: {\n name: activityMsg.content?.name || '',\n value: activityMsg.content?.value,\n },\n status: 'complete',\n };\n allContent.push(customContent);\n } else {\n // 普通 Activity 处理\n // 使用 activity-${activityType} 格式的 type,与流式传输时的处理保持一致\n allContent.push({\n type: `activity-${activityMsg.activityType}`,\n data: {\n activityType: activityMsg.activityType,\n content: activityMsg.content,\n },\n status: 'complete',\n } as any);\n }\n }\n });\n\n return allContent;\n };\n\n /**\n * 创建AI消息\n */\n const createAIMessage = (messages: AGUIHistoryMessage[]): void => {\n if (messages.length > 0) {\n const allContent = processMessageGroup(messages);\n if (allContent.length > 0) {\n const firstMessageInGroup = messages[0];\n convertedMessages.push({\n id: firstMessageInGroup.id,\n role: 'assistant',\n content: allContent,\n status: 'complete',\n });\n }\n }\n };\n\n /**\n * 处理当前消息组\n */\n const flushCurrentGroup = () => {\n if (currentUserMessage) {\n // 添加用户消息\n convertedMessages.push({\n id: currentUserMessage.id,\n role: 'user',\n content: [\n {\n type: 'text',\n data: currentUserMessage.content,\n },\n ],\n datetime: new Date(currentUserMessage.timestamp || Date.now()).toISOString(),\n });\n }\n // 处理AI消息\n createAIMessage(currentGroupMessages);\n\n // 重置当前组\n currentUserMessage = null;\n currentGroupMessages = [];\n };\n\n // 按顺序处理消息\n historyMessages.forEach((msg) => {\n if (msg.role === 'user') {\n // 遇到新的用户消息,先处理之前的组\n flushCurrentGroup();\n\n // 开始新的组\n currentUserMessage = msg as AGUIUserHistoryMessage;\n } else if (msg.role === 'assistant' || msg.role === 'tool' || msg.role === 'activity') {\n // 收集助手消息、工具调用结果和活动消息到当前组\n currentGroupMessages.push(msg);\n }\n });\n\n // 处理最后一组\n flushCurrentGroup();\n return convertedMessages;\n }\n\n private aguiEventMapper: AGUIEventMapper;\n\n constructor() {\n this.aguiEventMapper = new AGUIEventMapper();\n }\n\n /**\n * 处理AGUI事件\n *\n * 处理流程:\n * 1. 解析SSE数据(AG-UI后端返回标准SSE格式,data字段是JSON字符串)\n * 2. 处理AGUI特定事件(生命周期事件)\n * 3. 使用事件映射器转换为消息内容\n * 4. 同步工具调用状态\n *\n * @param chunk SSE数据块\n * @param callbacks 回调函数\n * @returns 处理结果\n */\n handleAGUIEvent(chunk: SSEChunkData, callbacks: AGUIAdapterCallbacks): AIMessageContent | AIMessageContent[] | null {\n // AG-UI后端返回标准SSE格式,data字段是JSON字符串\n let event: BaseEvent;\n try {\n event = typeof chunk.data === 'string' ? JSON.parse(chunk.data) : chunk.data;\n } catch (error) {\n console.warn('Failed to parse AG-UI event data:', error);\n return null;\n }\n\n if (!event?.type) return null;\n\n // 处理AGUI特定事件(生命周期事件)\n const lifecycleHandled = this.handleAGUISpecificEvents(event, callbacks);\n\n // 如果是生命周期事件,不需要转换为消息内容\n if (lifecycleHandled) {\n return null;\n }\n\n // 使用事件映射器处理内容事件\n const result = this.aguiEventMapper.mapEvent(chunk);\n\n return result;\n }\n\n /**\n * 获取AGUI事件映射器\n */\n get toolcalls() {\n return this.aguiEventMapper.getToolCalls();\n }\n\n getToolcallByName(name: string): ToolCall | undefined {\n const result = this.aguiEventMapper.getToolCalls().find((call) => call.toolCallName === name);\n return result;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.aguiEventMapper.reset();\n }\n\n /**\n * 处理AGUI特定事件\n *\n * 处理RUN_STARTED、RUN_FINISHED、RUN_ERROR等生命周期事件\n * 这些事件用于通知外部系统状态变化,并执行相应的回调\n *\n * @param event 解析后的事件对象\n * @param callbacks 回调函数\n * @returns 是否处理了生命周期事件\n */\n private handleAGUISpecificEvents(event: BaseEvent, callbacks: AGUIAdapterCallbacks): boolean {\n switch (event.type) {\n case AGUIEventType.RUN_STARTED:\n callbacks.onRunStart?.(event as RunStartedEvent);\n return true;\n case AGUIEventType.RUN_FINISHED:\n callbacks.onRunComplete?.(false, {} as ChatRequestParams, event as RunFinishedEvent);\n return true;\n case AGUIEventType.RUN_ERROR:\n callbacks.onRunError?.(event as RunErrorEvent);\n return true;\n default:\n return false; // 不是生命周期事件\n }\n }\n}\n\n/**\n * 状态订阅机制导出\n */\nexport * from './state-manager';\n\nexport * from './events';\n"],"names":["AGUIAdapter","_classCallCheck","aguiEventMapper","AGUIEventMapper","_createClass","key","value","handleAGUIEvent","chunk","callbacks","_event","event","data","JSON","parse","error","console","warn","type","lifecycleHandled","handleAGUISpecificEvents","result","mapEvent","get","getToolCalls","getToolcallByName","name","find","call","toolCallName","reset","_callbacks$onRunStart","_callbacks$onRunCompl","_callbacks$onRunError","AGUIEventType","RUN_STARTED","onRunStart","RUN_FINISHED","onRunComplete","RUN_ERROR","onRunError","convertHistoryMessages","historyMessages","length","convertedMessages","toolCallMap","buildToolCallMap","currentUserMessage","currentGroupMessages","processMessageGroup","messages","allContent","forEach","msg","role","assistantMsg","reasoningContent","reasoningContentResult","processReasoningContent","push","content","toolCalls","toolCallContents","processToolCalls","apply","_toConsumableArray","activityMsg","activityType","CUSTOM","_activityMsg$content","_activityMsg$content2","customContent","status","concat","createAIMessage","firstMessageInGroup","id","flushCurrentGroup","datetime","Date","timestamp","now","toISOString"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCO,IAAMA,WAAY,gBAAA,YAAA;AA+KvB,EAAA,SAAAA,cAAc;AAAAC,IAAAA,eAAA,OAAAD,WAAA,CAAA,CAAA;AACP,IAAA,IAAA,CAAAE,eAAA,GAAkB,IAAIC,eAAgB,EAAA,CAAA;AAC7C,GAAA;EAAA,OAAAC,YAAA,CAAAJ,WAAA,EAAA,CAAA;IAAAK,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAeA,SAAAC,eAAAA,CAAgBC,OAAqBC,SAA+E,EAAA;AAAA,MAAA,IAAAC,MAAA,CAAA;AAE9G,MAAA,IAAAC,KAAA,CAAA;MACA,IAAA;AACMA,QAAAA,KAAA,GAAA,OAAOH,MAAMI,IAAS,KAAA,QAAA,GAAWC,KAAKC,KAAM,CAAAN,KAAA,CAAMI,IAAI,CAAA,GAAIJ,KAAM,CAAAI,IAAA,CAAA;eACjEG,KAAP,EAAA;AACQC,QAAAA,OAAA,CAAAC,IAAA,CAAK,qCAAqCF,KAAK,CAAA,CAAA;AAChD,QAAA,OAAA,IAAA,CAAA;AACT,OAAA;AAEA,MAAA,IAAI,EAAAL,CAAAA,MAAA,GAACC,KAAO,MAAAD,IAAAA,IAAAA,MAAA,KAAPA,KAAAA,CAAAA,IAAAA,MAAA,CAAOQ,IAAA,CAAa,EAAA,OAAA,IAAA,CAAA;MAGzB,IAAMC,gBAAmB,GAAA,IAAA,CAAKC,wBAAyB,CAAAT,KAAA,EAAOF,SAAS,CAAA,CAAA;AAGvE,MAAA,IAAIU,gBAAkB,EAAA;AACb,QAAA,OAAA,IAAA,CAAA;AACT,OAAA;MAGA,IAAME,MAAS,GAAA,IAAA,CAAKnB,eAAgB,CAAAoB,QAAA,CAASd,KAAK,CAAA,CAAA;AAE3C,MAAA,OAAAa,MAAA,CAAA;AACT,KAAA;AAAA,GAAA,EAAA;IAAAhB,GAAA,EAAA,WAAA;IAAAkB,GAAA,EAKA,SAAAA,GAAAA,GAAgB;AACP,MAAA,OAAA,IAAA,CAAKrB,gBAAgBsB,YAAa,EAAA,CAAA;AAC3C,KAAA;AAAA,GAAA,EAAA;IAAAnB,GAAA,EAAA,mBAAA;AAAAC,IAAAA,KAAA,EAEA,SAAAmB,kBAAkBC,IAAoC,EAAA;AAC9C,MAAA,IAAAL,MAAA,GAAS,IAAK,CAAAnB,eAAA,CAAgBsB,YAAa,EAAA,CAAEG,KAAK,UAACC,IAAA,EAAA;AAAA,QAAA,OAASA,IAAK,CAAAC,YAAA,KAAiBH,IAAI,CAAA;OAAA,CAAA,CAAA;AACrF,MAAA,OAAAL,MAAA,CAAA;AACT,KAAA;AAAA,GAAA,EAAA;IAAAhB,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAwB,KAAcA,GAAA;AACZ,MAAA,IAAA,CAAK5B,gBAAgB4B,KAAM,EAAA,CAAA;AAC7B,KAAA;AAAA,GAAA,EAAA;IAAAzB,GAAA,EAAA,0BAAA;AAAAC,IAAAA,KAAA,EAYQ,SAAAc,wBAAAA,CAAyBT,OAAkBF,SAA0C,EAAA;AAAA,MAAA,IAAAsB,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,CAAA;MAC3F,QAAQtB,KAAM,CAAAO,IAAA;QAAA,KACPgB,aAAc,CAAAC,WAAA;AACjB,UAAA,CAAAJ,qBAAA,GAAAtB,SAAA,CAAU2B,kDAAVL,KAAAA,CAAAA,IAAAA,qBAAA,CAAAH,IAAA,CAAAnB,SAAA,EAAuBE,KAAwB,CAAA,CAAA;AACxC,UAAA,OAAA,IAAA,CAAA;QAAA,KACJuB,aAAc,CAAAG,YAAA;UACjB,CAAAL,qBAAA,GAAAvB,SAAA,CAAU6B,aAAgB,MAAAN,IAAAA,IAAAA,qBAAA,eAA1BA,qBAAA,CAAAJ,IAAA,CAAAnB,SAAA,EAA0B,KAAA,EAAO,EAAC,EAAwBE,KAAyB,CAAA,CAAA;AAC5E,UAAA,OAAA,IAAA,CAAA;QAAA,KACJuB,aAAc,CAAAK,SAAA;AACjB,UAAA,CAAAN,qBAAA,GAAAxB,SAAA,CAAU+B,kDAAVP,KAAAA,CAAAA,IAAAA,qBAAA,CAAAL,IAAA,CAAAnB,SAAA,EAAuBE,KAAsB,CAAA,CAAA;AACtC,UAAA,OAAA,IAAA,CAAA;AAAA,QAAA;AAEA,UAAA,OAAA,KAAA,CAAA;AAAA,OAAA;AAEb,KAAA;AAAA,GAAA,CAAA,EAAA,CAAA;IAAAN,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAxOA,SAAOmC,uBAAuBC,eAA2D,EAAA;MACvF,IAAI,CAACA,eAAA,IAAmBA,eAAgB,CAAAC,MAAA,KAAW,CAAG,EAAA;AACpD,QAAA,OAAO,EAAC,CAAA;AACV,OAAA;MACA,IAAMC,oBAAwC,EAAC,CAAA;AACzC,MAAA,IAAAC,WAAA,GAAcC,iBAAiBJ,eAAe,CAAA,CAAA;MAGpD,IAAIK,kBAAoD,GAAA,IAAA,CAAA;MACxD,IAAIC,uBAA6C,EAAC,CAAA;AAW5C,MAAA,IAAAC,mBAAA,GAAsB,SAAtBA,mBAAAA,CAAuBC,QAAuD,EAAA;QAClF,IAAMC,aAAiC,EAAC,CAAA;AAE/BD,QAAAA,QAAA,CAAAE,OAAA,CAAQ,UAACC,GAAQ,EAAA;AACpB,UAAA,IAAAA,GAAA,CAAIC,SAAS,WAAa,EAAA;YAC5B,IAAMC,YAAe,GAAAF,GAAA,CAAA;YAGrB,IAAIE,aAAaC,gBAAkB,EAAA;AAC3B,cAAA,IAAAC,sBAAA,GAAyBC,uBAAwB,CAAAH,YAAA,CAAaC,gBAAgB,CAAA,CAAA;AACpF,cAAA,IAAIC,sBAAwB,EAAA;AAC1BN,gBAAAA,UAAA,CAAWQ,KAAKF,sBAAsB,CAAA,CAAA;AACxC,eAAA;AACF,aAAA;YAGA,IAAIF,aAAaK,OAAS,EAAA;cACxBT,UAAA,CAAWQ,IAAK,CAAA;AACdzC,gBAAAA,IAAM,EAAA,UAAA;gBACNN,MAAM2C,YAAa,CAAAK,OAAAA;AACrB,eAAC,CAAA,CAAA;AACH,aAAA;YAGA,IAAIL,YAAa,CAAAM,SAAA,IAAaN,YAAa,CAAAM,SAAA,CAAUlB,SAAS,CAAG,EAAA;cAC/D,IAAMmB,gBAAmB,GAAAC,gBAAA,CAAiBR,YAAa,CAAAM,SAAA,EAAWhB,WAAW,CAAA,CAAA;cAClEM,UAAA,CAAAQ,IAAA,CAAAK,KAAA,CAAAb,UAAA,EAAAc,kBAAA,CAASH,gBAAuC,CAAA,CAAA,CAAA;AAC7D,aAAA;AACF,WAAA,MAAA,IAAWT,GAAI,CAAAC,IAAA,KAAS,UAAY,EAAA;YAClC,IAAMY,WAAc,GAAAb,GAAA,CAAA;AAGhB,YAAA,IAAAa,WAAA,CAAYC,YAAiB,KAAAjC,aAAA,CAAckC,MAAQ,EAAA;cAAA,IAAAC,oBAAA,EAAAC,qBAAA,CAAA;AAErD,cAAA,IAAMC,aAAqB,GAAA;AACzBrD,gBAAAA,IAAM,EAAA,QAAA;AACNN,gBAAAA,IAAM,EAAA;AACJc,kBAAAA,IAAA,EAAM,CAAA,CAAA2C,oBAAA,GAAAH,WAAY,CAAAN,OAAA,MAAAS,IAAAA,IAAAA,oBAAA,KAAZA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqB3C,IAAQ,KAAA,EAAA;kBACnCpB,KAAA,EAAA,CAAAgE,qBAAA,GAAOJ,YAAYN,OAAS,MAAAU,IAAAA,IAAAA,qBAAA,KAArBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAA,CAAqBhE,KAAAA;iBAC9B;AACAkE,gBAAAA,MAAQ,EAAA,UAAA;eACV,CAAA;AACArB,cAAAA,UAAA,CAAWQ,KAAKY,aAAa,CAAA,CAAA;AAC/B,aAAO,MAAA;cAGLpB,UAAA,CAAWQ,IAAK,CAAA;AACdzC,gBAAAA,IAAA,cAAAuD,MAAA,CAAkBP,WAAY,CAAAC,YAAA,CAAA;AAC9BvD,gBAAAA,IAAM,EAAA;kBACJuD,cAAcD,WAAY,CAAAC,YAAA;kBAC1BP,SAASM,WAAY,CAAAN,OAAAA;iBACvB;AACAY,gBAAAA,MAAQ,EAAA,UAAA;AACV,eAAQ,CAAA,CAAA;AACV,aAAA;AACF,WAAA;AACF,SAAC,CAAA,CAAA;AAEM,QAAA,OAAArB,UAAA,CAAA;OACT,CAAA;AAKM,MAAA,IAAAuB,eAAA,GAAkB,SAAlBA,eAAAA,CAAmBxB,QAAyC,EAAA;AAC5D,QAAA,IAAAA,QAAA,CAASP,SAAS,CAAG,EAAA;AACjB,UAAA,IAAAQ,UAAA,GAAaF,oBAAoBC,QAAQ,CAAA,CAAA;AAC3C,UAAA,IAAAC,UAAA,CAAWR,SAAS,CAAG,EAAA;AACzB,YAAA,IAAMgC,sBAAsBzB,QAAS,CAAA,CAAA,CAAA,CAAA;YACrCN,iBAAA,CAAkBe,IAAK,CAAA;cACrBiB,IAAID,mBAAoB,CAAAC,EAAA;AACxBtB,cAAAA,IAAM,EAAA,WAAA;AACNM,cAAAA,OAAS,EAAAT,UAAA;AACTqB,cAAAA,MAAQ,EAAA,UAAA;AACV,aAAC,CAAA,CAAA;AACH,WAAA;AACF,SAAA;OACF,CAAA;AAKA,MAAA,IAAMK,oBAAoB,SAApBA,oBAA0B;AAC9B,QAAA,IAAI9B,kBAAoB,EAAA;UAEtBH,iBAAA,CAAkBe,IAAK,CAAA;YACrBiB,IAAI7B,kBAAmB,CAAA6B,EAAA;AACvBtB,YAAAA,IAAM,EAAA,MAAA;AACNM,YAAAA,OAAS,EAAA,CACP;AACE1C,cAAAA,IAAM,EAAA,MAAA;cACNN,MAAMmC,kBAAmB,CAAAa,OAAAA;AAC3B,aAAA,CACF;AACAkB,YAAAA,QAAA,EAAU,IAAIC,IAAK,CAAAhC,kBAAA,CAAmBiC,aAAaD,IAAK,CAAAE,GAAA,EAAK,CAAA,CAAEC,WAAY,EAAA;AAC7E,WAAC,CAAA,CAAA;AACH,SAAA;QAEAR,eAAA,CAAgB1B,oBAAoB,CAAA,CAAA;AAGfD,QAAAA,kBAAA,GAAA,IAAA,CAAA;AACrBC,QAAAA,oBAAA,GAAuB,EAAC,CAAA;OAC1B,CAAA;AAGgBN,MAAAA,eAAA,CAAAU,OAAA,CAAQ,UAACC,GAAQ,EAAA;AAC3B,QAAA,IAAAA,GAAA,CAAIC,SAAS,MAAQ,EAAA;AAELuB,UAAAA,iBAAA,EAAA,CAAA;AAGG9B,UAAAA,kBAAA,GAAAM,GAAA,CAAA;AACvB,SAAA,MAAA,IAAWA,IAAIC,IAAS,KAAA,WAAA,IAAeD,IAAIC,IAAS,KAAA,MAAA,IAAUD,GAAI,CAAAC,IAAA,KAAS,UAAY,EAAA;AAErFN,UAAAA,oBAAA,CAAqBW,KAAKN,GAAG,CAAA,CAAA;AAC/B,SAAA;AACF,OAAC,CAAA,CAAA;AAGiBwB,MAAAA,iBAAA,EAAA,CAAA;AACX,MAAA,OAAAjC,iBAAA,CAAA;AACT,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type { AIMessageContent, ChatMessagesData, ChatRequestParams, SSEChunkData, ToolCall } from '../../type';\nimport { AGUIEventMapper } from './event-mapper';\nimport type { BaseEvent, RunErrorEvent, RunFinishedEvent, RunStartedEvent } from './events';\nimport { AGUIEventType } from './events';\nimport type { AGUIAssistantHistoryMessage, AGUIHistoryMessage, AGUIUserHistoryMessage, AGUIActivityMessage } from './types';\nimport { buildToolCallMap, processReasoningContent, processToolCalls } from './utils';\n\n// 重新导出类型,以便其他文件可以使用\nexport type {\n AGUIHistoryMessage,\n AGUIUserHistoryMessage,\n AGUIAssistantHistoryMessage,\n AGUIToolHistoryMessage,\n AGUIActivityMessage,\n} from './types';\n\n/**\n * AGUI协议适配器回调接口\n */\nexport interface AGUIAdapterCallbacks {\n onRunStart?: (event: RunStartedEvent) => void;\n onRunComplete?: (isAborted: boolean, params: ChatRequestParams, event?: RunFinishedEvent) => void;\n onRunError?: (error: RunErrorEvent) => void;\n}\n\n/**\n * AGUI协议适配器\n * 1. 处理AGUI协议特定的事件(RUN_STARTED, RUN_FINISHED, RUN_ERROR)\n * 2. 管理工具调用的生命周期\n * 3. 将AGUI事件映射为ChatEngine可理解的消息内容\n * 4. 转换AG-UI历史消息为ChatMessagesData格式\n */\nexport class AGUIAdapter {\n /**\n * 转换AG-UI历史消息为ChatMessagesData格式(静态方法)\n *\n * ## 设计说明\n *\n * ### AG-UI 协议中的消息角色\n * - `user`: 用户消息\n * - `assistant`: AI 回复,可包含 content、reasoningContent、toolCalls\n * - `tool`: 工具调用结果,通过 toolCallId 关联到 assistant 的 toolCalls\n * - `activity`: 独立的活动/事件消息,表示代理运行过程中的中间状态\n *\n * ### Activity 消息的处理策略\n * Activity 在 AG-UI 中是独立的 role,不是 assistant 的附属。\n * 但在 UI 展示层,我们选择将其合并到 AI 响应中,原因:\n * 1. 保持对话气泡的整洁性(一问一答模式)\n * 2. Activity 通常是 AI 处理过程的可视化,属于同一个响应周期\n * 3. 通过 activityType 区分不同类型的 Activity 渲染\n *\n * 转换策略:\n * 1. 以用户消息为边界进行分组\n * 2. 每个用户消息对应一个AI消息,包含该用户输入后的所有AI回复和工具调用结果\n * 3. 按照后端数据的原始顺序构建content数组\n * 4. 避免重复处理同一个工具调用\n * 5. 支持只有assistant消息的情况(如welcome消息)\n *\n * @param historyMessages AG-UI格式的历史消息数组\n * @returns 转换后的ChatMessagesData数组\n */\n static convertHistoryMessages(historyMessages: AGUIHistoryMessage[]): ChatMessagesData[] {\n if (!historyMessages || historyMessages.length === 0) {\n return [];\n }\n const convertedMessages: ChatMessagesData[] = [];\n const toolCallMap = buildToolCallMap(historyMessages);\n\n // 按用户消息分组处理\n let currentUserMessage: AGUIUserHistoryMessage | null = null;\n let currentGroupMessages: AGUIHistoryMessage[] = []; // 存储当前组的所有消息\n\n /**\n * 处理消息组,构建AI消息的content数组\n *\n * 处理顺序(保持原始顺序):\n * 1. assistant 的 reasoningContent(思考过程)\n * 2. assistant 的 content(文本回复)\n * 3. assistant 的 toolCalls(工具调用)\n * 4. activity 消息(活动/状态展示)\n */\n const processMessageGroup = (messages: AGUIHistoryMessage[]): AIMessageContent[] => {\n const allContent: AIMessageContent[] = [];\n\n messages.forEach((msg) => {\n if (msg.role === 'assistant') {\n const assistantMsg = msg as AGUIAssistantHistoryMessage;\n\n // 处理 reasoningContent(支持 reasoning 和 thinking 两种类型)\n if (assistantMsg.reasoningContent) {\n const reasoningContentResult = processReasoningContent(assistantMsg.reasoningContent);\n if (reasoningContentResult) {\n allContent.push(reasoningContentResult);\n }\n }\n\n // 处理普通文本内容\n if (assistantMsg.content) {\n allContent.push({\n type: 'markdown',\n data: assistantMsg.content,\n });\n }\n\n // 处理工具调用内容\n if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {\n const toolCallContents = processToolCalls(assistantMsg.toolCalls, toolCallMap);\n allContent.push(...(toolCallContents as AIMessageContent[]));\n }\n } else if (msg.role === 'activity') {\n const activityMsg = msg as AGUIActivityMessage;\n \n // 检查是否是存储为 Activity 的 CUSTOM 事件\n if (activityMsg.activityType === AGUIEventType.CUSTOM) {\n // 将存储为 Activity 的 CUSTOM 事件转换为标准 custom 格式,业务层自行处理\n const customContent: any = {\n type: 'custom',\n data: {\n name: activityMsg.content?.name || '',\n value: activityMsg.content?.value,\n },\n status: 'complete',\n };\n allContent.push(customContent);\n } else {\n // 普通 Activity 处理\n // 使用 activity-${activityType} 格式的 type,与流式传输时的处理保持一致\n allContent.push({\n type: `activity-${activityMsg.activityType}`,\n data: {\n activityType: activityMsg.activityType,\n content: activityMsg.content,\n },\n status: 'complete',\n } as any);\n }\n }\n });\n\n return allContent;\n };\n\n /**\n * 创建AI消息\n */\n const createAIMessage = (messages: AGUIHistoryMessage[]): void => {\n if (messages.length > 0) {\n const allContent = processMessageGroup(messages);\n if (allContent.length > 0) {\n const firstMessageInGroup = messages[0];\n convertedMessages.push({\n id: firstMessageInGroup.id,\n role: 'assistant',\n content: allContent,\n status: 'complete',\n });\n }\n }\n };\n\n /**\n * 处理当前消息组\n */\n const flushCurrentGroup = () => {\n if (currentUserMessage) {\n // 添加用户消息\n convertedMessages.push({\n id: currentUserMessage.id,\n role: 'user',\n content: [\n {\n type: 'text',\n data: currentUserMessage.content,\n },\n ],\n datetime: new Date(currentUserMessage.timestamp || Date.now()).toISOString(),\n });\n }\n // 处理AI消息\n createAIMessage(currentGroupMessages);\n\n // 重置当前组\n currentUserMessage = null;\n currentGroupMessages = [];\n };\n\n // 按顺序处理消息\n historyMessages.forEach((msg) => {\n if (msg.role === 'user') {\n // 遇到新的用户消息,先处理之前的组\n flushCurrentGroup();\n\n // 开始新的组\n currentUserMessage = msg as AGUIUserHistoryMessage;\n } else if (msg.role === 'assistant' || msg.role === 'tool' || msg.role === 'activity') {\n // 收集助手消息、工具调用结果和活动消息到当前组\n currentGroupMessages.push(msg);\n }\n });\n\n // 处理最后一组\n flushCurrentGroup();\n return convertedMessages;\n }\n\n private aguiEventMapper: AGUIEventMapper;\n\n constructor() {\n this.aguiEventMapper = new AGUIEventMapper();\n }\n\n /**\n * 处理AGUI事件\n *\n * 处理流程:\n * 1. 解析SSE数据(AG-UI后端返回标准SSE格式,data字段是JSON字符串)\n * 2. 处理AGUI特定事件(生命周期事件)\n * 3. 使用事件映射器转换为消息内容\n * 4. 同步工具调用状态\n *\n * @param chunk SSE数据块\n * @param callbacks 回调函数\n * @returns 处理结果\n */\n handleAGUIEvent(chunk: SSEChunkData, callbacks: AGUIAdapterCallbacks): AIMessageContent | AIMessageContent[] | null {\n // AG-UI后端返回标准SSE格式,data字段是JSON字符串\n let event: BaseEvent;\n try {\n event = typeof chunk.data === 'string' ? JSON.parse(chunk.data) : chunk.data;\n } catch (error) {\n console.warn('Failed to parse AG-UI event data:', error);\n return null;\n }\n\n if (!event?.type) return null;\n\n // 处理AGUI特定事件(生命周期事件)\n const lifecycleHandled = this.handleAGUISpecificEvents(event, callbacks);\n\n // 如果是生命周期事件,不需要转换为消息内容\n if (lifecycleHandled) {\n return null;\n }\n\n // 使用事件映射器处理内容事件\n const result = this.aguiEventMapper.mapEvent(chunk);\n\n return result;\n }\n\n /**\n * 获取AGUI事件映射器\n */\n get toolcalls() {\n return this.aguiEventMapper.getToolCalls();\n }\n\n getToolcallByName(name: string): ToolCall | undefined {\n const result = this.aguiEventMapper.getToolCalls().find((call) => call.toolCallName === name);\n return result;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.aguiEventMapper.reset();\n }\n\n /**\n * 处理AGUI特定事件\n *\n * 处理RUN_STARTED、RUN_FINISHED、RUN_ERROR等生命周期事件\n * 这些事件用于通知外部系统状态变化,并执行相应的回调\n *\n * @param event 解析后的事件对象\n * @param callbacks 回调函数\n * @returns 是否处理了生命周期事件\n */\n private handleAGUISpecificEvents(event: BaseEvent, callbacks: AGUIAdapterCallbacks): boolean {\n switch (event.type) {\n case AGUIEventType.RUN_STARTED:\n callbacks.onRunStart?.(event as RunStartedEvent);\n return true;\n case AGUIEventType.RUN_FINISHED:\n callbacks.onRunComplete?.(false, {} as ChatRequestParams, event as RunFinishedEvent);\n return true;\n case AGUIEventType.RUN_ERROR:\n callbacks.onRunError?.(event as RunErrorEvent);\n return true;\n default:\n return false; // 不是生命周期事件\n }\n }\n}\n\n/**\n * 状态订阅机制导出\n */\nexport * from './state-manager';\n\nexport * from './events';\n"],"names":["AGUIAdapter","_classCallCheck","aguiEventMapper","AGUIEventMapper","_createClass","key","value","handleAGUIEvent","chunk","callbacks","_event","event","data","JSON","parse","error","console","warn","type","lifecycleHandled","handleAGUISpecificEvents","result","mapEvent","get","getToolCalls","getToolcallByName","name","find","call","toolCallName","reset","_callbacks$onRunStart","_callbacks$onRunCompl","_callbacks$onRunError","AGUIEventType","RUN_STARTED","onRunStart","RUN_FINISHED","onRunComplete","RUN_ERROR","onRunError","convertHistoryMessages","historyMessages","length","convertedMessages","toolCallMap","buildToolCallMap","currentUserMessage","currentGroupMessages","processMessageGroup","messages","allContent","forEach","msg","role","assistantMsg","reasoningContent","reasoningContentResult","processReasoningContent","push","content","toolCalls","toolCallContents","processToolCalls","apply","_toConsumableArray","activityMsg","activityType","CUSTOM","_activityMsg$content","_activityMsg$content2","customContent","status","concat","createAIMessage","firstMessageInGroup","id","flushCurrentGroup","datetime","Date","timestamp","now","toISOString"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.9
2
+ * tdesign v1.0.2-alpha.11
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -187,14 +187,14 @@ declare const ActivityMessageSchema: z.ZodObject<{
187
187
  content: z.ZodRecord<z.ZodString, z.ZodAny>;
188
188
  }, "strip", z.ZodTypeAny, {
189
189
  content?: Record<string, any>;
190
- activityType?: string;
191
190
  id?: string;
192
191
  role?: "activity";
192
+ activityType?: string;
193
193
  }, {
194
194
  content?: Record<string, any>;
195
- activityType?: string;
196
195
  id?: string;
197
196
  role?: "activity";
197
+ activityType?: string;
198
198
  }>;
199
199
  export declare const AGUIMessageSchema: z.ZodDiscriminatedUnion<"role", [z.ZodObject<{
200
200
  id: z.ZodString;
@@ -341,14 +341,14 @@ export declare const AGUIMessageSchema: z.ZodDiscriminatedUnion<"role", [z.ZodOb
341
341
  content: z.ZodRecord<z.ZodString, z.ZodAny>;
342
342
  }, "strip", z.ZodTypeAny, {
343
343
  content?: Record<string, any>;
344
- activityType?: string;
345
344
  id?: string;
346
345
  role?: "activity";
346
+ activityType?: string;
347
347
  }, {
348
348
  content?: Record<string, any>;
349
- activityType?: string;
350
349
  id?: string;
351
350
  role?: "activity";
351
+ activityType?: string;
352
352
  }>]>;
353
353
  /**
354
354
  * 历史消息相关的类型定义
@@ -461,14 +461,14 @@ export declare const HistoryMessageSchema: z.ZodDiscriminatedUnion<"role", [z.Zo
461
461
  content: z.ZodRecord<z.ZodString, z.ZodAny>;
462
462
  }, "strip", z.ZodTypeAny, {
463
463
  content?: Record<string, any>;
464
- activityType?: string;
465
464
  id?: string;
466
465
  role?: "activity";
466
+ activityType?: string;
467
467
  }, {
468
468
  content?: Record<string, any>;
469
- activityType?: string;
470
469
  id?: string;
471
470
  role?: "activity";
471
+ activityType?: string;
472
472
  }>]>;
473
473
  export declare const RoleSchema: z.ZodUnion<[z.ZodLiteral<"developer">, z.ZodLiteral<"system">, z.ZodLiteral<"assistant">, z.ZodLiteral<"user">, z.ZodLiteral<"tool">, z.ZodLiteral<"activity">]>;
474
474
  export declare const ContextSchema: z.ZodObject<{
@@ -643,14 +643,14 @@ export declare const RunAgentInputSchema: z.ZodObject<{
643
643
  content: z.ZodRecord<z.ZodString, z.ZodAny>;
644
644
  }, "strip", z.ZodTypeAny, {
645
645
  content?: Record<string, any>;
646
- activityType?: string;
647
646
  id?: string;
648
647
  role?: "activity";
648
+ activityType?: string;
649
649
  }, {
650
650
  content?: Record<string, any>;
651
- activityType?: string;
652
651
  id?: string;
653
652
  role?: "activity";
653
+ activityType?: string;
654
654
  }>]>, "many">;
655
655
  tools: z.ZodArray<z.ZodObject<{
656
656
  name: z.ZodString;
@@ -677,6 +677,9 @@ export declare const RunAgentInputSchema: z.ZodObject<{
677
677
  }>, "many">;
678
678
  forwardedProps: z.ZodAny;
679
679
  }, "strip", z.ZodTypeAny, {
680
+ threadId?: string;
681
+ runId?: string;
682
+ state?: any;
680
683
  messages?: ({
681
684
  content?: string;
682
685
  name?: string;
@@ -717,13 +720,10 @@ export declare const RunAgentInputSchema: z.ZodObject<{
717
720
  toolCallId?: string;
718
721
  } | {
719
722
  content?: Record<string, any>;
720
- activityType?: string;
721
723
  id?: string;
722
724
  role?: "activity";
725
+ activityType?: string;
723
726
  })[];
724
- threadId?: string;
725
- runId?: string;
726
- state?: any;
727
727
  tools?: {
728
728
  name?: string;
729
729
  description?: string;
@@ -735,6 +735,9 @@ export declare const RunAgentInputSchema: z.ZodObject<{
735
735
  }[];
736
736
  forwardedProps?: any;
737
737
  }, {
738
+ threadId?: string;
739
+ runId?: string;
740
+ state?: any;
738
741
  messages?: ({
739
742
  content?: string;
740
743
  name?: string;
@@ -775,13 +778,10 @@ export declare const RunAgentInputSchema: z.ZodObject<{
775
778
  toolCallId?: string;
776
779
  } | {
777
780
  content?: Record<string, any>;
778
- activityType?: string;
779
781
  id?: string;
780
782
  role?: "activity";
783
+ activityType?: string;
781
784
  })[];
782
- threadId?: string;
783
- runId?: string;
784
- state?: any;
785
785
  tools?: {
786
786
  name?: string;
787
787
  description?: string;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.9
2
+ * tdesign v1.0.2-alpha.11
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -103,13 +103,17 @@ export declare function createToolCallContent(toolCall: any, status?: 'pending'
103
103
  * @param content 活动内容
104
104
  * @param status 状态
105
105
  * @param strategy 策略
106
+ * @param deltaInfo 增量信息(可选,用于 A2UI 等场景的增量处理)
106
107
  * @returns activity 类型的 AIMessageContent
107
108
  *
108
109
  * type 格式: activity-${activityType}
109
110
  * - activityType: 用于查找对应的渲染组件和区分不同类型的 Activity
110
111
  * - 支持并行多个不同类型的 Activity
111
112
  */
112
- export declare function createActivityContent(activityType: string, content: Record<string, any>, status?: 'streaming' | 'complete', strategy?: 'append' | 'merge'): any;
113
+ export declare function createActivityContent(activityType: string, content: Record<string, any>, status?: 'streaming' | 'complete', strategy?: 'append' | 'merge', deltaInfo?: {
114
+ fromIndex: number;
115
+ toIndex: number;
116
+ }): any;
113
117
  /**
114
118
  * 创建 markdown 类型的 AIMessageContent
115
119
  * @param data markdown 数据
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.0.2-alpha.9
2
+ * tdesign v1.0.2-alpha.11
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -133,11 +133,15 @@ function createToolCallContent(toolCall) {
133
133
  function createActivityContent(activityType, content) {
134
134
  var status = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "complete";
135
135
  var strategy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "append";
136
+ var deltaInfo = arguments.length > 4 ? arguments[4] : undefined;
136
137
  var type = "activity-".concat(activityType);
138
+ var ext = deltaInfo ? {
139
+ deltaInfo: deltaInfo
140
+ } : void 0;
137
141
  return createAIMessageContent(type, {
138
142
  activityType: activityType,
139
143
  content: content
140
- }, status, strategy);
144
+ }, status, strategy, ext);
141
145
  }
142
146
  function createMarkdownContent(data) {
143
147
  var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "complete";
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/utils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n/**\n * AGUI适配器工具函数\n * 包含与类无关的纯函数,用于处理AGUI协议相关逻辑\n */\n\n/**\n * 合并字符串内容,处理JSON和普通字符串\n * @param existing 现有内容\n * @param delta 增量内容\n * @returns 合并后的内容\n */\nexport function mergeStringContent(existing: string | undefined, delta: string): string {\n if (!existing) return delta;\n\n // 尝试解析为JSON,如果是有效的JSON则合并\n try {\n const existingObj = JSON.parse(existing);\n const deltaObj = JSON.parse(delta);\n\n // 如果是对象,进行深度合并\n if (typeof existingObj === 'object' && typeof deltaObj === 'object') {\n return JSON.stringify({ ...existingObj, ...deltaObj });\n }\n\n // 如果是数组,进行数组合并\n if (Array.isArray(existingObj) && Array.isArray(deltaObj)) {\n return JSON.stringify([...existingObj, ...deltaObj]);\n }\n\n // 其他情况,直接替换\n return delta;\n } catch (error) {\n // 不是有效的JSON,按普通字符串处理\n return existing + delta;\n }\n}\n\n/**\n * 从delta事件中提取stateKey\n * @param event delta事件对象\n * @returns stateKey或null\n */\nexport function extractStateKeyFromDelta(event: { type: string; delta?: any[] }): string | null {\n if (event.type === 'STATE_DELTA' && event.delta && event.delta.length > 0) {\n // 从第一个delta操作的路径中提取stateKey\n const firstDelta = event.delta[0];\n if (firstDelta && firstDelta.path) {\n const pathParts = firstDelta.path.split('/');\n return pathParts.length > 1 ? pathParts[1] : null;\n }\n }\n return null;\n}\n\n/**\n * 处理消息快照\n * @param messages 消息数组\n * @returns 处理后的消息内容数组\n */\nexport function handleMessagesSnapshot(messages: any[]): any[] {\n // 只取assistant消息\n if (!messages) return [];\n return messages.flatMap((msg: any) => {\n if (msg.role === 'assistant' && Array.isArray(msg.content)) {\n return msg.content.map((content: any) => ({\n type: content.type || 'markdown',\n data: content.data,\n status: 'complete',\n }));\n }\n return [];\n });\n}\n\n/**\n * 处理自定义事件\n * 直接将 CUSTOM 事件转换为通用格式,由业务层自行处理\n * @param event 自定义事件对象\n * @returns 处理结果\n */\nexport function handleCustomEvent(event: any): any {\n if (event.name === 'suggestion') {\n return {\n type: 'suggestion',\n data: event.value || [],\n status: 'complete',\n };\n }\n return {\n type: 'custom',\n data: {\n name: event.name,\n value: event.value,\n },\n status: 'complete',\n };\n}\n\n\n/**\n * 解析SSE数据\n * @param data SSE数据,可能是字符串或已解析的对象\n * @returns 解析后的事件对象或null\n */\nexport function parseSSEData(data: any): any {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch (error) {\n console.warn('Failed to parse SSE data:', error);\n return null;\n }\n }\n return data;\n}\n\n/**\n * 验证事件对象\n * @param event 事件对象\n * @returns 是否为有效事件\n */\nexport function isValidEvent(event: any): boolean {\n return event && typeof event === 'object' && event.type;\n}\n\n/**\n * 生成连接ID\n * @param prefix 前缀\n * @returns 连接ID\n */\nexport function generateConnectionId(prefix = 'sse'): string {\n const timestamp = Date.now();\n return `${prefix}_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * 格式化日志消息\n * @param level 日志级别\n * @param message 消息内容\n * @param context 上下文信息\n * @returns 格式化后的日志消息\n */\nexport function formatLogMessage(level: string, message: string, context?: any): string {\n const timestamp = new Date().toISOString();\n const contextStr = context ? ` [${JSON.stringify(context)}]` : '';\n return `[${timestamp}] [${level.toUpperCase()}] ${message}${contextStr}`;\n}\n\n/**\n * 创建基础的 AIMessageContent 对象\n * @param type 内容类型\n * @param data 内容数据\n * @param status 状态\n * @param strategy 策略\n * @param ext 扩展属性\n * @returns AIMessageContent 对象\n */\nexport function createAIMessageContent(\n type: string,\n data: any,\n status: 'pending' | 'streaming' | 'complete' | 'error' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n ext?: any,\n): any {\n const content: any = {\n type,\n data,\n status,\n strategy,\n };\n\n if (ext) {\n content.ext = ext;\n }\n\n return content;\n}\n\n/**\n * 创建 reasoning 类型的 AIMessageContent\n * @param data reasoning 数据\n * @param status 状态\n * @param strategy 策略\n * @param collapsed 是否折叠\n * @returns reasoning 类型的 AIMessageContent\n */\nexport function createReasoningContent(\n data: any[],\n status: 'streaming' | 'complete' = 'streaming',\n strategy: 'append' | 'merge' = 'append',\n collapsed = false,\n): any {\n return createAIMessageContent('reasoning', data, status, strategy, { collapsed });\n}\n\n/**\n * 创建 thinking 类型的 AIMessageContent\n * @param data thinking 数据\n * @param status 状态\n * @param strategy 策略\n * @param collapsed 是否折叠\n * @returns thinking 类型的 AIMessageContent\n */\nexport function createThinkingContent(\n data: any,\n status: 'streaming' | 'complete' = 'streaming',\n strategy: 'append' | 'merge' = 'append',\n collapsed = false,\n): any {\n return createAIMessageContent('thinking', data, status, strategy, { collapsed });\n}\n\n/**\n * 创建 toolcall 类型的 AIMessageContent\n * @param toolCall 工具调用数据\n * @param status 状态\n * @param strategy 策略(可选)\n * @returns toolcall 类型的 AIMessageContent\n *\n * type 格式: toolcall-${toolCallName}-${toolCallId}\n * - toolCallName: 用于查找对应的渲染组件\n * - toolCallId: 用于区分同名工具的不同调用实例,支持并行工具调用\n */\nexport function createToolCallContent(\n toolCall: any,\n status: 'pending' | 'streaming' | 'complete' = 'pending',\n strategy?: 'append' | 'merge',\n): any {\n // 根据 toolCallName 和 toolCallId 生成唯一的 type\n // 这样同名工具的不同调用实例会有不同的 type,支持并行工具调用场景\n const type = `toolcall-${toolCall.toolCallName}-${toolCall.toolCallId}`;\n\n // 如果没有指定 strategy,默认使用 'append'\n const finalStrategy = strategy || 'append';\n\n return createAIMessageContent(type, toolCall, status, finalStrategy);\n}\n\n/**\n * 创建 activity 类型的 AIMessageContent\n * @param activityType 活动类型\n * @param content 活动内容\n * @param status 状态\n * @param strategy 策略\n * @returns activity 类型的 AIMessageContent\n *\n * type 格式: activity-${activityType}\n * - activityType: 用于查找对应的渲染组件和区分不同类型的 Activity\n * - 支持并行多个不同类型的 Activity\n */\nexport function createActivityContent(\n activityType: string,\n content: Record<string, any>,\n status: 'streaming' | 'complete' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n): any {\n // 使用 activity-${activityType} 格式,支持并行不同类型的 Activity\n const type = `activity-${activityType}`;\n\n return createAIMessageContent(\n type,\n {\n activityType,\n content,\n },\n status,\n strategy,\n );\n}\n\n/**\n * 创建 markdown 类型的 AIMessageContent\n * @param data markdown 数据\n * @param status 状态\n * @param strategy 策略\n * @returns markdown 类型的 AIMessageContent\n */\nexport function createMarkdownContent(\n data: string,\n status: 'streaming' | 'complete' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n): any {\n return createAIMessageContent('markdown', data, status, strategy);\n}\n\n/**\n * 创建 suggestion 类型的 AIMessageContent\n * @param data suggestion 数据\n * @returns suggestion 类型的 AIMessageContent\n */\nexport function createSuggestionContent(data: any[]): any {\n return createAIMessageContent('suggestion', data, 'complete', 'append');\n}\n\n/**\n * 创建 text 类型的 AIMessageContent\n * @param data 文本数据\n * @param status 状态\n * @returns text 类型的 AIMessageContent\n */\nexport function createTextContent(data: string, status: 'streaming' | 'complete' | 'error' = 'complete'): any {\n return createAIMessageContent('text', data, status, 'append');\n}\n\n/**\n * 更新工具调用对象\n * @param existingToolCall 现有工具调用\n * @param updates 更新内容\n * @returns 更新后的工具调用\n */\nexport function updateToolCall(existingToolCall: any, updates: Partial<any>): any {\n return {\n ...existingToolCall,\n ...updates,\n };\n}\n\n/**\n * 处理 suggestion 工具调用的特殊逻辑\n * @param toolCall 工具调用对象\n * @returns suggestion 内容或 null\n */\nexport function handleSuggestionToolCall(toolCall: any): any | null {\n if (toolCall.toolCallName === 'suggestion') {\n try {\n const suggestionData = JSON.parse(toolCall.result || '{}') || [];\n return createSuggestionContent(suggestionData);\n } catch (error) {\n console.warn('Failed to parse suggestion result:', error);\n return null;\n }\n }\n return null;\n}\n\n/**\n * 更新 reasoning 上下文中的内容\n * @param reasoningData 当前 reasoning 数据\n * @param index 要更新的索引\n * @param newContent 新内容\n * @returns 更新后的 reasoning 数据\n */\nexport function updateReasoningData(reasoningData: any[], index: number, newContent: any): any[] {\n const updatedData = [...reasoningData];\n if (index >= 0 && index < updatedData.length) {\n updatedData[index] = newContent;\n }\n return updatedData;\n}\n\n/**\n * 向 reasoning 数据中添加新内容\n * @param reasoningData 当前 reasoning 数据\n * @param newContent 新内容\n * @returns 更新后的 reasoning 数据和新内容的索引\n */\nexport function addToReasoningData(reasoningData: any[], newContent: any): { data: any[]; index: number } {\n const updatedData = [...reasoningData, newContent];\n return {\n data: updatedData,\n index: updatedData.length - 1,\n };\n}\n\n/**\n * 解析 reasoningContent 字段\n * @param reasoningContent 原始 reasoningContent 数据\n * @returns 解析后的数据和类型信息\n */\nexport function parseReasoningContent(reasoningContent: any): {\n type: 'reasoning' | 'thinking';\n data: any;\n} {\n let parsedContent;\n\n if (typeof reasoningContent === 'string') {\n try {\n parsedContent = JSON.parse(reasoningContent);\n } catch {\n // 解析失败时,作为简单文本处理\n return {\n type: 'thinking',\n data: { text: reasoningContent, title: '思考完成' },\n };\n }\n } else {\n parsedContent = reasoningContent;\n }\n\n // 判断解析后的数据类型\n if (Array.isArray(parsedContent)) {\n return {\n type: 'reasoning',\n data: parsedContent,\n };\n }\n return {\n type: 'thinking',\n data: parsedContent,\n };\n}\n\n/**\n * 转换 reasoning 消息数组为 AIMessageContent 数组\n * @param reasoningMessages reasoning 消息数组\n * @returns 转换后的 AIMessageContent 数组\n */\nexport function convertReasoningMessages(reasoningMessages: any[]): any[] {\n const reasoningData: any[] = [];\n const toolCallMap = new Map<string, any>();\n\n // 第一遍:收集工具调用结果\n reasoningMessages.forEach((msg) => {\n if (msg.role === 'tool') {\n toolCallMap.set(msg.toolCallId, {\n toolCallId: msg.toolCallId,\n result: msg.content,\n });\n }\n });\n\n // 第二遍:处理消息内容\n reasoningMessages.forEach((msg) => {\n if (msg.role === 'assistant') {\n // 处理嵌套的 reasoningContent(文本思考)\n if (msg.reasoningContent && typeof msg.reasoningContent === 'string') {\n reasoningData.push({\n type: 'text',\n data: msg.reasoningContent,\n status: 'complete',\n });\n }\n\n // 处理普通内容\n if (msg.content) {\n reasoningData.push({\n type: 'text', // 在 reasoning 内部,通常用 text 而不是 markdown\n data: msg.content,\n status: 'complete',\n });\n }\n\n // 处理工具调用\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n msg.toolCalls.forEach((toolCall: any) => {\n const toolResult = toolCallMap.get(toolCall.id)?.result || '';\n const toolCallData = {\n toolCallId: toolCall.id,\n toolCallName: toolCall.function.name,\n args: toolCall.function.arguments,\n result: toolResult,\n };\n reasoningData.push({\n // 使用 toolCallName-toolCallId 格式,与 createToolCallContent 保持一致\n type: `toolcall-${toolCall.function.name}-${toolCall.id}`,\n data: toolCallData,\n status: 'complete',\n });\n });\n }\n }\n });\n\n return reasoningData;\n}\n\n/**\n * 处理 reasoningContent 并创建对应的 AIMessageContent\n * @param reasoningContent 原始 reasoningContent 数据\n * @returns 创建的 AIMessageContent 或 null\n */\nexport function processReasoningContent(reasoningContent: any): any | null {\n if (!reasoningContent) return null;\n\n const { type, data } = parseReasoningContent(reasoningContent);\n\n if (type === 'reasoning') {\n const reasoningData = convertReasoningMessages(data);\n return {\n type: 'reasoning',\n data: reasoningData,\n status: 'complete',\n strategy: 'append',\n ext: { collapsed: true },\n };\n }\n return {\n type: 'thinking',\n status: 'complete',\n data,\n };\n}\n\n/**\n * 处理工具调用并创建对应的 AIMessageContent 数组\n * @param toolCalls 工具调用数组\n * @param toolCallMap 工具调用结果映射\n * @returns 创建的 AIMessageContent 数组\n */\nexport function processToolCalls(toolCalls: any[], toolCallMap: Map<string, any>): any[] {\n return toolCalls.map((toolCall) => {\n const toolResult = toolCallMap.get(toolCall.id)?.result || '';\n\n // 建议类型的toolcall特殊解析\n if (toolCall.function.name === 'suggestion') {\n return {\n type: 'suggestion' as const,\n data: parseSSEData(toolResult) || [],\n };\n }\n\n const toolCallData = {\n toolCallId: toolCall.id,\n toolCallName: toolCall.function.name,\n args: toolCall.function.arguments,\n result: toolResult,\n };\n\n return {\n // 使用 toolCallName-toolCallId 格式,支持并行工具调用\n type: `toolcall-${toolCall.function.name}-${toolCall.id}` as const,\n data: toolCallData,\n };\n });\n}\n\n/**\n * 构建工具调用结果映射\n * @param historyMessages 历史消息数组\n * @returns 工具调用结果映射\n */\nexport function buildToolCallMap(historyMessages: any[]): Map<string, any> {\n const toolCallMap = new Map<string, any>();\n\n historyMessages.forEach((msg) => {\n if (msg.role === 'tool') {\n toolCallMap.set(msg.toolCallId, {\n toolCallId: msg.toolCallId,\n result: msg.content,\n });\n }\n });\n\n return toolCallMap;\n}\n"],"names":["mergeStringContent","existing","delta","existingObj","JSON","parse","deltaObj","_typeof","stringify","_objectSpread","Array","isArray","concat","_toConsumableArray","error","extractStateKeyFromDelta","event","type","length","firstDelta","path","pathParts","split","handleMessagesSnapshot","messages","flatMap","msg","role","content","map","data","status","handleCustomEvent","name","value","parseSSEData","console","warn","isValidEvent","generateConnectionId","prefix","timestamp","Date","now","Math","random","toString","substr","formatLogMessage","level","message","context","toISOString","contextStr","toUpperCase","createAIMessageContent","strategy","arguments","undefined","ext","createReasoningContent","collapsed","createThinkingContent","createToolCallContent","toolCall","toolCallName","toolCallId","finalStrategy","createActivityContent","activityType","createMarkdownContent","createSuggestionContent","createTextContent","updateToolCall","existingToolCall","updates","handleSuggestionToolCall","suggestionData","result","updateReasoningData","reasoningData","index","newContent","updatedData","addToReasoningData","parseReasoningContent","reasoningContent","parsedContent","_unused","text","title","convertReasoningMessages","reasoningMessages","toolCallMap","Map","forEach","set","push","toolCalls","_toolCallMap$get","toolResult","get","id","toolCallData","args","processReasoningContent","_parseReasoningConten","processToolCalls","_toolCallMap$get2","buildToolCallMap","historyMessages"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/agui/utils.ts"],"sourcesContent":["/* eslint-disable default-param-last */\n/**\n * AGUI适配器工具函数\n * 包含与类无关的纯函数,用于处理AGUI协议相关逻辑\n */\n\n/**\n * 合并字符串内容,处理JSON和普通字符串\n * @param existing 现有内容\n * @param delta 增量内容\n * @returns 合并后的内容\n */\nexport function mergeStringContent(existing: string | undefined, delta: string): string {\n if (!existing) return delta;\n\n // 尝试解析为JSON,如果是有效的JSON则合并\n try {\n const existingObj = JSON.parse(existing);\n const deltaObj = JSON.parse(delta);\n\n // 如果是对象,进行深度合并\n if (typeof existingObj === 'object' && typeof deltaObj === 'object') {\n return JSON.stringify({ ...existingObj, ...deltaObj });\n }\n\n // 如果是数组,进行数组合并\n if (Array.isArray(existingObj) && Array.isArray(deltaObj)) {\n return JSON.stringify([...existingObj, ...deltaObj]);\n }\n\n // 其他情况,直接替换\n return delta;\n } catch (error) {\n // 不是有效的JSON,按普通字符串处理\n return existing + delta;\n }\n}\n\n/**\n * 从delta事件中提取stateKey\n * @param event delta事件对象\n * @returns stateKey或null\n */\nexport function extractStateKeyFromDelta(event: { type: string; delta?: any[] }): string | null {\n if (event.type === 'STATE_DELTA' && event.delta && event.delta.length > 0) {\n // 从第一个delta操作的路径中提取stateKey\n const firstDelta = event.delta[0];\n if (firstDelta && firstDelta.path) {\n const pathParts = firstDelta.path.split('/');\n return pathParts.length > 1 ? pathParts[1] : null;\n }\n }\n return null;\n}\n\n/**\n * 处理消息快照\n * @param messages 消息数组\n * @returns 处理后的消息内容数组\n */\nexport function handleMessagesSnapshot(messages: any[]): any[] {\n // 只取assistant消息\n if (!messages) return [];\n return messages.flatMap((msg: any) => {\n if (msg.role === 'assistant' && Array.isArray(msg.content)) {\n return msg.content.map((content: any) => ({\n type: content.type || 'markdown',\n data: content.data,\n status: 'complete',\n }));\n }\n return [];\n });\n}\n\n/**\n * 处理自定义事件\n * 直接将 CUSTOM 事件转换为通用格式,由业务层自行处理\n * @param event 自定义事件对象\n * @returns 处理结果\n */\nexport function handleCustomEvent(event: any): any {\n if (event.name === 'suggestion') {\n return {\n type: 'suggestion',\n data: event.value || [],\n status: 'complete',\n };\n }\n return {\n type: 'custom',\n data: {\n name: event.name,\n value: event.value,\n },\n status: 'complete',\n };\n}\n\n\n/**\n * 解析SSE数据\n * @param data SSE数据,可能是字符串或已解析的对象\n * @returns 解析后的事件对象或null\n */\nexport function parseSSEData(data: any): any {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data);\n } catch (error) {\n console.warn('Failed to parse SSE data:', error);\n return null;\n }\n }\n return data;\n}\n\n/**\n * 验证事件对象\n * @param event 事件对象\n * @returns 是否为有效事件\n */\nexport function isValidEvent(event: any): boolean {\n return event && typeof event === 'object' && event.type;\n}\n\n/**\n * 生成连接ID\n * @param prefix 前缀\n * @returns 连接ID\n */\nexport function generateConnectionId(prefix = 'sse'): string {\n const timestamp = Date.now();\n return `${prefix}_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * 格式化日志消息\n * @param level 日志级别\n * @param message 消息内容\n * @param context 上下文信息\n * @returns 格式化后的日志消息\n */\nexport function formatLogMessage(level: string, message: string, context?: any): string {\n const timestamp = new Date().toISOString();\n const contextStr = context ? ` [${JSON.stringify(context)}]` : '';\n return `[${timestamp}] [${level.toUpperCase()}] ${message}${contextStr}`;\n}\n\n/**\n * 创建基础的 AIMessageContent 对象\n * @param type 内容类型\n * @param data 内容数据\n * @param status 状态\n * @param strategy 策略\n * @param ext 扩展属性\n * @returns AIMessageContent 对象\n */\nexport function createAIMessageContent(\n type: string,\n data: any,\n status: 'pending' | 'streaming' | 'complete' | 'error' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n ext?: any,\n): any {\n const content: any = {\n type,\n data,\n status,\n strategy,\n };\n\n if (ext) {\n content.ext = ext;\n }\n\n return content;\n}\n\n/**\n * 创建 reasoning 类型的 AIMessageContent\n * @param data reasoning 数据\n * @param status 状态\n * @param strategy 策略\n * @param collapsed 是否折叠\n * @returns reasoning 类型的 AIMessageContent\n */\nexport function createReasoningContent(\n data: any[],\n status: 'streaming' | 'complete' = 'streaming',\n strategy: 'append' | 'merge' = 'append',\n collapsed = false,\n): any {\n return createAIMessageContent('reasoning', data, status, strategy, { collapsed });\n}\n\n/**\n * 创建 thinking 类型的 AIMessageContent\n * @param data thinking 数据\n * @param status 状态\n * @param strategy 策略\n * @param collapsed 是否折叠\n * @returns thinking 类型的 AIMessageContent\n */\nexport function createThinkingContent(\n data: any,\n status: 'streaming' | 'complete' = 'streaming',\n strategy: 'append' | 'merge' = 'append',\n collapsed = false,\n): any {\n return createAIMessageContent('thinking', data, status, strategy, { collapsed });\n}\n\n/**\n * 创建 toolcall 类型的 AIMessageContent\n * @param toolCall 工具调用数据\n * @param status 状态\n * @param strategy 策略(可选)\n * @returns toolcall 类型的 AIMessageContent\n *\n * type 格式: toolcall-${toolCallName}-${toolCallId}\n * - toolCallName: 用于查找对应的渲染组件\n * - toolCallId: 用于区分同名工具的不同调用实例,支持并行工具调用\n */\nexport function createToolCallContent(\n toolCall: any,\n status: 'pending' | 'streaming' | 'complete' = 'pending',\n strategy?: 'append' | 'merge',\n): any {\n // 根据 toolCallName 和 toolCallId 生成唯一的 type\n // 这样同名工具的不同调用实例会有不同的 type,支持并行工具调用场景\n const type = `toolcall-${toolCall.toolCallName}-${toolCall.toolCallId}`;\n\n // 如果没有指定 strategy,默认使用 'append'\n const finalStrategy = strategy || 'append';\n\n return createAIMessageContent(type, toolCall, status, finalStrategy);\n}\n\n/**\n * 创建 activity 类型的 AIMessageContent\n * @param activityType 活动类型\n * @param content 活动内容\n * @param status 状态\n * @param strategy 策略\n * @param deltaInfo 增量信息(可选,用于 A2UI 等场景的增量处理)\n * @returns activity 类型的 AIMessageContent\n *\n * type 格式: activity-${activityType}\n * - activityType: 用于查找对应的渲染组件和区分不同类型的 Activity\n * - 支持并行多个不同类型的 Activity\n */\nexport function createActivityContent(\n activityType: string,\n content: Record<string, any>,\n status: 'streaming' | 'complete' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n deltaInfo?: { fromIndex: number; toIndex: number },\n): any {\n // 使用 activity-${activityType} 格式,支持并行不同类型的 Activity\n const type = `activity-${activityType}`;\n\n const ext = deltaInfo ? { deltaInfo } : undefined;\n\n return createAIMessageContent(\n type,\n {\n activityType,\n content,\n },\n status,\n strategy,\n ext,\n );\n}\n\n/**\n * 创建 markdown 类型的 AIMessageContent\n * @param data markdown 数据\n * @param status 状态\n * @param strategy 策略\n * @returns markdown 类型的 AIMessageContent\n */\nexport function createMarkdownContent(\n data: string,\n status: 'streaming' | 'complete' = 'complete',\n strategy: 'append' | 'merge' = 'append',\n): any {\n return createAIMessageContent('markdown', data, status, strategy);\n}\n\n/**\n * 创建 suggestion 类型的 AIMessageContent\n * @param data suggestion 数据\n * @returns suggestion 类型的 AIMessageContent\n */\nexport function createSuggestionContent(data: any[]): any {\n return createAIMessageContent('suggestion', data, 'complete', 'append');\n}\n\n/**\n * 创建 text 类型的 AIMessageContent\n * @param data 文本数据\n * @param status 状态\n * @returns text 类型的 AIMessageContent\n */\nexport function createTextContent(data: string, status: 'streaming' | 'complete' | 'error' = 'complete'): any {\n return createAIMessageContent('text', data, status, 'append');\n}\n\n/**\n * 更新工具调用对象\n * @param existingToolCall 现有工具调用\n * @param updates 更新内容\n * @returns 更新后的工具调用\n */\nexport function updateToolCall(existingToolCall: any, updates: Partial<any>): any {\n return {\n ...existingToolCall,\n ...updates,\n };\n}\n\n/**\n * 处理 suggestion 工具调用的特殊逻辑\n * @param toolCall 工具调用对象\n * @returns suggestion 内容或 null\n */\nexport function handleSuggestionToolCall(toolCall: any): any | null {\n if (toolCall.toolCallName === 'suggestion') {\n try {\n const suggestionData = JSON.parse(toolCall.result || '{}') || [];\n return createSuggestionContent(suggestionData);\n } catch (error) {\n console.warn('Failed to parse suggestion result:', error);\n return null;\n }\n }\n return null;\n}\n\n/**\n * 更新 reasoning 上下文中的内容\n * @param reasoningData 当前 reasoning 数据\n * @param index 要更新的索引\n * @param newContent 新内容\n * @returns 更新后的 reasoning 数据\n */\nexport function updateReasoningData(reasoningData: any[], index: number, newContent: any): any[] {\n const updatedData = [...reasoningData];\n if (index >= 0 && index < updatedData.length) {\n updatedData[index] = newContent;\n }\n return updatedData;\n}\n\n/**\n * 向 reasoning 数据中添加新内容\n * @param reasoningData 当前 reasoning 数据\n * @param newContent 新内容\n * @returns 更新后的 reasoning 数据和新内容的索引\n */\nexport function addToReasoningData(reasoningData: any[], newContent: any): { data: any[]; index: number } {\n const updatedData = [...reasoningData, newContent];\n return {\n data: updatedData,\n index: updatedData.length - 1,\n };\n}\n\n/**\n * 解析 reasoningContent 字段\n * @param reasoningContent 原始 reasoningContent 数据\n * @returns 解析后的数据和类型信息\n */\nexport function parseReasoningContent(reasoningContent: any): {\n type: 'reasoning' | 'thinking';\n data: any;\n} {\n let parsedContent;\n\n if (typeof reasoningContent === 'string') {\n try {\n parsedContent = JSON.parse(reasoningContent);\n } catch {\n // 解析失败时,作为简单文本处理\n return {\n type: 'thinking',\n data: { text: reasoningContent, title: '思考完成' },\n };\n }\n } else {\n parsedContent = reasoningContent;\n }\n\n // 判断解析后的数据类型\n if (Array.isArray(parsedContent)) {\n return {\n type: 'reasoning',\n data: parsedContent,\n };\n }\n return {\n type: 'thinking',\n data: parsedContent,\n };\n}\n\n/**\n * 转换 reasoning 消息数组为 AIMessageContent 数组\n * @param reasoningMessages reasoning 消息数组\n * @returns 转换后的 AIMessageContent 数组\n */\nexport function convertReasoningMessages(reasoningMessages: any[]): any[] {\n const reasoningData: any[] = [];\n const toolCallMap = new Map<string, any>();\n\n // 第一遍:收集工具调用结果\n reasoningMessages.forEach((msg) => {\n if (msg.role === 'tool') {\n toolCallMap.set(msg.toolCallId, {\n toolCallId: msg.toolCallId,\n result: msg.content,\n });\n }\n });\n\n // 第二遍:处理消息内容\n reasoningMessages.forEach((msg) => {\n if (msg.role === 'assistant') {\n // 处理嵌套的 reasoningContent(文本思考)\n if (msg.reasoningContent && typeof msg.reasoningContent === 'string') {\n reasoningData.push({\n type: 'text',\n data: msg.reasoningContent,\n status: 'complete',\n });\n }\n\n // 处理普通内容\n if (msg.content) {\n reasoningData.push({\n type: 'text', // 在 reasoning 内部,通常用 text 而不是 markdown\n data: msg.content,\n status: 'complete',\n });\n }\n\n // 处理工具调用\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n msg.toolCalls.forEach((toolCall: any) => {\n const toolResult = toolCallMap.get(toolCall.id)?.result || '';\n const toolCallData = {\n toolCallId: toolCall.id,\n toolCallName: toolCall.function.name,\n args: toolCall.function.arguments,\n result: toolResult,\n };\n reasoningData.push({\n // 使用 toolCallName-toolCallId 格式,与 createToolCallContent 保持一致\n type: `toolcall-${toolCall.function.name}-${toolCall.id}`,\n data: toolCallData,\n status: 'complete',\n });\n });\n }\n }\n });\n\n return reasoningData;\n}\n\n/**\n * 处理 reasoningContent 并创建对应的 AIMessageContent\n * @param reasoningContent 原始 reasoningContent 数据\n * @returns 创建的 AIMessageContent 或 null\n */\nexport function processReasoningContent(reasoningContent: any): any | null {\n if (!reasoningContent) return null;\n\n const { type, data } = parseReasoningContent(reasoningContent);\n\n if (type === 'reasoning') {\n const reasoningData = convertReasoningMessages(data);\n return {\n type: 'reasoning',\n data: reasoningData,\n status: 'complete',\n strategy: 'append',\n ext: { collapsed: true },\n };\n }\n return {\n type: 'thinking',\n status: 'complete',\n data,\n };\n}\n\n/**\n * 处理工具调用并创建对应的 AIMessageContent 数组\n * @param toolCalls 工具调用数组\n * @param toolCallMap 工具调用结果映射\n * @returns 创建的 AIMessageContent 数组\n */\nexport function processToolCalls(toolCalls: any[], toolCallMap: Map<string, any>): any[] {\n return toolCalls.map((toolCall) => {\n const toolResult = toolCallMap.get(toolCall.id)?.result || '';\n\n // 建议类型的toolcall特殊解析\n if (toolCall.function.name === 'suggestion') {\n return {\n type: 'suggestion' as const,\n data: parseSSEData(toolResult) || [],\n };\n }\n\n const toolCallData = {\n toolCallId: toolCall.id,\n toolCallName: toolCall.function.name,\n args: toolCall.function.arguments,\n result: toolResult,\n };\n\n return {\n // 使用 toolCallName-toolCallId 格式,支持并行工具调用\n type: `toolcall-${toolCall.function.name}-${toolCall.id}` as const,\n data: toolCallData,\n };\n });\n}\n\n/**\n * 构建工具调用结果映射\n * @param historyMessages 历史消息数组\n * @returns 工具调用结果映射\n */\nexport function buildToolCallMap(historyMessages: any[]): Map<string, any> {\n const toolCallMap = new Map<string, any>();\n\n historyMessages.forEach((msg) => {\n if (msg.role === 'tool') {\n toolCallMap.set(msg.toolCallId, {\n toolCallId: msg.toolCallId,\n result: msg.content,\n });\n }\n });\n\n return toolCallMap;\n}\n"],"names":["mergeStringContent","existing","delta","existingObj","JSON","parse","deltaObj","_typeof","stringify","_objectSpread","Array","isArray","concat","_toConsumableArray","error","extractStateKeyFromDelta","event","type","length","firstDelta","path","pathParts","split","handleMessagesSnapshot","messages","flatMap","msg","role","content","map","data","status","handleCustomEvent","name","value","parseSSEData","console","warn","isValidEvent","generateConnectionId","prefix","timestamp","Date","now","Math","random","toString","substr","formatLogMessage","level","message","context","toISOString","contextStr","toUpperCase","createAIMessageContent","strategy","arguments","undefined","ext","createReasoningContent","collapsed","createThinkingContent","createToolCallContent","toolCall","toolCallName","toolCallId","finalStrategy","createActivityContent","activityType","deltaInfo","createMarkdownContent","createSuggestionContent","createTextContent","updateToolCall","existingToolCall","updates","handleSuggestionToolCall","suggestionData","result","updateReasoningData","reasoningData","index","newContent","updatedData","addToReasoningData","parseReasoningContent","reasoningContent","parsedContent","_unused","text","title","convertReasoningMessages","reasoningMessages","toolCallMap","Map","forEach","set","push","toolCalls","_toolCallMap$get","toolResult","get","id","toolCallData","args","processReasoningContent","_parseReasoningConten","processToolCalls","_toolCallMap$get2","buildToolCallMap","historyMessages"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * ChatEngine 事件总线实现
3
+ */
4
+ import type { ChatEngineEventPayloadMap, ChatEventBusOptions, EventCallback, EventFilter, EventHistoryItem, IChatEventBus, UnsubscribeFn } from './types';
5
+ import { ChatEngineEventType } from './types';
6
+ /**
7
+ * ChatEventBus - 聊天引擎事件总线
8
+ *
9
+ * 提供统一的事件发布/订阅机制,支持:
10
+ * - 类型安全的事件订阅和发布
11
+ * - 一次性订阅 (once)
12
+ * - Promise 方式等待事件 (waitFor)
13
+ * - 带过滤条件的等待 (waitForMatch)
14
+ * - 自定义事件支持
15
+ * - 事件历史记录(调试用)
16
+ */
17
+ export declare class ChatEventBus implements IChatEventBus {
18
+ private listeners;
19
+ private onceListeners;
20
+ private customListeners;
21
+ private history;
22
+ private options;
23
+ private destroyed;
24
+ constructor(options?: ChatEventBusOptions);
25
+ /**
26
+ * 订阅事件
27
+ */
28
+ on<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;
29
+ /**
30
+ * 一次性订阅
31
+ */
32
+ once<E extends ChatEngineEventType>(event: E, callback: EventCallback<ChatEngineEventPayloadMap[E]>): UnsubscribeFn;
33
+ /**
34
+ * 取消订阅
35
+ */
36
+ off<E extends ChatEngineEventType>(event: E, callback?: EventCallback<ChatEngineEventPayloadMap[E]>): void;
37
+ /**
38
+ * 发布事件
39
+ */
40
+ emit<E extends ChatEngineEventType>(event: E, payload: ChatEngineEventPayloadMap[E]): void;
41
+ /**
42
+ * 等待事件(Promise 方式)
43
+ */
44
+ waitFor<E extends ChatEngineEventType>(event: E, timeout?: number): Promise<ChatEngineEventPayloadMap[E]>;
45
+ /**
46
+ * 带过滤条件的等待
47
+ */
48
+ waitForMatch<E extends ChatEngineEventType>(event: E, filter: EventFilter<ChatEngineEventPayloadMap[E]>, timeout?: number): Promise<ChatEngineEventPayloadMap[E]>;
49
+ /**
50
+ * 订阅自定义事件
51
+ */
52
+ onCustom<T = unknown>(eventName: string, callback: EventCallback<T>): UnsubscribeFn;
53
+ /**
54
+ * 发布自定义事件
55
+ */
56
+ emitCustom<T = unknown>(eventName: string, data: T): void;
57
+ /**
58
+ * 获取事件历史记录
59
+ */
60
+ getHistory(): EventHistoryItem[];
61
+ /**
62
+ * 清理所有订阅
63
+ */
64
+ clear(): void;
65
+ /**
66
+ * 销毁事件总线
67
+ */
68
+ destroy(): void;
69
+ /**
70
+ * 获取指定事件的监听器数量
71
+ */
72
+ listenerCount(event: ChatEngineEventType): number;
73
+ /**
74
+ * 获取所有事件的监听器数量
75
+ */
76
+ getTotalListenerCount(): number;
77
+ /**
78
+ * 检查是否有指定事件的监听器
79
+ */
80
+ hasListeners(event: ChatEngineEventType): boolean;
81
+ private recordHistory;
82
+ private checkDestroyed;
83
+ }
84
+ /**
85
+ * 创建事件总线实例
86
+ */
87
+ export declare function createEventBus(options?: ChatEventBusOptions): IChatEventBus;
88
+ export { ChatEngineEventType };