@ai-group/chat-sdk 0.2.9 → 0.3.1

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.
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","extra","noFooter","user","parentMessageId","cost","token","format","bytes","thinks","name","arguments","param1","action","icon","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","handleSendMessage","_type","msg","userMsg","String","now","prev","concat","_toConsumableArray","aiMsg","stream","forEach","chunk","idx","setTimeout","aiIndex","findIndex","m","updated","oldMsg","_objectSpread","aiMessage","pending","length","map","doneMsg","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","ToolTip","_ref","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref2","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","loading","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","架构对比演示"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '我需要一点帮助',\n },\n parentMessageId: '1',\n },\n {\n id: '3',\n type: 'ImageMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n extra: {\n cost: 6.09,\n token: 1999,\n },\n content: {\n format: 'svg',\n bytes: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n },\n thinks: [\n // 工具库调用(MCP_TOOL)\n {\n type: 'ActionExecutionMessage',\n createdAt: new Date(),\n id: 'tool-1',\n name: '已调用MCP智能工具',\n arguments: { param1: 'foo' },\n extra: {\n action: 'INVOKE_AGENT_TOOL_START',\n icon: documentIcon,\n type: 'MCP_TOOL',\n cost: '3.9',\n },\n },\n // // 工具库调用(PLUGIN_TOOL)\n // {\n // id: 'tool-2',\n // arguments: { param2: 'bar' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // type: 'AGENT_TOOL',\n\n // toolType: 'PLUGIN_TOOL',\n // agentToolName: '插件工具',\n // },\n // },\n // // 工具库调用(SKILL)\n // {\n // action: 'INVOKE_AGENT_TOOL_START',\n // id: 'tool-3',\n // toolType: 'SKILL',\n // agentToolName: '技能工具',\n // args: { param3: 'baz' },\n\n // },\n // // 知识库调用(FAQ)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-1',\n // processStatus: 'START',\n // args: { question: '什么是FAQ?' },\n // knowledgeType: 'FAQ',\n // },\n // // 知识库调用(DOCUMENT)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-2',\n // processStatus: 'START',\n // args: { question: '文档库介绍' },\n // knowledgeType: 'DOCUMENT',\n // },\n // 运行完毕\n {\n id: '5',\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n createdAt: new Date(),\n },\n ],\n parentMessageId: '2',\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n\n // 模拟流式返回AI消息\n const handleSendMessage = (_type: string, msg: string) => {\n const userMsg: Messages = {\n id: String(Date.now()),\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: { text: msg },\n };\n setMessages((prev) => [\n ...prev,\n userMsg,\n ]);\n let aiMsg = '';\n const stream = ['好的,', '我正在为你查询', '相关信息...'];\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n aiMsg += chunk;\n setMessages((prev) => {\n const aiIndex = prev.findIndex((m) => m.id === 'stream-ai');\n if (aiIndex > -1) {\n const updated = [...prev];\n const oldMsg = updated[aiIndex];\n if (oldMsg.type === 'TextMessage') {\n updated[aiIndex] = {\n ...oldMsg,\n content: { text: aiMsg },\n };\n }\n return updated;\n }\n const aiMessage: Messages = {\n id: 'stream-ai',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.assistant,\n content: { text: aiMsg },\n };\n return [\n ...prev,\n aiMessage,\n ];\n });\n if (idx === stream.length - 1) {\n setTimeout(() => {\n setMessages((prev) => prev.map((m) => {\n if (m.id === 'stream-ai') {\n const doneMsg: Messages = { ...m, status: MessageStatus.done };\n return doneMsg;\n }\n return m;\n }));\n }, 500);\n }\n }, 800 * (idx + 1));\n });\n };\n\n // 模拟清空数据\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { cost && <div>{ cost }s</div>}\n { token && <Divider type=\"vertical\" /> }\n { token && <div>{ token } tokens</div> }\n </div>\n );\n };\n\n return (\n <div style={{ height: '600px', width: '400px', border: '1px solid #e7e7e7', borderRadius: '8px' }}>\n <XAiChatbot\n {...args}\n messages={messages}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","Divider","MessageRole","MessageStatus","documentIcon","XAiProvider","XAiChatbot","useProviderContext","useProviderMethods","jsxs","_jsxs","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","navbar","description","messages","mockMessages","id","type","createdAt","Date","status","done","role","assistant","content","text","user","parentMessageId","extra","cost","token","format","bytes","thinks","name","arguments","param1","action","icon","noFooter","suggestion","key","BasicUsageStory","args","_useState","_useState2","_slicedToArray","setMessages","handleSendMessage","_type","msg","userMsg","String","now","prev","concat","_toConsumableArray","aiMsg","stream","forEach","chunk","idx","setTimeout","aiIndex","findIndex","m","updated","oldMsg","_objectSpread","aiMessage","pending","length","map","doneMsg","handleClear","handleActions","index","data","console","log","handleSuggestMessageClick","_item","filter","ToolTip","_ref","style","display","alignItems","fontSize","color","flex","paddingRight","children","height","width","border","borderRadius","messageTooltip","onClear","onSuggestMessageClick","onSend","onMessagesActionsCallback","基础用法","render","emptyStateText","在Provider中使用","decorators","Story","url","多个Provider实例","gap","providerId","marginRight","ArchitectureDemoComponent","_ref2","_getProviderValue","_useProviderContext","props","mergeLogic","context","_context$messages","isInProvider","loading","customData","mergedProps","getProviderValue","providerMethods","padding","marginBottom","backgroundColor","margin","onClick","_providerMethods$send","sendMessage","call","disabled","cursor","新架构演示","navbarShow","subtitle","架构对比演示"],"sources":["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '检索从北京到上海的车票数据给我',\n },\n parentMessageId: '1',\n },\n // {\n // id: '22',\n // type: 'TextMessage',\n // createdAt: new Date(),\n // status: MessageStatus.done,\n // role: MessageRole.assistant,\n // content: {\n // text: '{\"data\":\"车次 | 出发站 -> 到达站 | 出发时间 -> 到达时间 | 历时\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 20:01 -> 21:50 历时:01:49\\\\n- 二等座: 有票 47元\\\\n- 一等座: 有票 75元\\\\n- 无座: 有票 47元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:21 -> 20:08 历时:01:47\\\\n- 二等座: 无票 47元\\\\n- 一等座: 无票 75元\\\\n- 无座: 有票 47元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海(telecode: SHH) 20:00 -> 21:39 历时:01:39\\\\n- 商务座: 剩余16张票 278元\\\\n- 一等座: 有票 149元\\\\n- 二等座: 有票 93元\\\\n- 无座: 有票 93元\\\\nC482(实际车次train_no: 560000C48220) 杭州(telecode: HZH) -> 上海南(telecode: SNH) 19:42 -> 21:20 历时:01:38\\\\n- 二等座: 有票 49元\\\\n- 一等座: 有票 77元\\\\n- 无座: 有票 49元\\\\nG8358(实际车次train_no: 56000G835800) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:11 -> 19:38 历时:01:27\\\\n- 商务座: 剩余11张票 357元\\\\n- 一等座: 有票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG1440(实际车次train_no: 57000G144005) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:55 -> 22:21 历时:01:26\\\\n- 商务座: 剩余17张票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 优选一等座: 有票 202元\\\\n- 无座: 有票 92元\\\\nC406(实际车次train_no: 560000C40603) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 20:01 -> 21:25 历时:01:24\\\\n- 二等座: 有票 40元\\\\n- 一等座: 有票 63元\\\\n- 无座: 有票 40元\\\\nC3050(实际车次train_no: 52000C305000) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 19:34 -> 20:58 历时:01:24\\\\n- 商务座: 无票 351元\\\\n- 一等座: 剩余13张票 161元\\\\n- 二等座: 有票 101元\\\\n- 无座: 有票 101元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海西(telecode: SXH) 20:00 -> 21:23 历时:01:23\\\\n- 商务座: 剩余16张票 271元\\\\n- 一等座: 有票 144元\\\\n- 二等座: 有票 90元\\\\n- 无座: 有票 90元\\\\nG7140(实际车次train_no: 56000G714000) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:38 -> 20:01 历时:01:23\\\\n- 商务座: 剩余3张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG8386(实际车次train_no: 54000G838601) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:25 -> 19:48 历时:01:23\\\\n- 商务座: 剩余1张票 357元\\\\n- 一等座: 剩余18张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nC412(实际车次train_no: 560000C41202) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:21 -> 19:42 历时:01:21\\\\n- 二等座: 无票 40元\\\\n- 一等座: 无票 63元\\\\n- 无座: 有票 40元\\\\nG7124(实际车次train_no: 56000G712400) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:03 -> 19:24 历时:01:21\\\\n- 商务座: 剩余5张票 357元\\\\n- 一等座: 剩余5张票 163元\\\\n- 二等座: 有票 103元\\\\n- 无座: 有票 103元\\\\nG3092(实际车次train_no: 5n000G309205) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:40 -> 21:59 历时:01:19\\\\n- 商务座: 剩余10张票 332元\\\\n- 一等座: 有票 152元\\\\n- 二等座: 有票 95元\\\\n- 无座: 有票 95元\\\\nG7112(实际车次train_no: 54000G711200) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 20:12 -> 21:31 历时:01:19\\\\n- 二等座: 有票 110元\\\\n- 一等座: 有票 174元\\\\n- 无座: 有票 110元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:51 -> 19:10 历时:01:19\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 17:55 -> 19:13 历时:01:18\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海南(telecode: SNH) 19:34 -> 20:50 历时:01:16\\\\n- 商务座: 剩余9张票 248元\\\\n- 一等座: 有票 132元\\\\n- 二等座: 有票 82元\\\\n- 无座: 有票 82元\\\\nG3078(实际车次train_no: 65000G307810) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 21:12 -> 22:26 历时:01:14\\\\n- 商务座: 有票 320元\\\\n- 一等座: 有票 147元\\\\n- 二等座: 有票 92元\\\\n- 无座: 有票 92元\\\\nG8304(实际车次train_no: 56000G830410) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:59 -> 21:11 历时:01:12\\\\n- 二等座: 有票 103元\\\\n- 一等座: 有票 163元\\\\n- 无座: 有票 103元\\\\nG8360(实际车次train_no: 5j000G836002) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 19:15 -> 20:27 历时:01:12\\\\n- 商务座: 剩余2张票 405元\\\\n- 一等座: 无票 185元\\\\n- 二等座: 有票 116元\\\\n- 无座: 有票 116元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 上海虹桥(telecode: AOH) 18:35 -> 19:47 历时:01:12\\\\n- 商务座: 无票 298元\\\\n- 一等座: 无票 158元\\\\n- 二等座: 无票 98元\\\\n- 无座: 无票 98元\\\\nG100(实际车次train_no: 6x0000G1000A) 杭州西(telecode: HVU) -> 上海虹桥(telecode: AOH) 18:31 -> 19:43 历时:01:12\\\\n- 商务座: 剩余7张票 405元\\\\n- 一等座: 剩余19张票 185元\\\\n- 二等座: 有票 116元\\\\nG1306(实际车次train_no: 65000G130601) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:39 -> 22:49 历时:01:10\\\\n- 商务座: 剩余8张票 279元\\\\n- 一等座: 剩余15张票 128元\\\\n- 二等座: 有票 81元\\\\n- 无座: 有票 81元\\\\nG1372(实际车次train_no: 80000G13720S) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:02 -> 22:12 历时:01:10\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 无票 65元\\\\nG7314(实际车次train_no: 52000G731401) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:18 -> 20:27 历时:01:09\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 129元\\\\n- 二等座: 剩余5张票 80元\\\\n- 无座: 有票 80元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 18:34 -> 19:41 历时:01:07\\\\n- 商务座: 剩余5张票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 17:47 -> 18:54 历时:01:07\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG7432(实际车次train_no: 5j000G743252) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:07 -> 19:13 历时:01:06\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG1388(实际车次train_no: 57000G138800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:52 -> 22:56 历时:01:04\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG998(实际车次train_no: 6i0000G99800) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:24 -> 22:27 历时:01:03\\\\n- 商务座: 剩余4张票 315元\\\\n- 一等座: 剩余11张票 145元\\\\n- 二等座: 有票 91元\\\\n- 无座: 有票 91元\\\\nG1316(实际车次train_no: 5n000G131600) 杭州西(telecode: HVU) -> 上海南(telecode: SNH) 21:01 -> 22:04 历时:01:03\\\\n- 商务座: 剩余6张票 374元\\\\n- 一等座: 剩余6张票 172元\\\\n- 二等座: 有票 108元\\\\n- 无座: 有票 108元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:25 -> 21:27 历时:01:02\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1510(实际车次train_no: 4z000G15100D) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:01 -> 19:03 历时:01:02\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:49 -> 20:50 历时:01:01\\\\n- 商务座: 剩余9张票 216元\\\\n- 一等座: 有票 115元\\\\n- 二等座: 有票 72元\\\\n- 无座: 有票 72元\\\\nG7360(实际车次train_no: 56000G736081) 杭州(telecode: HZH) -> 上海虹桥(telecode: AOH) 20:00 -> 21:00 历时:01:00\\\\n- 商务座: 剩余19张票 232元\\\\n- 一等座: 有票 124元\\\\n- 二等座: 有票 78元\\\\n- 无座: 有票 78元\\\\nG1350(实际车次train_no: 62000G135002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:02 -> 23:01 历时:00:59\\\\n- 商务座: 剩余7张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1506(实际车次train_no: 71000G150632) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:48 -> 22:47 历时:00:59\\\\n- 商务座: 剩余19张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:57 -> 20:56 历时:00:59\\\\n- 商务座: 剩余14张票 242元\\\\n- 一等座: 剩余1张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1378(实际车次train_no: 80000G13780O) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:19 -> 19:18 历时:00:59\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州南(telecode: XHH) -> 上海松江(telecode: IMH) 19:34 -> 20:32 历时:00:58\\\\n- 商务座: 剩余9张票 208元\\\\n- 一等座: 有票 111元\\\\n- 二等座: 有票 68元\\\\n- 无座: 有票 68元\\\\nG1302(实际车次train_no: 6e000G130206) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:50 -> 21:47 历时:00:57\\\\n- 商务座: 剩余14张票 263元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7366(实际车次train_no: 56000G736606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:14 -> 21:11 历时:00:57\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:51 -> 18:48 历时:00:57\\\\n- 商务座: 剩余2张票 212元\\\\n- 一等座: 剩余1张票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7340(实际车次train_no: 5j000G734003) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:54 -> 21:50 历时:00:56\\\\n- 商务座: 剩余14张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1638(实际车次train_no: 5n000G163800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:45 -> 22:40 历时:00:55\\\\n- 商务座: 剩余9张票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG7350(实际车次train_no: 5j000G735074) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:40 -> 21:35 历时:00:55\\\\n- 商务座: 剩余7张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG1328(实际车次train_no: 78000G13280E) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:35 -> 21:30 历时:00:55\\\\n- 商务座: 剩余6张票 242元\\\\n- 一等座: 剩余9张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:52 -> 19:47 历时:00:55\\\\n- 商务座: 无票 263元\\\\n- 一等座: 剩余1张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 无票 87元\\\\nG7528(实际车次train_no: 5j000G752802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:27 -> 22:21 历时:00:54\\\\n- 商务座: 剩余12张票 219元\\\\n- 一等座: 剩余8张票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG7588(实际车次train_no: 5j000G758802) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:05 -> 19:59 历时:00:54\\\\n- 商务座: 无票 263元\\\\n- 一等座: 无票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 剩余1张票 87元\\\\nG3060(实际车次train_no: 5n000G306000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 20:10 -> 21:03 历时:00:53\\\\n- 商务座: 剩余2张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7566(实际车次train_no: 5j000G756606) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:09 -> 20:02 历时:00:53\\\\n- 商务座: 剩余1张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 无票 87元\\\\n- 无座: 有票 87元\\\\nG1640(实际车次train_no: 5n000G164000) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 22:38 -> 23:30 历时:00:52\\\\n- 商务座: 剩余12张票 216元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG1390(实际车次train_no: 5w000G139010) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:34 -> 23:26 历时:00:52\\\\n- 商务座: 有票 219元\\\\n- 一等座: 有票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG2190(实际车次train_no: 76000G21910F) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:35 -> 22:27 历时:00:52\\\\n- 商务座: 剩余17张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 有票 73元\\\\nG1616(实际车次train_no: 71000G161602) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:29 -> 19:21 历时:00:52\\\\n- 商务座: 无票 242元\\\\n- 一等座: 无票 105元\\\\n- 二等座: 无票 65元\\\\n- 无座: 无票 65元\\\\nG7522(实际车次train_no: 5e000G752290) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 18:34 -> 19:25 历时:00:51\\\\n- 商务座: 剩余8张票 194元\\\\n- 一等座: 有票 104元\\\\n- 二等座: 有票 64元\\\\n- 无座: 有票 64元\\\\nG7310(实际车次train_no: 5a000G731004) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 17:47 -> 18:37 历时:00:50\\\\n- 商务座: 无票 212元\\\\n- 一等座: 无票 113元\\\\n- 二等座: 无票 70元\\\\n- 无座: 有票 70元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州南(telecode: XHH) -> 金山北(telecode: EGH) 18:35 -> 19:24 历时:00:49\\\\n- 商务座: 无票 219元\\\\n- 一等座: 剩余2张票 116元\\\\n- 二等座: 无票 72元\\\\n- 无座: 有票 72元\\\\nG820(实际车次train_no: 6c0000G82002) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:07 -> 21:54 历时:00:47\\\\n- 商务座: 剩余11张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 优选一等座: 有票 177元\\\\n- 无座: 有票 80元\\\\nG470(实际车次train_no: 640000G47100) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:11 -> 21:57 历时:00:46\\\\n- 商务座: 剩余19张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG240(实际车次train_no: 800000G24000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:34 -> 20:20 历时:00:46\\\\n- 商务座: 剩余5张票 263元\\\\n- 一等座: 剩余3张票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7312(实际车次train_no: 52000G731207) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:24 -> 20:10 历时:00:46\\\\n- 商务座: 剩余3张票 239元\\\\n- 一等座: 剩余4张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG1386(实际车次train_no: 5u000G138620) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:01 -> 19:47 历时:00:46\\\\n- 商务座: 有票 239元\\\\n- 一等座: 有票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG7584(实际车次train_no: 5e000G758405) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 17:51 -> 18:37 历时:00:46\\\\n- 商务座: 剩余6张票 184元\\\\n- 一等座: 剩余17张票 98元\\\\n- 二等座: 剩余2张票 61元\\\\n- 无座: 有票 61元\\\\nG4918(实际车次train_no: 57000G49184G) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 23:20 -> 00:05 历时:00:45\\\\n- 商务座: 剩余7张票 242元\\\\n- 一等座: 剩余12张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG1374(实际车次train_no: 80000G137410) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:30 -> 23:15 历时:00:45\\\\n- 商务座: 剩余18张票 219元\\\\n- 一等座: 有票 117元\\\\n- 二等座: 有票 73元\\\\n- 无座: 无票 73元\\\\nG7536(实际车次train_no: 5j000G753603) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:22 -> 23:07 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余11张票 105元\\\\n- 二等座: 有票 65元\\\\n- 无座: 有票 65元\\\\nG358(实际车次train_no: 780000G35800) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 22:19 -> 23:04 历时:00:45\\\\n- 商务座: 剩余17张票 242元\\\\n- 一等座: 有票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG822(实际车次train_no: 6c0000G82200) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:58 -> 22:43 历时:00:45\\\\n- 商务座: 剩余9张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG356(实际车次train_no: 780000G35600) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 21:16 -> 22:01 历时:00:45\\\\n- 商务座: 剩余18张票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG7562(实际车次train_no: 5e000G756250) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 19:38 -> 20:23 历时:00:45\\\\n- 商务座: 有票 263元\\\\n- 一等座: 有票 140元\\\\n- 二等座: 有票 87元\\\\n- 无座: 有票 87元\\\\nG416(实际车次train_no: 5n0000G41600) 杭州东(telecode: HGH) -> 上海南(telecode: SNH) 19:30 -> 20:15 历时:00:45\\\\n- 商务座: 剩余6张票 239元\\\\n- 一等座: 剩余3张票 127元\\\\n- 二等座: 有票 79元\\\\n- 无座: 有票 79元\\\\nG500(实际车次train_no: 710000G50000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:45 -> 19:30 历时:00:45\\\\n- 商务座: 剩余6张票 219元\\\\n- 一等座: 剩余6张票 117元\\\\n- 二等座: 剩余1张票 73元\\\\n- 无座: 有票 73元\\\\nG800(实际车次train_no: 650000G80000) 杭州东(telecode: HGH) -> 上海虹桥(telecode: AOH) 18:40 -> 19:25 历时:00:45\\\\n- 商务座: 剩余4张票 242元\\\\n- 一等座: 剩余18张票 129元\\\\n- 二等座: 有票 80元\\\\n- 无座: 有票 80元\\\\nG7600(实际车次train_no: 5e000G760030) 杭州东(telecode: HGH) -> 上海松江(telecode: IMH) 19:49 -> 20:32 历时:00:43\\\\n- 商务座: 剩余9张票 176元\\\\n- 一等座: 有票 94元\\\\n- 二等座: 有票 58元\\\\n- 无座: 有票 58元\\\\nG7338(实际车次train_no: 5j000G733831) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 20:25 -> 21:07 历时:00:42\\\\n- 商务座: 剩余9张票 153元\\\\n- 一等座: 有票 82元\\\\n- 二等座: 有票 51元\\\\n- 无座: 有票 51元\\\\nG1334(实际车次train_no: 77000G13350F) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 19:57 -> 20:36 历时:00:39\\\\n- 商务座: 剩余18张票 169元\\\\n- 一等座: 剩余4张票 90元\\\\n- 二等座: 有票 56元\\\\n- 无座: 有票 56元\\\\nG7550(实际车次train_no: 5j000G755060) 杭州东(telecode: HGH) -> 金山北(telecode: EGH) 18:52 -> 19:24 历时:00:32\\\\n- 商务座: 无票 184元\\\\n- 一等座: 剩余5张票 98元\\\\n- 二等座: 有票 61元\\\\n- 无座: 有票 61元\\\\n\"}',\n // },\n // extra: {\n // noFooter: true,\n // },\n // },\n {\n id: '3',\n type: 'ImageMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n extra: {\n cost: 6.09,\n token: 1999,\n },\n content: {\n format: 'svg',\n bytes: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n },\n thinks: [\n // 工具库调用(MCP_TOOL)\n {\n type: 'ActionExecutionMessage',\n createdAt: new Date(),\n id: 'tool-1',\n name: '已调用MCP智能工具',\n arguments: { param1: 'foo' },\n extra: {\n action: 'INVOKE_AGENT_TOOL_START',\n icon: documentIcon,\n type: 'MCP_TOOL',\n cost: '3.9',\n },\n },\n // // 工具库调用(PLUGIN_TOOL)\n // {\n // id: 'tool-2',\n // arguments: { param2: 'bar' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // type: 'AGENT_TOOL',\n\n // toolType: 'PLUGIN_TOOL',\n // agentToolName: '插件工具',\n // },\n // },\n // // 工具库调用(SKILL)\n // {\n // action: 'INVOKE_AGENT_TOOL_START',\n // id: 'tool-3',\n // toolType: 'SKILL',\n // agentToolName: '技能工具',\n // args: { param3: 'baz' },\n\n // },\n // // 知识库调用(FAQ)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-1',\n // processStatus: 'START',\n // args: { question: '什么是FAQ?' },\n // knowledgeType: 'FAQ',\n // },\n // // 知识库调用(DOCUMENT)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-2',\n // processStatus: 'START',\n // args: { question: '文档库介绍' },\n // knowledgeType: 'DOCUMENT',\n // },\n // 运行完毕\n {\n id: '5',\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n createdAt: new Date(),\n },\n ],\n parentMessageId: '2',\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n\n // 模拟流式返回AI消息\n const handleSendMessage = (_type: string, msg: string) => {\n const userMsg: Messages = {\n id: String(Date.now()),\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: { text: msg },\n };\n setMessages((prev) => [\n ...prev,\n userMsg,\n ]);\n let aiMsg = '';\n const stream = ['好的,', '我正在为你查询', '相关信息...'];\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n aiMsg += chunk;\n setMessages((prev) => {\n const aiIndex = prev.findIndex((m) => m.id === 'stream-ai');\n if (aiIndex > -1) {\n const updated = [...prev];\n const oldMsg = updated[aiIndex];\n if (oldMsg.type === 'TextMessage') {\n updated[aiIndex] = {\n ...oldMsg,\n content: { text: aiMsg },\n };\n }\n return updated;\n }\n const aiMessage: Messages = {\n id: 'stream-ai',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.assistant,\n content: { text: aiMsg },\n };\n return [\n ...prev,\n aiMessage,\n ];\n });\n if (idx === stream.length - 1) {\n setTimeout(() => {\n setMessages((prev) => prev.map((m) => {\n if (m.id === 'stream-ai') {\n const doneMsg: Messages = { ...m, status: MessageStatus.done };\n return doneMsg;\n }\n return m;\n }));\n }, 500);\n }\n }, 800 * (idx + 1));\n });\n };\n\n // 模拟清空数据\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { cost && <div>{ cost }s</div>}\n { token && <Divider type=\"vertical\" /> }\n { token && <div>{ token } tokens</div> }\n </div>\n );\n };\n\n return (\n <div style={{ height: '600px', width: '400px', border: '1px solid #e7e7e7', borderRadius: '8px' }}>\n <XAiChatbot\n {...args}\n messages={messages}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],"mappings":"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"}
@@ -91,7 +91,8 @@ var XAiChatbot = function XAiChatbot(props) {
91
91
  onSuggestMessageClick = mergedProps.onSuggestMessageClick,
92
92
  onSend = mergedProps.onSend,
93
93
  onClear = mergedProps.onClear,
94
- onStop = mergedProps.onStop;
94
+ onStop = mergedProps.onStop,
95
+ providerId = mergedProps.providerId;
95
96
 
96
97
  // 如果在 Provider 中,使用 Provider 的状态
97
98
  var messages = mergedProps.messages || propMessages || [];
@@ -117,13 +118,31 @@ var XAiChatbot = function XAiChatbot(props) {
117
118
  clearPopoverVisible = _useState10[0],
118
119
  setClearPopoverVisible = _useState10[1]; // 气泡卡片显隐藏
119
120
  var styles = useStyles();
121
+ var lastMessageId = useRef('');
122
+ var isScriptScrolling = useRef(false);
123
+ var chatId = providerId ? "za-chatbot-container-".concat(providerId) : 'za-chatbot-container';
124
+
125
+ // 滚动到最底部
126
+ var scrollToBottom = function scrollToBottom() {
127
+ isScriptScrolling.current = true;
128
+ setTimeout(function () {
129
+ var mainChatWrapper = document.getElementById(chatId);
130
+ if (mainChatWrapper) {
131
+ mainChatWrapper.scrollTop = mainChatWrapper === null || mainChatWrapper === void 0 ? void 0 : mainChatWrapper.scrollHeight;
132
+ }
133
+ isScriptScrolling.current = false;
134
+ }, 0);
135
+ };
120
136
 
121
137
  // 消息功能区组件
122
138
  var FooterActions = function FooterActions(_ref) {
123
- var data = _ref.data;
139
+ var data = _ref.data,
140
+ _ref$lastMessage = _ref.lastMessage,
141
+ lastMessage = _ref$lastMessage === void 0 ? false : _ref$lastMessage;
124
142
  return /*#__PURE__*/_jsx("div", {
125
143
  className: clsx(styles.flex, styles.gap(13)),
126
144
  children: messageActions.map(function (action, index) {
145
+ if (!lastMessage && action.key === 'redo') return null;
127
146
  return /*#__PURE__*/_jsx(Tooltip, {
128
147
  title: action.tooltip,
129
148
  children: /*#__PURE__*/_jsx("span", {
@@ -140,10 +159,13 @@ var XAiChatbot = function XAiChatbot(props) {
140
159
 
141
160
  // 消息底部区域
142
161
  var MessageFooter = function MessageFooter(_ref2) {
143
- var data = _ref2.data;
162
+ var data = _ref2.data,
163
+ _ref2$lastMessage = _ref2.lastMessage,
164
+ lastMessage = _ref2$lastMessage === void 0 ? false : _ref2$lastMessage;
144
165
  return /*#__PURE__*/_jsxs(_Fragment, {
145
166
  children: [messageTooltip === null || messageTooltip === void 0 ? void 0 : messageTooltip(data), /*#__PURE__*/_jsx(FooterActions, {
146
- data: data
167
+ data: data,
168
+ lastMessage: lastMessage
147
169
  })]
148
170
  });
149
171
  };
@@ -287,6 +309,7 @@ var XAiChatbot = function XAiChatbot(props) {
287
309
  // 直接使用合并后的 onSend,自动处理 Provider 和独立模式
288
310
  onSend === null || onSend === void 0 || onSend('text', content);
289
311
  setContent(''); // 发送后清空输入框内容
312
+ scrollToBottom();
290
313
  }
291
314
  };
292
315
 
@@ -415,10 +438,12 @@ var XAiChatbot = function XAiChatbot(props) {
415
438
  }, [emptyStateImage, emptyStateText]);
416
439
  return /*#__PURE__*/_jsxs(_Fragment, {
417
440
  children: [/*#__PURE__*/_jsx(GlobalStyle, {}), /*#__PURE__*/_jsx(MarkdownGlobalStyle, {}), /*#__PURE__*/_jsxs("div", {
441
+ id: "x-ai-chatbot",
418
442
  className: styles.wrapper,
419
443
  children: [navbarShow && /*#__PURE__*/_jsx(NavBar, {}), /*#__PURE__*/_jsx("div", {
420
444
  className: styles.messageContainer,
421
445
  children: messages !== null && messages !== void 0 && messages.length ? /*#__PURE__*/_jsx(Bubble.List, {
446
+ id: chatId,
422
447
  roles: rolesObject,
423
448
  items: messages.map(function (msg) {
424
449
  var _ref4 = msg,
@@ -432,7 +457,12 @@ var XAiChatbot = function XAiChatbot(props) {
432
457
  extra = _ref4$extra === void 0 ? {
433
458
  noFooter: false
434
459
  } : _ref4$extra;
435
- return {
460
+ // 最后一条 AI消息标识
461
+ if (role === MessageRole.assistant) {
462
+ lastMessageId.current = id;
463
+ }
464
+ // 会话内容
465
+ var bubbleContent = {
436
466
  key: id,
437
467
  role: role,
438
468
  loading: status === MessageStatus.init,
@@ -504,15 +534,19 @@ var XAiChatbot = function XAiChatbot(props) {
504
534
  }
505
535
  // 其他类型...
506
536
  return null;
507
- }(),
508
- footer: function footer() {
509
- return extra.noFooter ? null : role === MessageRole.assistant && status !== MessageStatus.failed && /*#__PURE__*/_jsx(_Fragment, {
537
+ }()
538
+ };
539
+ if (!extra.noFooter) {
540
+ bubbleContent.footer = function () {
541
+ return role === MessageRole.assistant && status !== MessageStatus.failed && /*#__PURE__*/_jsx(_Fragment, {
510
542
  children: /*#__PURE__*/_jsx(MessageFooter, {
511
- data: msg
543
+ data: msg,
544
+ lastMessage: lastMessageId.current === id
512
545
  })
513
546
  });
514
- }
515
- };
547
+ };
548
+ }
549
+ return bubbleContent;
516
550
  })
517
551
  }) : /*#__PURE__*/_jsx(EmptyState, {})
518
552
  }), /*#__PURE__*/_jsx("div", {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useState","useMemo","Button","Space","Spin","Tooltip","Popover","Bubble","Sender","Prompts","ArrowUpOutlined","ClearOutlined","UserOutlined","RedoOutlined","CopyOutlined","DeleteOutlined","clsx","MarkdownIt","reactHtmlParser","MarkdownGlobalStyle","MessageStatus","MessageRole","emptyIcon","groupIcon","arrowUp","arrowDown","useChatbotContext","useStyles","GlobalStyle","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","md","html","linkify","typographer","defaultRender","renderer","rules","link_open","tokens","idx","options","env","self","renderToken","aIndex","attrIndex","attrPush","attrs","relIndex","defaultActions","key","icon","tooltip","XAiChatbot","props","_useChatbotContext","mergedProps","_mergedProps$navbarSh","navbarShow","navbar","_mergedProps$renderNa","renderNavbar","_mergedProps$loading","loading","propLoading","messageTooltip","avatar","userAvatar","propMessages","messages","_mergedProps$text","text","_mergedProps$footerTi","footerTips","_mergedProps$emptySta","emptyStateImage","_mergedProps$emptySta2","emptyStateText","_mergedProps$messageA","messageActions","onMessagesActionsCallback","onSuggestMessageClick","onSend","onClear","onStop","_useState","_useState2","_slicedToArray","disabled","_setDisabled","_useState3","_useState4","content","setContent","_useState5","_useState6","mode","_setMode","_useState7","_useState8","fileUploading","setFileUploading","_useState9","_useState10","clearPopoverVisible","setClearPopoverVisible","styles","FooterActions","_ref","data","className","flex","gap","children","map","action","index","title","cursor","onClick","MessageFooter","_ref2","rolesObject","assistant","placement","bg","typing","step","interval","style","maxWidth","classNames","user","suggestion","visibility","variant","ActionHeader","_ref3","_first$extra","_ref3$thinks","thinks","renderActionHeader","_useState11","_useState12","expanded","setExpanded","length","onToggle","v","first","name","extra","actionHeaderWrapper","actionHeaderItem","src","alt","actionHeaderIcon","actionHeaderText","w","actionHeaderDetail","actionDetailTitle","flex1","pl","_action$extra","_action$extra2","_action$extra3","thinkIcon","expandIcon","thinkCost","cost","actionHeaderDetailItem","actionHeaderCost","concat","uniqueId","handleSend","trim","NavBar","subtitle","fileInputRef","handleStopGenerate","handleFileSelect","handleClear","cancelClear","confirmClear","clearConfirmContent","p","mb","mt","popoverFooter","size","type","danger","uploadButton","flexCenterGap2","iconZengjiaDisabled","iconZengjiaNormal","current","_fileInputRef$current","click","ref","onChange","display","accept","EmptyState","emptyWrapper","emptyImg","weight","textColor","wrapper","messageContainer","List","roles","items","msg","_ref4","id","role","status","_ref4$thinks","_ref4$extra","noFooter","init","header","_msg$content2","_msg$content","minWidth","render","htmlString","_msg$content3","bytes","vertical","onItemClick","info","description","footer","failed","chatFooter","trigger","open","onOpenChange","clearBtn","border","borderRadius","height","width","value","sendWrapper","placeholder","actions","_","_info$components","components","SendButton","LoadingButton","iconHuihuarenqun","divider","stopButton","sendButton","onSubmit","onCancel"],"sources":["../../../../src/components/XAiChatbot/index.tsx"],"sourcesContent":["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Button,\n Space,\n Spin,\n Tooltip,\n Popover,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Sender,\n Prompts,\n} from '@ant-design/x';\nimport {\n ArrowUpOutlined,\n ClearOutlined,\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n thinks: any[];\n renderActionHeader?: (params: { thinks: any[]; expanded: boolean; onToggle: () => void }) => React.ReactNode;\n}\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [disabled, _setDisabled] = useState<boolean>(false); // 是否禁止输入\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [mode, _setMode] = useState<string>(''); // todo 模式\n const [fileUploading, setFileUploading] = useState(false); // 文件上传进度条\n const [clearPopoverVisible, setClearPopoverVisible] = useState(false); // 气泡卡片显隐藏\n const styles = useStyles();\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages }> = ({ data }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n </span>\n </Tooltip>\n ))}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages }> = ({ data }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // ActionHeader 组件\n const ActionHeader: React.FC<ActionHeaderProps> = ({ thinks = [], renderActionHeader }) => {\n const [expanded, setExpanded] = useState(false);\n if (!thinks || thinks.length === 0) return null;\n if (renderActionHeader) {\n return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });\n }\n // 默认渲染\n const first = thinks[0];\n const { name } = first;\n const icon = first?.icon || first?.extra?.icon;\n return (\n <div className={styles.actionHeaderWrapper}>\n { !expanded && (\n <div\n className={styles.actionHeaderItem}\n onClick={() => setExpanded((v) => !v)}\n >\n { icon && <img src={icon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span className={styles.actionHeaderText}>{name}</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n ) }\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n {thinks.map((action, idx) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n { thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n // 触发发送\n const handleSend = () => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.('text', content);\n setContent(''); // 发送后清空输入框内容\n }\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 文件上传按钮引用\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 停止生成\n const handleStopGenerate = () => {\n onStop?.();\n };\n\n // 选择文件\n const handleFileSelect = () => {};\n\n // 点击清除按钮\n const handleClear = () => {\n setClearPopoverVisible(true);\n };\n\n // 取消清除\n const cancelClear = () => {\n setClearPopoverVisible(false);\n };\n\n // 确认清除\n const confirmClear = () => {\n setContent('');\n onClear?.();\n setClearPopoverVisible(false);\n };\n\n // 清空按钮提示文案\n const clearConfirmContent = (\n <div className={styles.p('2px')}>\n <p className={clsx(styles.mb(14), styles.mt(0))}>确认清除所有聊天记录并重置会话!</p>\n <div className={styles.popoverFooter}>\n <Button size=\"small\" onClick={cancelClear}>\n 取消\n </Button>\n <Button size=\"small\" type=\"primary\" danger onClick={confirmClear}>\n 确认\n </Button>\n </div>\n </div>\n );\n\n // 自定义上传按钮\n const uploadButton = (\n <div className={styles.flexCenterGap2}>\n <Tooltip\n placement=\"top\"\n title={\n mode === 'single_agent_skill_mode' ? '工作流模式不支持上传文件' : '支持图片、文档等上传'\n }\n >\n {fileUploading\n ? (\n <Spin size=\"small\" />\n )\n : (\n <i\n className={\n mode === 'single_agent_skill_mode'\n ? styles.iconZengjiaDisabled\n : styles.iconZengjiaNormal\n }\n onClick={() => {\n if (mode !== 'single_agent_skill_mode' && fileInputRef.current) {\n fileInputRef.current?.click();\n }\n }}\n />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n accept=\"*/*\"\n disabled={fileUploading || mode === 'single_agent_skill_mode'}\n />\n </Tooltip>\n </div>\n );\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n roles={rolesObject}\n items={messages.map((msg: any) => {\n const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg as Messages;\n return {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => <ActionHeader thinks={thinks} />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 图片类型\n if (type === 'ImageMessage') {\n return (\n <div style={{ minWidth: 0, maxWidth: 600 }}>\n <img src={msg.content?.bytes} alt=\"\" style={{ maxWidth: 680 }} />\n </div>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n footer: (() => {\n return (\n extra.noFooter\n ? null\n : (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} />\n </>\n )\n )\n );\n }),\n };\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n <div className={styles.chatFooter}>\n <div className={clsx(styles.flex, styles.gap(8))}>\n {/* 清空按钮 */}\n <Popover\n content={clearConfirmContent}\n title=\"确认清空对话\"\n trigger=\"click\"\n open={clearPopoverVisible}\n onOpenChange={setClearPopoverVisible}\n >\n <div\n className={styles.clearBtn}\n style={{ border: '1px solid #E4E7EC', borderRadius: '50%', height: '35px', width: '35px' }}\n onClick={handleClear}\n >\n <ClearOutlined className={styles.text(16)} />\n </div>\n </Popover>\n {/* 普通文本输入 */}\n <Sender\n value={content}\n // submitType=\"shiftEnter\"\n className={styles.sendWrapper}\n placeholder=\"继续对话...\"\n disabled={disabled}\n loading={loading}\n actions={(_, info) => {\n const { SendButton, LoadingButton } = info.components;\n return (\n <Space size=\"small\">\n <div className={styles.w(20)} />\n\n {mode !== 'single_agent_skill_mode' && uploadButton}\n {mode === 'meta_agent_mode' && (\n <div\n className={styles.flexCenterGap2}\n style={{ visibility: 'hidden' }}\n >\n <i className={styles.iconHuihuarenqun} />\n </div>\n )}\n\n <div className={styles.divider} />\n\n {loading\n ? (\n <LoadingButton onClick={handleStopGenerate} className={styles.stopButton} />\n )\n : (\n <SendButton\n className={styles.sendButton}\n type=\"primary\"\n icon={<ArrowUpOutlined className={styles.text(20)} />}\n disabled={disabled}\n />\n )}\n </Space>\n );\n }}\n onChange={(v) => {\n setContent(v);\n }}\n onSubmit={handleSend}\n onCancel={() => {\n handleStopGenerate();\n }}\n />\n </div>\n </div>\n { footerTips && <div className={styles.footerTips}>{footerTips}</div>}\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useRef","useState","useMemo","Button","Space","Spin","Tooltip","Popover","Bubble","Sender","Prompts","ArrowUpOutlined","ClearOutlined","UserOutlined","RedoOutlined","CopyOutlined","DeleteOutlined","clsx","MarkdownIt","reactHtmlParser","MarkdownGlobalStyle","MessageStatus","MessageRole","emptyIcon","groupIcon","arrowUp","arrowDown","useChatbotContext","useStyles","GlobalStyle","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","md","html","linkify","typographer","defaultRender","renderer","rules","link_open","tokens","idx","options","env","self","renderToken","aIndex","attrIndex","attrPush","attrs","relIndex","defaultActions","key","icon","tooltip","XAiChatbot","props","_useChatbotContext","mergedProps","_mergedProps$navbarSh","navbarShow","navbar","_mergedProps$renderNa","renderNavbar","_mergedProps$loading","loading","propLoading","messageTooltip","avatar","userAvatar","propMessages","messages","_mergedProps$text","text","_mergedProps$footerTi","footerTips","_mergedProps$emptySta","emptyStateImage","_mergedProps$emptySta2","emptyStateText","_mergedProps$messageA","messageActions","onMessagesActionsCallback","onSuggestMessageClick","onSend","onClear","onStop","providerId","_useState","_useState2","_slicedToArray","disabled","_setDisabled","_useState3","_useState4","content","setContent","_useState5","_useState6","mode","_setMode","_useState7","_useState8","fileUploading","setFileUploading","_useState9","_useState10","clearPopoverVisible","setClearPopoverVisible","styles","lastMessageId","isScriptScrolling","chatId","concat","scrollToBottom","current","setTimeout","mainChatWrapper","document","getElementById","scrollTop","scrollHeight","FooterActions","_ref","data","_ref$lastMessage","lastMessage","className","flex","gap","children","map","action","index","title","cursor","onClick","MessageFooter","_ref2","_ref2$lastMessage","rolesObject","assistant","placement","bg","typing","step","interval","style","maxWidth","classNames","user","suggestion","visibility","variant","ActionHeader","_ref3","_first$extra","_ref3$thinks","thinks","renderActionHeader","_useState11","_useState12","expanded","setExpanded","length","onToggle","v","first","name","extra","actionHeaderWrapper","actionHeaderItem","src","alt","actionHeaderIcon","actionHeaderText","w","actionHeaderDetail","actionDetailTitle","flex1","pl","_action$extra","_action$extra2","_action$extra3","thinkIcon","expandIcon","thinkCost","cost","actionHeaderDetailItem","actionHeaderCost","uniqueId","handleSend","trim","NavBar","subtitle","fileInputRef","handleStopGenerate","handleFileSelect","handleClear","cancelClear","confirmClear","clearConfirmContent","p","mb","mt","popoverFooter","size","type","danger","uploadButton","flexCenterGap2","iconZengjiaDisabled","iconZengjiaNormal","_fileInputRef$current","click","ref","onChange","display","accept","EmptyState","emptyWrapper","emptyImg","weight","textColor","id","wrapper","messageContainer","List","roles","items","msg","_ref4","role","status","_ref4$thinks","_ref4$extra","noFooter","bubbleContent","init","header","_msg$content2","_msg$content","minWidth","render","htmlString","_msg$content3","bytes","vertical","onItemClick","info","description","footer","failed","chatFooter","trigger","open","onOpenChange","clearBtn","border","borderRadius","height","width","value","sendWrapper","placeholder","actions","_","_info$components","components","SendButton","LoadingButton","iconHuihuarenqun","divider","stopButton","sendButton","onSubmit","onCancel"],"sources":["../../../../src/components/XAiChatbot/index.tsx"],"sourcesContent":["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Button,\n Space,\n Spin,\n Tooltip,\n Popover,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Sender,\n Prompts,\n} from '@ant-design/x';\nimport {\n ArrowUpOutlined,\n ClearOutlined,\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n thinks: any[];\n renderActionHeader?: (params: { thinks: any[]; expanded: boolean; onToggle: () => void }) => React.ReactNode;\n}\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n providerId,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [disabled, _setDisabled] = useState<boolean>(false); // 是否禁止输入\n const [content, setContent] = useState<string>(text); // 输入框文本\n const [mode, _setMode] = useState<string>(''); // todo 模式\n const [fileUploading, setFileUploading] = useState(false); // 文件上传进度条\n const [clearPopoverVisible, setClearPopoverVisible] = useState(false); // 气泡卡片显隐藏\n const styles = useStyles();\n const lastMessageId = useRef<string>('');\n const isScriptScrolling = useRef<boolean>(false);\n const chatId = providerId ? `za-chatbot-container-${providerId}` : 'za-chatbot-container';\n\n // 滚动到最底部\n const scrollToBottom = () => {\n isScriptScrolling.current = true;\n setTimeout(() => {\n const mainChatWrapper = document.getElementById(chatId);\n if (mainChatWrapper) {\n mainChatWrapper.scrollTop = mainChatWrapper?.scrollHeight;\n }\n isScriptScrolling.current = false;\n }, 0);\n };\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // ActionHeader 组件\n const ActionHeader: React.FC<ActionHeaderProps> = ({ thinks = [], renderActionHeader }) => {\n const [expanded, setExpanded] = useState(false);\n if (!thinks || thinks.length === 0) return null;\n if (renderActionHeader) {\n return renderActionHeader({ thinks, expanded, onToggle: () => setExpanded((v) => !v) });\n }\n // 默认渲染\n const first = thinks[0];\n const { name } = first;\n const icon = first?.icon || first?.extra?.icon;\n return (\n <div className={styles.actionHeaderWrapper}>\n { !expanded && (\n <div\n className={styles.actionHeaderItem}\n onClick={() => setExpanded((v) => !v)}\n >\n { icon && <img src={icon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span className={styles.actionHeaderText}>{name}</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n ) }\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n {thinks.map((action, idx) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n { thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} /> }\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n // 触发发送\n const handleSend = () => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.('text', content);\n setContent(''); // 发送后清空输入框内容\n scrollToBottom();\n }\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 文件上传按钮引用\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 停止生成\n const handleStopGenerate = () => {\n onStop?.();\n };\n\n // 选择文件\n const handleFileSelect = () => {};\n\n // 点击清除按钮\n const handleClear = () => {\n setClearPopoverVisible(true);\n };\n\n // 取消清除\n const cancelClear = () => {\n setClearPopoverVisible(false);\n };\n\n // 确认清除\n const confirmClear = () => {\n setContent('');\n onClear?.();\n setClearPopoverVisible(false);\n };\n\n // 清空按钮提示文案\n const clearConfirmContent = (\n <div className={styles.p('2px')}>\n <p className={clsx(styles.mb(14), styles.mt(0))}>确认清除所有聊天记录并重置会话!</p>\n <div className={styles.popoverFooter}>\n <Button size=\"small\" onClick={cancelClear}>\n 取消\n </Button>\n <Button size=\"small\" type=\"primary\" danger onClick={confirmClear}>\n 确认\n </Button>\n </div>\n </div>\n );\n\n // 自定义上传按钮\n const uploadButton = (\n <div className={styles.flexCenterGap2}>\n <Tooltip\n placement=\"top\"\n title={\n mode === 'single_agent_skill_mode' ? '工作流模式不支持上传文件' : '支持图片、文档等上传'\n }\n >\n {fileUploading\n ? (\n <Spin size=\"small\" />\n )\n : (\n <i\n className={\n mode === 'single_agent_skill_mode'\n ? styles.iconZengjiaDisabled\n : styles.iconZengjiaNormal\n }\n onClick={() => {\n if (mode !== 'single_agent_skill_mode' && fileInputRef.current) {\n fileInputRef.current?.click();\n }\n }}\n />\n )}\n <input\n type=\"file\"\n ref={fileInputRef}\n onChange={handleFileSelect}\n style={{ display: 'none' }}\n accept=\"*/*\"\n disabled={fileUploading || mode === 'single_agent_skill_mode'}\n />\n </Tooltip>\n </div>\n );\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n id={chatId}\n roles={rolesObject}\n items={messages.map((msg: any) => {\n const { id, role, status, type, thinks = [], extra = { noFooter: false } } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n // 会话内容\n const bubbleContent: any = {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => <ActionHeader thinks={thinks} />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 图片类型\n if (type === 'ImageMessage') {\n return (\n <div style={{ minWidth: 0, maxWidth: 600 }}>\n <img src={msg.content?.bytes} alt=\"\" style={{ maxWidth: 680 }} />\n </div>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n };\n\n if (!extra.noFooter) {\n bubbleContent.footer = (() => {\n return (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />\n </>\n )\n );\n });\n }\n\n return bubbleContent;\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n <div className={styles.chatFooter}>\n <div className={clsx(styles.flex, styles.gap(8))}>\n {/* 清空按钮 */}\n <Popover\n content={clearConfirmContent}\n title=\"确认清空对话\"\n trigger=\"click\"\n open={clearPopoverVisible}\n onOpenChange={setClearPopoverVisible}\n >\n <div\n className={styles.clearBtn}\n style={{ border: '1px solid #E4E7EC', borderRadius: '50%', height: '35px', width: '35px' }}\n onClick={handleClear}\n >\n <ClearOutlined className={styles.text(16)} />\n </div>\n </Popover>\n {/* 普通文本输入 */}\n <Sender\n value={content}\n // submitType=\"shiftEnter\"\n className={styles.sendWrapper}\n placeholder=\"继续对话...\"\n disabled={disabled}\n loading={loading}\n actions={(_, info) => {\n const { SendButton, LoadingButton } = info.components;\n return (\n <Space size=\"small\">\n <div className={styles.w(20)} />\n\n {mode !== 'single_agent_skill_mode' && uploadButton}\n {mode === 'meta_agent_mode' && (\n <div\n className={styles.flexCenterGap2}\n style={{ visibility: 'hidden' }}\n >\n <i className={styles.iconHuihuarenqun} />\n </div>\n )}\n\n <div className={styles.divider} />\n\n {loading\n ? (\n <LoadingButton onClick={handleStopGenerate} className={styles.stopButton} />\n )\n : (\n <SendButton\n className={styles.sendButton}\n type=\"primary\"\n icon={<ArrowUpOutlined className={styles.text(20)} />}\n disabled={disabled}\n />\n )}\n </Space>\n );\n }}\n onChange={(v) => {\n setContent(v);\n }}\n onSubmit={handleSend}\n onCancel={() => {\n handleStopGenerate();\n }}\n />\n </div>\n </div>\n { footerTips && <div className={styles.footerTips}>{footerTips}</div>}\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],"mappings":"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"}
@@ -65,9 +65,10 @@ var XAiProvider = function XAiProvider(_ref) {
65
65
  message.success('复制成功');
66
66
  break;
67
67
  case 2:
68
+ // 删除该条消息及建议类消息
68
69
  setMessages(function (prev) {
69
70
  return prev.filter(function (item) {
70
- return item.id !== id;
71
+ return item.id !== id && item.type !== 'SuggestionMessage';
71
72
  });
72
73
  });
73
74
  message.success('删除成功');
@@ -1 +1 @@
1
- {"version":3,"names":["React","message","Divider","v4","uuidV4","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setCurrentSession","setMessages","_ref2","appName","icon","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","prev","filter","item","handleSuggestMessageClick","_item","m","ToolTip","messageData","finalResult","think","find","actionName","_ref4","extra","cost","tokenCount","style","display","alignItems","fontSize","color","flex","paddingRight","undefined","type","Provider","value","avatar","src","alt","userAvatar","emptyStateImage","emptyStateText","footerTips","error","messageTooltip","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","isInProvider"],"sources":["../../../../src/components/XAiProvider/index.tsx"],"sourcesContent":["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n setMessages((prev: any[]) => prev.filter((item: any) => item.id !== id));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","message","Divider","v4","uuidV4","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setCurrentSession","setMessages","_ref2","appName","icon","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","prev","filter","item","type","handleSuggestMessageClick","_item","m","ToolTip","messageData","finalResult","think","find","actionName","_ref4","extra","cost","tokenCount","style","display","alignItems","fontSize","color","flex","paddingRight","undefined","Provider","value","avatar","src","alt","userAvatar","emptyStateImage","emptyStateText","footerTips","error","messageTooltip","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","isInProvider"],"sources":["../../../../src/components/XAiProvider/index.tsx"],"sourcesContent":["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n // 删除该条消息及建议类消息\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],"mappings":"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"}