@tdesign-react/chat 1.0.2-alpha.8 → 1.0.2-alpha.9

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 (227) hide show
  1. package/es/_util/reactify.d.ts +1 -2
  2. package/es/_util/reactify.js +81 -231
  3. package/es/_util/reactify.js.map +1 -1
  4. package/es/_util/useDynamicStyle.js +1 -1
  5. package/es/attachments/index.js +4 -6
  6. package/es/attachments/index.js.map +1 -1
  7. package/es/chat-actionbar/_example-js/base.d.ts +2 -0
  8. package/es/chat-actionbar/_example-js/custom.d.ts +2 -0
  9. package/es/chat-actionbar/_example-js/style.d.ts +2 -0
  10. package/es/chat-actionbar/index.js +4 -6
  11. package/es/chat-actionbar/index.js.map +1 -1
  12. package/es/chat-attachments/_example-js/base.d.ts +2 -0
  13. package/es/chat-attachments/_example-js/scroll-x.d.ts +2 -0
  14. package/es/chat-attachments/_example-js/scroll-y.d.ts +2 -0
  15. package/es/chat-attachments/index.js +3 -1
  16. package/es/chat-attachments/index.js.map +1 -1
  17. package/es/chat-engine/_example-js/agui-basic.d.ts +10 -0
  18. package/es/chat-engine/_example-js/agui-comprehensive.d.ts +2 -0
  19. package/es/chat-engine/_example-js/agui-test.d.ts +11 -0
  20. package/es/chat-engine/_example-js/agui-toolcall.d.ts +5 -0
  21. package/es/chat-engine/_example-js/agui-videoclip.d.ts +8 -0
  22. package/es/chat-engine/_example-js/agui.d.ts +1 -0
  23. package/es/chat-engine/_example-js/basic.d.ts +9 -0
  24. package/es/chat-engine/_example-js/components/HotelCard.d.ts +3 -0
  25. package/es/chat-engine/_example-js/components/HumanInputForm.d.ts +6 -0
  26. package/es/chat-engine/_example-js/components/HumanInputResult.d.ts +3 -0
  27. package/es/chat-engine/_example-js/components/ItineraryCard.d.ts +3 -0
  28. package/es/chat-engine/_example-js/components/PlanningStatePanel.d.ts +4 -0
  29. package/es/chat-engine/_example-js/components/Toolcall.d.ts +4 -0
  30. package/es/chat-engine/_example-js/components/WeatherCard.d.ts +3 -0
  31. package/es/chat-engine/_example-js/components/login.d.ts +1 -0
  32. package/es/chat-engine/_example-js/comprehensive.d.ts +12 -0
  33. package/es/chat-engine/_example-js/custom-content.d.ts +1 -0
  34. package/es/chat-engine/_example-js/hookComponent.d.ts +1 -0
  35. package/es/chat-engine/_example-js/initial-messages.d.ts +9 -0
  36. package/es/chat-engine/_example-js/instance-methods.d.ts +13 -0
  37. package/es/chat-engine/_example-js/travel-actions.d.ts +91 -0
  38. package/es/chat-engine/_example-js/travelToolcall.d.ts +1 -0
  39. package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.d.ts +1 -0
  40. package/es/chat-engine/components/activity/index.js +18 -0
  41. package/es/{chatbot/components/toolcall → chat-engine/components/activity}/index.js.map +1 -1
  42. package/es/chat-engine/components/activity/registry.d.ts +44 -0
  43. package/es/{chatbot/components/toolcall → chat-engine/components/activity}/registry.js +32 -22
  44. package/es/chat-engine/components/activity/registry.js.map +1 -0
  45. package/es/chat-engine/components/activity/render.d.ts +11 -0
  46. package/es/chat-engine/components/activity/render.js +107 -0
  47. package/es/chat-engine/components/activity/render.js.map +1 -0
  48. package/es/chat-engine/components/activity/types.d.ts +32 -0
  49. package/es/chat-engine/components/activity/types.js +7 -0
  50. package/es/chat-engine/components/activity/types.js.map +1 -0
  51. package/es/chat-engine/components/index.d.ts +3 -0
  52. package/es/chat-engine/components/index.js +28 -0
  53. package/es/chat-engine/components/index.js.map +1 -0
  54. package/es/chat-engine/components/provider/agent-state.js +1 -1
  55. package/es/chat-engine/components/toolcall/index.js +4 -1
  56. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  57. package/es/chat-engine/components/toolcall/registry.js +1 -1
  58. package/es/chat-engine/components/toolcall/render.js +72 -25
  59. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  60. package/es/chat-engine/components/toolcall/types.js +1 -1
  61. package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +109 -0
  62. package/es/chat-engine/core/adapters/agui/event-mapper.js +375 -0
  63. package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -0
  64. package/es/chat-engine/core/adapters/agui/events.d.ts +1550 -0
  65. package/es/chat-engine/core/adapters/agui/events.js +199 -0
  66. package/es/chat-engine/core/adapters/agui/events.js.map +1 -0
  67. package/es/chat-engine/core/adapters/agui/index.d.ts +75 -0
  68. package/es/chat-engine/core/adapters/agui/index.js +175 -0
  69. package/es/chat-engine/core/adapters/agui/index.js.map +1 -0
  70. package/es/chat-engine/core/adapters/agui/state-manager.d.ts +99 -0
  71. package/es/chat-engine/core/adapters/agui/state-manager.js +168 -0
  72. package/es/chat-engine/core/adapters/agui/state-manager.js.map +1 -0
  73. package/es/chat-engine/core/adapters/agui/types.d.ts +817 -0
  74. package/es/chat-engine/core/adapters/agui/types.js +95 -0
  75. package/es/chat-engine/core/adapters/agui/types.js.map +1 -0
  76. package/es/chat-engine/core/adapters/agui/utils.d.ts +197 -0
  77. package/es/chat-engine/core/adapters/agui/utils.js +311 -0
  78. package/es/chat-engine/core/adapters/agui/utils.js.map +1 -0
  79. package/es/chat-engine/core/index.d.ts +132 -0
  80. package/es/chat-engine/core/index.js +597 -0
  81. package/es/chat-engine/core/index.js.map +1 -0
  82. package/es/chat-engine/core/processor/index.d.ts +20 -0
  83. package/es/chat-engine/core/processor/index.js +146 -0
  84. package/es/chat-engine/core/processor/index.js.map +1 -0
  85. package/es/chat-engine/core/server/batch-client.d.ts +20 -0
  86. package/es/chat-engine/core/server/batch-client.js +114 -0
  87. package/es/chat-engine/core/server/batch-client.js.map +1 -0
  88. package/es/chat-engine/core/server/connection-manager.d.ts +39 -0
  89. package/es/chat-engine/core/server/connection-manager.js +84 -0
  90. package/es/chat-engine/core/server/connection-manager.js.map +1 -0
  91. package/es/chat-engine/core/server/errors.d.ts +22 -0
  92. package/es/chat-engine/core/server/errors.js +80 -0
  93. package/es/chat-engine/core/server/errors.js.map +1 -0
  94. package/es/chat-engine/core/server/index.d.ts +11 -0
  95. package/es/chat-engine/core/server/index.js +26 -0
  96. package/es/chat-engine/core/server/index.js.map +1 -0
  97. package/es/chat-engine/core/server/llm-service.d.ts +44 -0
  98. package/es/chat-engine/core/server/llm-service.js +198 -0
  99. package/es/chat-engine/core/server/llm-service.js.map +1 -0
  100. package/es/chat-engine/core/server/sse-client.d.ts +77 -0
  101. package/es/chat-engine/core/server/sse-client.js +362 -0
  102. package/es/chat-engine/core/server/sse-client.js.map +1 -0
  103. package/es/chat-engine/core/server/sse-parser.d.ts +49 -0
  104. package/es/chat-engine/core/server/sse-parser.js +116 -0
  105. package/es/chat-engine/core/server/sse-parser.js.map +1 -0
  106. package/es/chat-engine/core/server/types.d.ts +54 -0
  107. package/es/chat-engine/core/server/types.js +28 -0
  108. package/es/chat-engine/core/server/types.js.map +1 -0
  109. package/es/chat-engine/core/store/message.d.ts +27 -0
  110. package/es/chat-engine/core/store/message.js +263 -0
  111. package/es/chat-engine/core/store/message.js.map +1 -0
  112. package/es/chat-engine/core/store/model.d.ts +8 -0
  113. package/es/chat-engine/core/store/model.js +65 -0
  114. package/es/chat-engine/core/store/model.js.map +1 -0
  115. package/es/chat-engine/core/store/reactiveState.d.ts +52 -0
  116. package/es/chat-engine/core/store/reactiveState.js +1359 -0
  117. package/es/chat-engine/core/store/reactiveState.js.map +1 -0
  118. package/es/chat-engine/core/type.d.ts +255 -0
  119. package/es/chat-engine/core/type.js +7 -0
  120. package/es/chat-engine/core/type.js.map +1 -0
  121. package/es/chat-engine/core/utils/eventEmitter.d.ts +10 -0
  122. package/es/chat-engine/core/utils/eventEmitter.js +67 -0
  123. package/es/chat-engine/core/utils/eventEmitter.js.map +1 -0
  124. package/es/chat-engine/core/utils/index.d.ts +33 -0
  125. package/es/chat-engine/core/utils/index.js +999 -0
  126. package/es/chat-engine/core/utils/index.js.map +1 -0
  127. package/es/chat-engine/core/utils/logger.d.ts +30 -0
  128. package/es/chat-engine/core/utils/logger.js +87 -0
  129. package/es/chat-engine/core/utils/logger.js.map +1 -0
  130. package/es/chat-engine/hooks/index.d.ts +4 -0
  131. package/es/chat-engine/hooks/index.js +20 -0
  132. package/es/chat-engine/hooks/index.js.map +1 -0
  133. package/es/chat-engine/hooks/useAgentActivity.d.ts +16 -0
  134. package/es/chat-engine/hooks/useAgentActivity.js +73 -0
  135. package/es/chat-engine/hooks/useAgentActivity.js.map +1 -0
  136. package/es/chat-engine/hooks/useAgentState.js +1 -1
  137. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  138. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  139. package/es/chat-engine/hooks/useChat.js +3 -3
  140. package/es/chat-engine/hooks/useChat.js.map +1 -1
  141. package/es/chat-engine/index.d.ts +3 -1
  142. package/es/chat-engine/index.js +37 -3
  143. package/es/chat-engine/index.js.map +1 -1
  144. package/es/chat-filecard/_example-js/base.d.ts +1 -0
  145. package/es/chat-filecard/index.js +4 -6
  146. package/es/chat-filecard/index.js.map +1 -1
  147. package/es/chat-loading/_example-js/base.d.ts +2 -0
  148. package/es/chat-loading/_example-js/text.d.ts +2 -0
  149. package/es/chat-loading/index.js +4 -6
  150. package/es/chat-loading/index.js.map +1 -1
  151. package/es/chat-markdown/_example-js/base.d.ts +1 -0
  152. package/es/chat-markdown/_example-js/custom.d.ts +2 -0
  153. package/es/chat-markdown/_example-js/event.d.ts +1 -0
  154. package/es/chat-markdown/_example-js/footnote.d.ts +2 -0
  155. package/es/chat-markdown/_example-js/plugin.d.ts +2 -0
  156. package/es/chat-markdown/_example-js/theme.d.ts +2 -0
  157. package/es/chat-markdown/index.js +4 -6
  158. package/es/chat-markdown/index.js.map +1 -1
  159. package/es/chat-message/_example-js/action.d.ts +1 -0
  160. package/es/chat-message/_example-js/base.d.ts +1 -0
  161. package/es/chat-message/_example-js/configure.d.ts +1 -0
  162. package/es/chat-message/_example-js/content.d.ts +1 -0
  163. package/es/chat-message/_example-js/custom.d.ts +1 -0
  164. package/es/chat-message/_example-js/handle-actions.d.ts +7 -0
  165. package/es/chat-message/_example-js/status.d.ts +1 -0
  166. package/es/chat-message/_example-js/think.d.ts +1 -0
  167. package/es/chat-message/index.js +4 -6
  168. package/es/chat-message/index.js.map +1 -1
  169. package/es/chat-sender/_example-js/attachment.d.ts +2 -0
  170. package/es/chat-sender/_example-js/base.d.ts +2 -0
  171. package/es/chat-sender/_example-js/custom.d.ts +2 -0
  172. package/es/chat-sender/index.js +4 -6
  173. package/es/chat-sender/index.js.map +1 -1
  174. package/es/chat-thinking/_example-js/base.d.ts +1 -0
  175. package/es/chat-thinking/_example-js/style.d.ts +1 -0
  176. package/es/chat-thinking/index.js +4 -6
  177. package/es/chat-thinking/index.js.map +1 -1
  178. package/es/chatbot/_example-js/agent.d.ts +1 -0
  179. package/es/chatbot/_example-js/agui.d.ts +13 -0
  180. package/es/chatbot/_example-js/backup/travel.d.ts +1 -0
  181. package/es/chatbot/_example-js/basic.d.ts +1 -0
  182. package/es/chatbot/_example-js/code.d.ts +1 -0
  183. package/es/chatbot/_example-js/components/ItineraryCard.d.ts +3 -0
  184. package/es/chatbot/_example-js/components/login.d.ts +1 -0
  185. package/es/chatbot/_example-js/comprehensive.d.ts +1 -0
  186. package/es/chatbot/_example-js/custom-content.d.ts +1 -0
  187. package/es/chatbot/_example-js/custom-merge.d.ts +1 -0
  188. package/es/chatbot/_example-js/custom.d.ts +1 -0
  189. package/es/chatbot/_example-js/docs.d.ts +1 -0
  190. package/es/chatbot/_example-js/image.d.ts +1 -0
  191. package/es/chatbot/_example-js/initial-messages.d.ts +9 -0
  192. package/es/chatbot/_example-js/instance-methods.d.ts +14 -0
  193. package/es/chatbot/_example-js/nostream.d.ts +1 -0
  194. package/es/chatbot/_example-js/quick-start.d.ts +9 -0
  195. package/es/chatbot/_example-js/research.d.ts +1 -0
  196. package/es/chatbot/_example-js/role-message-config.d.ts +22 -0
  197. package/es/chatbot/_example-js/sender-config.d.ts +20 -0
  198. package/es/chatbot/_example-js/service-config.d.ts +17 -0
  199. package/es/chatbot/_example-js/simple.d.ts +1 -0
  200. package/es/chatbot/_example-js/utils/messageRenderer.d.ts +5 -0
  201. package/es/chatbot/index.js +4 -6
  202. package/es/chatbot/index.js.map +1 -1
  203. package/es/index.js +37 -9
  204. package/es/index.js.map +1 -1
  205. package/es/style/index.js +1 -1
  206. package/package.json +2 -2
  207. package/es/chatbot/components/provider/agent-state.d.ts +0 -5
  208. package/es/chatbot/components/provider/agent-state.js +0 -28
  209. package/es/chatbot/components/provider/agent-state.js.map +0 -1
  210. package/es/chatbot/components/toolcall/index.js +0 -19
  211. package/es/chatbot/components/toolcall/registry.d.ts +0 -35
  212. package/es/chatbot/components/toolcall/registry.js.map +0 -1
  213. package/es/chatbot/components/toolcall/render.d.ts +0 -13
  214. package/es/chatbot/components/toolcall/render.js +0 -207
  215. package/es/chatbot/components/toolcall/render.js.map +0 -1
  216. package/es/chatbot/components/toolcall/types.d.ts +0 -57
  217. package/es/chatbot/components/toolcall/types.js +0 -15
  218. package/es/chatbot/components/toolcall/types.js.map +0 -1
  219. package/es/chatbot/hooks/useAgentState.d.ts +0 -40
  220. package/es/chatbot/hooks/useAgentState.js +0 -76
  221. package/es/chatbot/hooks/useAgentState.js.map +0 -1
  222. package/es/chatbot/hooks/useAgentToolcall.d.ts +0 -28
  223. package/es/chatbot/hooks/useAgentToolcall.js +0 -78
  224. package/es/chatbot/hooks/useAgentToolcall.js.map +0 -1
  225. package/es/chatbot/hooks/useChat.d.ts +0 -11
  226. package/es/chatbot/hooks/useChat.js +0 -66
  227. package/es/chatbot/hooks/useChat.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { MessageStore } from './store/message';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport type {\n AIContentChunkUpdate,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SSEChunkData,\n SystemMessage,\n ToolCall,\n} from './type';\nimport { isAIMessage } from './utils';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n constructor() {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n\n // 清理适配器\n this.aguiAdapter = null;\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n // 初始化AGUI适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n this.messageStore.createMessage({\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage);\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n this.messageStore.removeMessage(this.messageStore.lastAIMessage.id);\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n } else {\n this.setMessageStatus(id, 'error');\n }\n }\n\n private handleError(id: string, error: any) {\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error);\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: any) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块都失败才算消息体失败\n const allContentFailed = this.messageStore.messages.every((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n }\n\n /**\n * 处理流式请求\n * 根据协议类型选择不同的处理策略\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n const isAGUI = this.config.protocol === 'agui';\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n // 根据协议类型选择处理策略\n if (isAGUI && this.aguiAdapter) {\n await this.handleAGUIStreamRequest(params, id);\n } else {\n await this.handleDefaultStreamRequest(params, id);\n }\n }\n\n /**\n * 处理AGUI协议的流式请求\n */\n private async handleAGUIStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result;\n\n // SSE数据 → AGUIEventMapper.mapEvent → 用户自定义onMessage(解析后数据 + 原始chunk)\n // 首先使用AGUI适配器进行通用协议解析\n if (this.aguiAdapter) {\n result = this.aguiAdapter.handleAGUIEvent(chunk, {\n onRunStart: (event) => this.config.onStart?.(JSON.stringify(event)),\n onRunComplete: (isAborted, params, event) => this.handleComplete(messageId, isAborted, params, event),\n onRunError: (error) => this.handleError(messageId, error),\n });\n }\n\n // 然后调用用户自定义的onMessage,传入解析后的结果和原始数据\n if (this.config.onMessage) {\n const userResult = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId), result);\n // 如果用户返回了自定义结果,使用用户的结果\n if (userResult) {\n result = userResult;\n }\n }\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n // AGUI的完成事件由AGUIAdapter内部处理,这里只处理中断情况\n if (isAborted && messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 处理默认协议的流式请求\n */\n private async handleDefaultStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onStart: (chunk) => {\n this.config.onStart?.(chunk);\n },\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result = null;\n\n // 使用默认的消息处理\n if (this.config.onMessage) {\n result = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId));\n }\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n if (messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // 处理工具调用 - 仅在AGUI协议下处理\n // if (this.aguiAdapter) {\n // const toolCalls = this.aguiAdapter.processToolCalls(result);\n // if (toolCalls.length > 0) {\n // this.messageStore.setMessageToolCalls(messageId, toolCalls);\n // }\n // }\n\n if (Array.isArray(result)) {\n // 处理多个内容块\n this.messageStore.updateMultipleContents(messageId, result);\n } else {\n // 处理单个内容块\n this.processContentUpdate(messageId, result);\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n this.messageStore.setMessageStatus(messageId, status);\n }\n\n // 处理内容更新逻辑\n private processContentUpdate(messageId: string, rawChunk: AIContentChunkUpdate) {\n const message = this.messageStore.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n let targetIndex: number;\n // 作为新的内容块追加\n if (rawChunk?.strategy === 'append') {\n targetIndex = -1;\n } else {\n // merge 策略:按 type 查找最后一个匹配的类型\n // 通过 type (如 toolcall-${toolCallName}) 来定位要更新的内容块\n targetIndex = message.content.findIndex((content: AIMessageContent) => content.type === rawChunk.type);\n if (targetIndex !== -1) {\n // 找到最后一个匹配的类型(从后往前查找)\n for (let i = message.content.length - 1; i >= 0; i--) {\n if (message.content[i].type === rawChunk.type) {\n targetIndex = i;\n break;\n }\n }\n }\n }\n const processed = this.messageProcessor.processContentUpdate(\n targetIndex !== -1 ? message.content[targetIndex] : undefined,\n rawChunk,\n );\n\n this.messageStore.appendContent(messageId, processed, targetIndex);\n }\n}\n\nexport * from './utils';\nexport * from './adapters/agui';\nexport type * from './type';\n"],"names":["ChatEngine","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","abortChat","clearHistory","aguiAdapter","init","configSetter","initialMessages","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","length","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","_context2","createMessage","role","content","type","data","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_abortChat","_callee4","_this$config","_this$messageStore$la","_context4","stopReceive","onAbort","closeConnect","stream","lastAIMessage","removeMessage","error","registerMergeStrategy","handler","registerHandler","setMessages","mode","clearMessages","_regenerateAIMessage","_callee5","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args5","_context5","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee6","_t","_context6","handleStreamRequest","handleBatchRequest","setMessageStatus","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee7","result","_context7","processMessageResult","handleError","_this$config$onError","_this$config2","onError","call","handleComplete","isAborted","chunk","_this$config$onComple","_this$config3","customResult","onComplete","allContentFailed","every","_handleStreamRequest","_callee8","isAGUI","_context8","handleAGUIStreamRequest","handleDefaultStreamRequest","_callee9","messageId","_this","_context9","onMessage","handleAGUIEvent","onRunStart","event","_this$config$onStart","_this$config4","onStart","JSON","stringify","onRunComplete","onRunError","userResult","getMessageByID","_x6","_x7","_handleAGUIStreamRequest","_handleDefaultStreamRequest","_callee0","_this2","_context0","_this2$config$onStart","_this2$config","_x8","_x9","updateMultipleContents","processContentUpdate","messageIds","map","rawChunk","message","find","m","isAIMessage","targetIndex","strategy","findIndex","i","processed","appendContent"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AIMessage, AIMessageContent, AttachmentItem, ChatMessagesData } from '../type';
2
+ export default class MessageProcessor {
3
+ private contentHandlers;
4
+ constructor();
5
+ createUserMessage(content: any, attachments?: AttachmentItem[]): ChatMessagesData;
6
+ createAssistantMessage(msg?: {
7
+ content?: AIMessageContent[];
8
+ status?: AIMessage['status'];
9
+ }): AIMessage;
10
+ processContentUpdate(lastContent: AIMessageContent | undefined, newChunk: AIMessageContent): AIMessageContent;
11
+ registerHandler<T extends AIMessageContent>(type: T['type'], // 使用类型中定义的type字段作为参数类型
12
+ handler: (chunk: T, existing?: T) => T): void;
13
+ private generateID;
14
+ private registerDefaultHandlers;
15
+ private createContentHandler;
16
+ private registerTextHandlers;
17
+ private registerThinkingHandler;
18
+ private registerImageHandler;
19
+ private registerSearchHandler;
20
+ }
@@ -0,0 +1,146 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.6
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
8
+ import _createClass from '@babel/runtime/helpers/createClass';
9
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
10
+
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ var MessageProcessor = /*#__PURE__*/function () {
14
+ function MessageProcessor() {
15
+ _classCallCheck(this, MessageProcessor);
16
+ _defineProperty(this, "contentHandlers", /* @__PURE__ */new Map());
17
+ this.registerDefaultHandlers();
18
+ }
19
+ return _createClass(MessageProcessor, [{
20
+ key: "createUserMessage",
21
+ value: function createUserMessage(content, attachments) {
22
+ var messageContent = [{
23
+ type: "text",
24
+ data: content
25
+ }];
26
+ if (attachments !== null && attachments !== void 0 && attachments.length) {
27
+ messageContent.push({
28
+ type: "attachment",
29
+ data: attachments
30
+ });
31
+ }
32
+ return {
33
+ id: this.generateID(),
34
+ role: "user",
35
+ status: "complete",
36
+ datetime: "".concat(Date.now()),
37
+ content: messageContent
38
+ };
39
+ }
40
+ }, {
41
+ key: "createAssistantMessage",
42
+ value: function createAssistantMessage(msg) {
43
+ var _ref = msg || {},
44
+ _ref$content = _ref.content,
45
+ content = _ref$content === void 0 ? [] : _ref$content,
46
+ _ref$status = _ref.status,
47
+ status = _ref$status === void 0 ? "pending" : _ref$status;
48
+ return {
49
+ id: this.generateID(),
50
+ role: "assistant",
51
+ content: content,
52
+ status: status,
53
+ datetime: new Date().toISOString()
54
+ };
55
+ }
56
+ }, {
57
+ key: "processContentUpdate",
58
+ value: function processContentUpdate(lastContent, newChunk) {
59
+ var handler = this.contentHandlers.get(newChunk.type);
60
+ if (!lastContent) {
61
+ return _objectSpread(_objectSpread({}, newChunk), {}, {
62
+ status: (newChunk === null || newChunk === void 0 ? void 0 : newChunk.status) || "streaming"
63
+ });
64
+ }
65
+ if (handler && (lastContent === null || lastContent === void 0 ? void 0 : lastContent.type) === newChunk.type) {
66
+ return handler(newChunk, lastContent);
67
+ }
68
+ return _objectSpread(_objectSpread(_objectSpread({}, lastContent || {}), newChunk), {}, {
69
+ status: (newChunk === null || newChunk === void 0 ? void 0 : newChunk.status) || "streaming"
70
+ });
71
+ }
72
+ }, {
73
+ key: "registerHandler",
74
+ value: function registerHandler(type, handler) {
75
+ this.contentHandlers.set(type, handler);
76
+ }
77
+ }, {
78
+ key: "generateID",
79
+ value: function generateID() {
80
+ return "msg_".concat(Date.now(), "_").concat(Math.floor(Math.random() * 9e4) + 1e4);
81
+ }
82
+ }, {
83
+ key: "registerDefaultHandlers",
84
+ value: function registerDefaultHandlers() {
85
+ this.registerTextHandlers();
86
+ this.registerThinkingHandler();
87
+ this.registerImageHandler();
88
+ this.registerSearchHandler();
89
+ }
90
+ }, {
91
+ key: "createContentHandler",
92
+ value: function createContentHandler(mergeData) {
93
+ return function (chunk, existing) {
94
+ if ((existing === null || existing === void 0 ? void 0 : existing.type) === chunk.type) {
95
+ return _objectSpread(_objectSpread({}, existing), {}, {
96
+ data: mergeData(existing.data, chunk.data),
97
+ status: chunk.status || "streaming",
98
+ ext: _objectSpread(_objectSpread({}, existing.ext), chunk.ext)
99
+ });
100
+ }
101
+ return _objectSpread(_objectSpread({}, chunk), {}, {
102
+ data: chunk.data,
103
+ status: chunk.status || "streaming"
104
+ });
105
+ };
106
+ }
107
+ }, {
108
+ key: "registerTextHandlers",
109
+ value: function registerTextHandlers() {
110
+ var _this = this;
111
+ var createTextHandler = function createTextHandler() {
112
+ return _this.createContentHandler(function (existing, incoming) {
113
+ return existing + incoming;
114
+ });
115
+ };
116
+ this.registerHandler("text", createTextHandler());
117
+ this.registerHandler("markdown", createTextHandler());
118
+ }
119
+ }, {
120
+ key: "registerThinkingHandler",
121
+ value: function registerThinkingHandler() {
122
+ this.registerHandler("thinking", this.createContentHandler(function (existing, incoming) {
123
+ return _objectSpread(_objectSpread(_objectSpread({}, existing), incoming), {}, {
124
+ text: ((existing === null || existing === void 0 ? void 0 : existing.text) || "") + ((incoming === null || incoming === void 0 ? void 0 : incoming.text) || "")
125
+ });
126
+ }));
127
+ }
128
+ }, {
129
+ key: "registerImageHandler",
130
+ value: function registerImageHandler() {
131
+ this.registerHandler("image", this.createContentHandler(function (existing, incoming) {
132
+ return _objectSpread(_objectSpread({}, existing), incoming);
133
+ }));
134
+ }
135
+ }, {
136
+ key: "registerSearchHandler",
137
+ value: function registerSearchHandler() {
138
+ this.registerHandler("search", this.createContentHandler(function (existing, incoming) {
139
+ return _objectSpread(_objectSpread({}, existing), incoming);
140
+ }));
141
+ }
142
+ }]);
143
+ }();
144
+
145
+ export { MessageProcessor as default };
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../pro-components/chat/chat-engine/core/processor/index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport type {\n AIMessage,\n AIMessageContent,\n AttachmentItem,\n ChatMessagesData,\n ImageContent,\n MarkdownContent,\n SearchContent,\n TextContent,\n ThinkingContent,\n UserMessage,\n} from '../type';\n\nexport default class MessageProcessor {\n private contentHandlers: Map<string, (chunk: any, existing?: any) => any> = new Map();\n\n constructor() {\n this.registerDefaultHandlers();\n }\n\n public createUserMessage(content, attachments?: AttachmentItem[]): ChatMessagesData {\n const messageContent: UserMessage['content'] = [\n {\n type: 'text',\n data: content,\n },\n ];\n\n if (attachments?.length) {\n messageContent.push({\n type: 'attachment',\n data: attachments,\n });\n }\n\n return {\n id: this.generateID(),\n role: 'user',\n status: 'complete',\n datetime: `${Date.now()}`,\n content: messageContent,\n };\n }\n\n public createAssistantMessage(msg?: { content?: AIMessageContent[]; status?: AIMessage['status'] }): AIMessage {\n const { content = [], status = 'pending' } = msg || {};\n\n return {\n id: this.generateID(),\n role: 'assistant',\n content,\n status,\n datetime: new Date().toISOString(),\n };\n }\n\n // 处理内容更新\n public processContentUpdate(lastContent: AIMessageContent | undefined, newChunk: AIMessageContent): AIMessageContent {\n const handler = this.contentHandlers.get(newChunk.type);\n if (!lastContent) {\n return {\n ...newChunk,\n status: newChunk?.status || 'streaming',\n };\n }\n // 如果有注册的处理器且类型匹配\n if (handler && lastContent?.type === newChunk.type) {\n return handler(newChunk, lastContent);\n }\n // 没有处理器时的默认合并逻辑\n return {\n ...(lastContent || {}),\n ...newChunk,\n status: newChunk?.status || 'streaming',\n };\n }\n\n // 通用处理器注册方法\n public registerHandler<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.contentHandlers.set(type, handler);\n }\n\n private generateID() {\n return `msg_${Date.now()}_${Math.floor(Math.random() * 90000) + 10000}`;\n }\n\n // 注册默认支持的内容处理器\n private registerDefaultHandlers() {\n this.registerTextHandlers();\n this.registerThinkingHandler();\n this.registerImageHandler();\n this.registerSearchHandler();\n }\n\n // 通用处理器工厂\n private createContentHandler<T extends AIMessageContent>(\n mergeData: (existing: T['data'], incoming: T['data']) => T['data'],\n ): (chunk: T, existing?: T) => T {\n return (chunk: T, existing?: T): T => {\n if (existing?.type === chunk.type) {\n return {\n ...existing,\n data: mergeData(existing.data, chunk.data),\n status: chunk.status || 'streaming',\n // 合并ext字段,确保动态属性能够正确传递\n ext: {\n ...existing.ext,\n ...chunk.ext,\n },\n };\n }\n return {\n ...chunk,\n data: chunk.data,\n status: chunk.status || 'streaming',\n };\n };\n }\n\n // 文本类处理器(text/markdown)\n private registerTextHandlers() {\n // 创建类型安全的处理器\n const createTextHandler = <T extends TextContent | MarkdownContent>() =>\n this.createContentHandler<T>((existing: string, incoming: string) => existing + incoming);\n\n this.registerHandler<TextContent>('text', createTextHandler<TextContent>());\n this.registerHandler<MarkdownContent>('markdown', createTextHandler<MarkdownContent>());\n }\n\n // 思考过程处理器\n private registerThinkingHandler() {\n this.registerHandler<ThinkingContent>(\n 'thinking',\n this.createContentHandler((existing, incoming) => ({\n ...existing,\n ...incoming,\n text: (existing?.text || '') + (incoming?.text || ''),\n })),\n );\n }\n\n // 图片处理器\n private registerImageHandler() {\n this.registerHandler<ImageContent>(\n 'image',\n this.createContentHandler((existing, incoming) => ({ ...existing, ...incoming })),\n );\n }\n\n // 搜索处理器\n private registerSearchHandler() {\n this.registerHandler<SearchContent>(\n 'search',\n this.createContentHandler((existing, incoming) => ({\n ...existing,\n ...incoming,\n })),\n );\n }\n}\n"],"names":["MessageProcessor","_classCallCheck","_defineProperty","Map","registerDefaultHandlers","_createClass","key","value","createUserMessage","content","attachments","messageContent","type","data","length","push","id","generateID","role","status","datetime","concat","Date","now","createAssistantMessage","msg","_ref","_ref$content","_ref$status","toISOString","processContentUpdate","lastContent","newChunk","handler","contentHandlers","get","_objectSpread","registerHandler","set","Math","floor","random","registerTextHandlers","registerThinkingHandler","registerImageHandler","registerSearchHandler","createContentHandler","mergeData","chunk","existing","ext","_this","createTextHandler","incoming","text"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import EventEmitter from '../utils/eventEmitter';
2
+ /**
3
+ * 批量请求客户端(非流式)
4
+ */
5
+ export declare class BatchClient extends EventEmitter {
6
+ private controller;
7
+ private logger;
8
+ /**
9
+ * 发送批量请求
10
+ * @param endpoint API端点
11
+ * @param request 请求参数
12
+ * @param timeout 超时时间(毫秒)
13
+ * @returns 响应数据
14
+ */
15
+ request<T>(endpoint: string, request: RequestInit, timeout?: number): Promise<T>;
16
+ /**
17
+ * 中止当前请求
18
+ */
19
+ abort(): void;
20
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.6
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
8
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
+ import _createClass from '@babel/runtime/helpers/createClass';
10
+ import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
11
+ import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
12
+ import _inherits from '@babel/runtime/helpers/inherits';
13
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
14
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
15
+ import SimpleEventEmitter from '../utils/eventEmitter.js';
16
+ import { LoggerManager } from '../utils/logger.js';
17
+ import { ConnectionError, TimeoutError } from './errors.js';
18
+ import '@babel/runtime/helpers/wrapNativeSuper';
19
+
20
+ 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; }
21
+ 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; }
22
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
23
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
24
+ var BatchClient = /*#__PURE__*/function (_EventEmitter) {
25
+ function BatchClient() {
26
+ var _this;
27
+ _classCallCheck(this, BatchClient);
28
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
29
+ args[_key] = arguments[_key];
30
+ }
31
+ _this = _callSuper(this, BatchClient, [].concat(args));
32
+ _defineProperty(_this, "controller", null);
33
+ _defineProperty(_this, "logger", LoggerManager.getLogger());
34
+ return _this;
35
+ }
36
+ _inherits(BatchClient, _EventEmitter);
37
+ return _createClass(BatchClient, [{
38
+ key: "request",
39
+ value: function () {
40
+ var _request2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(endpoint, _request) {
41
+ var _this2 = this;
42
+ var timeout,
43
+ timeoutId,
44
+ response,
45
+ _args = arguments,
46
+ _t;
47
+ return _regeneratorRuntime.wrap(function (_context) {
48
+ while (1) switch (_context.prev = _context.next) {
49
+ case 0:
50
+ timeout = _args.length > 2 && _args[2] !== undefined ? _args[2] : 1e6;
51
+ this.abort();
52
+ this.controller = new AbortController();
53
+ timeoutId = setTimeout(function () {
54
+ var _this2$controller;
55
+ if (!((_this2$controller = _this2.controller) !== null && _this2$controller !== void 0 && _this2$controller.signal.aborted)) {
56
+ var _this2$controller2;
57
+ (_this2$controller2 = _this2.controller) === null || _this2$controller2 === void 0 || _this2$controller2.abort();
58
+ }
59
+ _this2.emit("error", new TimeoutError("Request timed out after ".concat(timeout, "ms")));
60
+ }, timeout);
61
+ _context.prev = 1;
62
+ _context.next = 2;
63
+ return fetch(endpoint, _objectSpread(_objectSpread({}, _request), {}, {
64
+ signal: this.controller.signal
65
+ }));
66
+ case 2:
67
+ response = _context.sent;
68
+ if (response.ok) {
69
+ _context.next = 3;
70
+ break;
71
+ }
72
+ this.emit("error", new ConnectionError("HTTP error! status: ".concat(response.status)));
73
+ return _context.abrupt("return", null);
74
+ case 3:
75
+ _context.next = 4;
76
+ return response.json();
77
+ case 4:
78
+ return _context.abrupt("return", _context.sent);
79
+ case 5:
80
+ _context.prev = 5;
81
+ _t = _context["catch"](1);
82
+ if (_t.name !== "AbortError") {
83
+ this.logger.error("Batch request failed:", _t);
84
+ this.emit("error", _t);
85
+ }
86
+ case 6:
87
+ _context.prev = 6;
88
+ clearTimeout(timeoutId);
89
+ this.controller = null;
90
+ return _context.finish(6);
91
+ case 7:
92
+ case "end":
93
+ return _context.stop();
94
+ }
95
+ }, _callee, this, [[1, 5, 6, 7]]);
96
+ }));
97
+ function request(_x, _x2) {
98
+ return _request2.apply(this, arguments);
99
+ }
100
+ return request;
101
+ }()
102
+ }, {
103
+ key: "abort",
104
+ value: function abort() {
105
+ if (this.controller) {
106
+ this.controller.abort();
107
+ this.controller = null;
108
+ }
109
+ }
110
+ }]);
111
+ }(SimpleEventEmitter);
112
+
113
+ export { BatchClient };
114
+ //# sourceMappingURL=batch-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-client.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/batch-client.ts"],"sourcesContent":["import EventEmitter from '../utils/eventEmitter';\nimport { LoggerManager } from '../utils/logger';\nimport { ConnectionError, TimeoutError } from './errors';\n\n/**\n * 批量请求客户端(非流式)\n */\nexport class BatchClient extends EventEmitter {\n private controller: AbortController | null = null;\n\n private logger = LoggerManager.getLogger();\n\n /**\n * 发送批量请求\n * @param endpoint API端点\n * @param request 请求参数\n * @param timeout 超时时间(毫秒)\n * @returns 响应数据\n */\n async request<T>(endpoint: string, request: RequestInit, timeout = 1000000): Promise<T> {\n // 中止上一个请求\n this.abort();\n\n this.controller = new AbortController();\n const timeoutId = setTimeout(() => {\n if (!this.controller?.signal.aborted) {\n this.controller?.abort();\n }\n this.emit('error', new TimeoutError(`Request timed out after ${timeout}ms`));\n }, timeout);\n\n try {\n const response = await fetch(endpoint, {\n ...request,\n signal: this.controller.signal,\n });\n\n if (!response.ok) {\n this.emit('error', new ConnectionError(`HTTP error! status: ${response.status}`));\n return null as T;\n }\n return (await response.json()) as T;\n } catch (error) {\n if (error.name !== 'AbortError') {\n this.logger.error('Batch request failed:', error);\n this.emit('error', error);\n }\n } finally {\n clearTimeout(timeoutId);\n this.controller = null;\n }\n }\n\n /**\n * 中止当前请求\n */\n abort(): void {\n if (this.controller) {\n this.controller.abort();\n this.controller = null;\n }\n }\n}\n"],"names":["BatchClient","_defineProperty","_this","LoggerManager","getLogger","_inherits","_EventEmitter","_createClass","key","value","_request2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","endpoint","request","_this2","timeout","timeoutId","response","_args","arguments","_t","wrap","_context","prev","next","abort","controller","AbortController","setTimeout","_this2$controller","signal","aborted","_this2$controller2","emit","TimeoutError","concat","fetch","_objectSpread","sent","ok","ConnectionError","status","abrupt","json","name","logger","error","clearTimeout","finish","stop","_x","_x2","apply","EventEmitter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAOaA,IAAAA;;;;;;;;yCACkC,IAAA,CAAA,CAAA;AAAAC,IAAAA,eAAA,CAAAC,KAAA,EAAA,QAAA,EAE5BC,cAAcC,SAAU,EAAA,CAAA,CAAA;AAAA,IAAA,OAAAF,KAAA,CAAA;AAAA,GAAA;EAAAG,SAAA,CAAAL,WAAA,EAAAM,aAAA,CAAA,CAAA;EAAA,OAAAC,YAAA,CAAAP,WAAA,EAAA,CAAA;IAAAQ,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;AAAA,MAAA,IAAAC,SAAA,GAAAC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CASzC,SAAAC,OAAAA,CAAiBC,QAAkB,EAAAC,QAAA,EAAA;AAAA,QAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;AAAA,QAAA,IAAAC,OAAA;UAAAC,SAAA;UAAAC,QAAA;AAAAC,UAAAA,KAAA,GAAAC,SAAA;UAAAC,EAAA,CAAA;AAAA,QAAA,OAAAX,mBAAA,CAAAY,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,YAAA,KAAA,CAAA;cAAsBT,kEAAU,GAAqB,CAAA;cAEtF,IAAA,CAAKU,KAAM,EAAA,CAAA;AAEN,cAAA,IAAA,CAAAC,UAAA,GAAa,IAAIC,eAAgB,EAAA,CAAA;cAChCX,SAAA,GAAYY,WAAW,YAAM;AAAA,gBAAA,IAAAC,iBAAA,CAAA;AACjC,gBAAA,IAAI,EAAAA,CAAAA,iBAAA,GAACf,MAAA,CAAKY,UAAY,MAAA,IAAA,IAAAG,iBAAA,KAAA,KAAA,CAAA,IAAjBA,iBAAA,CAAiBC,MAAA,CAAOC,OAAS,CAAA,EAAA;AAAA,kBAAA,IAAAC,kBAAA,CAAA;AACpC,kBAAA,CAAAA,kBAAA,GAAAlB,MAAA,CAAKY,yDAALM,kBAAA,CAAiBP,KAAM,EAAA,CAAA;AACzB,iBAAA;AACAX,gBAAAA,MAAA,CAAKmB,KAAK,OAAS,EAAA,IAAIC,YAAa,CAAA,0BAAA,CAAAC,MAAA,CAA2BpB,cAAW,CAAC,CAAA,CAAA;iBAC1EA,OAAO,CAAA,CAAA;AAAAO,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAD,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;cAAA,OAGeY,KAAA,CAAMxB,QAAU,EAAAyB,aAAA,CAAAA,aAAA,KAClCxB,QAAA,CAAA,EAAA,EAAA,EAAA;AACHiB,gBAAAA,MAAA,EAAQ,KAAKJ,UAAW,CAAAI,MAAAA;AAAA,eAAA,CACzB,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAHKb,QAAA,GAAAK,QAAA,CAAAgB,IAAA,CAAA;cAAA,IAKDrB,SAASsB,EAAI,EAAA;AAAAjB,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAChB,cAAA,IAAA,CAAKS,KAAK,OAAS,EAAA,IAAIO,8CAAuCvB,QAAA,CAASwB,OAAQ,CAAC,CAAA,CAAA;AAAA,cAAA,OAAAnB,QAAA,CAAAoB,MAAA,CAAA,QAAA,EACzE,IAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAApB,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAEKP,SAAS0B,IAAK,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAArB,QAAA,CAAAoB,MAAA,CAAApB,QAAAA,EAAAA,QAAA,CAAAgB,IAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAhB,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAH,cAAAA,EAAA,GAAAE,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAExB,cAAA,IAAAF,EAAA,CAAMwB,SAAS,YAAc,EAAA;gBAC1B,IAAA,CAAAC,MAAA,CAAOC,KAAM,CAAA,uBAAA,EAAA1B,EAA8B,CAAA,CAAA;AAC3C,gBAAA,IAAA,CAAAa,IAAA,CAAK,WAAc,CAAA,CAAA;AAC1B,eAAA;AAAA,YAAA,KAAA,CAAA;AAAAX,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;cAEAwB,YAAA,CAAa/B,SAAS,CAAA,CAAA;cACtB,IAAA,CAAKU,UAAa,GAAA,IAAA,CAAA;cAAA,OAAAJ,QAAA,CAAA0B,MAAA,CAAA,CAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAA1B,QAAA,CAAA2B,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAtC,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAEtB,CAAA,CAAA,CAAA;AAAA,MAAA,SAhCME,OAAAA,CAAAqC,EAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAA5C,SAAA,CAAA6C,KAAA,CAAA,IAAA,EAAAjC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAAN,OAAA,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAR,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAqCN,SAAAmB,KAAcA,GAAA;MACZ,IAAI,KAAKC,UAAY,EAAA;AACnB,QAAA,IAAA,CAAKA,WAAWD,KAAM,EAAA,CAAA;QACtB,IAAA,CAAKC,UAAa,GAAA,IAAA,CAAA;AACpB,OAAA;AACF,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAtD+B2B,kBAAa;;;;"}
@@ -0,0 +1,39 @@
1
+ import { ConnectionInfo, ConnectionStats, SSEConnectionState } from './types';
2
+ /**
3
+ * 连接管理器 - 直接使用全局Logger
4
+ */
5
+ export declare class ConnectionManager {
6
+ private connectionId;
7
+ private connectionStartTime;
8
+ private stats;
9
+ private logger;
10
+ constructor(connectionId: string);
11
+ /**
12
+ * 处理连接错误
13
+ */
14
+ handleConnectionError(error: Error): boolean;
15
+ /**
16
+ * 开始连接计时
17
+ */
18
+ startConnection(): void;
19
+ /**
20
+ * 连接成功
21
+ */
22
+ onConnectionSuccess(): void;
23
+ /**
24
+ * 更新连接状态并记录统计信息
25
+ */
26
+ updateState(state: SSEConnectionState, error?: Error): void;
27
+ /**
28
+ * 获取连接信息
29
+ */
30
+ getConnectionInfo(): ConnectionInfo;
31
+ /**
32
+ * 获取连接统计
33
+ */
34
+ getStats(): ConnectionStats;
35
+ /**
36
+ * 清理资源
37
+ */
38
+ cleanup(): void;
39
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * tdesign v1.0.2-alpha.6
3
+ * (c) 2026 tdesign
4
+ * @license MIT
5
+ */
6
+
7
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
8
+ import _createClass from '@babel/runtime/helpers/createClass';
9
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
10
+ import { LoggerManager } from '../utils/logger.js';
11
+ import { TimeoutError } from './errors.js';
12
+ import '@babel/runtime/helpers/possibleConstructorReturn';
13
+ import '@babel/runtime/helpers/getPrototypeOf';
14
+ import '@babel/runtime/helpers/inherits';
15
+ import '@babel/runtime/helpers/wrapNativeSuper';
16
+
17
+ 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; }
18
+ 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; }
19
+ var ConnectionManager = /*#__PURE__*/function () {
20
+ function ConnectionManager(connectionId) {
21
+ _classCallCheck(this, ConnectionManager);
22
+ _defineProperty(this, "connectionStartTime", 0);
23
+ _defineProperty(this, "logger", LoggerManager.getLogger());
24
+ this.connectionId = connectionId;
25
+ this.stats = {};
26
+ }
27
+ return _createClass(ConnectionManager, [{
28
+ key: "handleConnectionError",
29
+ value: function handleConnectionError(error) {
30
+ this.logger.error("Connection ".concat(this.connectionId, " error:"), error);
31
+ this.stats.lastError = error;
32
+ if (error instanceof TimeoutError) {
33
+ this.logger.info("Timeout error occurred, no retry will be attempted");
34
+ }
35
+ this.cleanup();
36
+ return false;
37
+ }
38
+ }, {
39
+ key: "startConnection",
40
+ value: function startConnection() {
41
+ this.connectionStartTime = Date.now();
42
+ this.logger.debug("Connection ".concat(this.connectionId, " started"));
43
+ }
44
+ }, {
45
+ key: "onConnectionSuccess",
46
+ value: function onConnectionSuccess() {
47
+ var duration = Date.now() - this.connectionStartTime;
48
+ this.logger.info("Connection established in ".concat(duration, "ms"));
49
+ this.stats.connectionTime = duration;
50
+ }
51
+ }, {
52
+ key: "updateState",
53
+ value: function updateState(state, error) {
54
+ if (error) {
55
+ this.stats.lastError = error;
56
+ }
57
+ this.logger.debug("State updated to ".concat(state));
58
+ }
59
+ }, {
60
+ key: "getConnectionInfo",
61
+ value: function getConnectionInfo() {
62
+ return {
63
+ id: this.connectionId,
64
+ retryCount: 0,
65
+ lastActivity: Date.now(),
66
+ stats: _objectSpread({}, this.stats)
67
+ };
68
+ }
69
+ }, {
70
+ key: "getStats",
71
+ value: function getStats() {
72
+ return _objectSpread({}, this.stats);
73
+ }
74
+ }, {
75
+ key: "cleanup",
76
+ value: function cleanup() {
77
+ this.stats = {};
78
+ this.logger.debug("Connection manager ".concat(this.connectionId, " cleaned up"));
79
+ }
80
+ }]);
81
+ }();
82
+
83
+ export { ConnectionManager };
84
+ //# sourceMappingURL=connection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/connection-manager.ts"],"sourcesContent":["import { LoggerManager } from '../utils/logger';\nimport { TimeoutError } from './errors';\nimport { ConnectionInfo, ConnectionStats, SSEConnectionState } from './types';\n\n/**\n * 连接管理器 - 直接使用全局Logger\n */\nexport class ConnectionManager {\n private connectionStartTime = 0;\n\n private stats: ConnectionStats;\n\n private logger = LoggerManager.getLogger(); // 直接使用全局Logger\n\n constructor(private connectionId: string) {\n this.stats = {};\n }\n\n /**\n * 处理连接错误\n */\n handleConnectionError(error: Error): boolean {\n this.logger.error(`Connection ${this.connectionId} error:`, error);\n this.stats.lastError = error;\n\n if (error instanceof TimeoutError) {\n this.logger.info('Timeout error occurred, no retry will be attempted');\n }\n\n this.cleanup();\n return false;\n }\n\n /**\n * 开始连接计时\n */\n startConnection(): void {\n this.connectionStartTime = Date.now();\n this.logger.debug(`Connection ${this.connectionId} started`);\n }\n\n /**\n * 连接成功\n */\n onConnectionSuccess(): void {\n const duration = Date.now() - this.connectionStartTime;\n this.logger.info(`Connection established in ${duration}ms`);\n this.stats.connectionTime = duration;\n }\n\n /**\n * 更新连接状态并记录统计信息\n */\n updateState(state: SSEConnectionState, error?: Error): void {\n if (error) {\n this.stats.lastError = error;\n }\n\n this.logger.debug(`State updated to ${state}`);\n }\n\n /**\n * 获取连接信息\n */\n getConnectionInfo(): ConnectionInfo {\n return {\n id: this.connectionId,\n retryCount: 0,\n lastActivity: Date.now(),\n stats: { ...this.stats },\n };\n }\n\n /**\n * 获取连接统计\n */\n getStats(): ConnectionStats {\n return { ...this.stats };\n }\n\n /**\n * 清理资源\n */\n cleanup(): void {\n this.stats = {};\n this.logger.debug(`Connection manager ${this.connectionId} cleaned up`);\n }\n}\n"],"names":["ConnectionManager","connectionId","_classCallCheck","_defineProperty","LoggerManager","getLogger","stats","_createClass","key","value","handleConnectionError","error","logger","concat","lastError","TimeoutError","info","cleanup","startConnection","connectionStartTime","Date","now","debug","onConnectionSuccess","duration","connectionTime","updateState","state","getConnectionInfo","id","retryCount","lastActivity","_objectSpread","getStats"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Enhanced error classes for SSE client
3
+ */
4
+ export declare class SSEError extends Error {
5
+ readonly code: string;
6
+ readonly statusCode?: number;
7
+ readonly isRetryable: boolean;
8
+ readonly details?: any;
9
+ constructor(message: string, code: string, statusCode?: number, isRetryable?: boolean, details?: any);
10
+ }
11
+ export declare class ConnectionError extends SSEError {
12
+ constructor(message: string, statusCode?: number, details?: any);
13
+ }
14
+ export declare class TimeoutError extends SSEError {
15
+ constructor(details?: any, message?: string);
16
+ }
17
+ export declare class ParseError extends SSEError {
18
+ constructor(message: string, details?: any);
19
+ }
20
+ export declare class ValidationError extends SSEError {
21
+ constructor(message: string, details?: any);
22
+ }