@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":"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 * @param event 自定义事件对象\n * @returns 处理结果或undefined\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 undefined;\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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"}
@@ -0,0 +1,132 @@
1
+ import { MessageStore } from './store/message';
2
+ import type { AIMessageContent, ChatMessagesData, ChatMessageSetterMode, ChatRequestParams, ChatServiceConfigSetter, ChatStatus, IChatEngine, ToolCall } from './type';
3
+ export default class ChatEngine implements IChatEngine {
4
+ messageStore: MessageStore;
5
+ private messageProcessor;
6
+ private llmService;
7
+ private config;
8
+ private lastRequestParams;
9
+ private stopReceive;
10
+ private aguiAdapter;
11
+ constructor();
12
+ /**
13
+ * 获取当前所有消息
14
+ * @returns 消息数组
15
+ * @description 返回消息存储中的所有消息
16
+ */
17
+ get messages(): ChatMessagesData[];
18
+ /**
19
+ * 获取当前聊天状态
20
+ * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'
21
+ * @description 返回最后一条消息的状态,如果没有消息则返回'idle'
22
+ */
23
+ get status(): ChatStatus;
24
+ /**
25
+ * 销毁聊天引擎实例
26
+ * @description 中止请求,清理消息存储和适配器,释放资源
27
+ */
28
+ destroy(): void;
29
+ /**
30
+ * 初始化聊天引擎
31
+ * @param configSetter 聊天服务配置或配置生成函数
32
+ * @param initialMessages 初始消息列表,用于恢复历史对话
33
+ * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器
34
+ */
35
+ init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]): void;
36
+ /**
37
+ * 发送用户消息并获取AI回复
38
+ * @param requestParams 请求参数,包含用户输入的文本和附件
39
+ * @param sendRequest 是否立即发送
40
+ * @description 创建用户消息和AI消息,并发送请求获取AI回复
41
+ */
42
+ sendUserMessage(requestParams: ChatRequestParams, sendRequest?: boolean): Promise<void>;
43
+ /**
44
+ * 发送系统消息
45
+ * @param msg 系统消息文本内容
46
+ * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程
47
+ */
48
+ sendSystemMessage(msg: string): Promise<void>;
49
+ /**
50
+ * 手动发送AI消息
51
+ * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest
52
+ * @description 创建并存储一条AI消息,可选择是否同时发送请求
53
+ */
54
+ sendAIMessage(options?: {
55
+ params?: ChatRequestParams;
56
+ content?: AIMessageContent[];
57
+ sendRequest?: boolean;
58
+ }): Promise<void>;
59
+ /**
60
+ * 中止当前进行中的聊天请求
61
+ * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调
62
+ */
63
+ abortChat(): Promise<void>;
64
+ /**
65
+ * 注册内容块合并策略
66
+ * @param type 内容类型,如'text'、'markdown'等
67
+ * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块
68
+ * @description 用于自定义不同类型内容的增量更新逻辑
69
+ */
70
+ registerMergeStrategy<T extends AIMessageContent>(type: T['type'], // 使用类型中定义的type字段作为参数类型
71
+ handler: (chunk: T, existing?: T) => T): void;
72
+ /**
73
+ * 设置消息列表
74
+ * @param messages 要设置的消息数组
75
+ * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'
76
+ * @description 用于批量更新消息,如加载历史消息或重置对话
77
+ */
78
+ setMessages(messages: ChatMessagesData[], mode?: ChatMessageSetterMode): void;
79
+ /**
80
+ * 清空所有消息
81
+ * @description 清除消息存储中的所有历史记录
82
+ */
83
+ clearMessages(): void;
84
+ /**
85
+ * 重新生成AI回复
86
+ * @param keepVersion 是否保留历史版本,默认为false
87
+ * @description
88
+ * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求
89
+ * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求
90
+ */
91
+ regenerateAIMessage(keepVersion?: boolean): Promise<void>;
92
+ /**
93
+ * 发送请求获取AI回复
94
+ * @param params 请求参数
95
+ * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态
96
+ */
97
+ sendRequest(params: ChatRequestParams): Promise<void>;
98
+ /**
99
+ * 根据名称获取工具调用
100
+ * @param name 工具调用名称
101
+ * @returns 匹配的工具调用对象,如果未找到则返回undefined
102
+ * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用
103
+ */
104
+ getToolcallByName(name: string): ToolCall | undefined;
105
+ private handleBatchRequest;
106
+ private handleError;
107
+ private handleComplete;
108
+ /**
109
+ * 处理流式请求
110
+ * 根据协议类型选择不同的处理策略
111
+ */
112
+ private handleStreamRequest;
113
+ /**
114
+ * 处理AGUI协议的流式请求
115
+ */
116
+ private handleAGUIStreamRequest;
117
+ /**
118
+ * 处理默认协议的流式请求
119
+ */
120
+ private handleDefaultStreamRequest;
121
+ /**
122
+ * 统一处理消息结果
123
+ * 支持单个内容块、多个内容块和增量更新
124
+ */
125
+ private processMessageResult;
126
+ private convertMessages;
127
+ private setMessageStatus;
128
+ private processContentUpdate;
129
+ }
130
+ export * from './utils';
131
+ export * from './adapters/agui';
132
+ export type * from './type';